第三に、高可用性
1、直接ダボに接続された飼育係ダウンタイム
現象:飼育係登録センターのダウンタイムは、あなたがダボ公開サービスを利用することができます。
理由:
丈夫
- 監視センターのシュートダウンは、使用に影響を与えるが、サンプリングデータの一部が失われていません
- データベース遊び人離れた後、我々はまだ、キャッシングすることにより、サービスのレジストリリストクエリを提供することができますが、新しいサービスを登録することはできません
- レジストリピア・クラスタは、Renyiyitai一顧オフした後、自動的に別のものに切り替わります
- すべてのレジストリ撃墜した後、サービスプロバイダやサービスの消費者はまだローカルキャッシュを介して通信することができます
- サービスプロバイダステートレス、Renyiyitaiシュートダウンした後、影響はありません。
- すべてのサービスプロバイダが離れてぐずぐずした後、サービスコンシューマアプリケーションを使用することができ、かつ無制限の再接続は、サービスプロバイダの回復を待っていません。
高可用性:設計により、システムがサービスを提供するための時間を短縮することができます。
ダイレクトコネクトはダボレジストリの場合には適用されないサービスを呼び出すために使用することができます。
2、ダボのロードバランシングクラスタ構成
クラスタのロードバランシングは、ダボが均衡戦略をご用意しております場合は、ランダムランダム通話をデフォルト。
@Reference(loadbalance = RandomLoadBalance.NAME)
ロードバランシング戦略
ランダムロードバランス
ランダム、デフォルトの重みに従ってポリシーは、ランダムな確率を設定します。
衝突断面積の高い確率が、コール量より大きい、より均一に、より均等に分散するだけでなく、重量上の確率権者を支持して動的に重みを調整します。
ラウンドロビンロードバランス
ラウンドロビンラウンドロビンで重み付けは、条約の比率をリセットします。
以下のような問題の遅い蓄積プロバイダーが存在要求:その中にカード上の第2の要求に転送ときに、第2のマシンは、非常に遅いですが、ハングアップしませんでした、時間をかけて、すべての要求は、第二段階でカードに転送されます。
LeastActive LOADBALANCE
アクティブコールの最小数は、同じ乱数が違いの前と後に、アクティブコールカウント手段の数アクティブです。
だから、あまり遅いプロバイダは、コールが遅くプロバイダカウントになります前と後との間に大きな差があるため、要求を受信します。
ConsistentHash LOADBALANCE
ハッシュ一貫性の要求、同じパラメータは常に同じプロバイダに送信されます。
ステーションは、プロバイダにリンクされている場合は、元の要求は、他のプロバイダに等しい株式で、うではない劇的な変化原因、仮想ノードに基づいて、プロバイダに送信しました。アルゴリズムを参照してください。
デフォルトでは最初の引数のハッシュ、変更したい場合は、configure
<dubbo:parameter key="hash.arguments" value="0,1" />
160部、修正したい場合は、configureとデフォルトの仮想ノード
<dubbo:parameter key="hash.nodes" value="320" />
3、統合hystrix、ダウングレードとサービスヒューズ
1、サービス低下
サービス低下とは何ですか?
場合は、サーバーの圧力サージ、実際のビジネスの状況に応じて、いくつかのサービスおよびページの流れに対処するか、政策プロセスを変更する簡単な方法を持っている、コアトランザクションや効率的な操作の正常な動作を保証するために、サーバーのリソースを解放しません。
あなたは一時的にサービス低下機能によって非クリティカルサービスエラーをブロックし、ダウングレード後に返品ポリシーを定義することができます。
レジストリに動的構成をカバーする書き込みルール:
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181"));
registry.register(URL.valueOf("override://0.0.0.0/com.foo.BarService?category=configurators&dynamic=false&application=foo&mock=force:return+null"));
どこで:
mock=force:return+null
消費者サービスは、メソッドの呼び出しが直接リモート呼び出しを開始していない、NULL値を返し表します。呼び出し側のサービスに重要な影響を保護するために使用することはできません。- また、に変更することができます
mock=fail:return+null
障害が発生した後、呼び出されたメソッドの消費者サービスを表し、その後、ヌル値を返し、例外をスローしません。とき不安定、発信者のサービスへの影響を容認することは重要ではありません。
ではダボの消費者側で動作
2、フォールトトレラントクラスタ
クラスタの呼び出しが失敗した場合、ダボは、フォールトトレラントソリューション、デフォルトのフェイルオーバーの再試行をご用意しております。
クラスタフォールトトレラントモード
フェールオーバークラスタ
デフォルトモードでは、障害が発生した自動切り替えに失敗し、他のサーバーを再試行してください。通常の読み取り操作のために使用されるが、再試行がより長い遅延をもたらすでしょう。あなたは、することができます
retries="2"
(最初は除く)の再試行回数を設定します。再配置され、以下のように番号を再度:
<dubbo:service retries="2" />
若しくは
<dubbo:reference retries="2" />
若しくは
<dubbo:reference> <dubbo:method name="findFoo" retries="2" /> </dubbo:reference>
フェイルファーストクラスタ
のみ通話を開始するためのクイック失敗は、すぐにエラーが失敗しました。一般的に使用されるの非冪等な新しいレコードとして書き込み操作、。
フェイルセーフクラスタ
セキュリティ障害、異常、直接無視。監査ログを書き込むことが一般的に動作可能。
フェイルバッククラスタ
自動回復は、背景レコード失敗した要求、再送タイマを失敗しました。典型的には、メッセージ通知動作。
クラスタをフォーク
長い成功の復帰などとしてあること、並行して複数のサーバを呼び出します。通常、読み出し動作の高いリアルタイム要件のために使用されるが、より多くのサービスは、リソースを無駄にする必要があります。
あなたはできる
forks="2"
並列の最大数を設定します。放送クラスタ
すべてのブロードキャスト・プロバイダー、1つのコールずつ呼び出し、Renyiyitaiエラーはエラーです。典型的には、このようなキャッシュなど、すべてのプロバイダに通知したり、ローカルリソース情報をアップデートログインするために使用します。
クラスタモードの設定
以下の例は、消費者のクラスタコンフィギュレーションモードでサービスを提供しています
<dubbo:service cluster="failsafe" />
若しくは
<dubbo:reference cluster="failsafe" />
3、統合hystrix
Hystrixは、遅延や失敗のより堅牢な耐障害性を提供し、リモートシステム、サービス、およびサードパーティのライブラリへのアクセスを制御することによって、それらのノードを目指しました。
スレッド及び信号絶縁とHystrixフォールバック機構及び回路ブレーカ機能、要求キャッシュと要求パッケージ、ならびに他の監視および設定機能を有しています。
図1に示すように、配置バネクラウドスタータのNetflix、hystrix
春ブーツは中のpom.xmlに直接依存の追加、hystrix公式に統合提供しています。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
その後、Applicationクラスに追加@EnableHystrix
hystrixスターターを有効にします:
@SpringBootApplication
@EnableHystrix
public class ProviderApplication {
図2に示すように、配置されたエンド・プロバイダ
ダボプロバイダーの増加@HystrixCommand
このコールのような構成では、Hystrixエージェントを通過します。
@Service(version = "1.0.0")
public class HelloServiceImpl implements HelloService {
@HystrixCommand(commandProperties = {
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000") })
@Override
public String sayHello(String name) {
// System.out.println("async provider received: " + name);
// return "annotation: hello, " + name;
throw new RuntimeException("Exception to show hystrix enabled.");
}
}
3、配置された消費者エンド
消費者側では、1つのメソッド呼び出しを増加させることができ、方法上に配置されました@HystrixCommand
。あなたは間違って呼び出すと、それが来るfallbackMethod = "reliable"
に呼び出します。
@Reference(version = "1.0.0")
private HelloService demoService;
@HystrixCommand(fallbackMethod = "reliable")
public String doSayHello(String name) {
return demoService.sayHello(name);
}
public String reliable(String name) {
return "hystrix fallback value";
}