Spring Cloud Netflixアーキテクチャ浅析(小結)


最近マイクロサービスというものに接触して、この方面に対していくつか理解ができました。
1. マイクロサービスフレームSpring Boot+Spring Cloud 
Spring CloudはSpring Bootのセットに基づいてマイクロサービスを実現するフレームワークであり、Spring Bootはフレームワークとして、Spring Cloudはマイクロサービスとして、一緒に無視できない新生フレームシステムを構成していると言えます。マイクロサービス開発に必要な構成管理、サービス発見、遮断器、スマートルーティング、マイクロエージェント、制御バス、グローバルロック、意思決定選挙、分散セッション、クラスタ状態管理などのコンポーネントを提供しています。Spring Cloudは非常に多くのサブフレームを含んでいます。ここで、Spring Cloud Netflixはその中の一つのフレームです。サービス発見、遮断器と監視、知能ルート、クライアント負荷バランスなどが主に提供されています。
特性
  • Eurekaの例は、springを用いて管理されているbean
  • を登録し、発見することができる。
  • 埋め込みEurekaサーバは、ステートメントのJava構成で
  • を作成することができます。
  • Hystrixクライアントは、簡単な注釈で
  • を駆動することができる。
  • Java構成は、埋め込まれたHystrix指示パネル
  • を有効にすることができる。
  • クライアント負荷バランス 
  • 2.  Spring Coud Netflixコンポーネントと配置
    (1)Eurekaは、サービス登録と発見を行い、サービス登録センター、サービス発見のクライアントを提供しており、登録されたサービスをすべて確認するための便利なインターフェースもあります。すべてのサービスはEurekaのサービス発見クライアントを使用して、自分をEurekaのサーバに登録します。
    (2)Zuul、ゲートウェイ、すべてのクライアント要求は、このゲートウェイを通じてバックグラウンドのサービスにアクセスする。彼はあるURLがどのサービスによって処理されるかを特定のルート構成を使って判断することができます。そして、Eurekaから登録されたサービスを取得して要求を転送する。
    (3)Ribbon、すなわち負荷バランス、Zuulゲートウェイがあるサービスのアプリケーションに要求を送信するとき、一つのサービスが複数のインスタンスを開始すると、Ribbonを介して一定の負荷バランスポリシーによって、あるサービスインスタンスに送信される。
    (4)Feign、サービスクライアント、サービス間の相互アクセスが必要であれば、RestTemplateを使用しても良いし、Feignクライアントを使用しても良い。これはデフォルトではRibbonを使用して負荷の均衡を実現します。
    (5)Hystrix、監視と遮断器。私達はサービスインターフェースにHystrixラベルを追加するだけで、このインターフェースの監視と遮断器の機能を実現できます。
    (6)Hystrix Dashboardは、監視パネルを提供しており、各サービス上のサービス呼び出しにかかる時間などを監視することができます。
    (7)Turbine、監視集約、Hystrix監視を使用して、サービスの各インスタンスの監視情報を開く必要があります。Turbineはすべてのサービスインスタンスの監視情報を一箇所に集約して調べるのを手伝ってくれます。
    3. Spring Coud Netflixコンポーネント開発
    その中国語の文書を参照できます。https://springcloud.cc/spring-cloud-netflix.html
    (1)サービス登録と監視センター:
    
    @SpringBootApplication
    @EnableEurekaServer
    @EnableHystrixDashboard
    public class ApplicationRegistry {
     public static void main(String[] args) {
      new SpringApplicationBuilder(Application.class).web(true).run(args);
     }
    }
    
    ここではspring bootタグを使って、@Spring Bootationは現在のアプリケーションがspring bootアプリケーションであると説明しています。このように、私は直接にIDEの中でメール関数でこのアプリケーションを起動することができます。梱包してコマンドラインで起動することもできます。もちろんパッケージのwarパッケージをtomcatなどのサーバーで起動することもできます。ラベル@EnbleEurekaServerを使うと、起動中にEurekaサービス登録センターのコンポーネントを起動できます。これはポートを傍受します。デフォルトは8761です。サービス登録を受けます。ウェブページを提供して、開いたら登録サービスが見られます。@EnbaleHystrixDashboardを追加すると監視ページが提供されます。上に監視するサービスの住所を入力して、Hystrix監視を有効にしたインターフェースの呼び出し状況を確認できます。もちろん、上記のコンポーネントを使用するためには、spring-boot-starter-parentを使用して、spring-cloud-starter-serverとspring-cloud-starter-dashboardなどの対応する依存性をmavenのPOMファイルに追加する必要があります。
    (2)サービス間呼び出し:
    二つの方法はサービスコール、RertTemplate、Feign Clientを行うことができます。どのような方法であれ、彼はRESTインターフェースを通じてサービスのhttpインターフェースを呼び出しています。パラメータと結果は黙認しています。Spring MVCのRest Controllerが定義したインターフェースのため、戻りのデータはすべてjacksonを通じてjsonデータに順番に並べられます。
    第一種類:RestTemplateは、RestTemplateのBeanを定義するだけで、LoadBalancedに設定すればいいです。
    
    @Configuration
    public class SomeCloudConfiguration {
     @LoadBalanced
     @Bean
     RestTemplate restTemplate() {
      return new RestTemplate();
     }
    }
    このように私達は必要なところにこのbeanを注ぎ込むことができます。
    
    public class SomeServiceClass {
     @Autowired
     private RestTemplate restTemplate;
     public String getUserById(Long userId) {
      UserDTO results = restTemplate.getForObject("http://users/getUserDetail/" + userId, UserDTO.class);
      return results;
     }
    }
    
    ここで、usersはサービスIDであり、Ribbonはサービスインスタンスリストからこのサービスの一例を取得し、要求を送信し、結果を得る。オブジェクトUserDTはシリアル番号が必要で、そのシリアルナンバーは自動的に終了します。
    第二種類:Feign Client
    
    @FeignClient(value = "users", path = "/users")
    public interface UserCompositeService {
     @RequestMapping(value = "/getUserDetail/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
     UserDTO getUserById(@PathVariable Long id);
    }
    
    私たちは@Feign Clientを使用して言い訳を定義するだけで、Spring Cloud Feignは私たちのためにその実現を生成し、対応するusersサービスからデータを取得します。このうち、@Feign Client(value=「users」、path=「/users/getsUserDetail」)の中のvalueはサービスIDであり、pathはこのインターフェースのpathプレフィックスである。以下の方法の定義では、Spring MVCのインターフェースを設定するように、この方法に対応するURLは/users/getsUserDetail/{id}です。そして、それを使う時は、一つの一般的なサービスを注入するように注入して使えばいいです。
    
    public class SomeOtherServiceClass {
     @Autowired
     private UserCompositeService userService;
     public void doSomething() {
      // .....     
      UserDTO results = userService.getUserById(userId);
      // other operation...     
     }
    }
    (3)遮断器:
    
    //   :                ,              ,     /         
    //fallbackMethod      
    @HystrixCommand(fallbackMethod = "doStudentFallback")
    @RequestMapping(value = "dostudent",method = RequestMethod.GET)
    public String doStudent(){
     return "your name:secret,your age:secret!";
    }
    
    public String doStudentFallback(){
     return "your name:FEIFEI,your age:26!";
    }
    
    このうち、@EnbaleCircurytBreakerを使ってブレーカーサポートを有効にし、Spring Cloudはブレーカーの運行状況を監視するためにコンソールを提供しています。@EnbaleHystrixDashboardの注釈で開けます。
    以上は簡単なSpring Cloud Netflixコンポーネントの紹介です。皆さんの勉強に役に立つように、私たちを応援してください。