雲[Huawei社]シェアの曇りアーキテクチャフロアプランの設計と実装

免責事項:この記事は従って、ブロガーオリジナル記事です。CC 4.0 BY-SAの著作権契約を、再現し、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/devcloud/article/details/102754350

要約この記事では曇りのアーキテクチャを着陸方法を、主な技術インフラ、ワークロード分析、などの課題曇りのアーキテクチャについて説明について説明します。

 

概念

クラウドサービスは、異なるクラウドベンダーを提供して同じではありません、同じクラウドサービスは、多かれ少なかれ差は機能、パフォーマンスになります持っています。クラウドベンダーのクラウドサービスを利用してより多くの深さは、より多くの困難は、他のクラウド・ベンダーに移行します。自分のクラウドサービス、技術的なしきい値、高いメンテナンスコストを構築することを選択します。

曇ったアーキテクチャを決定した後、最初に技術スタックの選択に妥協をする必要があります。基本的な原理は、異なるクラウドベンダーに対応、事業構造による柔軟である業務システムの信頼性を実行するために、そのクラウドプラットフォームを保護するために、クラウド・ベンダーの優れた特性を可能な限り提供し使用して、全体的なビジネスの競争力を強化します。

一般的なアイデアや重要な違いがあります考えていくつかの顧客上記の。一部の顧客は、独自のPaaSプラットフォームを構築するためのオープンソースソフトウェアを使用することを選択し、いくつかの顧客は完全にベンダーのテクノロジー・スタックを曇らせている、ビジネスシステムの2セットを開発しました。

どちらの方法が計画通りにプロジェクトを配信することができない、多くの場合、技術的なリスク評価が不足しているため両極端、かつての高い開発・運用・保守の難しされ、最終製品が良いか、クラウド・ベンダー、ピアの弱い競争力が提供するサービスではありません。二つのシステム、コードの重複度の高い維持する後者の必要性は、クラウド・ベンダーは、完全にビジネスの俊敏性を減らすために、切り札を失うことにバインドされます。一部のお客様にも、クラウド・ベンダーは、既存のビジネス・システムの論理的な変換なしで展開曇りを達成するための支援のための十分な互換性フレームワークを提供し、クラウドはこの努力は通常、クライアントシステムの複雑さと多様性に起因しているベンダー着陸されていません期待します。

選択と開発フレームワークのアーキテクチャ

セレクト開発フレームワーク

曇った開発フレームワークの設計は、コアアーキテクチャであり、また、抽象化部の最高レベルです。メインプッシュマイクロサービスフレームワークとして、Huawei社のクラウドServiceComb、アリクラウドメインプッシュHSF、ダボマイクロサービスフレームワークなど、他の外国のクラウド・ベンダー、ほとんどの中から選択する様々な他の言語やフレームワークに加えて、マイクロサービスフレームワークとして春クラウドを選択してください。

一般的な考えに基づいた場合、ServiceCombを使用して曇ったアーキテクチャは、Huawei社のクラウド、アリクラウド上で実行されている使用HSF上で動作したい、と春の雲のランタイムをサポートしています。これを実現するには、まず、必要なときにマイクロサービスは理解の枠組みの主要なコンポーネントを実行するために実行しています。台湾のほとんどのシステムでは、実行時のためのフレームワークを頼って、一般的にRPCフレームワークおよび登録サービスの発見など、RPCベースのサービス管理機能フレームワークを行うには、フォールトトレラントヒューズ及び制御メカニズムを流れ。コアコードビジネスロジック、デカップリング及びマイクロサービスフレームワークの能力は、設計の最初のステップです。

アーキテクチャ設計

コア事業:春、春のブートを使用した技術基盤。ServiceComb、HSF春のクラウド技術とマイクロ基地サービスフレームワークは、春、春のブートテクノロジ・スタックに基づいて構築することができます。次の図は、基本的な論理アーキテクチャを示しています。

論理構造では、マイクロサービスコードは、3つの主要なディレクトリを含む、階層化する必要があります。

  • MICROSERVICE-火災
マイクロインタフェース定義サービス。このディレクトリには、インターフェース定義(インターフェース)、データ構造定義(モデル)が含まれています。インタフェース定義とデータ構造定義については、異なるマイクロサービスフレームワークをサポートするために、一定の要件を持っています。
  • microserviceサービス

ビジネスロジックのコード。

  • microservice-エンドポイントservicecomb

マイクロサービスとして公開ServiceComb。

  • microservice-エンドポイントHSF

HSFはマイクロサービスとして公開しました。

  • microservice-エンドポイントspringcloud

春の雲のためのマイクロ出版サービス。

このコードの鍵は階層化されたコアは、APIの設計を実施し、ビジネスロジックを実装し、公開サービスがデカップリングされます。API設計は、異なるマイクロサービスフレームワークの設計要件を満たしている必要があります。デザインAPIを理解するためにどのように、基本的なRPCコーデックを理解する必要があります。RPCコーデックは通常、言語に依存しない(クロスプラットフォーム)および言語関連(しないクロスプラットフォーム)に分割されます。例えばHSFは、ダボデフォルトコーデックは、言語に依存する、のみデフォルトのコーデックまたはコーデックprotobufferを使用してJavaプログラム、ServiceCombジャクソンとの間の通信をサポートすることができ、これらの2つの方法は、Open API 2.0に基づくものであると定義されます独立した言語、春の雲が比較的複雑である、それはハイブリッド符号化形式で行われ、シーケンスは、ニーズの多様化に応える柔軟なカスタマイズすることができ、あなたは厳密にジャクソンとオープンAPI規格に従うことができます。通常、完全にコーデックを含むことができ、言語に依存しないコーデックは、APIの定義は、異なるマイクロサービスの開発フレームワークで実現することができる最高のAPIを確保するために、関係なく、言語の行われる必要があるので際、言語に依存しない必要。この記事では、技術的手法、クロスプラットフォームの設計の原則について詳細な議論を説明し、次のようにいくつかのインターフェース設計ガイドラインのリストは、次のとおりです。

  • (等整数、文字列、ブール値など)単純型を使用すると、パラメータと戻り値を定義します。型を含むか、単純な、POJOビーンのJava Beanのパラメータは仕様や戻り値を満たして定義されました。
  • インターフェイス、抽象クラスとして使用されていない、ベース・クラスが存在し、テンプレートクラスの複数の引数及び戻り値として実装しました。
  • 動作環境は、強力な引数や戻り値に関連したインタフェースオブジェクトとして使用されていません。このようなHttpServletRequestを、RpcContext、InvocationContext、ResonseEntityなどなど。

ユーザの視点の観点から、上記の原則は、それを理解することは非常に簡単です。セマンティック、明確な一義的、直接インターフェースを介してインターフェースするインターフェースは、パラメータの数とどのように転送するか、またはソースコードを表示するために追加のドキュメントを提供する必要があることを理解することができる定義します。インターフェース定義によって定義された文書、闊歩の作成を容易にします。

実際のプロジェクトでは、開発者が理解する必要がmicroservice-APIインタフェース定義、マイクロサービスのシリアル化を検討する必要性とデータのデシリアライズの間のインターフェイスのデザインです。この設計では、内部インターフェイスと異なっています。強化結束を達成するために、ビジネスロジックの繰り返しを減らすために、内部インターフェイスのデザインは、より抽象的、ロジック・パッケージの継承になります。インターフェイスの内部データ構造は、だけでなく、いくつかの追加の制御ロジックが含まれています。例えば、データベースアクセス層の、データ構造、ゲッターメソッドへのアクセスは、実際にゲッタープロキシオブジェクトを呼び出し、そのような遅延ロードなどのメカニズムを提供します。したがって、いくつかのデータ構造変換ロジックは、内部情報につながる、パラメータまたは戻り値として内部データ構造を防止するために、サービス定義との間の内部インターフェイスを維持するために、データ構造、インタフェースとの境界の外部インタフェースの内部データ構造が変換されています予測不可能な処理結果が得られ、リーク。

 

サンプルコード

例リットルのAPI

1つの インタフェースLoginService { 
 2     のSessionInfoログイン(文字列名、文字列のパスワード)。 
3  } 
 4    
5   パブリック クラスのSessionInfo { 
 6     プライベート文字列のセッションID。 
7     プライベート文字列のユーザ名。 
8   }

例Lサービス

1  @Service 
 2  @Primary 
 3   パブリック クラスLoginServiceImplが実装LoginService { 
 4     公共のSessionInfoログイン(文字列名、文字列のパスワード){ 
 5            // ログイン行う
6     } 
 7   }

実施例L ServiceCombエンドポイント

サーバーの例としては、次のとおりです

1 @RpcSchema(SCHEMAID = " LoginServiceEndpoint " 2つの パブリック クラスLoginServiceEndpoint実装LoginService { 
 3    @Autowired 
 4    プライベートLoginServiceサービス。 
5   
6    公共のSessionInfoログイン(文字列名、文字列のパスワード){ 
 7           戻りservice.login(ユーザ名、パスワード)。 
8    } 
 9 }

次のようにクライアントの例があります

1  @Bean 
 2   公共LoginService getLoginService(){ 
 3     リターン Invoker.createProxy(SERVICE_NAME、" LoginServiceEndpoint "、LoginService。クラス)。 
4   }

若しくは

1 @RpcReference(microserviceName = SERVICE_NAME、SCHEMAID = " LoginServiceEndpoint " 2  プライベート LoginService loginService。

実施例L HSFエンドポイント

サーバーの例としては、次のとおりです

1 @HSFProvider(serviceInterface = LoginService。クラス、serviceVersion = " 1.0.0 " 2   パブリック クラスLoginServiceEndpoint実装LoginService { 
 3     @Autowired 
 4     プライベートLoginServiceサービス。 
5    
6     公共のSessionInfoログイン(文字列名、文字列のパスワード){ 
 7            戻りservice.login(ユーザ名、パスワード)。 
8     } 
 9    
10   }

次のようにクライアントの例があります

1  @HSFConsumer 
 2   プライベート LoginService loginService。

エンドポイント層は可能な限り単純な論理を必要とする、上記のコード例を参照して、すべてのサービスロジック層を達成するために、唯一の宣言インターフェイス含まれ、又は必要なデータ変換ロジック構造を含みます。上記の宣言インタフェース方法のRPCを示し、あなたはまた、RESTインターフェイスをサポートするために、RESTラベル(Spring MVCの、またはJAX RS)を追加することができます。

レガシーシステム戦略の転換

ほとんどの企業は、ホイール、新しい開発を改革するために、既存のシステムにクラウドで実行されている既存のシステムを持っている、これは通常は良いアイデアではありません。レガシーシステムの変換は、連続的な反復、相続変換のアイデアを実行する必要があります。

Huawei社のクラウドシステムを変換するためのアリクラウドシステムは、例えば、オリジナルのマイクロベースのアプリケーション変換サービスHSFは、次の手順を実行し、マイクロプロセッサベースのアプリケーションサービス開発ServcieCombために開発しました。

あなたの前に一般的な考えによると、以下のディレクトリ構造を確立するコードセクションHSFに強く依存元のプロジェクトを分離する最初の必要性:

  • microservice-API:マイクロサービスのインターフェース定義。このディレクトリには、インターフェース定義(インターフェース)、データ構造定義(モデル)が含まれています。インタフェース定義とデータ構造定義については、異なるマイクロサービスフレームワークをサポートするために、一定の要件を持っています。
  • microserviceサービス:サービスロジック実装コード。
  • microservice-エンドポイント-HSF:HSFはマイクロサービスとしてリリースしました。

このプロセスは比較的単純で、ビジネスロジックの変更を伴うが、コードのディレクトリ構造を変更し、依存POMの関係を調整しません。調整後、を通じてそのプロジェクトを確実にするためのテストケースを自動化し、既存の自動化された検証の簡単な関数とすることができます。調整項目機能とレガシーシステムは、常にシステムの非破壊的な操作を持って、同じである、機能比較のために、発見された問題は、非常に便利です。

プロジェクトの調整後、あなたは、Huawei社のクラウドプロジェクトを増やすことができます。

  • microservice-エンドポイントservicecomb:ServiceCombマイクロサービスを公開します。

このプロジェクトはmicroserviceエンドポイント-HSF複製することができ、POM代わりServiceCombインタフェース(エンドポイント)の含有量に依存し、公開のServiceCombに調整公開します。

プロジェクト調整した後、あなたは2つの実行可能jarファイルのパッケージを構築するためのコードをコピーすることができ、二つのパッケージはjarファイルとHuawei社のクラウドアリクラウドに配備されました。

このプロセスは、規範的なAPIインターフェース、コードサイズなどを評価するために、元のコード自体の複雑さを介して作業する必要があります。元のコードの構造が複雑な場合は、非標準のAPI定義されたワークロードが大幅に増加します。コードの良い組織で、このプロセスは非常に簡単になります。実際の変革プロジェクト、および完了するためにいくつかの日、他は数ヶ月の時間のカップルを過ごしながら。製品、コードサイズとシンプルな認識技術スタックの事業構造に取得し、既存のコードの方法を開発、効果的に作業負荷を評価することができます。

microservice-APIインタフェースは櫛を定義したレガシーシステムの変換のコア作業。以来、HSFは、クロス言語の開発フレームワークではなく、したがって、データ構造は、支持なしインタフェース定義ServiceComb可能に使用されます。支持体は、そのクロス言語インターフェースを基準として定義されているフレームを使用して(記載されている一般のインタフェース定義は、インターフェイスは、gRPC、Webサービス、ServiceComb例えば、IDL、WSDLまたはOpen APIによって定義することができる)、他のフレームワークは、マイクロこのインタフェースを実装しますキーコアサービスインフラストラクチャの適応。

 

ミドルウェアアダプタ

データベースアダプタ

ビジネスシステムは、データベースを使用します。各クラウドベンダーサポートデータベースフォームは、分散データベース、ならびにサブライブラリーサブテーブル及び他の特性、データウェアハウスのサポートに加えて、その他のMySQL、Postgre、オラクルがあります。接続プールの管理、トランザクション管理、などDBCP、春のトランザクション、MyBatisの、などのORMフレームワーク、でオープンソースの開発フレームワークが多数ありますが、彼らはまだ、すべてのシナリオをカバーすることはできません。コード開発事業の曇り適応フレームワークは、以下の推奨事項があります。

  • ANSI SQL標準のSQL文に沿って可能な限り使用してください。たとえば、文によるMySQLの、カラムの参照、用語リミット、グループの場合には、そのため独自の特殊な使用方法があります。より良い曇ったデータベースを適合させるためには、ビジネス価値、およびなし他のソリューションに大きな価値がない限り、特殊な用法ケースを使用しないでください。
  • 広く使用されているフレーム選択ORM。たとえばMyBatisの、JPAなどのために。フレームは、マルチデータベースのサポートのための幅広いサポートがより完全に検証されています。データベースの使用に違いがあります場合は、非常に優れた拡張メカニズムを提供します。このような使用MyBatisのように、DatabaseProviderインタフェースは構文の違いをマスクするために使用することができます。使用JDBCまたはJDBCTempateはURLをスプライスされた場合、あなたはリターン異なるSQL文によって異なるインタフェースを実装することができます。
1 < もしテスト= " _databaseId == 'のMySQL' " > 
 2  リミット#{stratRow}、#{をrowCount} 
 3 </ なら > 
 4 < もしテスト= " _databaseId == 'PostgreSQLの' " > 
 5  リミット#{をrowCount}オフセット#{stratRow} 
 6 </ なら >
  • 分散型データベース、サブサブテーブルのデータベース、分析データベース事業開発のためのさまざまな制限があります。たとえば、修正、サブテーブルの制限の主要サブライブラリーのためのユニークなインデックスの制限を使用すること。これらのシナリオの場合は、可能な限りこれらの限界に沿って、重要でないシーンを満たすために必要性を回避するために、問題を解決することはできませんいくつかの分散シーンが行くことにしたキャッチ、事業実施を調整し、他のクラウドにデータベースベンダーに適応することはできません。

キャッシュアダプタ

すべてのメーカーは、キャッシュとしてのRedisをサポートしていますが、Redisの開発パスに、異なるブランチがあります。プロキシクラスタモデルは、分岐がネイティブRedisのクラスター・アプローチで、ブランチです。Redisのは1つがJedis、1 JedisCluster、サポートされているコマンドの二つの異なるセットで、2があり、クライアントのAPIを提供します。たとえば、プロキシクラスタモデルは、すべてのJedisコマンドは非常に良いサポートすることができ、Redisのネイティブクラスターアプローチは、JedisClusterコマンドをサポートしています。多くのお客様は、パイプラインの命令がネイティブRedisのクラスタ・アプローチではサポートされません使用しました。

より良いサービスでの根本的な違いを遮蔽するプロキシクラスタ、特別なニーズが存在しない場合には、あなたがプロキシクラスタモデルを使用することをお勧めしますが、クラウド・ベンダーは、プロキシクラスタモードでJedis異なる命令のサポートを提供する必要があります。また、ユーザーは、異なるクラウドで生産、これはまた、サポートを提供し、ユーザーはあなたが曇った環境にデプロイできるように、ビジネスシナリオでネイティブコマンドをサポートしていないクラスタの使用を避けることができ、ネイティブRedisのクラスタを選択することができます。

、曇りキャッシュサポートのベストプラクティスを要約すると:

  • クライアントAPIバージョンは比較的新しいクライアントAPIを使用して、タイムリーに、アップグレード、および用途は、命令JedisClusterコレクションを提供しています。

メッセージングミドルウェアアダプタ

標準メッセージミドルウェアのデータベースとキャッシュに対しては弱いポイントを適合しました。が、初期のJAVAは、JMSなどの規格を提案したが、現在主流のメッセージングミドルウェアは、JMSインタフェースの実装を提供していませんでした。カフカのHuawei社DMSインターフェースに基づくアリRocketMQは、矛盾しています。およびサービスの品質は、このようなシーケンスの配信と同じメッセージミドルウェア、メッセージではなく、REPEATの他の側面は、クライアントインタフェース制御せずに、メッセージング・ミドルウェア構成によって提供されます。一部のお客様には、インタフェースの必要性、メッセージングミドルウェアの抽象化を使用して、インターフェイスの動作ので、ミドルウェアの他のクラウド・ベンダーの分析は、対応する要件を満たすために、対応するインターフェースとサービス品質を提供することができ、ビジネスロジックの特定の機構メッセージングミドルウェアに依存しています、時にはあなたは、ミドルウェア、サービスの質の差を補償するために、いくつかのビジネスコード補償を行う必要があります。

他のミドルウェアアダプテーション

他のミドルウェアは、ログサーバ、スケジュールされたタスクサービス、オブジェクト・ストレージ・サービスが含まれています。同じ一般的な考え方の適応、ここでは詳細に説明されていないの詳細です。

課題と提言曇りアーキテクチャ

プロトコル標準および顧客にビジネスに柔軟性を与えることに加えて、同じ、曇ったアーキテクチャを行うだけでなく、全体的なソフトウェアの品質を向上させるためにビジネスシステムのソフトウェアアーキテクチャの改善を促進します。曇りアーキテクチャは、いくつかの民間の特性、より安定の使用に関して、技術選択と広く確認されている比較的中性の標準プログラムのより一層の活用、利用の技術的なポイント比較考量する必要があり、プロジェクトの開発を促進することができるので相続間の技術交流と能力。ソートアーキテクチャの進化の全体的な方向からのヘルプの顧客に交換アーキテクチャにより、アーキテクチャの曇りの着陸を行うには、顧客のために実際には、また、顧客は、コードの品質を改善するための多くの歴史的な問題が重要な役割を果たしました。

曇りアーキテクチャは、特定の課題に直面しています。まず、それはシステムの継続的な進化のための枠組みを設定し、早期のアーキテクチャを適応の問題を解決するために、専門家が必要になります、顧客の維持費及び技術費の短期増加の増加です。曇りシステム操作、データの同期は、異なるクラウド上の共同の問題についてどのようにシステム、業務が増加します。顧客曇りシステムは比較的独立しているときにのみ、データの共有や業務の相互作用のシナリオはかなり単純ではありませんがあります。曇りシステムはまた、顧客の送達効率に影響を与え、異なるクラウド続け配信方法、さまざまな経験の運用・保守担当者の間には大きな差がある、毎日効率が低下します。

したがって、曇ったアーキテクチャは、顧客の主な事業は、単一のクラウド・ベンダーを提供することであり、「スペアタイヤ」により準備ができています。顧客への曇りアーキテクチャは非常に正確な基準を提供するクラウドサービスの質の異なるメーカーを比較するために、顧客は、より正確に、高品質のサプライヤーを選択することができます。

マイクロサービスフレームワークの抽象化層が最も難しい部分曇った抽象アーキテクチャを作らされていますが、最も困難な現像剤層を把握します。参照フレームとして開発ServiceCombマイクロサービスインターフェース仕様は、HSF、春クラウドと他のフレームワークに非常に良好な適合であってもよいです。インタフェース定義は、あなたが新しいインターフェースの開発のために、などの試験ServiceCombにベースライン、そしてテストHSFと春の雲の適応、としてそれを使用することができた場合、システム移行の歴史は非常に良いの中間製品です。

著者:liubao68

おすすめ

転載: www.cnblogs.com/huaweicloud/p/11866023.html