マイクロサービスの概念
従来の単一の大規模なプロジェクトの短所:
- システムより大きく、より複雑、かつ開発することは困難
- 展開の速度が遅いです
- アップグレードすることは困難で、メンテナンス
マイクロサービス:
- 小:マイクロサービス機能部の体積が小さく、大項目は、マイクロスプリット複数のサービスであります
- アローン:サービスは別の、メンテナンスを展開する必要がある、別のJVMプロセスで実行されている、独立して、サービスが書き込みに異なるプログラミング言語を使用することができ、あなたは別のデータベースを使用することができます
- ライト:サービス間の通信メカニズムは、軽量であります
- 歌:サービス間の疎結合
マイクロ設計原理のサービス:
- シングル責任者:各サービス事業ちょうどこのモジュールは、他のビジネス・モジュールを扱っていません。
- サービス自律性:各サービスが独立し、個々の開発、テスト、展開です。
- 軽量通信:サービスの開発は、技術上の制約の種類を受け入れない可能になり、軽量、クロスプラットフォーム、クロスランゲージ、サービスとIFの通信。
- 明確なインターフェース:多くの場合、簡単にインターフェイスのアップグレードを変更しないで、インタフェースを設計するための設計サービスの間のインタフェースは、より一般的な、より包括的な検討、フォローアップメンテナンスだったとき、サービス間でお互いを呼び出します。
マイクロサービスの利点:
- 簡単に、開発、保守、および優れたスケーラビリティします
- プロジェクト全体の部分的な再デプロイメントを変更することなく、高速に起動します
- テクノロジースタック無制限
マイクロサービスの欠点:
- 維持、複数のサービス、高い操作および保守要件を展開するには
- 分散型のすべてを使用することなく、単一のアプリケーションは、サービスは一般的に開発者のためのマイクロ分散、高い技術要件を使用する必要があります
- インターフェイスの高さ調整コストは、あなたが他のマイクロサービスを呼び出すためにそれを変更する必要があり
- コードの重複とより。繰り返し呼び出されるモノマーのアプリケーションコードツールをラップ、プロジェクトを直接呼び出すことができ、サービス他のマイクロツールを呼び出すことはできません、各マイクロサービスとは独立している、ツールはサービスにコピーする必要があります。
一般的なマイクロサービスフレームワーク
- 春の雲
- ダボアリババオープンソースのフレームワーク
差分springbootのspringcloud
- springbootボックス(アマチュア)のうちマイクロサービスの多くは、デフォルトの設定を持って、春のカプセル化され、簡単な変更を使用することができます
- springcloudは、自分を書くために多くのコードを必要とし、プロのマイクロサービスフレームワークであります
springbootは、共同展開することspringcloud。
どのようにマイクロサービスを呼び出すためのフロントデスクを訪問するには?
たとえば、クエリの注文情報、マイクロオーダーのサービスへのアクセスは、時々アクセス複数のマイクロサービスに必要です。
通常、ステートレス異なるサーバー上に展開マイクロサービス、(そのようにログインしているかどうかなど)は、ユーザのステータス情報を保存しません、ユーザーの権利をチェックし、ユーザーのステータス情報を格納する場所を見つける必要があります。
一般へは、マイクロAPI Gateway経由でサービスにアクセスします。
APIゲートウェイは、実際には、プロキシ、APIゲートウェイへのすべてのマイクロサービス要求のプロキシは、に対処するためにマイクロAPI Gatewayによって適切なサービスを呼び出します。
APIゲートウェイは、ユーザーの権限を確認し、フロントデスクを呼び出すための統一されたインタフェース、およびプロテクトユーザーのステータスを提供します。
API Gatewayは、ちょうどタイトルで、複数の実装がありますMVCフレームワークでは、かもしれNode.jsのサーバであってもよい、別のかもしれません。
どのように通信するサービスの間で(お互いを呼び出しますか)?
サービス間の通信の2種類があります。
(1)同期呼び出し
シンプルで強い整合性が、多くの呼び出し階層、特に質問、貧しい人々の経験、呼び出しを受けやすい(サービスAがサービスB、Bのサービスだけでなく、再帰のように、他のサービスを呼び出すための呼び出しますが)。
同期呼び出し2つの一般的な実装技術があります。
- REST。シンプルで柔軟な、クロスランゲージ、(限り、あなたはSDKパッケージHTTPを呼び出すことができるよう)クロスクライアント、広く使われている、HTTPベース。springbootの使用はRESTです。
- RPC。交通より、効率的で安全で制御可能な、しかし、これらの利点を示すために、統一標準、統一サーバフレームワークを開発する必要があります。ダボは、RPCを使用しています。
さまざまな状況で広く互換適用するには、さまざまな状況を処理するコードの多くを提供し、portability'd上がる、一般的のような(REST)でパフォーマンスする必要があります。
特定の状況、移植性に悪いが、レバー(RPC)のパフォーマンスのための環境の要件、。
(2)非同期メッセージ
より多くの分散システムに慣れる、カフカが住んでいたことは、非同期メッセージング技術です。サービス間の結合を減らすことができ、我々は、呼び出し先の性能を保証することができます。
同期メッセージ:ママええ、サービスの多くは、私を呼び出して、私は乾燥をステップアップする必要があるが、力を高める - 強度が直接台無しにされて巻き上げるすることができます。
非同期メッセージ:のようなDafanおばさんの食堂、待って並んでいたどのくらいのチーム、まだのんびりとDafan学生(他の通話サービス)の行に関係なく - 私はダウンさせたいが、何もありませんA。
価格は支払った:データの一貫性が悪いです。
あなたがやってゆったりとしたのだ、人々があなたを待って、そしてそのデータは他のサービスによって変更されることができる間、長い時間を待って、矛盾しています。
だから、多くの場合、データの一貫性を確保するために、同じデータモジュールを記述します。
サービス検出
通常、どのようなサービスのコピーを作成し、複数のサーバー上に展開、分散サービスを実現します。
ノード(サーバー)は、に対処するために送信するノードのノードを、変更された場合の動作時には、一部のサーバーがオフラインであってもよいし、大きな負荷が増加しますか?
一般的な手法は、飼育係である、いわゆるサービス・ディスカバリ、要求を処理するために、このノードを使用して、ノードを検索、検索。
分散管理のサービスを行うために飼育係使用します。
サービスプロバイダ(各サービス・ノード)飼育係に登録された情報、及びリアルタイム更新(によって提供される機械のサービスアドレス)。これらの飼育係登録情報に基づいて、算出する具体的なアルゴリズムを呼び出す要求、発見されたサービスを処理するために呼び出されるどのノード決定。
飼育係は、クライアントまたはサーバサイドのプットを置くこと?
- サーバ側に置く:フロントデスクに簡単で、透明サービス情報を、中小企業ははるかに使用しています。
- シンプルな構造、柔軟な拡張は、唯一のサービスレジストリに依存しますが、クライアントのアドレスが、はるかにマイクロサービスフレームワーク(例えばダボなど)、大企業を支援する必要性を、すべてのサービス、技術的な難しさを維持するためにクライアントを入れてください。
訪問上昇過程
ビューは、サービスへの呼び出しを追加し、上昇、対処しなければ、ノードの負荷が大きすぎると、それはサービス受信へのすべての呼び出しに影響します。
一般的なアプローチ:
- 再試行メカニズム
- 限定的
- ヒューズメカニズム
- ロードバランシング
- ダウングレード(ローカルキャッシュ)