話は春クラウドのコアコンポーネントを理解していない場合、私はこの物語の白をコンパイル

これらの日は、ああ、本当に暑いなる海藻が優れている浸ることができます。プレイが本格的にし、突然、私は最後に...黒い目を水に回転を回転させてきた、底流の足につまずきました。

サークルでラウンド行く愛の魔法。私が渡りました。

海に隣接し、わずか数キロは、人々が接触することはないと、声を聞くことができます。世界はバラバラにカットする小さな王子、鍋の混乱です。

豊かな国がよく売れ豚やマウスなどとして大きな成長;現実があるため多年生戦争の私の国は、多くの女性を残して、他の当事者は、チャネルを介して取得する必要が結婚ということです。彼らは、加熱のために使用され、皮膚のマントにすることができます。そのため、通信が避けられません。

:現実はこれです
、ステートBの状態は、遊牧民は、多くの場合、険しい山道に埋もれぼろのような宝の地図を、保持する場所を知りません。
二、B国、C国があいまいな言葉を吐く理解していない、彼らは苦痛であり、そしてそのほとんど見て走ったが、その実際にはBS-INGを見つけた感じ。
三、CのDに販売国を知っている国で生産カボチャ、残りはE国が樹皮を食べ始め、地面に腐っています。
4つが、F国は知られて作られたが、全方向の難民の流入ので、彼らは非常に困窮しているしています。その中でも、難民G国は、ほとんどが悪いです。
第五に、無駄に他のメッセンジャー大陸プレート、5年がありました。詩のために、土地の神のお粥の状態を参照してください:「TM本当にめちゃくちゃ」

同情の人間を横切る人として人を残しました。xjjdog:将来の世代が私の名前を覚えているように、私は、この世界に青写真を残したいです。それと同時に、私はなぜ私がこのような強力な自信を持っている、と思います。

「思い出」セグメントは、21世紀に私を持ち帰りました。

まず、私は技術的な話について:単一のアプリケーションを

私達はちょうど実際には、その複雑ではない、サービスを開始しています。私は内部の小さなプロジェクトでは、私のアプリケーションで、私のコードは、私の知性、唯一のマシンの構成が非常に低いこのすべてを持っています。私はそれに従事していたので、ので、私のプロジェクト名が呼ばれますjisuanji一部の人々はあまりにも、私は中国のピンインでプロジェクト名をやると言います。私は私がそのように命名された、聞いていません。私はまた、パブリックモジュールと呼ばれるggパスワードフィールドを呼び出し、mmチューブがそれを着用し、。

はい、次のチャートを見て、それは簡単です。プロジェクトでは、このステップ、小さな成功を行うためにnginxの負荷分散を使用するように生きることができます。

この時間は、すべてのコードは、全体で、どのようなユーザーアクセス、それに私を指示します。

第二に、私は2つのサービスに分割しました

私は少しつ以上の人々が、私は多分それは同じような考えを持つと呼ばれ、プロジェクトが成長している訪問し、私のようなことがあります。私自身の開発スピードは、心のアイデアの短い落下、それがサービスを分割するために個人を募集する時間です。

それほど遠くない取り出し、その始まりは、私はjisuanji2つのサービスに分割。どこでサービスB、ノードの唯一の展開、それはあまりにも多くの圧力ではありませんので。それでも、私はサービスノード、本当に心痛を展開する3台のサーバを購入しなければなりませんでした。私はケチ男、もちろん、共有データベースです。時々機械圧力ビット大きいが、まだの人は死にます。

この時間は、私は選択に直面したサービスBが行うサービスにアクセスする方法?
私はいくつかの時間、それの最初の考えのために従事されてWEBSERVICEので。しかし、このことは、私は同様にHTTP経由でアクセス快適かもしれないが、あまりにも重いです。HttpClientを、またはOkHttpことで、私のサービスAは、今直接サービスBにアクセスするためのHTTPリクエストをシミュレートすることができます

二人のチームは、私のプロジェクトTucao始めたとき。難しい4、技術革新; 1、複雑さはコードが真剣に連結する、高すぎる、私たちの脳をラッキング2、マルチ技術的負債は、洗濯物のリストを要求する; 3、コードは、糞の塊標準化ではありません。ここに私のプロジェクトの罪悪感は、彼が列挙されたものです、数千行のクラス...

何のために?サービスから私Tucaoので、二つに分割します。すべての私の人々は非常にオープンマインドになった後でも何百ものサービスを分割することができるようにするために、私は、この気持ちを我慢します。

第三に、乱成一锅粥

このような過去6ヶ月間を見ると、少年は、私は数十にサービスを削除しました。私の仲間は、システム構成図を見せてくれた置くとき、私は無知な力を指示します。私は9つのサービスを拾って見ることができ、マップを描きました。

まず、事業分割を行いました。このような決済サービス、ビジネスの受注、ユーザーセンター、ショッピングセンターとして、別々のチームを設定しています。各事業セグメントは、異なるサービスに分割されました。

間では、次のように変更した:
まず、小さなパートナーは、一般的なコールのHttpClientコンポーネント自身の負荷分散戦略を書きました。
第二に、別の小さなパートナーがあり、習慣がいるProtobuf、そうgRPCを選びました。
第三に、SOAはまだない市場があることが証明された、インタラクティブなWebサービスいくつかのサービスの導入があります。
第四に、一部の人々はRMIを使用したい、私は腹部に、拒否権、死産を発見しました。
第五に、それぞれが新しいサービスを構築し、我々は、これはうまく知ら秀でるう、見Excelを更新する必要があります。

今、システム全体は、単にグロテスクです。インタラクティブな形式が欠落していないものを、通信のどのような手段です。いくつかのjarパッケージの導入に最も恐ろしいDサービスを取り、光通信モジュール、20。アプリケーションの規模であれば、数千に...私の神...

さらに悪いことに、それは最終的に連鎖反応があるだろうか知っていないため、ライン上で非常に多くのサービスを、すべてのモジュールは、怖がっているということです。

これは、スーパーフライ夏を呼び出すための時間です。ああ、いや、マイクロサービスを呼び出します。

第四に、マイクロサービスストライキ

現在までSpringCloudされ、最もホットなマイクロサービスフレームワーク。特定のコンポーネントの保守のためのが、Netflixの会社は、多くの場合、それを逃すが、一部のコアコンポーネントは、まだ非常に古典的です。

1、レジストレーション・センター:ユーレカ

サービスAは、サービスBを見つけるために、どのように、多くの方法があります。しかし王Liは知っているので、彼は最終的にxjjdogで見つけることができるが、いくつかのトラブル;たとえば、あなたが小さな町に住んでいる、あなたはパロは彼を知っているかもしれませんが、マイクが知っていることができなかったことxjjdog方お願いします。

あなたは簡単にはいxjjdog誰依頼する町で人を引っ張ることができます。あなたは魔法のように、小さな本を思い付くあなたが知っている人、それらを教えてくれます。あなたが最後にパスの脳死スタイルを尋ねるときに誰もがxjjdogを知っています。

上記は、ゴシッププロトコルであることを特徴とします。大きな口がそうであるように最終的に、あなたは、お互いを知ることができます。例えば、シャオ鄭は赤ちゃんではなく、あまりにも多くの時間を持っていた、人の町全体は、レコードの本の中で子供を置きます。

このように、サービスは、通信を完了させるために、お互いを知ることができるようになります。


残念ながら、これは素敵ではない、それは長い時間がかかり、町の東の端の西端から行ってきました。この時点で、おそらく小さな鄭Gangshengの子供の先天性疾患で死亡しました。当社は、情報と効果的な方法のより高い濃度を必要としています。

これは、情報が権威あるセンターを必要とします。SpringCloudシステムでは、最も一般的なレジストリはユーレカです。いずれかのサービスが開始された後、それはユーレカレジストリに自分自身を登録し、死のサービスは、ユーレカに通知する時期。

このように、サービスB'reが探していたサービスは、ちょうどそれにユーレカサーバーを要求したとき、それはすべてを知っています。

そのためには、ワークロードの一部を持っていなければなりませんでした。私たちは下の図を見てみましょう。この登録操作は、完了するために、ユーレカクライアントと呼ばれるコンポーネントです。サービスの起動とシャットダウン時間は、このコンポーネントを介して自分自身を販売する、とあなたはサービスにサービスBを呼び出したいとき、直接にユーレカサーバーを尋ねました。結果を得るために、サービスAの後、それがローカルレジストリ内のキャッシュになります。

あなたはコピーを考えることができます。ユーレカServerが死んだ後だから、それはBを見つけるために、サービスのサービスには影響しません。

2、負荷分散コンポーネント:リボン

今、質問が来ます。例のリストには、サービスBの後にサービスを取得するには、2を発見しました。

10.0.0.12
10.0.0.16
复制代码

その後、トラブル、機械チューンそれ?これはSpringCloud役割リボンコンポーネントです。実際には、Round Robinそれは汎用のコンピュータ用語です。これは、最も一般的に使用される負荷分散戦略で、要求が均等に背後にある各サーバーに割り当てられます。

リボンの仕事は、次の4つのことを行うとき:
1は、ゾーンおよび負荷の少ないユーレカサーバー、中に好みが接続します。
ユーレカ、フィルタリング・サービスおよびインスタンスのリストから2、定期的な更新。
図3は、負荷分散ポリシーに従って、レジストリからアドレスの実際の例を選択してください。
図4は、RestClientによってサービスへの呼び出しを開始します。

これは、リボンの後ろに見ることができ、またはHTTPプロトコルが相互に作用するために使用しました。次のコードを見て、あなたがリモートサービスを実装直接呼び出すことができます。

@Bean
@LoadBalanced
RestTemplate restTemplate(){
    return new RestTemplate();
}
...

 @Autowired
RestTemplate restTemplate;
public String test() {
    return restTemplate.getForObject("http://test-service/test", String.class);
}
复制代码

リボンのルックスをフィルタリングしtest-serviceて、インスタンスの対応するアドレスに置き換えます。

ポリシー :リボンだけでなくポーリング戦略を提供し、他のような、ある
ランダムランダム、1
2、加重応答時間
3カスタム、

ポーリング、RoundRobinRuleクラスの最終的な選択ロジックを取ります。

private int incrementAndGetModulo(int modulo) {
        for (;;) {
            int current = nextServerCyclicCounter.get();
            int next = (current + 1) % modulo;
            if (nextServerCyclicCounter.compareAndSet(current, next))
                return next;
        }
}
复制代码

3、生まれコードを簡素化します装います

あなたが見ることができる、リボンは、自分自身のHTTPリクエストを構築するHTTPリクエストをシミュレートする必要があり、その後RestTemplate、かなり面倒な手順を使用して、他のサービスに送信されます。そして、不安の戻り値の型は、だけでなく、どのような意味を表現していません。

実際には、リボンの道を通じて、我々はマイクロサービス間の通話を完了することができました。しかしSpringCloud開発言語はJavaは、その力グリッドを反映させるために、より高度なパッケージになるはずです。

Javaの動的プロキシメカニズムのおかげを装う、最終的なパッケージの単純な呼び出しインターフェースのメソッドのセットは、独自のHTTPリクエストを構築する必要はありません、抽象メソッドとして定義されている他のサービスを呼び出す必要があります。

まず、動的プロキシクラスを作成するには、ベース@FerignClient注釈、動的プロキシを装います。次に、あなただけの方法でインタフェースを呼び出し、あなたは上記のリボン呼び出しパラメータを構築することができ、このプロセスが自動的に表示されます。最後に、リボン構成要求は、実際の呼び出しによって開始され、アセンブリにより反射された値を返します。

だから、最終的にはリボンを経由して呼ばれるように、皮膚のみを装います。私の意見では、一つの成分にリボンと装うは、合理的です。

彼らはそれがRPC(リモートコール)と呼ばれる、より一般的な用語を持っています。

図4に示すように、異常な傘:ブレーカー

支払い要求の下には、例えば、ケースの話は穏やかではない、サービスが反応するであろう。

すべての真の支払い要求は、他の4つのサービスを呼び出します。、より良い自社製品、マーケティングビジネスコールを促進するために、いくつかの推奨情報を取得し;そして、リスク管理サービスは、いくつかのバリデーションルールを行います。まず、認証サービスを支払うために、ユーザの権限を取得し、最後に、重合決済サービス、本物の呼び出し、支払い。

その中でも、実際には、不要なマーケティングビジネスです。ユーザーが最初にすべてのアウトを過ごすすることができ、それが私たちの最優先事項です。

システム障害や負荷の問題のために、次のシナリオでは、マーケティングビジネスを考えてみましょう、使用できないか、タイムアウトになったの主要な領域があります。その後、すべての要求は、マーケティング情報コードの取得で立ち往生しています。

示されているように、認証制御風が渡されています。バイパス機能なので:マーケティング事業、支払いが生じすることはtrueにすることはできません。誰かが支払い要求を呼び出した場合は、この時間は、あなたが支払い要求にも仕上がっています。

彼らはこの小さなコードのマーケティングセクションで立ち往生してしまうので。

だから、リンクではない重要なビジネスのマーケティングサービスプロバイダのために、いくつかの時間のためにそれを分離、問題が発生した場合にそれを作るための手段がなければなりません。

コンポーネントは、この機能のために責任があるHystrixと呼ばれています。

思考の私たちのプログラムでは、これがあれば条件です。

if(服务发生问题){
    return "暂时不要处理";
}
复制代码

しかし、我々はそうビジネスコードでエンコードすることができません。だから、各サービスのHystrixは、スレッドプールを開設し、サービスのこれらの問題の動作を制御するために、より複雑なルールがあります。例えば、2分で、そこに立ち往生されてではなく、デフォルトのダイレクトマーケティングの業績に戻ります。

このプロセスは、インフレーションと呼ばれます。電源と同じように、問題外、第1ヒューズを切断、燃焼させるためにアプライアンスを取ることはありません。

5、また、このゲートウェイゲートウェイ:zuul

APIゲートウェイは逆で路由、それは内部の詳細を遮蔽し、呼び出し元に統一された入り口を提供します。ゲートウェイは、実際には、たくさん过滤器のジオメトリの、とは、機能のビジネス関係のない断面のシリーズを達成することができます。

おなじみの春AOPの機能を知って、ルートが分散サービスのためのAOPです。

私はそれの下でゲートウェイまたは義務をお話しましょう。単純なリスト数:
1、安全認証。これは、開発の重複を避けるために、統一された認証および承認機能を提供します。
2、融着、電流制限。サービスの問題のために、発泡操作を行って、トラフィックの予測は、アクセスを制限します。
3、監視をログに記録します。統一された入り口の流れ、トラフィック分析とモニタリング。
図4に示すように、一貫性のあるインタフェースを提供するために、内部および外部の詳細を遮蔽します。
図5は、グレースケールを達成します。テストの目的を達成するために、転換を達成するためにカスタム戦略を使用します。

ゲートウェイの場所は、それは一般に、図に従います。

私たちは、それがゲートウェイとして使用することができ、我々は通常、nginxのを使用し、見ることができます。しかし、マイクロサービスのためnginxの設定が面倒である、です。nginxのは十分に強力ではありませんが、彼らはシステムではないので、(例えば香港など)統合費用があると言うことではありません。

zuulない場合、およびその他のコンポーネントは、それが家族のようであるSpringCloud。家族はもちろん、特別なケアになります。Zuul自体は、一連のフィルタを介して外部要求した後、真のサービスを実現します、サーブレットです。上記ヒューズが高集積化されます。

6、重合図。

物事をより明確に上記の主要なコンポーネント、と。私たちは、以下の方法で、グラフの上に置きます。

私たちは、あなたがより簡潔なマップを得ることができ、それを少し簡略化します。:唯一の3つの重要なポイントに必要見ることができ
、デフォルトのコンポーネントはユーレカで、1、サービスレジストリ、すべての情報サービスの一元管理を。
サービスにサービスBを呼び出す方法2、RPC、ネットワーク通信コンポーネント、でSpringCloudでは、リボン+装うです。
図3は、ゲートウェイは、分割がどのようにサービス・インターフェースを公開し、最終的には人々が見て見て。デフォルトのコンポーネントがZuulです。

意味をなします

物事混沌プロセスは、最も効果的な方法は、中央集権と分権化です。コアは、集中型と分散型の許可や承認、または失敗する運命にあります。認可は、あなたが私のアプローチで権力者に同意する必要があり、上にあるので、私はこのシステムを受け入れるようにそれらを説得するために、言語を使用して理解する必要があり、アイデンティティ、次善のは、人々の不満からであるが、発行します改善策、その権威のプロ。

マイクロおよびサービス、強制的に自然に見える新しい意味を与えて、古い概念のいくつかを与える必要があります。例えば、私は文化の統合と呼ばれる統一された言語を入れて、それはいくつかの背の高いです。

第二は、十分に細かい取り壊しの責任です。その職務を遂行するために、それぞれの場所で人々を細かくすることができるように十分ファイン。

もう一つのポイントは、全体のプロセスは、体系化することができます推測することができます。一つのことは予測不可能な結果を​​持っている場合は、それを行うのは冒険家です。

いくつかの方法

世界の予備的な理解を行うために、私は山や川の資源統計部門は予備調査、ルール描かれたマップを行って設定します。社会関係との複合体の現在の状況を徹底的に行います。私はそれが嫉妬と憎悪の宝の地図のコレクターだった、書籍には、この情報を公開します。彼らは、未知のコーナー、汚い行為の中に隠れます。

私はまた、各属国の言語を統一感触の方言を、選びました。原住民の強い反対により、何度における実施の過程で、彼らはそれを修正することを拒否します。私はそれがはるかに高速である、実施後、数に強制された後に斬首しました。

すべての重要な商品の場合は、集中制御しました。世界は貴重な金が、食べ物ではないので、私にも簡単にアクセス道路や普及取引センターを建設しました。それ以来、非常に少数の臨時餓死します。この部分以来、私のコントロール内にあるので、それはスムーズに行われます。

Gは、比較的頑丈な国の民族で、暴力が頻繁に発生します。これは必然的に、最初から、この国は家畜化することは困難です。幸いなことに、彼らは、システムがダウンサイクルすることができ、表示されません。少し前までは、国は、他のすべての国のボイコット、G-国の国民は、エントリを禁止し、Gの主要なイベントで開催されました。しかし、時間は痛みの薬を解決することです、私はそのような制限は長くは続かないだろうと推定しています。

しかし、ドロスはまだそこにあります。いくつかの場所は、川や湖があり、弾圧があります。しかし、このようなドロスは、私は他の人が見たいと思っていません。メッセンジャーを訪問し、あなただけそれらを運命づけられている、ライブや仕事、歌や踊りを見ることができるようにとの接触の下をさせない、またはファウルなしで公正で現在の状況を見つけるためにすべきです。

外交官や演奏の喜びは、私はとても嬉しく思います。

終わり

私は明らかにシステムの調和のとれた自然を構築するためには、コストの多くを費やしていたことを知っています。これは、1つの部品ではなく、常に完璧に実行されます。また、この一見平和な全体的に、それは無数の他の頭痛の繁殖地であるが、それは別のトピックです。

それだけです。私がしたすべては、すべて私の予想では、ちょうどに:私の後ろ際に新たな機会、私は、壮大なターンを静めることができました。

これが私の一日は、既製、通過することができることです。


十分ではありませんか?マイクロチャネル公共番号xjjdogに焦点を当て、より多くの仲間と乾いた商品があります。

おすすめ

転載: juejin.im/post/5d4296ffe51d4562043f5682