春クラウドマイクロサービスアーキテクチャのアップグレードの概要

[編集者注] 2014年3月からマイクロサービスの概念Martin Fowler氏は、記事「Microservices」を書きました。上述のテキスト内容:マイクロサービスアーキテクチャはアーキテクチャー・パターンであり、それはユーザーのための究極の値を提供する、互いに補完し、サービス間の協調、より小さなサービスのセットに単一のアプリケーションを提唱します。

背景

歴史的建築アプリケーションシステム

 

 

 

マイクロサービスとは何ですか?

起源:2014年3月からマイクロサービスの概念Martin Fowler氏は、記事「Microservices」を書きました。上述のテキスト内容:マイクロサービスアーキテクチャはアーキテクチャー・パターンであり、それはユーザーのための究極の値を提供する、互いに補完し、サービス間の協調、より小さなサービスのセットに単一のアプリケーションを提唱します。

通信:各サービスの別のプロセスで実行され、使用されて互いに通信する間サービスおよびサービス軽量通信機構(通常はHTTPベースのRESTful API)。

マイクロサービスの従来の定義:マイクロサービスは、建築様式、一つ以上のマイクロサービスにより、大規模で複雑なソフトウェアアプリケーションです。各マイクロサービスシステムは、独立して、それぞれのマイクロサービスが疎結合されている間に配備されてもよいです。各マイクロは、タスクの完了に集中するだけに役立ちます。

元の単一のプロセス・サービスと比較して、二つ以上のサービスプロセスに分割され、互いの間の呼関係が存在する完全なサービスの元のプロセスは、「マイクロ・サービス」です。(マイクロサービスは、比較概念ではなく、単一の概念である)、あなたは専門家のより微細なサービスの技術交流をしたい場合、プログラマは私のQQ交換基を追加することができます:833 145 934、「ジョージ」を指摘します グループ毎週、ベストプラクティスや業界のグローバル大手企業の最新動向。

マイクロサービスアーキテクチャの利点

  • スケーラビリティ:単一のアプリケーション・アーキテクチャのビジネス機能の増加は、マイクロサービスアーキテクチャは、新しいマイクロサービスノードの添加のみを必要としながら、元のアーキテクチャに基づいてコードに比較的大きな調整を行う必要があり、および関連するサービスノードを有するマイクロ調整それはすることができます。マイクロサービスアーキテクチャは、マイクロサービスノードに応じて、容量拡張の唯一の欠如を必要としながら、ビジネスの応答性、単一のアーキテクチャ全体の拡張の必要性を向上させながら。

  • 弾力:マイクロサービスアーキテクチャが起動し、サービスを停止し、当該サービスのコードを変更するだけで必要としながら、システム障害、システムの単一のアプリケーション・アーキテクチャは、固定する必要があり、スタート・ストップ・アプリケーション・コードに関連する変更する場合。その他のサービスには、メカニズムを融合、再試行して、アプリケーション・レベルのフォールトトレランスを実現することができます。

  • 柔軟な技術の選択:マイクロサービスアーキテクチャ、各マイクロサービスノードの下に完全な機能のさまざまなニーズに応じて、最適なテクノロジー・スタックを選択する自由、でも単一のマイクロノードサービスの再構築すれば、コストが非常に低いです。

  • より高い運用・保守効率の開発:各ノードは単一の機能に焦点を当てた単一のマイクロサービスプロセス、であり、明確に定義されたインタフェースを介してサービスの境界を明確にします。小型、低複雑に、各マイクロサービスは、高いメンテナンス性と開発効率を維持するために、完全に制御で簡単に小さなチームや個人をすることができます。

マイクロサービスアーキテクチャの利点を持つ代わりに、マイクロサービスアーキテクチャを実現するために、スプリングクラウドフレームワークを使用しての中で最も人気のマイクロブログサービスの開発フレームワーク、など春の雲。正しい理解は、マイクロベースのシステムの開発のための春のクラウドサービスフレームワークの使用は、システムが(ツールのような春の雲が、また、プロセスを「行う」する必要があります)マイクロ・サービス・アーキテクチャの利点を持っているということです。

春ブーツとは何ですか?春クラウドとは何ですか?

春ブーツFrameworkは、開発プロセスを簡素化するために設計されており、Springベースのアプリケーションをセットアップする最初のピボタルチーム、によって提供される新しいフレームワークです。SpringBootフレームワークは、開発者は、もはやテンプレートコンフィギュレーションファイルを定義するために多くの労力を費やす必要がないようにアプリケーションを設定するための特定の方法を使用しています。

春の雲春ブーツ達成クラウドベースのアプリケーション開発ツールであり、それはJVMの構成管理におけるクラウドベースのアプリケーション開発、サービス登録、サービス検出、回路ブレーカ、インテリジェントなルーティング、マイクロブローカー、制御バス、グローバルロック、意思決定選挙であります、分散およびクラスタ化セッション状態管理やその他の操作は、開発の簡単な方法を提供します。

マイクロサービスとの関係、春ブーツ、春の雲3

アイデア:マイクロサービスは、理論を提供するために、建築のコンセプト、マイクロサービスの設計原理、床面からの特定の技術的なガイドラインです。
足場:春ブーツ春ブーツに基づく高速設定の足場は、すぐに単一のマイクロサービスの開発です。
複数のコンポーネントのコレクション:春クラウドサービスベースの管理ツールである春ブーツは、パッケージを達成するため、春ブーツは、単一の個々のマイクロサービスを迅速、容易な統合に焦点を当てて、春のクラウドサービスは、全体的なガバナンスのフレームワークに焦点を当てます。

テクニカル分析

すべてが瓶である、すべてはhttp
Spring Boot通过@SpringBootApplication注解标识为Spring Boot应用程序。所有的应用都通过jar包方式编译,部署和运行。
@SpringBootApplication 
public class Application {     
private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { SpringApplication.run(Application.class, args); LOGGER.info(”启动成功!"); } } 

埋め込みWebコンテナのHTTP道を通じてサービスを提供することができ、それぞれの春ブートアプリケーションは、唯一、原則的には、マイクロサービスのアーキテクチャは、個々のノードがHTTPサービスを提供して期待することができポンポンファイルに春ブート・スタート・ウェブに依存する必要があります。

<dependency>
    <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 
春のブートタスクは、タスクをスケジュール設定し、タスクが開始します
在Spring Boot需要启动任务时,只要继承CommandLineRunner接口实现其run方法即可。
@SpringBootApplication 
public class ClientDataListener implements CommandLineRunner
public void run(String... strings) throws Exception { clientInfoListenerHandler(); } } 

春ブーツは、通常のタスクを実行する必要がある場合は、単にタスク方式のタイミングで(「*?* 0 15 0」=クーロン)注釈を@Scheduledを追加します(標準のcron表現をサポートしている)、およびサービスの増加は、クラスを開始@EnableScheduling注釈は、することができます。

@SpringBootApplication
@EnableScheduling
public class Application {     
private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { SpringApplication.run(Application.class, args); LOGGER.info(”启动成功!"); } } 
// some class
@Scheduled(cron = "0 15 0 * * ?")
public void someTimeTask() { *** } 
春のブートアクチュエータは、監視します

アクチュエータアプリケーション・システム自体が設けられたスプリング起動を監視するための成分であり、バネブートスタータアクチュエータの導入は、ばねブート開始ウェブベースに組み込むことができます。

<dependency>
    <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 
春の雲config設定センター

我々はマイクロサービスアーキテクチャを実現する場合、各マイクロサービスノードは、多数のノードは、それが中央構成サービスの確立を必要とする、維持することが非常に困難になる独自の設定データ項目を、必要とします。

春クラウドコンフィグは、2つの部分に分かれています。春のクラウドサービスプロセスとしてコンフィグサーバ、設定ファイルの春クラウドコンフィグファイルの保存場所。

春クラウドユーレカサービスレジストリ

サービス登録の概念は長いマイクロサービスアーキテクチャの出現の前に、マイクロアーキテクチャのサービスはマイクロサービスノードの非常に大きな数に元の単一ノード・アプリケーションを分割してもいます。、互いの間の関係は、登録センターとして、春の雲ユーレカ非常に複雑になり、すべてのサービスが春クラウドユーレカ一元管理とアクセスに自分自身をマイクロ登録することができコール(ユーレカと異なる飼育係、原則的にはOP AOPを選択サービスの有効性をより重視)

春クラウドZuulは、インテリジェントなルーティングサービスを終了します

我々はすべてのサービスが将来的にはユーレカ(サービスレジストリ)に登録されて置くときは、コールする方法の問題を伴います。春の雲Zuulは、クラウドが提供するサーバ側プロキシコンポーネントの春であるゲートウェイとして見ることができ、ユーレカによってZuulは、マッピング設定を通じて利用可能なサービスを取得するには、クライアントが実際にZuulを訪問しアクセスするために必要なサービスにアクセスする必要があります。spring.application.nameアイデンティティ、異なるIPアドレスによって行わすべてのサービスは、同じspring.application.nameは、サービスクラスタです。我々はspring.application.name同じノードを追加すると、情報通信ユーレカ介してZuulインテリジェント・ルーティングは、新しいノードを得るサービスの種類の対応能力を高めます。

春の雲リボンクライアントインテリジェントなルーティング

そして、春クラウドZuulは、サーバー側のプロキシを対応する、春の雲リボンは、クライアントエージェントを提供します。プロキシサーバーでは、クライアントは、サービスの提供の物質を取得し、サービスコールを選択するためのサービスとそれらを提供するために、最終的にどのマイクロサービスノードを知っておく必要があり、クライアントエージェントノードはありません。リボンと同様のZuul、また、ユーレカ(サービスレジストリ)がインテリジェント・ルーティングを達成するために、クライアントとの通信に至ります。

春クラウドスルース分散トラック

 

 

 

春の雲Zipkinコールチェーン

 

 

 

春の雲装うのHTTPクライアント

Spring Cloud Feign是一种声明式、模板化的http客户端。 使用Spring Cloud Feign请求远程服务时能够像调用本地方法一样,让开发者感觉不到这是远程方法(Feign集成了Ribbon做负载均衡)。

把远程服务和本地服务做映射:

@FeignClient(name = "rabbitmq-http", url = "${SKYTRAIN_RABBITMQ_HTTP}") 
public interface TaskService { @RequestMapping(value = "/api/queues", method = RequestMethod.GET) public String query(@RequestHeader("Authorization") String token); } 

以调用本地服务的方式调用远程服务:

@Autowired 
private TaskService taskService; 
private String queryRabbitmqStringInfo() { byte[] credentials = Base64 .encodeBase64((rabbitmqHttpUserName + ":" + rabbitmqHttpPassword).getBytes(StandardCharsets.UTF_8)); String token = "Basic " + new String(credentials, StandardCharsets.UTF_8); return taskService.query(token); } 

Spring cloud Hystrix断路器

 

 

 

微服务实践

我们开发的几个微服务组件:应用管理中心

应用管理中心可以对每个已经注册的微服务节点进行停止,编译,打包,部署,启动的完整的上线操作。

我们开发的几个微服务组件:ZooKeeper数据查询中心

ZooKeeper数据查询中心根据ZooKeeper地址、端口、命令获取ZooKeeper数据信息。

我们开发的几个微服务组件:微服务健康检测中心

健康检测中心周期性检查每个微服务的状态,当发现有微服务状态处于DOWN或连接超时时,触发报警。

我们开发的几个微服务组件:定时任务查询中心
// 在BeanPostProcessor子类中拦截
@Component
public class SkytrainBeanPostProcessor implements BeanPostProcessor, Ordered { *** /** * Bean 实例化之后进行的处理 */ public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { beanPostProcessor.postProcessAfter(bean, beanName); return bean; } *** } // 拦截后获取定时任务注解 *** public Object postProcessAfter(Object bean, String beanName) { Class targetClass = AopUtils.getTargetClass(bean); Map annotatedMethods = MethodIntrospector.selectMethods(targetClass, new MethodIntrospector.MetadataLookup() { public Set inspect(Method method) { Set scheduledMethods = AnnotatedElementUtils.getMergedRepeatableAnnotations(method, Scheduled.class, Schedules.class); return (!scheduledMethods.isEmpty() ? scheduledMethods : null); } }); if (!annotatedMethods.isEmpty()) { String className = targetClass.getName(); for (Map.Entry entry : annotatedMethods.entrySet()) { Method method = entry.getKey(); for (Scheduled scheduled : entry.getValue()) { String key = className + ":" + method.getName(); String value = scheduled.toString(); taskInfos.put(key, value); } } } return null; } *** // 获取定时任务后注册 *** public void taskRegister() { String nodeInfo = ipAddress + ":" + serverPort + ":"; try { /** * 定时任务 */ Map infos = taskInfos; for (Entry item : infos.entrySet()) { String taskId = nodeInfo + item.getKey(); String taskParameter = item.getValue(); JSONObject info = new JSONObject(); info.put("taskId", taskId); info.put("taskParameter", taskParameter); info.put("applicationName", applicationName); info.put("taskType", "schedule"); LOGGER.info(info.toString()); zooKeeperExecutor.createZKNode(SKYTRAIN_TASK_ZKNODE_PREFIX + taskId, info.toString()); } } catch (Exception ex) { LOGGER.error("", ex); } } *** 

微服务的分类

  • 微服务平台组件
  • 公共服务组件
  • 基础服务组件/业务服务组件

整体微服务架构图

 

 

おすすめ

転載: www.cnblogs.com/AIPAOJIAO/p/11121400.html