SpringBoot-配布済み
1つ、配布
1.分散の基本概念
分散システムは、ネットワークを介して通信し、一般的なタスクを完了するために作業を調整するコンピューターノードのグループで構成されるシステムです。目的は、より多くのマシンを使用してより多くのデータを処理することです。
分散システムでは、zookeeper + dubboの組み合わせが中国で一般的に使用されており、Spring Bootは、フルスタックのSpring、Spring Boot + SpringCloudの使用を推奨しています。
2.アプリケーションアーキテクチャの開発
(1)単一アプリケーションアーキテクチャ
Webサイトのトラフィックが非常に少ない場合、必要なアプリケーションは1つだけであり、すべての機能が一緒に展開されて、展開ノードとコストが削減されます。現時点では、追加、削除、変更、チェックの作業負荷を簡素化するために使用されるデータアクセスフレームワーク(ORM)が重要です。
(2)垂直アプリケーションアーキテクチャ
訪問数が徐々に増加すると、マシンに単一のアプリケーションを追加することによる加速はますます小さくなり、アプリケーションは効率を向上させるためにいくつかの無関係なアプリケーションに分割されます。現時点では、フロントエンドページの開発を加速するために使用されるWebフレームワーク(MVC)が重要です。
(3)分散サービスアーキテクチャ
垂直アプリケーションが増えると、アプリケーション間の相互作用が避けられなくなり、コアビジネスが独立したサービスとして抽出され、安定したサービスセンターが徐々に形成され、フロントエンドアプリケーションがより迅速に対応できるようになります。変化へ。市場の需要。現時点では、ビジネスの再利用と統合を改善するための分散サービスフレームワーク(RPC)が重要です。
(4)モバイルコンピューティングアーキテクチャ
サービスが増えると、容量評価や小さなサービスリソースの浪費などの問題が徐々に発生しますが、このとき、アクセスプレッシャーに基づいてクラスター容量をリアルタイムで管理するディスパッチセンターを追加する必要があります。クラスターの使用率を向上させるため。現時点では、マシンの使用率を向上させるために使用されるリソーススケジューリングおよびガバナンスセンター(SOA)が重要です。
二、ダボ-動物飼育係
1. ZooKeeper(登録センター)
ZooKeeperは、分散型のオープンソース分散型アプリケーション調整サービスです。分散アプリケーションに一貫したサービスを提供するソフトウェアです。提供される機能には、構成の保守、ドメイン名サービス、分散同期、グループサービスなどがあります。
2、ダボ
(1)Dubboの概念
Apache Dubboは、高性能で軽量なオープンソースのJava RPCフレームワークであり、インターフェイス指向のリモートメソッド呼び出し、インテリジェントなフォールトトレランスと負荷分散、および自動サービス登録と検出の3つのコア機能を提供します。サービスモデルの観点から、Dubboは、プロバイダーがサービスを提供するか、コンシューマーがサービスを消費するという非常に単純なモデルを採用しているため、これに基づいて、サービスプロバイダーとサービスコンシューマーを抽象化できます(コンシューマー)。
(2)RPC:
RPC(Remote Procedure Call)は、プロセス間の通信方法であるリモートプロシージャコールを指します。これは技術的な考え方であり、仕様ではありません。これにより、プログラムは別のアドレス空間(通常はネットワークを共有する別のマシン)で関数を呼び出すことができます。メモリ空間にないため、直接呼び出すことはできません。呼び出しのセマンティクスを表現するには、ネットワークを使用する必要があります。呼び出されたデータを伝達し、ローカルを呼び出します。メソッドの構文は同じですが、ネットワーク送信が必要です。
注:
RPCには、通信とシリアル化の2つのコアモジュールがあります。
(3)ダボのコアコンポーネント
- サービスプロバイダー(プロバイダー):サービスを公開するサービスプロバイダー。サービスプロバイダーが起動すると、提供するサービスをレジストリに登録します。
- サービスコンシューマー(コンシューマー):リモートサービスを呼び出すサービスコンシューマー。サービスコンシューマーが開始すると、必要なサービスのレジストリにサブスクライブします。サービスコンシューマーは、ソフトロードバランシングアルゴリズムに基づいてプロバイダーアドレスリストから選択します。1つプロバイダーが呼び出しを行い、呼び出しが失敗した場合は、別の呼び出しが選択されます。
- レジストリ:レジストリは、サービスプロバイダーのアドレスのリストをコンシューマーに返します。変更がある場合、レジストリは、長い接続に基づいて、変更されたデータをコンシューマーにプッシュします。
- 監視:サービスの利用者とプロバイダーは、呼び出し回数と呼び出し時間をメモリに蓄積し、統計データを1分ごとに監視センターに送信します。
3.テスト
(1)登録センターとしてzookeeperをインストールします
Dobboのzookeeperインストールヘルプドキュメント:https://registry.hub.docker.com/_/zookeeper
1)動物園の飼育係を引く
docker pull ezsfsfyys.mirror.aliyuncs.com/library/zookeeper
2)zookeeperを実行する
docker run --name ZK01 -p 2181:2181 --restart always -d e1763fd3a0e3
この画像には、EXPOSE 2181 2888 3888 8080(それぞれ、zookeeperクライアントポート、フォロワーポート、選択ポート、AdminServerポート)が含まれています。ここでは、クラスターと選択は行わず、ポート2181を公開するだけです。
(2)サービスプロバイダーを書く
dubbo-SpringBootの公式:https://github.com/apache/dubbo-spring-boot-project
1)依存関係を導入します。
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- 引入zookeeper -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<!--排除这个slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
注:
ここにはログの競合があります。slf4j-log4j12を除外する必要があります。
2)application.propertiesを構成します
dubbo.application.name=provider-ticket
dubbo.registry.address=zookeeper://44.92.240.49:2181
dubbo.scan.base-packages=com.glp.service
dubbo.config-center.timeout=10000
dubbo.registry.address:登録センターのアドレスを構成します
dubbo.scan.base-packages = com.glp.service:スキャンパッケージを構成します
dubbo.config-center.timeout:接続タイムアウトを構成します
3)出版サービス:
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Component
@Service //将服务发布出去
public class TicketServiceImpl implements TicketService {
@Override
public String getTicket() {
return "《我爱我的祖国》";
}
}
@Service:サービスを公開する
(3)サービス消費者を書く
1)依存関係を導入する:プロバイダーと同じ
2)登録センターのアドレスを構成します
dubbo.application.name=consumer-user
dubbo.registry.address=zookeeper://46.78.236.59
3)サービス
を参照する通常の手順は、サービスプロバイダーのインターフェイスをパッケージ化し、pomファイルと一緒にインポートすることです。ここでは、簡単な方法を使用してサービスのインターフェイスを直接取得します。パスは正しい必要があります。サービスプロバイダーと同じ。
import com.glp.service.TicketService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Reference
TicketService ticketService;
public void getTicket(){
System.out.println("买到票:"+ticketService.getTicket());
}
}
(4)テスト
@Autowired
UserService userService;
@Test
void contextLoads() {
userService.getTicket();
}
ようやくチケットを購入しましたが、主にpomのバージョンの問題が原因で、早い段階でエラーを報告し続けました。
このテストの完全なコード:dubbo——zookeeper
三、春の雲
この例のソースコード:SpringCloud演習
1. SpringCloudの基本概念
Spring Cloudは、分散型の全体的なソリューションです。Spring Cloudは、分散システム(構成管理、サービス検出、ヒューズ、ルーティング、マイクロエージェント、コントロールバス、ワンタイムトークン、グローバルトリビア、リーダー選出、分散セッション、クラスターステータス)をすばやく組み込むためのツールを開発者に提供します。 Spring Cloudを使用すると、サービスをすばやく開始したり、アプリケーションを構築したり、クラウドプラットフォームリソースにすばやく接続したりできます。
SpringCloud分散開発の5つの一般的なコンポーネント
- サービスディスカバリ-NetflixEureka
- クライアントの負荷分散-Netflixリボン
- サーキットブレーカー-NetflixHystrix
- サービスゲートウェイ-NetflixZuul
- 分散構成-SpringCloud Config
2.登録センター
(1)配置eureka
server:
port: 8761
eureka:
instance:
hostname: eureka-server
client:
register-with-eureka: false #不将自己注册到eureka上
fetch-registry: false #不从eureka上获取服务的注册信息
service-url:
defaultZone: http://localhost:8761/eureka/
(2)@EnableEurekaServer
(3)http:// localhost:8761 /にアクセスします
3.サービスプロバイダー
(1)配置eureka
server:
port: 8001
spring:
application:
name: provider-ticket
eureka:
instance:
prefer-ip-address: true #注册服务的时候使用服务的ip地址进行注册
client:
service-url:
defaultZone: http://localhost:8761/eureka/
(2)書き込みサービス
(3)jarパッケージでサービスを実行します。このサービス
は、ポート番号の異なる複数のjarパッケージにパッケージ化して、同時に実行できます。
4.サービス消費者
(1)配置eureka
spring:
application:
name: consumer-user
server:
port: 8200
eureka:
instance:
prefer-ip-address: true #注册服务的时候使用服务的ip地址进行注册
client:
service-url:
defaultZone: http://localhost:8761/eureka/
(2)@EnableDiscoveryClientはサービス検出機能を開きます
(3)RestTemplateを構成します
(4)サービスを取得します
(5)アクセステスト