DUICUO

ByteDanceがマイクロサービスミドルウェアCloudWeGoをオープンソース化

9月8日、ByteDanceはCloudWeGoのオープンソース化を正式に発表しました。これはGoプログラミング言語をベースとしたミドルウェアスイートで、マイクロサービス通信とガバナンスに重点を置き、高いパフォーマンス、スケーラビリティ、そして高い信頼性を特徴としています。

[[422817]]

報道によると、ByteDanceのインフラチームは、プロジェクトのメンテナーとして、主にCloudWeGoオープンソースライブラリを用いてプロジェクトの反復開発を推進してきた。今後、チームは社内外で単一のコードベースを維持し、統一された方法で反復開発と進化を進め、社内のマイクロサービスに関するベストプラクティスを段階的に共有していく予定だ。

  • プロジェクトアドレス: https://github.com/cloudwego
  • プロジェクトウェブサイト: www.cloudwego.io

CloudWeGo は当初、主に RPC フレームワーク Kitex とネットワーク ライブラリ Netpoll の 4 つのオープン ソース プロジェクトをリリースしました。

キテックス

Kitex は、高いパフォーマンスと強力なスケーラビリティを特徴とする Golang マイクロサービス RPC フレームワークです。

ByteDanceは、主要なビジネス開発言語としてGolangを使用しています。インフラチームは2016年初頭からGolangベースの社内フレームワークKiteの開発に着手し、2019年には、ビジネス開発のニーズとテクノロジーシステムの進化により適切に対応できるよう、パフォーマンスとスケーラビリティに重点を置いたリファクタリングを開始しました。

Kitexは2020年10月に正式にリリースされました。まったく新しいフレームワークですが、1年間のオンラインアプリケーションを経て、ByteDance内のGolangマイクロサービスの50%以上がKitexに移行しました。

Kitex のいくつかの機能は次のとおりです。

  • 高いパフォーマンス: Kitexは、自社開発のネットワークライブラリNetpollをネットワークトランスポートモジュールとしてデフォルトで統合しており、Go netを使用する場合と比べて大幅なパフォーマンス向上を実現します。ネットワークライブラリによるパフォーマンス向上に加え、KitexはThriftエンコードとデコードも最適化します。詳細は、以前のパフォーマンス最適化実践記事をご覧ください。パフォーマンスデータについては、https://github.com/cloudwego/kitex-benchmarkをご覧ください。
  • 拡張性: Kitexはモジュール設計されており、多数の拡張インターフェースとデフォルト実装を提供しています。ユーザーは必要に応じて拡張機能をカスタマイズすることもできます。KitexはNetpollと連携していないため、開発者は拡張機能として他のネットワークライブラリを選択できます。
  • メッセージプロトコル: RPCメッセージプロトコルは、デフォルトでThrift、Kitex Protobuf、gRPCをサポートしています。Thriftは、バッファリングされたバイナリプロトコルとフレーム化されたバイナリプロトコルをサポートしています。Kitex Protobufは、KitexのカスタムProtobufメッセージプロトコルで、Thriftと同様のフォーマットです。gRPCはgRPCメッセージプロトコルをサポートしており、gRPCと相互運用可能です。さらに、ユーザーは独自のメッセージプロトコルを拡張できます。
  • トランスポートプロトコル:トランスポートプロトコルは、RPC相互運用性のためのメッセージプロトコルをカプセル化します。これらのプロトコルは、サービスガバナンスのための追加メタデータも送信できます。KitexはTTHeaderとHTTP/2をサポートしています。TTHeaderはThriftおよびKitex Protobufと組み合わせて使用​​できます。HTTP/2は現在主にgRPCプロトコルで使用されていますが、将来的にThriftのサポートも追加される予定です。
  • 複数のメッセージタイプ: PingPong、Oneway、双方向ストリーミングをサポートします。Onewayは現在Thriftプロトコルのみをサポートし、双方向ストリーミングはgRPCのみをサポートします。Thriftによる双方向ストリーミングのサポートは、将来的に検討される予定です。
  • サービスガバナンス:サービス登録/検出、負荷分散、サーキットブレーキング、レート制限、再試行、監視、トレース、ログ記録、診断、その他のサービスガバナンスモジュールをサポートします。ほとんどのモジュールには、ユーザーが統合できるデフォルトの拡張機能が用意されています。
  • コード生成ツール: Kitex には、Thrift、Protobuf、およびスキャフォールディング コードの生成をサポートする組み込みのコード生成ツールがあります。

ネットポール

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コミュニティへの貢献にも努めていきます。

ネットポール-http2

Netpoll-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の改善をさらに推進していきます。

  • その他の社内プロジェクトのオープンソース化を継続します。HTTPフレームワークHertzや共有メモリベースのIPC通信ライブラリShmIPCなど、ByteDanceのより一般的に使用されているGo言語プロジェクトをオープンソース化し、開発者がより多くのシナリオでマイクロサービスのニーズに対応できるようにします。
  • 実績のある安定した機能を段階的にオープンソース化していきます。CloudWeGoの主要プロジェクトはByteDanceの社内マイクロサービスをサポートしており、多くの新機能は現在も社内で検証中です。ShmIPCとの統合、デシリアライゼーション、コード生成なしのサポートなど、成熟するにつれて段階的にオープンソース化していきます。
  • 私たちは、社内外のユーザーニーズに基づいて継続的に改善を続けています。プロジェクトがオープンソース化された後も、開発者からのフィードバックに基づいて改善を続けます。例えば、先月、チームは開発者からProtobufに関する多数のリクエストを受け取りました。より良いサポートを提供するために、KitexのProtobufサポートを最適化し、パフォーマンスを向上させる準備が既に整っています。

この記事はOSCHINAから転載したものです。

記事タイトル: ByteDanceがマイクロサービスミドルウェアCloudWeGoをオープンソース化

この記事のアドレス: https://www.oschina.net/news/159372/bytedance-opensource-cloudwego

出典: https://mp.weixin.qq.com/s/43yN06UUcia-yWdJ50ghrw