進程間通信(IPC)對於現代計算環境至關重要,這種機制使得多個處理器核心能夠同時執行多個執行緒。IPC的本意是讓不同執行緒甚至獨立程式能夠高效地共用資料。例如,當我們線上觀看流媒體視頻時,可能會有一個執行緒負責視頻解碼,而另一個執行緒負責渲染視頻內容。
當這些執行緒在不同程式中運行(例如一個Web伺服器和一個安全伺服器)時,挑戰就出現了。在這些程式之間傳輸大量資料的傳統方法可能速度很慢且效率低下,這通常是由於不同作業系統管理記憶體的方式差異造成的。不過開源的Flow-IPC解決了這個問題,使得C++開發者可以快速簡單地實現IPC。
Akamai於2022年收購Linode,標誌著我們向著雲原生計算的戰略正在加速。我們還將上游貢獻和宣導開源作為商業策略的一部分。本著這種精神,在今年初推出了Flow-IPC。這是一種專門為幫助C++開發者簡化IPC而設計的開源中介軟體(採用Apache 2.0和MIT許可證)。
Flow-IPC最初是Akamai的一個內部工具,用於在不影響性能的情況下拆分大型應用程式。當時,現有的IPC解決方案要麼太慢,要麼太複雜。因此從一開始,我們就將Flow-IPC設計為C++中的IPC通用解決方案。本次將Flow-IPC開源並與開發者社區分享,是為了促進創新,讓任何需要使用C++管理多執行緒資料共用的開發者能更簡單地完成任務。
2024年4月公開發佈了Flow-IPC,該項目在Hacker News和其他社區平臺上收到了強烈反響。很多開發者分享了自己的IPC挑戰和解決方案,這也讓我們積累了大量建設性的意見和寶貴回饋。
Flow-IPC是為伺服器端系統開發社區內的廣泛受眾量身打造的。雖然它目前專注於C++,但未來也可能擴展到其他程式設計環境。目前,該技術只支援在x86-64架構的Linux上運行。我們計畫未來將該專案擴展到macOS和ARM64架構,並根據需求擴展到Windows和其他作業系統變體。
Flow-IPC是一個具備可擴展C++17 API的庫,目前可用於本地跨進程邊界的通信。相關內容現已託管在GitHub上,提供了完整的文檔、自動化測試和演示,此外還有一個CI管道,該管道能在一系列GNU編譯器集合(GCC)和Clang編譯器版本以及構建配置中進行測試,包括通過各種運行時分析器進行加固,例如ASan(防止記憶體誤用)、TSan(防止競爭條件)和UBSan(防止各種未定義行為)。
Flow-IPC提供了簡單高效的通信機制。與gRPC這樣的通用解決方案不同,儘管它們很優雅,但可能會引入延遲,而Flow-IPC可以最大限度減少需要複製的資料,並能無縫集成到現有系統中。傳統的IPC會根據負載大小引入大小不一的延遲:在我們的測試中,傳送速率甚至達到了秒級範圍。Flow-IPC則可以在微秒級時間內傳輸大小高達1GB的資料結構載荷,而速度與傳輸100KB載荷時差不多。這是提高了三到四個數量級的改進!通過將商業級的記憶體分配器與共用記憶體集成在一起,還能進一步提高性能。
我們很期待整個社區能夠聯手讓Flow-IPC走得更遠。歡迎貢獻、功能請求和錯誤報告,同時Akamai也會繼續開發和完善該專案。感興趣的開發者可以追蹤。
對於該專案,短期內與capnp-rpc(以及也許和)gRPC集成是一個顯而易見的選擇。相關協議和API可以説明這些框架繼續保持優雅,而Flow-IPC可以提供底層的零複製性能。長期來看,憑藉可擴展設計,Flow-IPC可以擴展到網路IPC領域,此外還能通過遠端直接記憶體存取(RDMA)實現超快的局域網性能。
Flow-IPC在開源社區獲得了廣泛關注,我們期待與C++開發者合作,使其變得更好。持續通過開源模式將好用、實用的技術帶給全球更多開發者。