내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
마이크로서비스는건축 양식(모놀리식 아키텍처, 수직 아키텍처, 분산 아키텍처, SOA 아키텍처와는 다름) 애플리케이션은 더 작은 프로세스 중심 서비스로 나뉩니다.
스프링 클라우드는마이크로서비스 프레임워크 , 다양한 분산 시스템 솔루션을 제공합니다. 마이크로서비스 개발 및 배포, 서비스 등록 및 검색, 서비스 거버넌스, 서비스 운영 및 유지 관리 등의 기능을 컴포넌트화를 통해 제공합니다.
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: 일괄 데이터 처리 작업을 완료하는 애플리케이션을 신속하게 구축하기 위한 단기 마이크로서비스 프레임워크입니다.
springcloud 튜토리얼--3. 마이크로서비스 회로 차단기 메커니즘, 회로 차단기 hystrix 사용에 대한 자세한 설명_Java 회로 차단기 구성 방법-CSDN 블로그
springcloud 튜토리얼--4. 게이트웨이 zuul_zuul 사용에 대한 자세한 설명 튜토리얼-CSDN 블로그
존재하다분산 시스템에서 , 서비스 노드에 장애가 발생하거나 네트워크 이상이 발생할 경우 호출자를 차단하고 대기할 수 있습니다. 시간 초과를 길게 설정하면 호출자의 리소스가 소진될 수 있습니다.이는 결국 호출자의 업스트림 시스템에서 리소스 고갈을 초래하고 궁극적으로 다음과 같은 결과를 초래합니다.시스템 눈사태 . 회로 차단기는 서비스 눈사태를 효과적으로 방지할 수 있습니다.
트래픽이 갑자기 증가하는 경우 일반적인 접근 방식은 다음과 같습니다.비핵심 비즈니스 기능핵심 비즈니스 기능의 정상적인 서비스를 보호하기 위해 서비스 저하 조치를 채택하는 반면, 핵심 기능 서비스에 대해서는 현재 제한 조치를 채택해야 합니다.
서비스 회로 차단기:일반적으로 서버 측에서 발생합니다(호출자가 빨리 실패하도록 하기 위한 목적). 서비스 시간이 초과되거나 비정상이 되면 실제 퓨즈와 유사한 퓨즈가 발생합니다. (때때로 특정 서비스를 호출할 때 예외가 발견되면 클라이언트에서 빠르게 실패하도록 구성할 수도 있습니다.)
서비스 저하: 일반적으로 클라이언트 측에서 발생합니다. 전체 웹사이트 요청 로드를 고려할 때 서비스 연결이 끊어지거나 종료되면 서비스가 더 이상 호출되지 않습니다. 갑작스러운 트래픽 발생 시 핵심 기능을 보호하기 위해 핵심 기능이 다운그레이드됩니다.
전류 제한: 일반적으로 서버 측에서 발생합니다.
@EnableCircuitBreaker: 애플리케이션에서 활성화됨퓨즈
@HistrixCommand(fallbackMethod="xxx폴백",명령속성 = {
}): 다운그레이드 주석에 융합 주석이 추가됩니다. 특정 융합 조건을 보려면 클릭하세요.HystrixPropertiesManager 종류확인하다.
- @HystrixCommand(fallbackMethod = "xxxFallback",commandProperties = {
- //20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用
- // 条件一: 请求数量达到3个
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "3"),
- // 条件二: 每20秒一个判断单位
- @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value = "20000"),
- // 条件三: 失败率30%
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "30"),
- // 结果: 熔断后, 30秒内不再请求远程服务
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "30000")
- })
FallbackFactory를 구현하기 위해 새 xxxFallbackFactory 클래스를 만들고 생성 메서드를 재정의합니다. 다운그레이드 메서드는 생성에 정의되어 있습니다.
@FeignCliend(fallbackFactory=xxxFallbackFactory.class): Histrix가 Feign에 통합되었습니다.
또는 메소드에 직접 fallback 메소드를 지정하십시오: @HistrixCommand(fallbackMethod="xxxFallback")
1、전류 제한 전략:
1) 세마포어 전류 제한
세마포어는 동시 스레드 수를 제어하는 데 사용됩니다. 생성자를 통해 내부 가상 라이선스 수를 지정합니다.
세마포어 격리 기술을 사용하면 요청이 수신될 때마다 서비스 자체 스레드가 종속 서비스를 직접 호출합니다. 세마포어는 각 스레드가 체크포인트를 통과한 후 1개씩 감소합니다. 0이면 더 이상 스레드 통과가 허용되지만 폴백 논리가 직접 실행되어 반환됩니다. 직설적으로 말하면 현재 제한일 뿐입니다.
세마포어는 다음과 같이 이해될 수 있습니다.카운터, 카운터는 현재 처리 중인 요청 수를 계산합니다. 카운터 값이 설정 값에 도달하면 후속 요청이 허용되지 않거나 다운그레이드되며 후속 요청이 허용되기 전에 카운터 값이 설정 값보다 작아질 때까지 기다려야 합니다. 처리됩니다.
- @HystrixCommand(
- commandProperties= {
- @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"),
- @HystrixProperty(name="execution.isolation.semaphore.maxConcurrentRequests", value="20")
- },
- fallbackMethod = "errMethod"
- )
2) 스레드 풀 현재 제한
- @HystrixCommand(
- commandProperties = {
- @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
- },
- threadPoolKey = "createOrderThreadPool",
- threadPoolProperties = {
- @HystrixProperty(name = "coreSize", value = "20"),
- @HystrixProperty(name = "maxQueueSize", value = "100"),
- @HystrixProperty(name = "maximumSize", value = "30"),
- @HystrixProperty(name = "queueSizeRejectionThreshold", value = "120")
- },
- fallbackMethod = "errMethod"
- )
여기에 참고하세요:java
스레드 풀에서 스레드 개수를 초과하는 경우coreSize
, 스레드 생성 요청이 먼저 대기열에 들어갑니다. 대기열이 가득 차면 스레드 수가 도달할 때까지 스레드가 계속 생성됩니다.maximumSize
, 그런 다음 거부 전략을 채택합니다.하지만 hystrix에서 구성한 스레드 풀에는 추가 매개변수가 있습니다.queueSizeRejectionThreshold
,만약에queueSizeRejectionThreshold < maxQueueSize
, 대기열 수가 도달했습니다.queueSizeRejectionThreshold
거부 전략을 채택할 것이므로maximumSize
실패한.만약에queueSizeRejectionThreshold > maxQueueSize
, 대기열 수가 도달했습니다.maxQueueSize
시간,maximumSize
유효하면 시스템은 숫자가 도달할 때까지 스레드를 계속 생성합니다.maximumSize
。
2. 세마포어 전류 제한과 스레드 풀 전류 제한의 차이점:
1) 성능 수준: 세마포어는 원본 스레드를 사용하며 성능 소모가 낮습니다.
2) 시스템 안정성 수준: 스레드 풀은 격리되어 있으며 자체 문제는 다른 스레드 풀에 영향을 미치지 않습니다.
3) 동기 및 비동기: 세마포어는 사용된 원래 스레드이므로 동기 및 차단입니다.
3. 현재 제한 전략 사용 시나리오:
요청 수가 매우 많고 스레드 격리의 오버헤드가 상대적으로 높은 경우 세마포어를 사용하여 로드를 줄이는 것이 좋습니다. 이러한 상황은 일반적으로 외부 서비스를 호출하지 않고 비네트워크 요청을 처리하는 데 사용됩니다. 다른 시나리오에서는 스레드 풀 방법을 사용하는 것이 좋습니다.
전류 제한은 트래픽 제한을 초과하지 않는 한 서비스를 계속 사용할 수 있으며(회로 차단기와는 다름) 다운그레이드할 필요가 없습니다. 호출자가 처리하도록 트래픽 제한 초과 예외가 발생할 수도 있습니다. 그 자체로). 이제 서킷 브레이커와 다운그레이드의 차이점에 대해 이야기해 보겠습니다.
서킷 브레이커는 서비스 전체를 사용할 수 없음(자체 보호에 중점)을 의미하고, 다운그레이드는 차선책을 선택하는 것을 의미하며(수익성 보호에 중점), 전류 제한은 초과할 수 없는 트래픽 양을 의미합니다.
기본적으로 hystrix는 요청 실패율이 10초 이내에 50%를 초과하는 것을 감지하면 회로 차단기 메커니즘을 트리거합니다. 그 후 마이크로서비스에 대한 요청은 5초마다 다시 시도됩니다. 마이크로서비스가 응답할 수 없으면 회로 차단기 메커니즘이 계속됩니다. 마이크로서비스에 연결할 수 있으면 회로 차단기 메커니즘이 꺼지고 일반 요청이 복원됩니다.
기본적으로 hystrix는 다음 4가지 조건에서 다운그레이드 메커니즘을 트리거합니다.
다운그레이드 메커니즘은 회로 차단기 중에 호출될 수 있지만 일반적으로 다운그레이드 중에는 회로 차단기 메커니즘이 호출되지 않습니다.서킷브레이커는 전체적인 관점에서 시작하여 시스템의 안정성을 보장하기 위해 서비스를 비활성화하는 반면, 다운그레이드는 차선책이자 보장된 솔루션을 제공하기 때문에 소유권 관계가 다릅니다(서킷브레이커 > 다운그레이드).
링크 내용 요약:
@FeignClient(name="eureka-HA",fallbackFactory=DeptClientServiceFallbackFactory.class)
인용하다:
SpringBoot 프로젝트 아키텍처의 실제 구현 "Gateway zuul 구축"-CSDN 블로그
인용하다:
SpringBoot 프로젝트 아키텍처 실전 "모 프로젝트 구축 및 등록센터 구축"_java 구축 springboot 모 프로젝트 스타트업-CSDN 블로그
서비스 등록: 서비스 공급자가 시작되면 서비스의 IP 주소, 포트 번호, 서비스 이름 및 기타 정보를 포함하여 등록 요청을 Eureka 서버로 보냅니다. 유레카 서버는 등록 요청을 받은 후 서비스 정보를 메모리에 저장하고 외부 서비스 등록 정보 조회 기능을 제공합니다.
서비스 검색: 서비스 소비자가 다른 서비스를 호출해야 하는 경우 Eureka 서버에 서비스 검색 요청을 보내 필요한 서비스 인스턴스 목록을 얻습니다. 요청을 받은 후 유레카 서버는 서비스의 IP 주소, 포트 번호 및 기타 정보를 포함하여 해당 서비스의 인스턴스 목록을 반환합니다. 서비스 소비자는 반환된 인스턴스 목록을 기반으로 호출(로드 밸런싱)할 서비스 인스턴스 중 하나를 선택합니다.
하트비트 상태 확인: 서비스 제공업체는 정기적으로 하트비트 패킷을 Eureka 서버에 전송하여 해당 서비스가 정상적으로 작동하고 있음을 증명합니다. 유레카 서버는 일정 시간 내에 서비스 인스턴스로부터 하트비트 패킷을 수신하지 못하면 서비스 인스턴스가 다운된 것으로 간주하고 서비스 목록에서 제거합니다.
Seata TCC 모드 실습(2부) - 알리바바 클라우드 개발자 커뮤니티Seata TCC 모드 실전 (후편)한국어: https://developer.aliyun.com/article/1053737?spm=5176.26934562.main.1.799c6a03T45SJ9위 블로그 게시물은 다양한 상태 표시기로 판단할 수 있는 정지 문제를 해결하지 않습니다.
https://www.cnblogs.com/lilpig/p/16613226.htmlhttps://www.cnblogs.com/lilpig/p/16613226.html
TM: @GlobalTransaction 주석으로 생성된 트랜잭션 관리자입니다.
TC: 코디네이터
RM:참가자
전체 과정은 다음과 같습니다.
TM은 실행을 시작하기 전에 글로벌 트랜잭션을 프록시하고 TC에 등록합니다.
TM은 글로벌 트랜잭션의 각 Branch 트랜잭션 실행을 시작하고, RM은 Branch 트랜잭션과 실행 상태를 등록하여 TC에 보고합니다.
분기 트랜잭션 실행이 완료된 후 TM은 TC에 전역 트랜잭션을 커밋하거나 롤백하라는 요청을 시작합니다.
예약이란 데이터베이스 자원을 잠그고 중간 상태로 업데이트한 후, 확인 후 2단계 커밋을 수행하면 유효한 상태로 변경하는 것을 의미한다.따라서 예약 단계와 커밋 롤백 단계는모두 데이터베이스 운영과 관련됩니다., 따라서 수동 처리가 필요한 확인 및 롤백 실패도 있을 수 있으며, 이는 로그 기록, 재시도 보상 등을 통해 해결할 수 있습니다.
TCC 모드의 장점:
TCC 모드의 단점:
Confirm
그리고Cancel
실패할 수도 있으며 이 프로세스를 처리해야 합니다.각 참가자의 로컬 트랜잭션이 커밋되고 롤백되는 시기를 조정하여 강력한 일관성을 제공합니다.
XA 모드의 장점:
XA 모드의 단점:
약한 일관성