ServiceMeshのビジー魚の探査と実践

  背景:
  
  Javaベースの背景にアリサーバの開発では、どのように異種言語、他のビジネスのJavaサービスを既存のコール、そしてどのようにグループミドルウェアを介して取得するには、Java以外の言語のチームを使用して主要な問題は解決されなければならないとなっています。
  
  既存の制度の問題:
  
  ServiceMeshプログラムが成熟する前に、我々は使用:ダーツC C ++の拡張機能を経由して(JNIのような)ライブラリ/ので、各クライアントミドルウェアを呼び出すこと。生態建設ダートサーバーの問題に良い解決策の初めに業務プログラム。しかし、プログラムは、次の質問に存在します。
  
  高次元の輸送と相まって。マイクロサービスフレームワークをアップグレードする必要がいったんビジネスコードとライブラリコードは、SOクライアントは、同じプロセスで実行されている、一緒にパッケージ、サービスコードもメンテナンスや再起動が必要です。
  
  複雑さ:プロセスで複数のロケールは、クロス言語データの表現と伝達の問題は、システムの複雑さを増す既存のサービスのパフォーマンスが低下します。
  
  高アクセスコスト
  
  新機能は遅れます
  
  ServiceMeshプログラム:
  
  既存のプログラムが存在するいくつかの問題に、我々は問題を解決するためのアイデアを探してServiceMeshを回します
  
  上記のように:現在、より一般的なマイクロ・サービス・フレームワーク、独立ServiceMeshマイクロクライアントサービスコア機能と比較し、各ホストにデプロイ別プロキシプロセスとして、外の世界とのプロセス間通信を介してプロキシビジネスプロセス。この独立したProxyプロセスはServiceMeshの中核である:サイドカー。
  
  1つの傍受トラフィックiptablesのベースの転送方式で、直接サイドカー軽量メッシュクライアントを介して2つのビジネスプロセス:ビジネスプロセスやサイドカー二つの最も一般的な通信方式間。ビューの主点の実現からは、iptablesのプログラムダイレクト方式を比較して、パフォーマンスとレイテンシのいくらかの損失があるでしょう。私たちは、ALiMeshプログラムは軽量メッシュクライアントプログラムを使用しています選びました。
  
  メッシュテクノロジー、ビジネス・プロセスとビジネス・コードが唯一軽量メッシュクライアントが含まれた後に、コードのロジックが簡単になり、より明確に問題を見つけます。ビジネスの学生は、ビジネスの発展に重点を置くのではなく、マイクロサービス複雑なロジックに集中することができます。専門チームのメッシュ、独立したアップグレードやメンテナンス、およびビジネス・デカップリングなしのビジネス感覚の責任の拡大とアップグレードのコア機能を維持するために、マイクロサービスフレームワークの開発。
  
  既存の従来のソリューションにServiceMeshソリューション:運用・保守コスト、アクセスコスト、コードの複雑さの問題。メッシュとオープンソースプログラムの使用は、あなたはまた、常に新しい機能を追加し、オープンソースの電源を使用することができます。
  
  ALiMeshアクセス:
  
  プロセスにマイクロサービス間でのインプロセス通信の間に、トラフィックのうち、本来の業務との通信を行うサイドカーの導入は、ServiceMeshの導入の業績に具体的な影響をもたらすのか、その後、ジャンプを増加しますか?次はスコアリングの外観に沿ってALiMesh(Istioオープンソースソリューションアリ版)をベース。
  
  Http実施形態では、HSFモード:ALiMeshは、2つのアクセススキームを提供します。HTTP1.0とHttp2.0の道に分かれているのHttp方法。
  
  AliMeshのHttpスキーム(クイックアクセス方式):
  
  示されるように、モードHTTPは:データプレーンにおいて、サイドカー、サイドカーサービスプロバイダとHTTPプロトコルの相互作用を用い間のビジネスプロセスは、データは、JSONを使用してコーディング。HTTPプロトコルメッシュクライアントに基づいてビジネスプロセス統合、メッシュサイドカーは、一般化することによって、Java HSFリモートサービスコールを呼び出します。
  
  サービスプロバイダISTIO制御プレーンデータ同期CONFIGSERVERリスト、ネイティブ行くにISTIOパイロットチャネル同期サービスとサイドカー:コントロールプレーンで。
  
  HTTPプロトコルの汎用性、アクセス方式はシンプルであるため、高速なメッシュは、スキームの実現可能性を検証しますが、パフォーマンスはまだオンラインサービス要件、テストに達していない、次のように、主な指標は以下のとおりです。
  
  注:現在ビジー状態の魚をのみServiceMeshアウトバウンド機能を使用して。実際の交通状況をオンライン詳細ページをシミュレートするために、すべての上流の要求処理は、メッシュに流れ込む変換21回の図QPSを掛けたときに、次のテストは非常にあり、21倍下流のJava HSFサービスと呼ばれます
  
  図に示すように:メッシュモード直接接続は、消費者側のCPU消費はほぼ2msの増加すべてのRPCコールRTに比べて倍増しました。CPU及びHSFプロバイダ側はまた、試験結果とHSFの学生が基本的に一致しているれており、約40%増加しました。分析の後、我々は最初に増加し、CPUの消費の主な原因を標的とすることは、データのエンコーディング(既に接続プーリングを使用して)接続HTTP1.1の合意です。
  
  プログラムの問題ことを確認するために、我々はHttp2.0アクセス方式をテストしました。Http2.0比べHttp1.xは、接続多重化、データのフォーマットなど、圧縮ヘッドに自然という利点を有します。テストの後、パフォーマンスALiMeshももっとHttp1.xを大幅に改善されましたです。または技術的な要件を満たすために、私たちの一部に近いです。以下に示すように、詳細な指標:
  
  示されているように、最適化した後、ビジネスは、消費者側、CPUを処理し、そしていくつかのやや過剰消費RTは(CPUが20%以上増加しません)。より高い性能、低レイテンシのソリューションを探るために、我々は、HSF独自プロトコル方式になりました。
  
  AliMesh HSF拡張プロトコル・スキーム(性能溶液):
  
  示されるように、HSFの実施形態では、HSFメッシュサイドカーとしてRPCプロトコルの拡張プロトコル。データプレーン:サイドカーの間のビジネスプロセス、サイドカーサービスプロバイダとHSF 2.0と独自のプロトコルを使用して、データはヘッシアン1.0を使用して符号化されます。メッシュは、ビジネスがメッシュサイドカーとの通信を担当するHSFCPP SO MeshClient、などのライブラリの変換を処理し統合します。制御プレーンにおいて:CPUコントロールパネルの消費を低減するために、同期して差分を用いて直接に接続されたサイドカーConfigsvr、サービスプロバイダと設定情報の同期リスト。次のように詳細な試験データは以下のとおりです。
  
  連続最適化により、20%の成長、1ミリ秒未満でジャンプRT RPCコール制御あたりの増加内のメッシュCPU制御の最終的な成功。
  
  レジャー用途でServiceMesh魚:
  
  現在、サーバーでのダート+ ALiMeshプログラムがビジー状態の魚の詳細ページを提供するために、8ヶ月間、すでに魚+安定した動作ビジー状態である、あなたはまた、このような拡張機能としてメッシュの最適化、アップグレード、運用・保守作業の際に、在宅ビジネスを借り、何回も好きなことがあり、ビジネスプロセスは、通常の外部サービスのない感覚を持っていない、ビジネスの学生が参加する必要はありません。
  
  オレンジはメッシュのグラフRTトラフィック監視曲線である、青い曲線はメッシュRTトラフィック監視曲線の前の週で、オンライン環境を削除する日内変動:導入ALiMesh、以下に示すようにRT上のオンラインビジネスへの影響の後オンラインビジネスのためのALiMesh RTの導入の影響は非常に小さいです後。
  
  
int型NUM = 1;
一覧<整数>リスト=新しいリスト<整数>(www.yishengyule158.com)。
以下のために(1 = Iをint型;私は<= 2000; www.xcdeyiju.com ++)
{
list.Add(www.boyunylpt1.com)。
}
Console.WriteLineを($ "NUM初期値:" + num.ToString());
list.AsParallel()のForAll(N =>
{
++;
});
Console.WriteLineを( "として同時{list.Count}回後にロック解除、" $ + num.ToString())。
Console.ReadKey(www.jujinyule.com)。
コードをコピー
このコードは2001である必要があり、通常の結果により、2000年以降、可変実行時間をできるようにすることですが、次のように実際の結果は以下のとおりです。
 
 
 
経験豊富な学生がすぐにロックする必要があると考えることができ、C#が、そのようなロックミューテックスとして、インターロック内部ロックをロックオブジェクトの多くを建て、これらは、より一般的なモニター、実際には、モニタオブジェクトを使用して、内部ロックを実現。インターロックオブジェクトが変数インクリメント、デクリメント、付加、等を提供する、我々は、メソッドInterlocked.Increment増分を使用して、関数は次のように定義された変数の増分は、:INTインクリメント(REFのint型NUM)、オブジェクトは、原子性を提供することです可変インクリメント動作、着信目標値、またはREF NUMを返す自己増力の結果です。私たちの以前の増加いくつかのコードに基づいて:
 
コードをコピー
= 1;
Console.WriteLineを($ "NUM初期値:" + num.ToString());
list.AsParallel(www.huichengtxgw.com).ForAll(N =>
{
Interlocked.Increment(REFのNUM)。
});
Console.WriteLineを($ "と、同時{list.Count}回内部ロックを使用する:" + num.ToString())。
Console.ReadKey();
コードをコピー
結果を見てみましょう:
 
 
 
IDプラス繰り返した後にロックが実際には、ない幸せな、あまりにも早く、原因IDのIDを持つ通常の環境に、我々はまだそれを構築するために、これらのオブジェクトを使用して、解決されるので、彼はより現実的なため、これらのIDを追加するには、コレクションを使用して、コードを書くために書きましたシミュレーション生産環境、I forallは次のようにループコードの別の層と内側:
 
コードをコピー
= 1;
ランダムランダム=新しいランダム();
= 0の合計でした。
VaRのM =新ConcurrentBag <整数>();
list.AsParallel(www.yacuangyl.com).ForAll(N =>
{
VaRのC = random.Next(1、50)。
Interlocked.Add(REF合計、C)。
(;私はCを<; I ++は、I = 0をINT)ため
{
Interlocked.Increment(REFのNUM)。
m.Add(か)。
}
});
Console.WriteLineを($ "として内部ループ時間後、内部ロックを使用する同時+ {list.Count}:" + num.ToString())。
Console.WriteLineを($ "実測値:{合計+ 1}")。
VaRのL = m.GroupBy(N => N).Where(O => o.Count()> 1)。
Console.WriteLineを( "ConcurrentBagはNUM、重複を設定添加安全なコレクション内の同時{l.Count()}番目の" $)。
Console.ReadKey();
  
  ServiceMeshプログラム、マイクロ通信サービスのビジネスロジックは、ビジネスアプリケーションから分離これらとは何の関係もない、とビジネスの学生は、ビジネスの発展に集中することができ、減量ビジネスアプリケーションを聞かせてとの間のサービスロジック。低コストのエコ・エンド・サービスを構築するために、異種言語、既存のシステムへのアクセス権を与えながら。
  
  もちろん、パフォーマンスの低下は、個人的に全体的な利点が欠点を上回ると思います。あなたがServiceMeshにアクセスしたい場合は、ビジネスチームはバランスの上に、自分のビジネスに応じて実際の状況を評価するために試験することができます。
  
  次に、我々はさらに、ALiMeshでレジャーや仕事のアプリケーションAliMesh魚を拡大ダートFAASでAliMesh着陸を押して、より多くのミドルウェアに適合します。

おすすめ

転載: www.cnblogs.com/qwangxiao/p/11330836.html