Hi SpringCloud

サービスアーキテクチャ

モノリシックアーキテクチャ

すべてのビジネス機能を1つのプロジェクトで開発し、展開用に1つのパッケージにパッケージ化します。

利点: シンプルなアーキテクチャ、スケーラビリティが低い、導入コストが低い、小規模プロジェクトに適している

デメリット: 結合度が高い

分散アーキテクチャ

システムは業務機能ごとに分割されており、各業務モジュールはサービスと呼ばれる独立したプロジェクトとして開発されている。

利点: サービスの結合を減らし、サービスのアップグレードと拡張を容易にする

デメリット: 複雑なアーキテクチャ、使いにくい、大規模なインターネットプロジェクトに適している

マイクロサービス

マイクロサービスは、適切に設計された分散アーキテクチャ ソリューションです。マイクロサービス アーキテクチャの特徴:

  • 単一責任 (簡体字中国語) : マイクロサービスはより細かい粒度に分割されます。各サービスは固有のビジネス機能に対応しており、単一責任を実現し、重複したビジネス開発を回避します。
  • サービス指向: マイクロサービスはビジネスインターフェースを外部に公開します
  • 自律性: チームの独立性、テクノロジーの独立性、データの独立性、展開の独立性
  • 強力な分離: サービス呼び出しは分離され、フォールトトレラントであり、連鎖的な問題を回避するためにダウングレードされます。

マイクロサービス技術

マイクロサービス ソリューションには技術フレームワークの実装が必要です。最も一般的なものは次のとおりです。

DubboSpringCloudSpringCloudAlibaba
登録センターzookeeper、 RedisEureka、 ConsulNacos、 Eureka
リモートサービスコールDubbo プロトコルFeign (http プロトコル)Dubbo、Feign
構成センターSpringCloudConfigSpringCloudConfig、 Nacos
サービスゲートウェイSpringCloudGateway、 ZuulSpringCloudGateway、 Zuul
サービスの監視と保護dubbo-admin,弱い機能HystixSentinel

マイクロサービスはビジネスモジュールに応じて分割する必要がある

  • 単一責任: 異なるマイクロサービスに対して同じビジネスを繰り返し開発しない
  • データの独立性: 他のマイクロサービスのデータベースにアクセスしない
  • サービス指向: 独自のビジネスを他のマイクロサービスが呼び出すためのインターフェースとして公開する

SpringCloud

SpringCloud は現在最も広く使用されているマイクロサービス フレームワークです。さまざまなマイクロサービス機能コンポーネントを統合し、SpringBoot に基づいてこれらのコンポーネントの自動アセンブリを実装します。

公式サイト: https://spring.io/projects/spring-cloud/

  • サービス登録と検出: Eureka、Nacos、Consul
  • 統合構成管理: SpringCloudConfig、Nacos
  • リモートサービスコール: OpenFeign、Dubbo
  • 統合ゲートウェイルーティング: SpringCloudGateway、Zuul
  • サービスリンク監視: Zipkin、Sleuth
  • フロー制御、劣化、保護: Hystix、Sentinel

マイクロサービス呼び出し

要件: 注文 ID に基づいて注文を照会する場合、注文が属するユーザー情報を返します。

RestTemplate を登録する

1
2
3
4
@Bean
public RestTemplate restTemplate(){
    return new RestTemplate();
}

サービスリモート呼び出し RestTemplate

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.注文をクエリ
        Order order = orderMapper.findById(orderId);
        // 2.ユーザーをクエリ
        String url = "http://localhost:8081/user/" + order.getUserId();
        // RestTemplateのGETメソッド
        User user = restTemplate.getForObject(url, User.class);
        // 3.ユーザー情報をカプセル化する
        order.setUser(user);
        // 4.戻る
        return order;
    }
}
This post is licensed under CC BY-NC-SA 4.0 by the author.
最終更新 2025-02-05 17:13 +0900

Visits Since 2025-02-28

Hugo で構築されています。 | テーマ StackJimmy によって設計されています。