|
9月8日、ByteDanceはCloudWeGoのオープンソース化を正式に発表しました。これはGoプログラミング言語をベースとしたミドルウェアスイートで、マイクロサービス通信とガバナンスに重点を置き、高いパフォーマンス、スケーラビリティ、そして高い信頼性を特徴としています。
報道によると、ByteDanceのインフラチームは、プロジェクトのメンテナーとして、主にCloudWeGoオープンソースライブラリを用いてプロジェクトの反復開発を推進してきた。今後、チームは社内外で単一のコードベースを維持し、統一された方法で反復開発と進化を進め、社内のマイクロサービスに関するベストプラクティスを段階的に共有していく予定だ。
CloudWeGo は当初、主に RPC フレームワーク Kitex とネットワーク ライブラリ Netpoll の 4 つのオープン ソース プロジェクトをリリースしました。 キテックスKitex は、高いパフォーマンスと強力なスケーラビリティを特徴とする Golang マイクロサービス RPC フレームワークです。 ByteDanceは、主要なビジネス開発言語としてGolangを使用しています。インフラチームは2016年初頭からGolangベースの社内フレームワークKiteの開発に着手し、2019年には、ビジネス開発のニーズとテクノロジーシステムの進化により適切に対応できるよう、パフォーマンスとスケーラビリティに重点を置いたリファクタリングを開始しました。 Kitexは2020年10月に正式にリリースされました。まったく新しいフレームワークですが、1年間のオンラインアプリケーションを経て、ByteDance内のGolangマイクロサービスの50%以上がKitexに移行しました。 Kitex のいくつかの機能は次のとおりです。
ネットポールNetpoll は、RPC シナリオに重点を置いて ByteDance が社内で開発した、Golang の高性能な非ブロッキング I/O ネットワーク ライブラリです。 RPC は通常、負荷の高い処理ロジック(ビジネスロジック、エンコード/デコード)を伴い、時間がかかり、Redis のように逐次処理することはできません(非同期で実行する必要があります)。Go の標準ライブラリ `net` は、BIO(ブロッキング I/O)API に基づいて設計されています。非同期処理を実現するために、RPC フレームワークは接続ごとに goroutine を割り当てる必要があります。これにより、アイドル接続が多い場合にアイドル状態の goroutine が大量に生成され、スケジューリングのオーバーヘッドが増加します。さらに、`net.Conn` は接続の生存性をチェックする API を提供していないため、効率的な接続プールの設計が困難です。プール内の失敗した接続は適切なタイミングでクリーンアップできず、再利用が非効率的になります。現在、オープンソースコミュニティには、RPC ソリューションに特化した Go ネットワークライブラリが存在しません。`evio` や `gnet` などの同様のプロジェクトは、Redis や HAProxy のようなシナリオを対象としています。 そこで、Netpollが誕生しました。これはevioとNettyの優れた設計を継承し、優れたパフォーマンスを備え、マイクロサービスアーキテクチャにより適しています。 スリフトゴーThriftgoは、Thrift IDLパーサーおよびコードジェネレーターのGo言語実装です。包括的なThrift IDL構文およびセマンティックチェックをサポートしています。公式のApache Thrift Golangコードジェネレーターと比較して、Thriftgoはいくつかのバグ修正が行われており、プラグインメカニズムをサポートしているため、ユーザーは生成されたコードをニーズに合わせてカスタマイズできます。 Kitexのコード生成ツールはThriftgoプラグインです。CloudWeGoは、フィールド値の検証にIDL Validatorをサポートする別のThriftgoプラグイン、thrift-gen-validatorもオープンソース化する予定です。これにより、独自のコード検証ロジックを実装する必要がある開発者の負担が軽減され、Thriftの機能不足を補うことができます。 Thriftgoは現在Go言語のThriftコード生成のみをサポートしていますが、様々な言語でのThriftコード生成をサポートすることを目標としています。将来的には、ご要望があれば他の言語でのコード生成も検討します。また、Apache Thriftコミュニティへの貢献にも努めていきます。 ネットポール-http2Netpoll-http2は、Golang標準ライブラリ「golang.org/x/net/http2」のソースコードをベースに、「go net」を「Netpoll」に置き換えるライブラリです。現在、KitexのgRPCプロトコルサポートに利用されており、HTTP/2を必要とする外部開発者もこのライブラリを利用できます。 前述の通り、ByteDanceは社内外を問わず単一のコードベースを維持することを重視しています。長期的な投資コミットメントを維持するため、インフラチームはNetpollなど社内エコシステムと連携していないプロジェクトをCloudWeGoオープンソースライブラリに直接移行し、オープンソースライブラリへの内部依存関係を調整しました。 マイクロサービスアーキテクチャへのガバナンス機能の統合を必要とするKitexでは、スケーラビリティに基づいて内部コードと外部コードを分離しました。Kitexのコアコードはオープンソースライブラリに移行し、内部ライブラリはカプセル化することで社内ユーザーのシームレスなアップグレードを実現しました。社内ガバナンス機能を統合するモジュールは、Kitexの拡張機能として社内ライブラリ内に保持されました。ByteDanceのインフラチームは、社内で安定性検証済みの新機能を今後もオープンソースライブラリに移行していくと述べています。 CloudWeGoの今後の計画について、ByteDanceのインフラチームは次のように述べています。「CloudWeGoは単なるオープンソースプロジェクトではなく、現実世界の大規模なエンタープライズレベルの実践プロジェクトでもあります。オープンソース化を通じて、CloudWeGoがクラウドネイティブコミュニティにおけるGo言語ツールキットを充実させ、より多くの開発者や企業がクラウドネイティブの大規模分散システムを構築するための、最新かつリソース効率の高い技術ソリューションを提供できることを期待しています。」 今後、CloudWeGoの改善をさらに推進していきます。
この記事はOSCHINAから転載したものです。 記事タイトル: ByteDanceがマイクロサービスミドルウェアCloudWeGoをオープンソース化 この記事のアドレス: https://www.oschina.net/news/159372/bytedance-opensource-cloudwego 出典: https://mp.weixin.qq.com/s/43yN06UUcia-yWdJ50ghrw |