Springcloud 의 region 과 zone 사용 실례
사용자 수가 많 거나 사용자 의 지리 적 위치 분포 범위 가 넓 은 프로젝트 는 보통 여러 개의 기관실 이 있다.이 럴 때 springCloud 서 비 스 를 시작 하면 같은 기내 서 비 스 를 우선 호출 하 기 를 바 랍 니 다.
같은 기관실 의 서비스 가 사용 되 지 않 을 때 다른 기관실 의 서 비 스 를 호출 하여 지연 을 줄 이 는 역할 을 한다.
개념
eureka 는 region 과 zone 두 가지 개념 을 제공 하여 구역 을 나 누 었 는데 이 두 가지 개념 은 모두 아마 존의 AWS 에서 나 온 것 이다.
(1)region:지리 적 인 구역 으로 간단하게 이해 할 수 있 습 니 다.예 를 들 어 아시아 지역 이나 화북 지역,또는 베 이 징 등 구체 적 인 크기 의 제한 이 없습니다.프로젝트 의 구체 적 인 상황 에 따라 스스로 region 을 합 리 적 으로 구분 할 수 있다.
(2)zone:region 내의 구체 적 인 기관실 로 간단하게 이해 할 수 있 습 니 다.예 를 들 어 region 은 베 이 징 으로 나 눈 다음 에 베 이 징 에 두 개의 기관실 이 있 으 면 이 region 아래 에 zone 1,zone 2 두 개의 zone 을 나 눌 수 있 습 니 다.
3.분 구 서비스의 배치 구조 도
위의 그림 에서 보 듯 이 하나의 region:beijing 이 있 고 아래 에는 zone-1 과 zone-2 두 개의 구역 이 있 으 며 각 구역 에는 등록 센터 인 Eureka Server 와 서비스 제공 자 Service 가 있 습 니 다.저 희 는 zone-1 에 하 나 를 만 듭 니 다.
Consumer-1 서비스 소비자 의 경우 같은 zone 내의 Service-1 을 우선 호출 하고 Service-1 을 사용 할 수 없 을 때 zone-2 내의 Service-2 를 호출 합 니 다.
예
(1)Eureka Server-1:
spring:
application:
name: Server-1
server:
port: 30000
eureka:
instance:
prefer-ip-address: true
status-page-url-path: /actuator/info
health-check-url-path: /actuator/health
hostname: localhost
client:
register-with-eureka: true
fetch-registry: true
prefer-same-zone-eureka: true
#
region: beijing
availability-zones:
beijing: zone-1,zone-2
service-url:
zone-1: http://localhost:30000/eureka/
zone-2: http://localhost:30001/eureka/
(2)Eureka Server-2:
spring:
application:
name: Server-2
server:
port: 30001
eureka:
instance:
prefer-ip-address: true
status-page-url-path: /actuator/info
health-check-url-path: /actuator/health
hostname: localhost
client:
register-with-eureka: true
fetch-registry: true
prefer-same-zone-eureka: true
#
region: beijing
availability-zones:
beijing: zone-2,zone-1
service-url:
zone-1: http://localhost:30000/eureka/
zone-2: http://localhost:30001/eureka/
(3)Service1테스트 코드
@RestController
public class HiController {
@Value("${zone.name}")
private String zoneName;
@RequestMapping(value = "/hi", method = RequestMethod.GET)
public String hi() {
return zoneName;
}
}
프로필
spring:
application:
name: service
server:
port: 30010
eureka:
instance:
prefer-ip-address: true
status-page-url-path: /actuator/info
health-check-url-path: /actuator/health
metadata-map:
zone: zone-1
client:
register-with-eureka: true
fetch-registry: true
prefer-same-zone-eureka: true
#
region: beijing
availability-zones:
beijing: zone-1,zone-2
service-url:
zone-1: http://localhost:30000/eureka/
zone-2: http://localhost:30001/eureka/
(4)Service2
spring:
application:
name: service
server:
port: 30011
eureka:
instance:
prefer-ip-address: true
status-page-url-path: /actuator/info
health-check-url-path: /actuator/health
metadata-map:
zone: zone-2
client:
register-with-eureka: true
fetch-registry: true
prefer-same-zone-eureka: true
#
region: beijing
availability-zones:
beijing: zone-2,zone-1
service-url:
zone-1: http://localhost:30000/eureka/
zone-2: http://localhost:30001/eureka/
zone.name: zone-2(5)Consumer-1
테스트 코드
@RestController
public class HiController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value="/consumer")
public String hi() {
return restTemplate.getForObject("http://service/hi", String.class);
}
}
프로필
spring:
application:
name: consumer
server:
port: 30030
eureka:
instance:
prefer-ip-address: true
status-page-url-path: /actuator/info
health-check-url-path: /actuator/health
metadata-map:
zone: zone-1
client:
register-with-eureka: true
fetch-registry: true
prefer-same-zone-eureka: true
#
region: beijing
availability-zones:
beijing: zone-1,zone-2
service-url:
zone-1: http://localhost:30000/eureka/
zone-2: http://localhost:30001/eureka/
5.프로필 상세 설명전체 파 티 션 은 두 단계 로 나 뉜 다.
(1)서비스 등록:서비스 가 같은 zone 내 등록 센터 에 등록 하도록 해 야 합 니 다.다른 zone 의 등록 센터 에 등록 하면 네트워크 지연 이 비교적 크 고 심장 박동 검사 에 문제 가 생 길 수 있 기 때 문 입 니 다.
(2)서비스 호출:같은 zone 내의 서 비 스 를 우선 호출 할 수 있 도록 해 야 합 니 다.같은 zone 내의 서비스 가 사용 되 지 않 을 때 만 다른 zone 의 서 비 스 를 호출 할 수 있 습 니 다.
1.서비스 등 록 된 프로필
eureka:
client:
prefer-same-zone-eureka: true
#
region: beijing
availability-zones:
beijing: zone-1,zone-2
service-url:
zone-1: http://localhost:30000/eureka/
zone-2: http://localhost:30001/eureka/
서비스(eureka client)가 등록 센터(eureka server)에 등록 할 때 eureka.client 의 설정 에 따라 등록 합 니 다.여기 서 우 리 는 주로 여러 개의 등록 센터 가 있 는 상황 에서 서비스 회의 에 관심 을 가진다.어느 등록 센터 에 등록 하고 어느 등록 센터 와 함께 심장 박동 검 사 를 유지 합 니까?등록 센터 선택 논리:
(1)prefer-same-zone-eureka 가 false 라면 service-url 의 list 에 따라 첫 번 째 등록 센터 를 등록 하고 심장 박동 검 사 를 유지 합 니 다.리스트 내의 다른 등록 센터 에 심장 박동 을 등록 하고 유지 하지 않 습 니 다.오직
하나의 등록 이 실패 한 경우 에 만 차례대로 다른 등록 센터 에 등록 할 수 있 습 니 다.총 3 번 재 시도 합 니 다.3 개의 service-url 이 등록 되 지 않 으 면 등록 이 실 패 했 습 니 다.심장 박동 시간 마다 다시 시도 한다.
(2)prefer-same-zone-eureka 가 true 라면 region 을 통 해 availability-zones 내 첫 번 째 zone 을 가 져 온 다음 이 zone 을 통 해 service-url 아래 list 를 가 져 오고 list 내 첫 번 째 등록 센터 에 등록 합 니 다.
심장 박동 을 유지 하고 리스트 에 있 는 다른 등록 센터 에 심장 박동 을 등록 하거나 유지 하지 않 습 니 다.첫 번 째 등록 에 실패 한 경우 에 만 차례대로 다른 등록 센터 에 등록 할 수 있 으 며,총 3 회 재 시도 합 니 다.만약 3 개의 service-url 이 등록 되 지 않 았 다 면.
공,등록 실패.심장 박동 시간 마다 다시 시도 한다.
따라서 서비스 가 같은 zone 의 등록 센터 에 등록 되 는 것 을 확보 하기 위해 서 는 availability-zones 의 순 서 를 주의해 야 합 니 다.같은 zone 을 앞 에 써 야 합 니 다.
2.서비스 호출 프로필
eureka:
instance:
metadata-map:
zone: zone-1
서비스 소비자 와 서비스 제공 자 는 각각 어느 zone 에 속 하 는 지 eureka.intance.metadata-map.zone 을 통 해 판단 된다.서비스 소비 자 는 먼저 ribbon 을 통 해 등록 센터 에 가서 서비스 제공 자의 목록 을 끌 어 온 다음 에 통 할 것 이다.eureka.intance.metadata-map.zone 이 지정 한 zone 을 거 른 후 같은 zone 내 서비스 제공 자 에 게 여러 개의 인 스 턴 스 가 있 으 면 돌아 가면 서 호출 합 니 다.같은 zone 에 있 는 모든 서비스 제공 자 만 이
사용 가능 할 때 만 다른 zone 내의 서비스 제공 자 를 호출 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.