>Java >java지도 시간 >Spring Cloud 기반 마이크로서비스 역량 개발 실습

Spring Cloud 기반 마이크로서비스 역량 개발 실습

王林
王林원래의
2023-06-23 12:04:401001검색

클라우드 컴퓨팅과 빅데이터 기술의 급속한 발전에 따라 엔터프라이즈 시스템의 아키텍처 설계 및 개발 방법도 끊임없이 변화하고 있습니다. 마이크로서비스 아키텍처는 중요한 변화 중 하나입니다. 단일 애플리케이션을 작은 서비스 세트로 분할하는 아키텍처 모델입니다. 각 서비스는 경량 통신 메커니즘을 기반으로 서로 협력하여 보다 유연하고 확장 가능하며 유지 관리 가능한 시스템을 구현합니다. .

현재 가장 인기 있는 마이크로서비스 프레임워크 중 하나인 Spring Cloud는 마이크로서비스 검색, 구성, 통신, 로드 밸런싱, 회로 차단기, API 게이트웨이 등을 포함한 완전한 마이크로서비스 개발 솔루션 세트를 제공합니다. 본 글에서는 Spring Cloud를 기반으로 한 마이크로서비스 역량 개발 사례를 소개하고, 실무에서 부딪히는 몇 가지 문제점과 해결방안을 소개합니다.

1. 마이크로서비스 아키텍처의 기본 원칙

마이크로서비스 아키텍처는 단일 애플리케이션을 작은 서비스 세트로 분할하는 아키텍처 패턴입니다. 체계. 마이크로서비스 아키텍처의 기본 원칙은 다음과 같습니다.

1. 서비스 분할: 단일 애플리케이션을 비즈니스 영역이나 기능 모듈에 따라 작은 서비스 집합으로 나누고, 각 서비스는 독립적으로 실행되고 업그레이드됩니다.

2. 서비스 통신: 서비스는 경량 통신 메커니즘을 기반으로 서로 협력합니다. 통신 방법에는 RESTful API, 메시지 대기열, RPC 등이 포함됩니다.

3. 서비스 검색 및 등록: 서비스 등록 센터에 대한 서비스 등록, 서비스 검색 및 로드 밸런싱 등을 포함한 서비스 수명주기 관리

4. 데이터 파티셔닝: 데이터 파티셔닝을 통해 데이터를 여러 서비스로 분할하여 서비스 간 데이터 격리를 보장합니다.

5. 자동화된 운영 및 유지 관리: 자동화된 도구를 통해 서비스의 자동 배포, 모니터링 및 유지 관리를 실현하여 시스템의 안정성과 유지 관리 가능성을 향상시킵니다.

2. Spring Cloud 마이크로서비스 프레임워크

Spring Cloud는 Spring Boot를 기반으로 하는 마이크로서비스 프레임워크이며 완전한 마이크로서비스 개발 솔루션 세트를 제공합니다. Spring Cloud에는 다음과 같은 핵심 구성 요소가 포함됩니다.

1. 서비스 검색 및 등록: Eureka, Consul, Zookeeper 등

2. 클라이언트 로드 밸런싱: 리본.

3. 회로 차단기: Hystrix.

4. 서비스 게이트웨이: Zuul2.

5. 분산 구성 센터: Spring Cloud Config.

6. 메시지 버스: 스프링 클라우드 버스.

3. Spring Cloud 마이크로서비스 개발 실습

다음은 Spring Cloud 기반의 마이크로서비스 개발 실습을 소개하는 간단한 마이크로서비스 애플리케이션을 예로 들어 보겠습니다.

1. 유레카 등록 센터 만들기

먼저 유레카를 통해 서비스 검색 및 등록을 구현하려면 유레카 등록 센터를 만드세요.

Spring Boot 프로젝트에서 다음 종속성을 추가하여 Eureka를 통합합니다.

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

시작 클래스에 @EnableEurekaServer 주석을 추가합니다.

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

Eureka 등록 센터를 시작한 후 다음에서 http://localhost:8761에 액세스할 수 있습니다. 브라우저 등록 센터의 관리 인터페이스를 볼 수 있습니다.

2. 서비스 공급자 만들기

문자열을 반환하는 hello 인터페이스를 제공하는 간단한 서비스 공급자를 만듭니다.

Spring Boot 프로젝트에서 다음 종속성을 추가하여 Eureka와 Ribbon을 통합합니다.

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

서비스 공급자에서 @EnableDiscoveryClient 주석을 추가하여 Eureka 클라이언트를 활성화합니다.

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

Hello 인터페이스를 제공하는 RestController를 생성합니다.

@RestController
public class HelloController {
   @RequestMapping("/hello")
   public String hello() {
      return "Hello World!";
   }
}

3. 서비스 소비자 만들기

서비스 소비자를 만들고, 서비스 공급자가 제공하는 인터페이스를 호출하고, 리본을 통해 로드 밸런싱을 수행합니다.

Spring Boot 프로젝트에서 다음 종속성을 추가하여 Eureka와 Ribbon을 통합합니다.

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

서비스 소비자에서 @EnableDiscoveryClient 주석을 추가하여 Eureka 클라이언트를 활성화하고 @LoadBalanced 주석을 추가하여 리본 클라이언트 로드 밸런싱을 활성화합니다. :

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceConsumerApplication {
   public static void main(String[] args) {
      SpringApplication.run(ServiceConsumerApplication.class, args);
   }
 
   @Bean
   @LoadBalanced
   public RestTemplate restTemplate() {
      return new RestTemplate();
   }
}

서비스 제공자의 hello 인터페이스를 호출하는 RestController를 생성합니다:

@RestController
public class HelloController {
   @Autowired
   private RestTemplate restTemplate;
 
   @RequestMapping("/hello")
   public String hello() {
      String url = "http://service-provider/hello";
      return restTemplate.getForObject(url, String.class);
   }
}

4. 서비스 게이트웨이 생성

모든 마이크로서비스 인터페이스를 외부에 노출하고 Zuul을 통해 경로 전달 및 필터링을 구현하는 서비스 게이트웨이를 생성합니다.

Spring Boot 프로젝트에서 다음 종속성을 추가하여 Eureka와 Zuul을 통합합니다.

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

서비스 게이트웨이에서 @EnableZuulProxy 주석을 추가하여 Zuul을 활성화합니다.

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

게이트웨이 라우팅 정보를 구성하고 application.yml에 다음을 추가합니다. 구성:

zuul:
  routes:
    service-provider:
      path: /api/**
      serviceId: service-provider

5. 구성 센터 만들기

Git 웨어하우스를 통해 구성을 관리하는 구성 센터를 만들어 중앙 집중식 관리와 구성의 동적 새로 고침을 달성하세요.

Spring Boot 프로젝트에서 다음 종속성을 추가하여 구성 서버를 통합합니다.

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-config-server</artifactId>
</dependency>

구성 센터에서 @EnableConfigServer 주석을 추가하여 구성 센터를 활성화합니다.

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

Git 웨어하우스 정보 구성 및 application.yml 읽기 규칙:

spring:
  cloud:
    config:
      server:
        git:
          uri: git://http://gitlab.example.com/abc/config-repo.git
          search-paths: '{application}'
  profiles:
    active: native
  paths:
    config.path: /usr/local/config-repo

6. 서비스에 대한 회로 차단기를 구현합니다.

서비스가 비정상이거나 결함이 있는 경우 성능 저하 작업을 처리하기 위한 회로 차단기를 만듭니다.

Spring Boot 프로젝트에서 다음 종속성을 추가하여 Hystrix를 통합합니다.

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

서비스 공급자에서 @HystrixCommand 주석을 추가하여 회로 차단기를 구현합니다.

@RestController
public class HelloController {
   @RequestMapping("/hello")
   @HystrixCommand(fallbackMethod = "fallback")
   public String hello() {
      ...
   }
 
   public String fallback() {
      return "Fallback";
   }
}

7 서비스 모니터링 구현

모니터링 센터를 만듭니다. 서비스 상태를 실시간으로 모니터링하기 위해 마이크로서비스에서 제공하는 인터페이스의 모니터링 및 데이터 분석에 사용됩니다.

Spring Boot 프로젝트에서 다음 종속성을 추가하여 Hystrix Dashboard와 Turbine을 통합합니다.

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

在监控中心中,通过添加@EnableHystrixDashboard注解来启用Hystrix Dashboard:

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

在turbine服务提供者中,通过添加@EnableTurbine注解来启用Turbine:

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

在application.yml中配置Turbine的信息:

turbine:
  aggregator:
    clusterConfig: service-consumer
  appConfig: service-consumer,service-provider
  clusterNameExpression: new String("default")

四、总结

Spring Cloud是一套完备的微服务开发解决方案,通过其提供的一系列组件和架构设计原则,开发者可以轻松构建出高可用、高扩展和易维护的微服务应用。在实践中,我们发现Spring Cloud不但提供了完备的技术支持,同时还提供了很好的学习资源和社区支持,为微服务的发展贡献了不少力量。但是,在实践中也会遇到不少问题和挑战,包括配置管理、调用链跟踪、数据一致性等方面,需要我们不断地进行探索和实践,以解决这些难题。

위 내용은 Spring Cloud 기반 마이크로서비스 역량 개발 실습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.