C++開(kāi)發(fā)者必看:用Flow-IPC改善進(jìn)程間通信
進(jìn)程間通信(IPC)對(duì)于現(xiàn)代計(jì)算環(huán)境至關(guān)重要,這種機(jī)制使得多個(gè)處理器核心能夠同時(shí)執(zhí)行多個(gè)線程。IPC的本意是讓不同線程甚至獨(dú)立程序能夠高效地共享數(shù)據(jù)。例如,當(dāng)我們?cè)诰€觀看流媒體視頻時(shí),可能會(huì)有一個(gè)線程負(fù)責(zé)視頻解碼,而另一個(gè)線程負(fù)責(zé)渲染視頻內(nèi)容。

延伸閱讀,點(diǎn)擊鏈接了解 Akamai Cloud Computing
當(dāng)這些線程在不同程序中運(yùn)行(例如一個(gè)Web服務(wù)器和一個(gè)安全服務(wù)器)時(shí),挑戰(zhàn)就出現(xiàn)了。在這些程序之間傳輸大量數(shù)據(jù)的傳統(tǒng)方法可能速度很慢且效率低下,這通常是由于不同操作系統(tǒng)管理內(nèi)存的方式差異造成的。不過(guò)開(kāi)源的Flow-IPC解決了這個(gè)問(wèn)題,使得C++開(kāi)發(fā)者可以快速簡(jiǎn)單地實(shí)現(xiàn)IPC。
Flow-IPC:一個(gè)開(kāi)源的IPC中間件
Akamai于2022年收購(gòu)Linode,標(biāo)志著我們向著云原生計(jì)算的戰(zhàn)略正在加速。我們還將上游貢獻(xiàn)和倡導(dǎo)開(kāi)源作為商業(yè)策略的一部分。本著這種精神,我們?cè)诮衲瓿跬瞥隽薋low-IPC。這是一種專(zhuān)門(mén)為幫助C++開(kāi)發(fā)者簡(jiǎn)化IPC而設(shè)計(jì)的開(kāi)源中間件(采用Apache 2.0和MIT許可證)。
Flow-IPC最初是Akamai的一個(gè)內(nèi)部工具,用于在不影響性能的情況下拆分大型應(yīng)用程序。當(dāng)時(shí),現(xiàn)有的IPC解決方案要么太慢,要么太復(fù)雜。因此從一開(kāi)始,我們就將Flow-IPC設(shè)計(jì)為C++中的IPC通用解決方案。本次將Flow-IPC開(kāi)源并與開(kāi)發(fā)者社區(qū)分享,是為了促進(jìn)創(chuàng)新,讓任何需要使用C++管理多線程數(shù)據(jù)共享的開(kāi)發(fā)者能更簡(jiǎn)單地完成任務(wù)。
我們?cè)?024年4月公開(kāi)發(fā)布了Flow-IPC,該項(xiàng)目在Hacker News和其他社區(qū)平臺(tái)上收到了強(qiáng)烈反響。很多開(kāi)發(fā)者分享了自己的IPC挑戰(zhàn)和解決方案,這也讓我們積累了大量建設(shè)性的意見(jiàn)和寶貴反饋。
Flow-IPC是為服務(wù)器端系統(tǒng)開(kāi)發(fā)社區(qū)內(nèi)的廣泛受眾量身打造的。雖然它目前專(zhuān)注于C++,但未來(lái)也可能擴(kuò)展到其他編程環(huán)境。目前,該技術(shù)只支持在x86-64架構(gòu)的Linux上運(yùn)行。我們計(jì)劃未來(lái)將該項(xiàng)目擴(kuò)展到macOS和ARM64架構(gòu),并根據(jù)需求擴(kuò)展到Windows和其他操作系統(tǒng)變體。
Flow-IPC是一個(gè)具備可擴(kuò)展C++17 API的庫(kù),目前可用于本地跨進(jìn)程邊界的通信。相關(guān)內(nèi)容現(xiàn)已托管在GitHub上,提供了完整的文檔、自動(dòng)化測(cè)試和演示,此外還有一個(gè)CI管道,該管道能在一系列GNU編譯器集合(GCC)和Clang編譯器版本以及構(gòu)建配置中進(jìn)行測(cè)試,包括通過(guò)各種運(yùn)行時(shí)分析器進(jìn)行加固,例如ASan(防止內(nèi)存誤用)、TSan(防止競(jìng)爭(zhēng)條件)和UBSan(防止各種未定義行為)。

Flow-IPC與其他解決方案的比較
Flow-IPC提供了簡(jiǎn)單高效的通信機(jī)制。與gRPC這樣的通用解決方案不同,盡管它們很優(yōu)雅,但可能會(huì)引入延遲,而Flow-IPC可以最大限度減少需要復(fù)制的數(shù)據(jù),并能無(wú)縫集成到現(xiàn)有系統(tǒng)中。傳統(tǒng)的IPC會(huì)根據(jù)負(fù)載大小引入大小不一的延遲:在我們的測(cè)試中,傳輸速度甚至達(dá)到了秒級(jí)范圍。Flow-IPC則可以在微秒級(jí)時(shí)間內(nèi)傳輸大小高達(dá)1GB的數(shù)據(jù)結(jié)構(gòu)載荷,而速度與傳輸100KB載荷時(shí)差不多。這是提高了三到四個(gè)數(shù)量級(jí)的改進(jìn)!通過(guò)將商業(yè)級(jí)的內(nèi)存分配器與共享內(nèi)存集成在一起,還能進(jìn)一步提高性能。
未來(lái)展望
我們很期待整個(gè)社區(qū)能夠聯(lián)手讓Flow-IPC走得更遠(yuǎn)。歡迎貢獻(xiàn)、功能請(qǐng)求和錯(cuò)誤報(bào)告,同時(shí)Akamai也會(huì)繼續(xù)開(kāi)發(fā)和完善該項(xiàng)目。
對(duì)于該項(xiàng)目,Akamai目前也有些很有潛力的想法。短期內(nèi),與capnp-rpc(以及也許和)gRPC集成是一個(gè)顯而易見(jiàn)的選擇。相關(guān)協(xié)議和API可以幫助這些框架繼續(xù)保持優(yōu)雅,而Flow-IPC可以提供底層的零復(fù)制性能。長(zhǎng)期來(lái)看,憑借可擴(kuò)展設(shè)計(jì),F(xiàn)low-IPC可以擴(kuò)展到網(wǎng)絡(luò)IPC領(lǐng)域,此外還能通過(guò)遠(yuǎn)程直接內(nèi)存訪問(wèn)(RDMA)實(shí)現(xiàn)超快的局域網(wǎng)性能。
Flow-IPC在開(kāi)源社區(qū)獲得了廣泛關(guān)注,我們期待與C++開(kāi)發(fā)者合作,使其變得更好。Akamai也會(huì)繼續(xù)通過(guò)開(kāi)源模式將好用、實(shí)用的技術(shù)帶給全球更多開(kāi)發(fā)者。
—————————————————————————————————————————————————
如您所在的企業(yè)也在考慮采購(gòu)云服務(wù)或進(jìn)行云遷移,
點(diǎn)擊鏈接了解Akamai Linode的解決方案
























