この記事は、liubao68 による Huawei クラウド コミュニティ「JavaChassis3 テクノロジーの復号化: 拡張が容易な複数の登録センターのサポート」から共有されたものです。
Java Chassis の初期バージョンは Service Center に依存しており、多くの差別化された競争力を提供していました。
- インターフェイスレベルの転送。マイクロサービスの各バージョンのメタデータ、特にコントラクト データはレジストリを通じて管理されます。コントラクト データと組み合わせることで、バージョン レベルのルーティング機能を実現できます。たとえば、マイクロサービスには v1 と v2 の 2 つのバージョンがあります。v1 バージョンにはインターフェイス op1 と op2 があり、v2 バージョンにはインターフェイス op1、op2、および op3 があります。グレースケール シナリオでは、Java シャーシは op3 のアクセスを自動的に転送できます。 v2 バージョン op1 と op2 のアクセスは、v1 および v2 バージョンで負荷分散されます。
- バージョン規則に基づいたインスタンスの選択。クライアントは、最新、2.0+ などのバージョン ルールを構成できます。このようにして、クライアントは実際の状況に基づいてインスタンスのバージョンをフィルタリングできます。
Java Chassis は Service Center に依存しすぎているため、製品開発にいくつかのボトルネックが生じています。 Java シャーシのエコロジー推進はサービス センターのエコロジー推進に依存しており、Java シャーシをより多くのユーザーが使用することにはつながりません。クラウドの発展に伴い、さまざまなクラウド環境で実行できるコード セットを期待する顧客も増えていますが、一部のクラウド プロバイダーは Service Center オペレーティング環境を提供していないため、ユーザーは Java シャーシを選択する際に懸念を抱くことになります。
上記の理由から、Java Chassis では登録検出の依存関係を簡素化し、シンプルで実装しやすいインターフェースを定義し、それに基づいた実装を提供しており、今後も他の実装が提供される予定です。 Java Chassis は、登録センターへの機能の依存度を減らすことなく、アプリケーション自体の信頼性が低下しないようにするために、一連の新しい設計パターンを採用しています。 Nacos
zookeeper
インターフェイス レベルの転送の代替手段
Service Center に依存して、Java シャーシはインターフェイス レベルの転送を提供します。 Java Chassis 3 の最初の変更の 1 つは、インターフェイス レベルの転送のサポートが削除されたことです。このようにして、登録センターへの依存の複雑さを少なくとも 70% 削減できます。ただし、グレースケール シーンは依然として多くのビジネスにとって重要であり、Java Chassis 3 はグレースケール パブリッシングを使用してこの問題を解決します。グレースケール公開を使用する利点は、バージョン メタデータ管理機能の提供を登録センターに依存する必要がなく、各インスタンスに必要なのはバージョン番号などの単純なメタデータ情報のみであることです。
servicecomb: # エッジ サービスのルーターを有効にする router : type: router RouteRule: business: | - 優先順位: 2 一致: apiPath: プレフィックス: "/business/v2" ルート: - 重み: 100 タグ: バージョン: 2.0.0 - 優先順位: 1 一致: apiPath: プレフィックス: "/business/v1/dec" ルート: -ウェイト: 50 タグ: バージョン: 1.1.0 - ウェイト: 50 タグ: バージョン: 2.0.0
登録検出インターフェースとその実装
Java Chassis 3 は、インターフェイスのみを使用した新しい登録検出サポートを提供します。 Java シャーシはクエリ インスタンスを呼び出します。後続のインスタンスが変更されると、登録センターの実装がJava シャーシに通知します。 Discovery
findServiceInstances
InstanceChangedListener
/** * これはコア サービス ディスカバリ インターフェイスです。 <br/> */ public interface Discovery<D extends DiscoveryInstance> extends SPIEnabled, SPIOrder, LifeCycle { interface InstanceChangedListener<D extends DiscoveryInstance> { /** * インスタンス リストが変更されたときに Discovery 実装によって呼び出されます。 * @param registryName 呼び出し元の検出実装の名前 * @param application マイクロサービス アプリケーション * @param serviceName マイクロサービス名 * @param updatedInstances 最新の更新されたインスタンス。 */ void onInstanceChanged(String registryName, String application, String serviceName, List<D> updatedInstances); 文字 列名(); /** * この実装がこのマイクロサービスに対して有効な場合。 */ boolean Enabled(String application, String serviceName); /** * すべてのインスタンスを検索します。 * * ライフサイクル:このメソッドは、<code>run</code> の後にいつでも呼び出されます。 * * @param application アプリケーション * @param serviceName マイクロサービス名 * @return すべてのインスタンスが条件に一致します。 */ List<D> findServiceInstances(String application, String serviceName); /** * Discovery は、インスタンスが変更されたときに InstanceChangedListener を呼び出すことができます。 */ void setInstanceChangedListener(InstanceChangedListener<D>instanceChangedListener); }
Java Chassis 3は登録を管理します。登録プロセスは、 、および簡単なライフサイクルに分かれています。登録データを準備して登録を実行できます。登録が失敗した場合やシステムが停止した場合に実行されます。 Registration
init
run
destroy
init
run
destroy
/** * これはコアサービス登録インターフェイスです。 <br/> */ パブリック インターフェイス Registration<R extends RegistrationInstance> extends SPIEnabled, SPIOrder, LifeCycle { String name(); /** * get MicroserviceInstance </br> * * ライフサイクル:このメソッドは、<code>run</code> 後にいつでも呼び出されます。 */ R getMicroserviceInstance(); /** * MicroserviceInstance ステータスの更新 </br> * * ライフサイクル:このメソッドは、<code>run</code> 後にいつでも呼び出されます。 */ boolean updateMicroserviceInstanceStatus(MicroserviceInstanceStatus ステータス); /** * マイクロサービスへのスキーマの追加 </br> * * ライフサイクル:このメソッドは、<code>init</code> の後、<code>run</code> 前に呼び出されます。 */ void addSchema(String schemaId, String content); /** * MicroserviceInstance へのエンドポイントの追加 </br> * * ライフサイクル:このメソッドは、<code>init</code> の後、<code>run</code> 前に呼び出されます。 */ void addEndpoint(String エンドポイント); /** * MicroserviceInstance にプロパティを追加します </br> * * ライフサイクル:このメソッドは、<code>init</code> の後、<code>run</code> 前に呼び出されます。 */ void addProperty(文字列キー, 文字列値); }
発見した組み合わせを登録する
Java Chassis 3 は、複数の合計を個別に実装して、複数の登録センターに登録し、複数の登録センターからインスタンスを検出できます。各インスタンスはインスタンス ID によって一意に識別されます。インスタンス ID が同じ場合は同じインスタンスとみなされ、異なる場合は異なるインスタンスとみなされます。記事で述べたように、Java Chassis では、登録パーティションの分離によって引き起こされる誤ったオフライン インスタンスの問題を解決するために、各インスタンス登録 (新しいプロセス) で一意のインスタンス ID を生成する必要があります。どちらにも、Java Chassis によって定義された基本情報が含まれています。 Discovery
Registration
Java Chassis 3技术解密:注册中心分区隔离
Discovery
Registration
/** * マイクロサービス インスタンスの登録と検出に使用される標準情報。 */ public interface MicroserviceInstance { /** * 環境(必須): マイクロサービス インスタンスのロジック分離に使用されます。 * 同じ環境のマイクロサービス インスタンスのみが 相互に検出できます。 */ String getEnvironment(); /** * アプリケーション(必須): マイクロサービス インスタンスのロジック分離に使用されます。 * 同じアプリケーションを持つマイクロサービス インスタンスのみが 相互に検出できます。 */ String getApplication(); /** * サービス名 (必須): マイクロサービスの一意の識別子。 */ String getServiceName(); /** * サービス名のエイリアス (オプション): マイクロサービスの一意の識別子。 * このエイリアスは 、マイクロサービスの 名前変更をサポートするために * レジストリ実装によって使用されます。たとえば、古いコンシューマが古いサービス名を使用すると 、 * 名前が変更されたマイクロサービス サービスを見つけることができます。 */ 文字列 getAlias(); /** * サービス バージョン (必須): このマイクロサービスのバージョン。 */ String getVersion(); /** * データセンター情報 (オプション)。 */ DataCenterInfo getDataCenterInfo(); /** * サービスの説明 (オプション) */ String getDescription(); /** * サービス プロパティ (オプション) */ Map<String, String> getProperties(); /** * サービス スキーマ (オプション): オープン API 情報。 */ Map<String, String> getSchemas(); /** * サービス エンドポイント (オプション)。 */ List<String> getEndpoints(); /** * マイクロサービス インスタンス ID (必須)。この ID は、マイクロサービス インスタンスの起動時に生成することも 、 * レジストリ実装によって割り当てることもできます。 * * マイクロサービス インスタンスが再起動されると、この ID を変更する必要があります。 */ String getInstanceId(); /** * マイクロサービスのサービス ID (オプション)。これはサービス センターに使用されます。他の実装では * サービス ID がサポートされていない可能性があります。 */ デフォルト String getServiceId() { return ""; } }
登録ディスカバリーを実装するときは、インターフェースによって定義された基本情報が登録センターに登録可能であり、インスタンスを照会するときにこの情報を取得できることを保証する必要があります。
お客様の事例: すべての卵を同じかごに入れないことは、テクノロジーを選択する際の非常に重要な考慮事項です。ソリューションのオープン性と代替性、クラウド サービスの代替性は、多くのお客様が懸念している問題です。オープンソース テクノロジ フレームワークの場合、Java Chassis の初期バージョンはさまざまな登録センター拡張機能をサポートするように設計されていましたが、実装が非常に難しく、無意識のうちに顧客がサービス センターの代わりに他の登録センターを使用することが不可能になってしまいました。より簡素化された登録検出の実装を提供します。これにより、少数の競合機能が削減されますが、顧客の選択に関する懸念が大幅に軽減されます。
クリックしてフォローし、できるだけ早くHuawei Cloudの新しいテクノロジーについて学びましょう~
Tauri v2 は Android と iOS をサポートし、クロスプラットフォーム開発の新しい選択肢 FastGateway: Nginx を置き換えるために使用できるゲートウェイ PostgreSQL 新しいコードの 90% はわずか 50 人によって完成し、Tuoshupai が主導権を握ります 。 2024 年の新しい AI OS オペレーティング システム Microsoft は Redox OS をサポートするために Windows 11 にネイティブ Sudo コマンドを導入し 、より多くの Linux ソフトウェアを移植する予定です 10 年前の今日 - Vue.js が正式に開始されました Google は改善のために Rust Foundation に 100 万ドルを寄付しましたかつてMozillaが提案したRustとC++の相互運用性 放棄されたWebエンジンプロジェクト「Servo」が2024年に復活 Zigプログラミング言語の2024年新ロードマップ公開