기술나눔

스프링클라우드

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. 마이크로서비스란 무엇입니까?

1. 기본 개념

마이크로서비스는건축 양식(모놀리식 아키텍처, 수직 아키텍처, 분산 아키텍처, SOA 아키텍처와는 다름) 애플리케이션은 더 작은 프로세스 중심 서비스로 나뉩니다.

2. 마이크로서비스의 특징

  1. 경량: 복잡한 시스템이나 서비스를 수직으로 분할하고 각 마이크로서비스는 특별한 문제 해결에 중점을 둡니다.
  2. 낮은 결합도: 각 분할 서비스는 코드, 리소스, 환경 측면에서 서로 독립적이며 독립적으로 개발, 테스트, 배포 및 유지 관리가 가능하므로 시스템 안정성에 유리합니다(문제 발생 시 영향이 줄어듭니다). 발생) 및 확장(자원 확장) 자원 평가가 더 편리하고 덜 위험합니다.
  3. 크로스 플랫폼: 다양한 마이크로서비스는 다양한 개발 언어를 사용하고 다양한 환경에서 실행될 수 있습니다.

2. 스프링클라우드란 무엇인가요?

1. 기본 개념:

스프링 클라우드는마이크로서비스 프레임워크 , 다양한 분산 시스템 솔루션을 제공합니다. 마이크로서비스 개발 및 배포, 서비스 등록 및 검색, 서비스 거버넌스, 서비스 운영 및 유지 관리 등의 기능을 컴포넌트화를 통해 제공합니다.

2. 일반적으로 사용되는 구성 요소:

1)스프링 클라우드 넷플릭스:

유레카: 등록 센터

리본: 로드 밸런싱

가장: 원격 통화

Hystrix: 서비스 회로 차단기

Zuul/게이트웨이: 게이트웨이

2)Spring Cloud Config: 중앙 집중식 구성 관리 도구, 애플리케이션 구성의 외부 저장소를 Spring 또는 비Spring 애플리케이션에 사용할 수 있습니다.

3)Spring Cloud Bus: 클러스터의 상태 변경 또는 구성 변경 이벤트를 전파하는 데 사용되는 이벤트 및 메시지 버스입니다.

4)Spring Cloud Consul: Docker 컨테이너와 완벽하게 통합된 서비스 검색 및 구성 도구입니다.

5)Spring Cloud Security: 애플리케이션 보안 및 인증을 지원하는 보안 툴킷입니다.

6)Spring Cloud Sleuth: 분산 호출 체인 추적, Zipkin, HTrace 및 ELK 추적과 호환됩니다.

7)Spring Cloud Cluster: Zookeeper, Redis 및 Consul의 추상화를 통해 구현되는 리더 선택.

8)Spring Cloud 데이터 흐름: 드래그 앤 드롭 인터페이스 또는 REST API를 통해 사용하기 쉬운 마이크로서비스 오케스트레이션.

9)Spring Cloud Stream: 외부 시스템에 연결하는 애플리케이션을 신속하게 구축하기 위한 경량 이벤트 중심 마이크로서비스 프레임워크입니다.

10)Spring Cloud Task: 일괄 데이터 처리 작업을 완료하는 애플리케이션을 신속하게 구축하기 위한 단기 마이크로서비스 프레임워크입니다.

3. SpringCloud 구성 요소를 사용하는 단계

springcloud 튜토리얼--3. 마이크로서비스 회로 차단기 메커니즘, 회로 차단기 hystrix 사용에 대한 자세한 설명_Java 회로 차단기 구성 방법-CSDN 블로그

springcloud 튜토리얼--4. 게이트웨이 zuul_zuul 사용에 대한 자세한 설명 튜토리얼-CSDN 블로그

1. Hystrix(퓨즈, 다운그레이드, 전류 제한)

1) 그것은 무엇을 합니까?

존재하다분산 시스템에서 , 서비스 노드에 장애가 발생하거나 네트워크 이상이 발생할 경우 호출자를 차단하고 대기할 수 있습니다. 시간 초과를 길게 설정하면 호출자의 리소스가 소진될 수 있습니다.이는 결국 호출자의 업스트림 시스템에서 리소스 고갈을 초래하고 궁극적으로 다음과 같은 결과를 초래합니다.시스템 눈사태 . 회로 차단기는 서비스 눈사태를 효과적으로 방지할 수 있습니다.

트래픽이 갑자기 증가하는 경우 일반적인 접근 방식은 다음과 같습니다.비핵심 비즈니스 기능핵심 비즈니스 기능의 정상적인 서비스를 보호하기 위해 서비스 저하 조치를 채택하는 반면, 핵심 기능 서비스에 대해서는 현재 제한 조치를 채택해야 합니다.

2) 클라이언트 측에서 발생합니까, 아니면 서버 측에서 발생합니까?

서비스 회로 차단기:일반적으로 서버 측에서 발생합니다(호출자가 빨리 실패하도록 하기 위한 목적). 서비스 시간이 초과되거나 비정상이 되면 실제 퓨즈와 유사한 퓨즈가 발생합니다. (때때로 특정 서비스를 호출할 때 예외가 발견되면 클라이언트에서 빠르게 실패하도록 구성할 수도 있습니다.)
서비스 저하: 일반적으로 클라이언트 측에서 발생합니다. 전체 웹사이트 요청 로드를 고려할 때 서비스 연결이 끊어지거나 종료되면 서비스가 더 이상 호출되지 않습니다. 갑작스러운 트래픽 발생 시 핵심 기능을 보호하기 위해 핵심 기능이 다운그레이드됩니다.

전류 제한: 일반적으로 서버 측에서 발생합니다.

3) 사용방법

  • 붕괴:

@EnableCircuitBreaker: 애플리케이션에서 활성화됨퓨즈

@HistrixCommand(fallbackMethod="xxx폴백",명령속성 = {
}): 다운그레이드 주석에 융합 주석이 추가됩니다. 특정 융합 조건을 보려면 클릭하세요.HystrixPropertiesManager 종류확인하다.

  1. @HystrixCommand(fallbackMethod = "xxxFallback",commandProperties = {
  2. //20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用
  3. // 条件一: 请求数量达到3个
  4. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "3"),
  5. // 条件二: 每20秒一个判断单位
  6. @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value = "20000"),
  7. // 条件三: 失败率30%
  8. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "30"),
  9. // 结果: 熔断后, 30秒内不再请求远程服务
  10. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "30000")
  11. })
  • 다운그레이드:

FallbackFactory를 구현하기 위해 새 xxxFallbackFactory 클래스를 만들고 생성 메서드를 재정의합니다. 다운그레이드 메서드는 생성에 정의되어 있습니다.

@FeignCliend(fallbackFactory=xxxFallbackFactory.class): Histrix가 Feign에 통합되었습니다.

또는 메소드에 직접 fallback 메소드를 지정하십시오: @HistrixCommand(fallbackMethod="xxxFallback")

  • 제한:

        1、전류 제한 전략:

1) 세마포어 전류 제한

세마포어는 동시 스레드 수를 제어하는 ​​데 사용됩니다. 생성자를 통해 내부 가상 라이선스 수를 지정합니다.

세마포어 격리 기술을 사용하면 요청이 수신될 때마다 서비스 자체 스레드가 종속 서비스를 직접 호출합니다. 세마포어는 각 스레드가 체크포인트를 통과한 후 1개씩 감소합니다. 0이면 더 이상 스레드 통과가 허용되지만 폴백 논리가 직접 실행되어 반환됩니다. 직설적으로 말하면 현재 제한일 뿐입니다.

세마포어는 다음과 같이 이해될 수 있습니다.카운터, 카운터는 현재 처리 중인 요청 수를 계산합니다. 카운터 값이 설정 값에 도달하면 후속 요청이 허용되지 않거나 다운그레이드되며 후속 요청이 허용되기 전에 카운터 값이 설정 값보다 작아질 때까지 기다려야 합니다. 처리됩니다.

  1. @HystrixCommand(
  2. commandProperties= {
  3. @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"),
  4. @HystrixProperty(name="execution.isolation.semaphore.maxConcurrentRequests", value="20")
  5. },
  6. fallbackMethod = "errMethod"
  7. )

2) 스레드 풀 현재 제한

  1. @HystrixCommand(
  2. commandProperties = {
  3. @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
  4. },
  5. threadPoolKey = "createOrderThreadPool",
  6. threadPoolProperties = {
  7. @HystrixProperty(name = "coreSize", value = "20"),
  8. @HystrixProperty(name = "maxQueueSize", value = "100"),
  9. @HystrixProperty(name = "maximumSize", value = "30"),
  10. @HystrixProperty(name = "queueSizeRejectionThreshold", value = "120")
  11. },
  12. fallbackMethod = "errMethod"
  13. )

여기에 참고하세요:java스레드 풀에서 스레드 개수를 초과하는 경우coreSize, 스레드 생성 요청이 먼저 대기열에 들어갑니다. 대기열이 가득 차면 스레드 수가 도달할 때까지 스레드가 계속 생성됩니다.maximumSize , 그런 다음 거부 전략을 채택합니다.하지만 hystrix에서 구성한 스레드 풀에는 추가 매개변수가 있습니다.queueSizeRejectionThreshold,만약에queueSizeRejectionThreshold < maxQueueSize, 대기열 수가 도달했습니다.queueSizeRejectionThreshold거부 전략을 채택할 것이므로maximumSize 실패한.만약에queueSizeRejectionThreshold > maxQueueSize, 대기열 수가 도달했습니다.maxQueueSize시간,maximumSize유효하면 시스템은 숫자가 도달할 때까지 스레드를 계속 생성합니다.maximumSize

      2. 세마포어 전류 제한과 스레드 풀 전류 제한의 차이점:

1) 성능 수준: 세마포어는 원본 스레드를 사용하며 성능 소모가 낮습니다.

2) 시스템 안정성 수준: 스레드 풀은 격리되어 있으며 자체 문제는 다른 스레드 풀에 영향을 미치지 않습니다.

3) 동기 및 비동기: 세마포어는 사용된 원래 스레드이므로 동기 및 차단입니다.

        3. 현재 제한 전략 사용 시나리오:

요청 수가 매우 많고 스레드 격리의 오버헤드가 상대적으로 높은 경우 세마포어를 사용하여 로드를 줄이는 것이 좋습니다. 이러한 상황은 일반적으로 외부 서비스를 호출하지 않고 비네트워크 요청을 처리하는 데 사용됩니다. 다른 시나리오에서는 스레드 풀 방법을 사용하는 것이 좋습니다.

4) 세 가지의 차이점은 무엇입니까?

전류 제한은 트래픽 제한을 초과하지 않는 한 서비스를 계속 사용할 수 있으며(회로 차단기와는 다름) 다운그레이드할 필요가 없습니다. 호출자가 처리하도록 트래픽 제한 초과 예외가 발생할 수도 있습니다. 그 자체로). 이제 서킷 브레이커와 다운그레이드의 차이점에 대해 이야기해 보겠습니다.

  • 다른 개념

서킷 브레이커는 서비스 전체를 사용할 수 없음(자체 보호에 중점)을 의미하고, 다운그레이드는 차선책을 선택하는 것을 의미하며(수익성 보호에 중점), 전류 제한은 초과할 수 없는 트래픽 양을 의미합니다.

  • 다양한 트리거링 메커니즘

기본적으로 hystrix는 요청 실패율이 10초 이내에 50%를 초과하는 것을 감지하면 회로 차단기 메커니즘을 트리거합니다. 그 후 마이크로서비스에 대한 요청은 5초마다 다시 시도됩니다. 마이크로서비스가 응답할 수 없으면 회로 차단기 메커니즘이 계속됩니다. 마이크로서비스에 연결할 수 있으면 회로 차단기 메커니즘이 꺼지고 일반 요청이 복원됩니다.

기본적으로 hystrix는 다음 4가지 조건에서 다운그레이드 메커니즘을 트리거합니다.

  1. 메소드가 HystrixBadRequestException을 발생시킵니다.
  2. 메소드 호출 시간 초과
  3. 통화를 차단하려면 회로 차단기를 켜세요.
  4. 스레드 풀, 큐 또는 세마포어가 가득 찼습니다.
  • 다양한 소유권 관계

다운그레이드 메커니즘은 회로 차단기 중에 호출될 수 있지만 일반적으로 다운그레이드 중에는 회로 차단기 메커니즘이 호출되지 않습니다.서킷브레이커는 전체적인 관점에서 시작하여 시스템의 안정성을 보장하기 위해 서비스를 비활성화하는 반면, 다운그레이드는 차선책이자 보장된 솔루션을 제공하기 때문에 소유권 관계가 다릅니다(서킷브레이커 &gt; 다운그레이드).

2. Feign 및 RestTemplate

링크 내용 요약:

  1. 스타터 종속성을 추가합니다.
  2. 주석 추가: @EnableFeignClients;
  3. Feign 인터페이스 생성:

@FeignClient(name="eureka-HA",fallbackFactory=DeptClientServiceFallbackFactory.class)

springcloud tutorial-- 1. 초급 데모를 빠르게 구축하세요. 이 기사를 읽어보세요_Ye Juyan-GitCode 오픈 소스 커뮤니티더 이상 고민할 필요 없이 저를 따라와서 첫 번째 Spring Cloud 경험을 시작해 보세요. 먼저 마이크로서비스의 기본 구성 요소를 검토하세요. [여기 그림] 생산자: 서비스 제공 소비자: 서비스 사용 서비스 등록/검색 센터: 서비스 등록, 검색, 모니터링 그럼 먼저 springcloud 마이크로서비스의 아키텍처 기반 이해: 생산자(클라이언트), 소비자(클라이언트), 서비스 등록/검색 센터(서버) Ye Juyan GitCode 오픈 소스 커뮤니티아이콘-기본.png?t=N7T8https://gitcode.csdn.net/65e840841a836825ed78b9d0.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MzI1MTQ3NiwiZXhwIjoxNzIxMTM0MjcwLCJpYXQiOjE3MjA1Mjk0NzAsInVzZXJuYW1lIjoicXFfMTk5NTIwMjkifQ.7co5oRDfDrxtdqIsV-9AjJacdbURh-cikj5Rtxt7Z1c

3. Zuul의 사용

인용하다:

SpringBoot 프로젝트 아키텍처의 실제 구현 "Gateway zuul 구축"-CSDN 블로그

4. 등록센터 유레카 이용

인용하다:

SpringBoot 프로젝트 아키텍처 실전 "모 프로젝트 구축 및 등록센터 구축"_java 구축 springboot 모 프로젝트 스타트업-CSDN 블로그

4. SpringCloud의 작동 방식

1. 유레카 작동 원리:

  1. 서비스 등록: 서비스 공급자가 시작되면 서비스의 IP 주소, 포트 번호, 서비스 이름 및 기타 정보를 포함하여 등록 요청을 Eureka 서버로 보냅니다. 유레카 서버는 등록 요청을 받은 후 서비스 정보를 메모리에 저장하고 외부 서비스 등록 정보 조회 기능을 제공합니다.

  2. 서비스 검색: 서비스 소비자가 다른 서비스를 호출해야 하는 경우 Eureka 서버에 서비스 검색 요청을 보내 필요한 서비스 인스턴스 목록을 얻습니다. 요청을 받은 후 유레카 서버는 서비스의 IP 주소, 포트 번호 및 기타 정보를 포함하여 해당 서비스의 인스턴스 목록을 반환합니다. 서비스 소비자는 반환된 인스턴스 목록을 기반으로 호출(로드 밸런싱)할 서비스 인스턴스 중 하나를 선택합니다.

  3. 하트비트 상태 확인: 서비스 제공업체는 정기적으로 하트비트 패킷을 Eureka 서버에 전송하여 해당 서비스가 정상적으로 작동하고 있음을 증명합니다. 유레카 서버는 일정 시간 내에 서비스 인스턴스로부터 하트비트 패킷을 수신하지 못하면 서비스 인스턴스가 다운된 것으로 간주하고 서비스 목록에서 제거합니다.

5. SpringCloud 기본 소스 코드

1. 게이트웨이 Zuul 소스 코드

SpringBoot 프로젝트 아키텍처의 실제 구현 "Gateway zuul 구축"-CSDN 블로그 이 기사는 227번 조회되고 읽혔습니다. 3장 게이트웨이 Zuul 구축 서문: 1. 주요 기능 Zuul은 주로 동적 라우팅(내장 리본 구현) 및 필터링(통합 인증 필터, 회색조 게시 필터, 흑백 목록 IP 필터, 서비스 전류 제한 필터로 사용 가능)을 제공합니다. (Sentinel로 구현 가능)) 기능 2. Spring Cloud GateWay와의 차이점은 서로 다른 두 오픈소스 기관에서 제공하는 게이트웨이 솔루션이라는 점입니다. Spring Cloud GateWay는 비차단 API, 내장 전류 제한 필터를 사용하고 긴 연결(예: 웹소켓)을 지원하며 높은 동시성 및 느린 백엔드 서비스 응답 시나리오에서 Zuul보다 낫습니다.https://blog.csdn.net/qq_19952029/article/details/124285479

2. 등록센터 유레카 소스코드

3. 회로 차단기 Histrix 소스 코드

4. 구성 센터 구성 소스 코드

5. 로드 밸런싱 리본 소스 코드

6. 마이크로서비스는 Feign 소스 코드를 호출합니다.

6. SpringCloud가 분산 트랜잭션을 구현하는 방법

Seata TCC 모드 실습(2부) - 알리바바 클라우드 개발자 커뮤니티Seata TCC 모드 실전 (후편)아이콘-기본.png?t=N7T8한국어: https://developer.aliyun.com/article/1053737?spm=5176.26934562.main.1.799c6a03T45SJ9위 블로그 게시물은 다양한 상태 표시기로 판단할 수 있는 정지 문제를 해결하지 않습니다.

https://www.cnblogs.com/lilpig/p/16613226.html아이콘-기본.png?t=N7T8https://www.cnblogs.com/lilpig/p/16613226.html

1. TCC 모드 역할

TM: @GlobalTransaction 주석으로 생성된 트랜잭션 관리자입니다.

TC: 코디네이터

RM:참가자

전체 과정은 다음과 같습니다.

TM은 실행을 시작하기 전에 글로벌 트랜잭션을 프록시하고 TC에 등록합니다.
TM은 글로벌 트랜잭션의 각 Branch 트랜잭션 실행을 시작하고, RM은 Branch 트랜잭션과 실행 상태를 등록하여 TC에 보고합니다.
분기 트랜잭션 실행이 완료된 후 TM은 TC에 전역 트랜잭션을 커밋하거나 롤백하라는 요청을 시작합니다.

2. TCC 자원 예약, 제출, 롤백의 의미.

예약이란 데이터베이스 자원을 잠그고 중간 상태로 업데이트한 후, 확인 후 2단계 커밋을 수행하면 유효한 상태로 변경하는 것을 의미한다.따라서 예약 단계와 커밋 롤백 단계는모두 데이터베이스 운영과 관련됩니다., 따라서 수동 처리가 필요한 확인 및 롤백 실패도 있을 수 있으며, 이는 로그 기록, 재시도 보상 등을 통해 해결할 수 있습니다.

3. TCC의 장점과 단점

TCC 모드의 장점

  1. 한 단계에서 직접 제출, DB 잠금 없음, 기타 잠금 없음, 우수한 성능
  2. 예약 및 복구 로직은 직접 작성하며 데이터베이스에 의존하지 않으며 비트랜잭션 데이터베이스에서도 사용할 수 있습니다.

TCC 모드의 단점

  1. 코딩이 복잡하다
  2. 약하게 일관성이 있음
  3. 왜냐하면Confirm그리고Cancel실패할 수도 있으며 이 프로세스를 처리해야 합니다.
  4. 예를 들어, 주문을 하는 것은 새로운 행을 추가하는 과정이므로 TCC를 사용할 방법이나 필요가 없습니다.

4. XA 모드

각 참가자의 로컬 트랜잭션이 커밋되고 롤백되는 시기를 조정하여 강력한 일관성을 제공합니다.

XA 모드의 장점

  1. 구현이 용이합니다. 대부분의 데이터베이스가 이미 XA 트랜잭션을 지원하므로 Seata는 간단한 패키징만 하면 됩니다.
  2. 강력한 일관성

XA 모드의 단점

  1. 각 트랜잭션은 모든 트랜잭션 처리가 완료될 때까지 기다려야 하므로 데이터베이스 잠금을 차지하므로 성능이 저하되고 가용성이 낮아집니다.
  2. 데이터베이스가 XA 트랜잭션을 지원하지 않는 경우에는 사용할 수 없습니다.

5. AT 모드

약한 일관성