いいえ公共の純粋な笑顔の記事ません:[12]私はマイクロサービスアーキテクチャを描く手に従ってください!
マイクロサービスとは何ですか?
マイクロ・サービス・アーキテクチャは、アーキテクチャパターンや建築様式の一種である、それは同様のサービス、協調、間の協調、独自の独立したプロセスを実行している各、小さな一連のサービスに単一のアプリケーションを提唱します究極の価値をユーザーに提供します。
(通常はHTTPベースのRESTful API)互いに通信するサービスとの間の軽量の通信メカニズムを使用します。各ビルドに固有のビジネスの周りのサービス、および独立して生産環境、生産のような環境にし、その上に展開することができます。
また、あなたは非常に軽量な集中管理を持つことができ、それらを構築するために、ツールを適切な言語を選択し、ビジネス・コンテキストに基づいている必要があり、特定のサービスのための統一、集中サービス管理メカニズムを回避しようとする必要がありますこれらのサービスを調整します。あなたが別のデータストレージを使用することができ、サービスを記述するために別の言語を使用することができます。
Martin Fowler氏の説明によると、私は次のポイントをまとめました。
①小さなサービス
小さなサービス、ない特定の基準や規範が、彼は全体の仕様にあったが小さくなければなりません。
②独立したプロセス
別のサービスが桟橋上で実行中のサービスの各セットは、私は、Tomcatコンテナにこのサービスを実行することが、独立して実行されています。プロセスを通じてウェイは、我々は全体のサービスを拡張し続けています。
③通信
過去の契約はサービスがお互いを呼び出す過去賢くよりも軽い意味SOAP、光通信、などのESB、のように、それはスマートなエンドポイントおよびダム、パイプ、いわゆるで、重いです。
これらは、エンドポイントを分離されて、完全なビジネスコミュニケーションは、これらのマイクロサービスは、コマンド神経質パイプライン事業の一連のLinuxシステムのように張ら呼び出します。
過去の事業、我々は通常、システムをもたらす結合を検討し、依存関係の多様性を考慮してください。開発者はビジネスロジックの開発に集中することを可能にするマイクロサービス。
④展開
より独立しているように、ビジネスよりも、独立して展開する必要があります。しかし、これはまた、従来の開発プロセスは一定の責任を持つべき操作やメンテナンスのために開発された変更のある程度、になることを意味します。
⑤管理
従来のエンタープライズSOAのサービスは、高結合、管理が大きな困難になる傾向があり、チーム開発コストは比較的大きいです。
各チームは、異なるサービスを実現するための技術の彼らの政府の選択は、そのビジネス・ロジックを実現するために、彼らのニーズに応じて異なるテクノロジー・スタックを選択するかもしれないと思うことを可能にするマイクロサービス。
マイクロサービスのメリットとデメリット
なぜマイクロサービス?楽しみのために?そうではありません。ここで私は、ネットワーク上の利点から、より完全な回答を見つけることです。
-
利点は、各サービスに凝集十分である十分に小さい場合、コードは、容易にこのような特定のビジネス機能またはサービス要件と理解集束させることができます。
-
シンプルの開発、開発効率を向上させるには、ひたむきなサービスは一つだけのことを行うことがあります。
-
マイクロサービス小さなチームが別々に開発することができ、この小さなチームは2-5人の開発スタッフです。
-
マイクロサービスが疎結合され、サービスの機能的意義は、それが開発段階や展開の段階で独立しているかどうか、そこにあります。
-
マイクロサービスは、異なる言語の開発を使用することができます。
-
使いやすさとサードパーティの統合、マイクロサービスは、ジェンキンス、ハドソン、竹のように継続的インテグレーションツールを通じて、自動展開を統合するための簡単かつ柔軟な方法を可能にします。
-
マイクロサービスを簡単に修正し、維持、開発者が理解し、このような小さなチームは、より自分の仕事の成果を心配することができます。協力の価値を反映する必要はありません。マイクロサービスは、最新技術の統合の利点を取ることができます。
-
マイクロサービスは、単なるビジネス・ロジック・コードで、HTML、CSS、または他のインタフェースコンポーネントが混在していません。
-
各サービスは、独自のマイクロ記憶容量を有し、独自のデータベースを持つことができ、あなたが統一されたデータベースを持つことができます。
一般に、マイクロサービスの利点は、大規模システムの顔は、効果的に明確にするサービスロジックアーキテクチャの複雑さを減らすことができるということです。
しかし、それはまた、このような分散環境での一貫性に関するデータ、テストの複雑さ、運用・保守の複雑さなどの問題の多くをもたらすでしょう。
利点、欠点のすべての種類とマイクロサービス、そしてサービスのためのマイクロ組織の使用は何ですか?
①マーフィーの法則(システム設計)とコンウェイの法則(システム・パーティショニング)
コンウェイの法則は、50年以上前である前方マイクロサービスの概念を入れました。この記事コンウェイ、最も有名な言葉で:
設計システムは、これらの組織の通信構造のコピーであるデザインを生成するために制約されている組織。
中国の通訳はおそらく意味:システム設計組織は、そのデザインは、組織内の同等の生産、組織間の通信構造。
下の絵を見て、その後、Appleの製品は、マイクロソフトの製品設計について考え、鮮やかにはこの文を理解することができます。
②アーキテクチャの進化
アーキテクチャは、マイクロサービスのアウト進化している、あまりにも、とき大手テクノロジー企業から、ある程度大規模では、完全に進化したテクノロジーアーキテクチャシステムは、管理が必要です。
伝統的なチーム、そして、企画、見終えた開発計画を越える見つけるために一歩一歩をフォローしたい、プロセス指向技術、製品です。
当社の技術は、問題が何であるかをプロセス一度、見ているバックの問題は非常に時間がかかることがあり、製品を作ることです。
各チームは、彼らのプラットフォームを使用するために、製品の専門家が、計画の専門家、開発の専門家、運用・保守の専門家、彼らはその機能を公開するAPIを使用する方法、およびを持っていることをクロスファンクショナルチームにマイクロサービスアーキテクチャシステム、チームの組織のニーズを使用機能リリース製品。
マイクロアーキテクチャ技術サービスシステム
私は、ほとんどの企業で使用されますマイクロテクノロジー・サービス・システム・アーキテクチャを共有しましょう:
サービス検出
三種類に分け主流のサービス発見、:
まず、将来におけるプログラムの開発者は、私たちが対応するサービスを見つけることができます言葉を通じてドメイン名を持つ運用・保守、DNSサービスがあります。
欠点は、サービスが、負荷分散サービスの負荷分散されていないため、大幅なパフォーマンスの問題があるかもしれない、ということです。
第二に、それが一般的です。Zuulゲートウェイは、組み込みのレジストリに登録されている機能、サービスサーバを介して、各サービスを参照することができ、消費者が投票に引き続き、組み込みのロードバランシングコールサービスを使用し、サービスレジストリを対応発見しました。
欠点は、多言語環境は良くありません、あなたは、負荷分散の消費者のクライアントサービスの発見と開発を分離する必要があります。もちろん、この方法は通常、春クラウドで使用されています。
第三は、むしろ、同じプロセス内よりも、同じホスト上のクライアントとロードバランシングです。
この方法は、比較的に第一、第二の方法、それらの欠点を改良したものであるが、非常に操作および保守のコストを増加させるであろう。
ゲートウェイ
マイクロゲートウェイサービスとは何ですか?私たちは考える現実の生活に連絡することができます。すべての大企業は、ビルドアップされたエリア、警備員がたくさんあり、自分の一方的な建築面積を、持っています。そこに外国人労働者は会社にあり、かつガードが最初に取得するには、挨拶を築くだろう。場合
ゲートウェイの意味を理解することは困難ではないマイクロサービスにリンクされている現実の生活、:
次のようにゲートウェイが動作します
-
逆のルート:多くの場合、企業は、部外者が私たちの会社内で表示したくない、我々はゲートウェイのルーティングを逆にする必要があります。特定の内部サービスコールへの外部要求にについて。
-
安全認証:ネットワーク、セキュリティゲートウェイ機能を維持するために、このようなハッカーの攻撃などの爬虫類、できるだけ多くの悪意のあるアクセスは、あります。
-
制限ヒューズ:要求は多くのサービスを圧倒したときに、私たちのサービスが自動的に使用することができないサービスで、その結果、シャットダウンします。ヒューズを制限することで効果的にこのような問題を回避することができます。
-
ログの監視:我々は、レコードのログ情報を使用できるように、すべての外部の要求は、ゲートウェイを介してゲートウェイになります。
-
公開されたグレー、青、緑と展開。これは、スムーズな移行を発行できるようにする方法を指します。A / Bテストをその上にすることができます。
これは、一部のユーザーは、製品の特性Aを使用し続けてみましょう、一部のユーザーは、ユーザーがBに異議を持っていない場合は、その後、徐々に範囲を拡大し、製品特性のBを使用し始め、すべてのユーザーが先頭にBに移行されます。
Zuulオープンゲートウェイアーキテクチャ:
Zuulゲートウェイコアが実際にサーブレットで、すべての要求がZuulサーブレットスプレッドZuulFilterランナーを通過した後、配布、または3つのフィルタされます。
最初のトーク・アーキテクチャ図は、フィルタ、ポストフィルタ経路ルーティング、ルーティンググルービーに実装プレフィルターを使用して、それぞれ、一部を残しました。
通常、要求はプレフィルタ処理を介して第1のルーティングされ、一般的なカスタムJava梱包ロジックもここに実装されています。
ルートを達成するためのフィルタに対応するマイクロサービスコールを見つけることです。終了コール、応答来て戻って、我々は、ログ監査プロセスをカプセル化することができますポストルートを通じて、ポストフィルタを介してフィルタをルーティングされます。
最も重要な特徴はその3つのZuulゲートウェイフィルタであると言うことができます。図アーキテクチャの右部分は、ゲートウェイはZuulカスタムフィルタローディング機構が設計されています。
内部ゲートウェイ生産者 - 消費者モデルを自動的にフィルタスクリプトは、ゲートウェイリードZuul負荷運転に掲載されるであろう。
コンフィギュレーション・センター
以前は、開発者は非常に多くの隠された危険性があるだろう、内部のコンフィギュレーション・ファイルの開発ファイルを置きます。例えば、異なる構成仕様、人員をトレースすることができませんでし。
コンフィギュレーションへの大規模な変更を必要としたら、非常に長い時間を変更、人員をトレースすることができない、ので、製品全体に影響を与える、我々は結果を余裕はありません。
だから、この私自身の中心を設定!Baiduは今、オープンソース中央物流センターDisconf、春の雲Configを、アポロです。
今日、焦点は良いアプリケーション構成センターの品質、Ctripのオープンソースアポロ(アポロ)についての話になりました。
アポロの大規模物流センター、物流センターは、あなたは、コンフィギュレーション・センターのタイミングを同期させることができ、クライアントのローカルアプリケーションに対応します。アイドル機械物流センターならば、我々は、設定するキャッシュを使用します。
通信
通信については、一般的に市場がリモート呼び出しの2種類あり、私はテーブルをコンパイル:
監視と早期警戒
監視と早期警戒はマイクロサービスのために重要である、信頼性の高いモニタリングと早期警戒システムはマイクロサービス操作のために不可欠です。
一般的な監視は、次のレベルに分かれて:
インフラからエンドユーザーに、コントロールの層、オールラウンド、マルチアングルがあり、あらゆるレベルは非常に重要です。
全体として、マイクロ監視サービスは、5つのポイントに分割することができます。
-
ログ監視
-
メトリックの監視
-
ヘルスチェック
-
呼び出しチェーンをチェック
-
警告システム
①制御フレームワークは、
以下のチャートは、同社の最も監視アーキテクチャ図です。各サービスは、重要な情報を収集するエージェント、エージェントを持っている、それは切り離すために、MQの一部を分散します。
一方、着信ELK、メトリックの着信InfluxDB時系列ライブラリを記録します。そしてNagiosのように、あなたは、マイクロエージェントに定期的な検査情報サービスをスポンサーすることができます。
APMを監視②コールチェーン
多くの企業は、アリなどがホークアイ監視を持つことになり、コールチェーンの監視を行っている、猫のレビュー、モニタリングコールチェーンのほとんど(はい、I平均Zipkin)このようなアーキテクチャ:
コンテナは、Web要求がスパンに接続され、トレーサーを介して作成されます入力すると(アナログ電位遅延分散作業、モジュールは、さらに、HTTPヘッダによるような追跡システムのネットワークキット、の間でコンテキスト情報の転送を含みます)。
スパンは、分散操作のツリー上の正しい位置を示すトレーサ識別子を含むコンテキストを有します。
私たちは私たちのサービスコールチェーンのバックエンドにスパン図形のすべての種類を置くときは、動的呼び出しチェーンを生成します。
ここでは、市場でのコールチェーンといくつかのより多くの監視のコントラストは、次のとおりです。
ヒューズ、隔離、電流制限、ダウングレード
巨大なバーストトラフィックの面、大企業は、一般的に直列ヒューズを採用する(サービスを自動的にシャットダウンシステムが最大化の問題が発生することを防止することを可能にする)、他のサービスにリンクされたサービスを防止するための分離(隔離サービスおよびサービスにアクセスすることはできません予め設定された上限しきい値または今後のトラフィックを超えて全体マイクロサービスアーキテクチャの全体の負荷を確実にするために、予め設定された閾値を超えると予想される時間)、(これは、ユーザが単位時間当たり一定の数にアクセスすることを可能にする)制限、ダウングレード(重要または必要不可欠なサービスが正しく機能することができ、我々は重要または緊急サービスできないか、遅れたり、タスクのサービスを使用)対策。
ここではいくつかのHystrix実行中のプロセスのとおりです。
各マイクロサービスコールとして、(図の左上隅に)コマンドHystrixの方法を使用して、コマンドの同期を使用するか、ヒューズ決意回路(図中左側にダウンかどうか、に応答して、または非同期であろう。適切な外観)、ブレークがフォールバックを格下げ行くことである場合。
ラインが閉じているが、スレッドのリソースがなかった、キューがいっぱいの場合は、(図のステップ5)を制限する措置をとります。
完了した場合、実行が成功すると、その後、レスポンスを取得するためにrun()メソッドを行くが、プロセスエラーが発生した場合、その後、フォールバックダウングレード歩き続けます。
プラグはリンク全体の計算が健全なコンポーネントである上部サフィックス健康を有し、同時に、動作の各ステップは、それが記録されています。
コンテナおよびサービスオーケストレーションエンジン
仮想マシンから仮想マシンに物理マシンからのコンテナに、物理クラスタからOpenStackは、OpenStackのにKubernetesに、科学技術は常に変化し、私たちの認知は更新されませんでした。
私たちは、オペレーティング環境のすべての比較的独立したが、この時点で仮想マシン、仮想マシンが、完全ではないに多少似ている上に、それはある、コンテナで始まります。
新しい仮想マシン内の仮想マシンの仮想ハードウェア、カーネル(つまりオペレーティングシステム)だけでなく、ユーザ空間のパッケージには、仮想マシンが物理デバイス上で実行する「ハイパーバイザー」を使用することができます。
ハイパーバイザ仮想マシンは、典型的には、いくつかの点での結果は、ハイパーバイザがオペレーティングシステムであると考えることが「ベアメタル」ハードウェア・システムに搭載され、に依存します。
インストールされると、ハイパーバイザ、システムを使用することができる仮想マシンのインスタンス間でリソースの割り当てから計算することができ、各仮想マシンは、オペレーティングシステムと負荷(アプリケーション)を得ることができます。
要するに、最初の仮想マシンは、仮想物理環境を必要とし、完全なオペレーティングシステムを構築し、その後、ランタイムの層を構築し、アプリケーションプロバイダを実行します。
コンテナ環境は、ホスト・オペレーティング・システムがインストール、上記ホスト・オペレーティング・システム(通常のLinuxバリアント)に設置直接コンテナ層(例えばLXC又はLibcontainer)を必要としません。
コンテナ層をインストールした後、容器は、システムの利用可能なコンピューティングリソースの中からインスタンスを割り当てることができ、そしてエンタープライズ・アプリケーションは、コンテナの中に配備されてもよいです。
しかしながら、各アプリケーションコンテナは、同じオペレーティングシステム(OS単一ホスト)を共有します。コンテナは、アプリケーション固有の仮想マシン、直接ホスト・カーネルのセットとしてインストールすることができる、仮想マシンのアブストラクションレイヤは、より少ない、より軽量、高速起動以上です。
小さいの例と作成し、より速く移動する-それは、各アプリケーションに割り当てられた別のオペレーティングシステムを必要としないため、仮想マシンに比べて、容器は、リソース使用のより高い効率を有します。この手段は、仮想マシンと比較して、単一のオペレーティング・システムは、複数の容器を搬送することができること。
同じハードウェアデバイスの中で、あなたがコンテナインスタンスの数を多く展開することができますので、クラウド・プロバイダーは、コンテナ技術に非常に熱心です。
加えて、容器は、移行が容易であるが、唯一の移行オプションを制限することになる互換性のあるオペレーティングシステムカーネルを有する別のサーバに移行することができます。
仮想マシンまたは仮想ハードウェアカーネルパッケージと同じではない容器ので、その結果、各容器は、容器の複数のセットは、同じホスト・システム上で実行することができるように、ユーザ独自の空間的分離を有します。
私たちは、コンテナー間で共有、オペレーティング・システム・レベルのアーキテクチャを実現することができるのすべてを見ることができる、唯一の必要性は、独立したバイナリとライブラリを構築することです。
このため、それは非常に良い、コンテナの軽量特性を有しています。私たちの最も人気のあるコンテナがドッカーです。
①コンテナの配置
仮想マシンの過去には、どのようにコンテナ船の時代、それを管理するために、仮想化によるOpenStackのクラウドプラットフォームを管理することができますか?コンテナのオーケストレーションエンジンを見ることが必要です。
Mesosアパッチ: Mesosはマスターに基づいて、スレーブ・アーキテクチャフレームワークは、リソースを使用する方法を決定するために、マスターマシンを管理する責任があり、スレーブマシンは、定期的にフレーム情報を、その後のマスター、マスターに状況を報告します。マスターは存在のもリーダーZK、ので、非常に入手可能です。
ここではアーキテクチャ図は以下のとおりです。
Kubernetes: Kubernetesは、オープンソース・コンテナ・オーケストレーションエンジン、最近非常に暑いです
Kubernetesのデザインと機能は、実際にはLinuxのように階層化アーキテクチャ、私たちは各Kubernetes内部ノード、kubelet管理グローバルグローバルポッド、および1つ以上の容器を運ぶ各ポッドについてお話しましょうKUBE-プロキシ剤であり、ネットワークの負荷を担当してバランス。
Kubernetes外部ノードは、それが対応する制御管理サーバで、各ノードは、統一された管理とスケジューリングの割り当てを実行する責任があります。
②サービスグリッド