ホームページ  >  記事  >  Java  >  Spring Cloud を使用して高パフォーマンスのマイクロサービス クラスターを構築する方法

Spring Cloud を使用して高パフォーマンスのマイクロサービス クラスターを構築する方法

WBOY
WBOYオリジナル
2023-06-22 13:03:07617ブラウズ

クラウド コンピューティングとマイクロサービスの台頭により、独自のアプリケーションを構築するために分散型の高可用性アーキテクチャを求める企業が増えており、Spring Cloud はこの分野のリーダーの 1 つです。 Spring Cloud は、分散システムを迅速に構築し、これらのサービスをクラウド プラットフォームに簡単にデプロイするための豊富なコンポーネントとサービスを提供します。この記事では、Spring Cloud を使用して高性能なマイクロサービス クラスターを構築する方法を紹介します。

  1. マイクロサービス アーキテクチャの構築

マイクロサービス システムの構築を開始する前に、マイクロサービスとは何かを確認しましょう。マイクロサービスは、アプリケーションをシステム全体内で相互に連携する小さなサービスに分割するアーキテクチャ パターンです。これにより、開発者はスケーラブルな分散アプリケーションを迅速に構築してリリースできます。

Spring Cloud は、サービス登録、サービス検出、負荷分散、分散構成などを含む (ただしこれらに限定されない) マイクロサービス アーキテクチャをサポートする一連のツールとフレームワークを提供します。 Spring Cloud を使用してマイクロサービスを実装する手順は次のとおりです:

1) Eureka サーバーを構築する

Eureka は Spring Cloud で推奨されるサービス検出コンポーネントの 1 つであり、REST ベースのサービスです。 . マイクロサービス間の依存関係の管理に役立ちます。 Eureka を使用するには、まず Eureka サーバーをセットアップする必要があります。次のコードを使用して Eureka サーバーを作成できます:

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

アプリケーションを起動した後、http://localhost:8761/ 経由で Eureka コンソールにアクセスし、登録されているすべてのマイクロサービスを表示できます。

2) マイクロサービスの作成

次に、2 つのマイクロサービスを作成します。1 つはユーザー サービス、もう 1 つは注文サービスです。ユーザーサービスはユーザー情報の追加・削除・変更・確認の機能を提供し、オーダーサービスは注文情報の追加・削除・変更・確認の機能を提供します。以下はユーザー サービスのサンプル コードです:

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class UserServiceApplication {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/users")
    public List<User> getUsers() {
        return userRepository.findAll();
    }

    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Long id) {
        return userRepository.findById(id).orElse(null);
    }

    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }

    @PutMapping("/users/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        return userRepository.save(user);
    }

    @DeleteMapping("/users/{id}")
    public void deleteUser(@PathVariable Long id) {
        userRepository.deleteById(id);
    }

    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}

以下は注文サービスのサンプル コードです:

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class OrderServiceApplication {

    @Autowired
    private OrderRepository orderRepository;

    @GetMapping("/orders")
    public List<Order> getOrders() {
        return orderRepository.findAll();
    }

    @GetMapping("/orders/{id}")
    public Order getOrderById(@PathVariable Long id) {
        return orderRepository.findById(id).orElse(null);
    }

    @PostMapping("/orders")
    public Order createOrder(@RequestBody Order order) {
        return orderRepository.save(order);
    }

    @PutMapping("/orders/{id}")
    public Order updateOrder(@PathVariable Long id, @RequestBody Order order) {
        order.setId(id);
        return orderRepository.save(order);
    }

    @DeleteMapping("/orders/{id}")
    public void deleteOrder(@PathVariable Long id) {
        orderRepository.deleteById(id);
    }

    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }
}

3) マイクロサービスの登録

マイクロサービスをEureka サーバーでは、各マイクロサービスのビルド ファイルに次の依存関係を追加する必要があります:

<!-- Eureka Discovery Client -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

同時に、各マイクロサービスのスタートアップ クラスに @EnableDiscoveryClient アノテーションを追加して、サービスの登録を有効にする必要があります。関数。

すべてのマイクロサービスをクラウドまたはローカル サーバーにデプロイした後、それらを Eureka サーバーに登録します。これにより、これらのマイクロサービスが管理されます。

  1. 負荷分散の実現

実際のマイクロサービス システムでは、スケーラビリティとフォールト トレランスを向上させるために、同じマイクロサービスを実行する複数のインスタンスが存在する場合があります。ただし、どのインスタンスがクライアントのリクエストを処理できるかを決定する方法が必要です。

Spring Cloud は、負荷分散を実現するために、クライアント負荷分散とサーバー負荷分散という 2 つの方法を提供します。クライアント負荷分散とは、クライアントが要求を開始する前に、負荷分散アルゴリズムを使用して、要求を処理する通常のマイクロサービス インスタンスを選択することを指します。サーバー側の負荷分散とは、リクエストがマイクロサービス インスタンス間で分散される方法を指します。各方法には長所と短所があるため、どの方法を選択するかは、特定のアプリケーション シナリオに基づいて決定する必要があります。

この記事では、クライアント側の負荷分散を使用してマイクロサービスを実装します。クライアント側の負荷分散を使用するには、各クライアントに次の依存関係を追加する必要があります。

<!-- Ribbon -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

これで、RestTemplate に @LoadBalanced アノテーションを付けて、リクエストが行われたときに自動的に負荷分散を完了できるようになります。たとえば、次のコードを使用して、ユーザー サービスで RestTemplate を使用できます。

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}
  1. サービス サーキット ブレーカーとダウングレードの実装

マイクロサービス アーキテクチャでは、さまざまなマイクロサービス間で呼び出しにより、大量のネットワーク要求が生成されます。システム内の 1 つのマイクロサービスに問題がある場合、システム全体が影響を受ける可能性があります。この問題に対処するには、Spring Cloud の Hystrix コンポーネントを使用してサービスの中断とダウングレードを実装します。

特定のマイクロサービスで問題が発生した場合、Hystrix はサーキット ブレーカー モードを通じて雪崩現象を防止します。サービス コンシューマはマイクロサービスを要求しなくなり、デフォルトの応答が返されます。同時に、Hystrix はダウングレード機能も実装でき、特定のマイクロサービスが過負荷になったり障害が発生したりした場合、自動的に代替実装に切り替わります。

たとえば、次のコードを使用して、ユーザー サービスに Hystrix を実装できます:

<!-- Hystrix -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

<!-- Hystrix Dashboard -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

@EnableHystrix アノテーションを使用して、Hystrix 機能を有効にします。

@HystrixCommand アノテーションにより、getUserById メソッドで Hystrix サーキット ブレーカーが有効になります:

@HystrixCommand(fallbackMethod = "defaultUser")
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
    return restTemplate.getForObject("http://user-service/users/" + id, User.class);
}

public User defaultUser(Long id) {
    return new User();
}
  1. 分散構成管理の実装

Spring Cloud Config は実用的なツールですこれにより、アプリケーションと環境の間で構成が分離されます。アプリケーションの構成を構成サーバーに個別に保存し、各アプリケーションの構成をその環境に注入することで、複数のアプリケーション インスタンスと環境を迅速に構成および管理できるようになります。

Spring Cloud Config を使用するには、構成サーバーを作成し、アプリケーションの構成を構成センターに保存する必要があります。構成サーバーは、これらの構成をアプリケーションにプッシュします。

以下は Spring Cloud Config の使用方法の簡単な例です:

1) 構成サーバーを作成します

構成サーバーを作成するには、最初に @ を追加する必要があります。スタートアップ クラスで EnableConfigServer 注釈を付け、構成ファイル リポジトリを指定します:

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

在配置中心的存储库中可以存储多种类型的配置文件,包括.properties,.yml和.json等。配置可以根据应用程序和环境进行管理。例如,可以为生产环境存储prod.properties文件,而为测试环境存储test.properties文件。

2)将应用程序连接到配置服务器

要将应用程序连接到配置服务器,首先需要添加以下依赖项:

<!-- Config Client -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

然后,我们需要在应用程序的bootstrap.properties文件中指定配置服务器的位置:

spring.cloud.config.uri=http://localhost:8888

现在,当我们启动应用程序时,它将自动从配置服务器中获取配置。

  1. 实现API网关

API网关是一个重要的组件,它充当了客户端和分布式后端系统之间的中间层。API网关可以用于路由请求,验证和授权请求,以及调用其他微服务。

Spring Cloud提供了Zuul组件来实现API网关。Zuul支持多种请求路由策略,如轮询,随机和会话保持等,并支持限流和动态路由等高级特性。

以下是如何将Zuul添加到应用程序中的简单示例:

1)添加依赖项

要将Zuul添加到应用程序中,需要添加以下依赖项:

<!-- Zuul -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

2)创建Zuul代理

创建Zuul代理非常简单。我们只需要在启动类上添加@EnableZuulProxy注解,并且可以在配置文件中指定路由规则。例如,以下规则将路由到服务名称为user-service中的所有请求:

zuul:
  routes:
    users:
      path: /users/**
      serviceId: user-service

3)使用Zuul代理

现在,API网关应用程序已准备就绪。我们可以使用以下代码在应用程序中处理请求:

@RestController
public class ApiController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Long id) {
        return restTemplate.getForObject("http://api-gateway/user-service/users/" + id, User.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(ApiGatewayApplication.class, args);
    }
}

以上是如何使用Spring Cloud搭建一个高性能的微服务集群的一些步骤和示例。当然,在实际项目中,还需要考虑更多的特性和问题,如服务注册与发现的高可用、分布式事务、服务治理、微服务监控和链路跟踪等。但希望这篇文章对您有所帮助!

以上がSpring Cloud を使用して高パフォーマンスのマイクロサービス クラスターを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。