この記事は、CloudWeGo 2 周年記念シリーズの 2 回目です。
この共有セッションでは、まず CloudWeGo のユーザビリティ構築に関する簡単な背景を説明し、次にユーザビリティ構築のために私たちが行ったことを紹介し、最後に今後の取り組みについて説明します。
01
背景
CloudWeGo は、ByteDance インフラストラクチャ サービス フレームワーク チームによってオープンソース化された一連のミドルウェアであり、エンタープライズ レベルのクラウドネイティブ マイクロサービス アーキテクチャを迅速に構築できます。 CloudWeGo のプロジェクトには、高パフォーマンス、高スケーラビリティ、高信頼性の 3 つの主な特徴があり、オープンソース化後は、使いやすさの構築により多くのユーザーがコミュニティに参加できることを認識しています。そのため、活発なコミュニティの雰囲気を形成し、コミュニティの持続可能な発展を促進します。その使いやすさは、ユーザーがビジネス ロジックの開発を迅速に完了し、効率を向上させるのに役立ちます。
使いやすさに関しては、R&D エクスペリエンス、ユーザー エクスペリエンス、コミュニティ プロモーションに多くの取り組みを行ってきました。以下にそれらを 1 つずつ紹介します。さらに、この共有は主に Hertz と cwgo を中心としたユーザビリティ構築に焦点を当てます。
02
使いやすさ 機能構成
エンタープライズ レベルの HTTP フレームワークとして、Hertz の使いやすさは研究開発エクスペリエンスを大幅に向上させることができるため、私たちが常に非常に重要視している側面です。したがって、オープンソース以来、使いやすさに関してユーザーからのさまざまな提案を常に重視し、次のようにまとめました。 最初の問題は、一部の機能の使用が一般的なフレームワークと多少異なり、その結果移行が必要になることです。ユーザーはそれに慣れていない可能性があります。2 番目の問題は、フレームワークに Hertz と Kitex という 2 つのスキャフォールドがあり、間違いなくユーザーの学習コストが増加することです。ユーザー グループからの問題やユーザー フィードバックから、現在のドキュメントには不明瞭な説明やコンテンツの欠落などの問題があり、多くの場合、すぐには解決できない問題がユーザーに発生することがわかります。
上記の課題に対し、当社ではユーザーのニーズに迅速に対応するためのさまざまな機能を開発してきました。
-
マルチプロトコルのサポート: まず導入する必要があるのは、Hertz が複数のプロトコルのシームレスな切り替えをサポートできることです。したがって、現在、一部のオープンソース フレームワークは、Hertz プロトコル層の拡張機能に基づいて、h2/h3 プロトコルをサポートしています。 、 http2/http3 の実装が完了し、hertz-contrib の下に配置しました。使用方法は非常に簡単で、Hertz エンジンに対応するプロトコルを登録するだけです。 http3 プロトコルのサポートも同様ですが、トランスポート層を Hertz によって拡張された quic プロトコルのトランスポート層として指定する必要があります。その他の操作は http2 の場合と同じです。
-
Response Writer ハイジャック: 次に、Response Writer ハイジャック機能を紹介します。 Writer ハイジャックを紹介する前に、Hertz によるメッセージの読み取りと書き込みのプロセスについて説明します (図の数字の部分)。Hertz はまず接続内のデータを読み取り、解析し、次にルート マッチング、ビジネス ロジック処理を実行し、応答を作成します。リクエストの内容に基づいてデータを送信します。これらのタスクが完了すると、フレームワークはデータをピアに送信します。これにより、ユーザーの操作が完全に簡素化されますが、一部のシナリオでは問題が発生します。まず、ユーザーはピアへの実際のフラッシュのタイミングを制御できないため、データが増分的に生成され、リアルタイム要件が高いシナリオでは、ユーザーが次のような問題を抱えています。多くの制限。
そこで、元のレスポンス書き込みプロセスに基づいて、ユーザーがビジネス ハンドラー/ミドルウェアでレスポンス ライターをハイジャックし、レスポンス データを事前にピアに送り返すことで、より柔軟な書き込みリクエストを実現できるレスポンス ライター ハイジャック機能を開発しました。方法。私たちは、Response Writer の機能に基づいて、ハンドラー フラッシュ、SSE、ストリーミング Gzip などの機能を実装しました。さらなる機能への皆様のご貢献をお待ちしています。
-
パラメーター バインディングの再構築: Writer ハイジャックを紹介した後、重要な機能であるパラメーター バインディングを紹介しましょう。再構築前、Hertz のパラメータ バインディングはサードパーティの実装に依存していたため、次の問題が発生しました。
これらの問題を解決するために、パラメーター バインディング機能を再構築し、その実装をアプリケーション層の重要な実装として Hertz 内に配置しました。再構築後は、以前と同じバインディング ルールと使用方法がサポートされ、パフォーマンスが向上します。以前よりも完全に良くなりました。さらに、ユーザーが使い慣れた構文を簡単に使用できるように、カスタム バインダーとバリデーターもサポートしています。さらに、すべての構成を 1 つの構造に統合し、withOption の形式で Hertz エンジンに挿入します。
-
サードパーティの実装に依存しているため、ユーザーは自分のニーズを開発者にアピールする必要があります
-
提供されるインターフェースが少なく、学生が移行すると学習コストが増加します。
-
パフォーマンスが低下します。以前の実装は標準 http ライブラリのストレージ モデルに適合しているため、さらに 1 回の変換が必要であり、パフォーマンスが低下します。
-
上記の 3 つは、使いやすさの点で Hertz のより重要な機能です。
03
エコロジー建築
次にヘルツに関わるエコ工事を紹介します。
現時点では、開発者がビジネス ロジックに集中し、これらの共通機能を使用するためにミドルウェアを呼び出すだけで済むように、いくつかの共通機能をミドルウェアの形ですべての人に提供しています。これまでに認証・認可、セキュリティ、パフォーマンス、HTTP全般機能、ガバナンス監視拡張機能などを含む20以上のミドルウェア拡張機能を提供しており、基本的にほとんどのビジネスニーズに対応できます。
もちろん、私たちはこれらのミドルウェア エコシステムの構築への投資を継続し、誰もが私たちのコミュニティ開発に参加することを歓迎します。
04
足場の最適化
以下に足場ツールの最適化について紹介します。
Hz
Hertz のスキャフォールディング ツール hz は、オープン ソースのときに、IDL に基づいてサーバーを生成する機能をすでに提供していました。つまり、図のパート 3、4、および 5 をサポートしていました。現在、ルーティング登録コードとハンドラー コードは、それに基づいて自動的に生成できます。 IDL のインターフェイス定義やその他の機能については説明しますが、通信フレームワークとして、図の 1、2、6 のプロセスであるクライアント側の生成作業も完了する必要があります。そのため、hz は次の機能をサポートします。オープンソース化後にクライアントコードを生成します。
クライアント生成の主な目的は、Hertz クライアントの初期化やリクエストの送信などの一連の固定操作をブロックし、ワンクリックで HTTP リクエストを送信できる機能をユーザーに提供し、hz によって生成されたサーバーと直接通信できるようにすることです。
CWGO
次に別のツール cwgo を紹介します。 cwgo は、CloudWeGo Golang フレームワーク用にリリースされた統合ツールです。
下の図でわかるように、CloudWeGo には Golang の下に複数のコード生成ツールがあります。Kitex と Hertz はカプセル化のレイヤーを提供していますが、その使用法はまだ若干異なるため、ユーザーの学習コストが高くなります。この問題はまさに cwgo が解決したい問題の 1 つです。
さらに、CloudWeGo コミュニティの Go プロジェクトは現在、次の問題に直面しています。
-
IDL 自体は、ビジネス開発の反復プロセス全体を通じてインターフェイスの記述/定義ツールとして使用できる機能は比較的弱いですが、現時点では、CloudWeGo には、企業ユーザーと接続するための明確な実用的な計画がありません。 , ビジネス側は基本的にIDL関連の管理に注力する必要があります。
-
各コンポーネントは比較的独立しているため、一緒に使用するとシームレスに動作できません。
-
単体テスト、DB などの共通コード生成と構成が欠如している。
今後もCloudWeGoのオープンソースコンポーネントが増え続けると、ユーザーエクスペリエンスの断片化が進むため、上記の問題をグローバルな視点で解決することを目的として、CloudWeGoオールインワンツールcwgoをリリースしました。よりシンプルで使いやすいマイクロサービスの生成および管理フォームを提供します。
cwgo のいくつかの機能を紹介しましょう
-
cwgo は、hz/kitex スキャフォールディングの機能を統合し、そのコマンドを抽象化して簡素化し、それらを cwgo ツール上で均一に表示します。また、ユーザーが RPC または HTTP を使用する場合でも、生成された構造、アノテーション、バリデーター、およびその他の機能を開くことができます。ユーザーに統合されたコード生成エクスペリエンスを提供する
-
インタラクティブなコマンド ライン。この機能はエントリー レベルのユーザーを対象としており、インタラクティブな形式でユーザーのターゲット コードを生成するため、ユーザーは数回クリックするだけでマイクロサービスの生成を完了できます。
-
右の図に示すように、企業のニーズに応える mvc テンプレートを生成して、ビジネスの迅速な開発と実装を支援し、将来のイテレーションとメンテナンスを容易にします。さらに、cwgo はカスタム テンプレート、テンプレート ホスティング、およびテンプレートをサポートします。その他の機能により、テンプレートの管理と迅速な置き換えが容易になります。
-
cwgo では、新しいマイクロサービス デプロイメント フォームを提供しています。これは現在、Hertz と Kitex の略語である hex plan と呼ばれています。 Hex 計画の目標は、マイクロサービスが同じポート上の HTTP/RPC リクエストを同時に監視し、プロトコル スニッフィングに基づいてゼロ オーバーヘッドのリクエスト分散を実現し、リクエストを Hertz と Kitex に分散して処理できるようにすることです。これにより、企業が RPC サービスに HTTP API インターフェイスを提供する必要がある場合に、研究開発の効率、複雑さ、パフォーマンスにおける多くの妥協を解決できます。現在、この機能は cwgo で正式にリリースされており、誰もがオンデマンドで体験できます。
05
ユーザーエクスペリエンスの最適化
ドキュメントの最適化: オープンソース以来、CloudWeGo のプロジェクトは常にドキュメントの問題に注意を払ってきましたが、問題が発生するたびにどこかで修正され、問題を包括的に解決することはできません。
そこで、私たちは CCF GLCC プロジェクトに参加し、特別なドキュメント最適化プロジェクトを立ち上げました。この特別なプロジェクトでは、主に次の作業を行いました。
-
コード、画像、コンテンツなどを含む総合的な方法でドキュメントを再体験し、関連する問題を記録します。
-
記録された関連問題に基づいて、ドキュメントを最適化する専任担当者を配置し、わかりにくいロジックや不明確な説明などのいくつかの問題を解決し、初心者向けのチュートリアルや Hertz のコア機能などの一般的に使用されるドキュメントの最適化に重点を置いています。フィードバックによると、最適化されたドキュメントにより、基本的にすべての一般的な問題がすでに解決されています。
-
さらに、より優れた視覚エクスペリエンスを提供するために、ドキュメント形式とディレクトリ構造にも統一的な調整を加えました。
現在、この最適化プロジェクトは他の CloudWeGo プロジェクトの下で実行されています。ドキュメントの問題に関するフィードバックもお待ちしています。
サンプル コード ライブラリ: 次に、豊富なサンプル コード ライブラリを提供します。
現在、hertz-example および kitex-example コード ライブラリを提供しています。これらには、一般的に使用されるすべての機能の実行可能な使用例が含まれており、定期的に更新および保守されています。
さらに、企業が CloudWeGo プロジェクトを使用してビジネス ロジックの開発をより迅速に完了できるようにするために、現在、次のビジネス コードが Hertz と Kitex Or リファクタリングを使用して開発されている、いくつかの実際のシナリオのデモが提供されています。 、これに基づいてビジネス ロジックを拡張し、ビジネスの迅速な立ち上げを完了できます。
-
Bookinfo : Hertz+Kitex を使用して IstioBookinfo を再実装する
-
Easy Note : Hertz+Kitex マイクロサービスを使用してメモ サービスを実装する
-
Book Shop : Hertz+Kitex を使用して e-コマースの例を実装する
-
オープン決済プラットフォーム: Hertz+Kitex を使用して、複数の販売者をサポートするオープン決済プラットフォームを実装します。
CSG アクティビティ: CSG アクティビティは、開発者がソース コードとフレームワークの最適な使い方を理解できるように設計されています。
これまでに 5 回開催された CSG イベントでは、Hertz/kitex/volo フレームワークの多くのソース コードとベスト プラクティスが紹介され、開発者がフレームワークをよりよく理解して使用できるようになりました。 Cloudwego/コミュニティ ウェアハウス内の課題で、課題の紹介と以前のアクティビティの再生を表示できます。
06
展望
今後も、ユーザーにより良い研究開発体験を提供するために、Cloudwego の使いやすさへの投資と改善を継続していきます。
-
ユニバーサル R&D プロセス: 直接使用できる一連のエンタープライズ レベルの R&D プロセスをユーザーに提供し、さまざまなフレームワークと連携して、効率的なビジネス開発のプロセス全体を完了します。
-
APIワンストップ管理:CloudWeGoプロジェクトのAPI管理方法を統一し、記述・開発・テストの全プロセスをワンストップで完了
-
分散 IDL 管理: IDL& 製品とビジネス コードは個別に管理され、メンテナンス コストを削減します。
-
-
CWGO x LLM: LLM に基づいて、よりインテリジェントな支援機能を提供します
-
インテリジェントなコード生成: IDL にビジネス記述を追加し、コード生成時に LLM を組み合わせてビジネス コード ロジックを埋めます。
-
ドキュメントの自動化: ドキュメントの自動作成、最適化、翻訳、エラー修正など。
-
プロジェクトアドレス
GitHub:https://github.com/cloudwego
公式ウェブサイト: www.cloudwego.io