개요
지금 요구 사항이 있다고 가정 해 봅시다.
우리의 응용 프로그램은 10 대의 기계에 배포됩니다. 특정 구성 매개 변수를 조정하면 컴퓨터를 다시 시작할 필요가 없습니다. 10 기계는 최신 구성을 자동으로 얻을 수 있습니다.
그것을 달성하는 방법? 다음과 같은 많은 종류가 있습니다.
1. 구성을 데이터베이스에 배치하고 매번 응용 프로그램이 DB에서 직접 구성을 읽습니다. 이러한 방식으로 DB를 변경하고 최신 구성 정보를 데이터베이스에 업데이트하면됩니다. 이런 식으로, 얼마나 많은 응용 프로그램이 있더라도 모두 동일한 DB에서 구성 정보를 얻으므로 자연스럽게 최신 구성을 얻을 수 있습니다.
2. 각 컴퓨터는 구성 정보를 업데이트하는 UpdateConfig 인터페이스를 제공합니다. 구성을 수정 해야하는 경우 서버의 UpdateConfig 인터페이스를 하나씩 호출합니다.
3. Redis를 사용하여 구현하고 구성 정보를 Redis에 배치하지만 이러한 방식으로 더 많은 네트워크 요청이있는 경우 매번 읽어야합니다.
위의 세 가지 방법은 생각하기가 가장 쉽고 수행하기 쉽지만 물론 많은 단점이 있습니다. 단점이 많지만 일부 전통적인 회사는이 작업을 수행합니다.
인터넷 회사에서는 기본적으로 이런 식으로 플레이하는 사람을 본 적이 없으며 모두 분산 구성 센터를 사용합니다. 오픈 소스를 사용하거나 직접 구현하십시오. 현재 오픈 소스 분산 구성 센터가 많이 있으며 스프링 클라우드 구성이 가장 좋습니다. 다음으로 Spring Cloud Config를 사용하여 분산 구성 센터를 구현합니다.
최신 Spring Boot 2.0 버전 사용 여부
최신 Spring Cloud 2.0을 사용하여 구성 센터 인 분산 데모를 수행했습니다. 나는 그것이 단순하다고 생각했지만 하루 종일 그것을 끝내기 위해 걸렸다. 몇 가지 이유가 있습니다.
1. 스프링 클라우드의 해당 문서는 완전히 업데이트되지 않았으며 문제가 있으며 문서에서 찾을 수 없습니다.
2. 현재 버전 2.0을 사용하는 회사는 거의 없으며 인터넷에는 특정한 기사가 없습니다. 문제가 발생한 후 Baidu는 해결책을 찾을 수 없었습니다. Google은 기본적으로 솔루션을 찾기가 어렵습니다.이 모든 것은 산발적 인 지식 조각입니다.
3. 2.0 버전에는 구성 및 버스에 약간의 변경 사항이 있으며 1.5.x 버전에 따라 여전히 수행되지 않으면 작동하지 않습니다.
위의 이유에 따라 1.5.x 버전을 사용하여보다 신뢰할 수 있습니다. 다음 기사는 다음 버전으로 소개됩니다.
봄 부츠 :
1.5.2. release
해당 스프링 클라우드가 사용합니다.
Dalston.release
스프링 클라우드 구성 서버를 구축하십시오
Spring Cloud Config를 통해 구성을 균일하게 관리하고 싶고 구성 센터에서 당분간 고도로 사용할 수있게하려면 구성 및 버스 구성 요소 만 있으면됩니다. 그러나 고 가용성을 보장하려면 Spring Cloud의 등록 검색 구성 요소도 사용해야합니다.
구성 및 버스 외에도 GIT를 사용해야합니다. Spring Cloud Config는 버전 관리에 GIT를 사용하기 때문입니다.
스프링 클라우드 구성을 기반으로 구성 센터를 만드는 것은 매우 간단합니다. 몇 가지 작은 단계에서만 수행됩니다.
config 및 버스 구성 요소를 소개합니다
<pectionency> <groupId> org.springframework.cloud </groupid> <atifactid> Spring-Cloud-Config-Server </artifactid> </fectionency> <groupIdency> <groupId> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-bus-amqp </arepifactid>
startup 스타트 업 클래스는 @enableconfigserver 주석을 사용합니다
패키지 spring.cloud.config; import org.springframework.boot.springApplication; import org.springframework.boot.autoconfigure.springbootApplication; import org.springframework.cloud.config.server.enableconfigerver@sprighonfigserver@sprighonfigserver@sprighonfigserver@springonfigerver configApplication {public static void main (String [] args) {springApplication.run (configApplication.class, args); }}【3. application.yml 파일은 RabbitMQ 및 Git 리포지토리를 구성합니다
서버 : 8040Spring : 응용 프로그램 : 이름 : Spring-Cloud-Config-Server Cloud Cloud : Config : Server : git : uri : https://gitlab.xxxxxx.com/config/xxxxx.git search-paths : username : xxxxxx password : xxxxxx actipemq : 127.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0). 비밀번호 : 게스트 관리 : 보안 : 활성화 : 거짓
버스 구성 요소가 클라이언트에 알리고 구성 변경이 이루어지기 때문에 RabbitMQ가 구성됩니다. 또한 사용해야합니다
관리 : 보안 : 활성화 : False
확인이 닫히고 다음 작업은 항상 승인 오류를보고합니다.
서버 구성 센터가 완료되었습니다. 이제 서버에서 작은 실험을 수행하고 Demo-Dev.Properties 파일을 제출할 수 있습니다. 파일의 내용은 다음과 같습니다.
주소 = 안녕하세요
그런 다음 사용하십시오
http : // localhost : 8040/demo/dev
출력 인 경우
{ "주소": "hello"}이것은 스프링 클라우드 구성과 git 간의 상호 작용이 정상임을 의미합니다.
클라이언트 액세스 구성 센터
우리의 목표 :
구성 정보가 수정되고 GIT에 제출 된 후 Spring Cloud 구성에 연결된 모든 클라이언트는 즉시 알림을 받고 최신 구성 정보를 얻습니다.
다음은이 목표를 달성하는 방법을 설명합니다.
클라이언트는 액세스 작업을 완료하기 위해 몇 가지 작은 단계 만 수행하면됩니다.
【1 oduce 의존성을 소개합니다
<pectionency> <groupid> org.springframework.boot </groupid> <artifactid> 스프링-부트 스타터-web </artifactid> </fectionency> <groupidency> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-config> </fexifactid> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-config </artifactid> </fectionement> <pectionement> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-bus-amqp </artifactid>
스프링 부트 스타터-웹의 도입은 실험을위한 것입니다.
【2 ig RabbitMQ를 구성하고 구성 센터에 URL을 소개합니다
application.properties
spring.application.name = spring-cloud-config-client1server.port = 8042management.security.enabled = falsespring.rabbitmq.host = 127.0.0.1spring.rabbitmq.port = 5672spring.rabbitmq.username = guestspring.rabbitmq.pasporppastmq
부트 스트랩
spring.cloud.config.name = demospring.cloud.config.crofile = devspring.cloud.config.label = masterspring.cloud.config.uri = http : // localhost : 8040/
주의를 기울여야 할 세 가지 점이 있습니다.
1. 닫기 확인 : management.security.enabled = false
2. 스프링 클라우드 구성과 관련된 구성은 bootstrap.properties에 배치해야합니다.
3. spring.cloud.config.uri를 사용하여 구성 센터의 주소를 지정합니다.
또한 클라이언트의 경우 스타트 업 클래스는 구성 및 버스와 관련된 주석을 추가 할 필요가 없습니다 .
이 클라이언트에 도달 한 후 컨트롤러를 사용하여 실험을 시작할 수 있습니다.
패키지 SpringCloudConfig.client; import org.springframework.bean.bean.beans.annotation.value; import org.springframework.cloud.context.config.annotation.refreshscope; import org.spramframework.wb.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller;@restController@C프리 스카피 공개 클래스 HelloController {@Value ( "$ {jandse}") 개인 문자열 주소; @requestmapping ( "/address") public String getAddress () {return this.address; }}위의 HelloController가 주소 구성을 사용해야한다고 가정하면 @refreshscope 및 @Value 주석 만 사용하면됩니다.
@RefreshScopePublic 클래스 HelloController {} @Value ( "$ {wasse}") 개인 문자열 주소;클라이언트가 최신 구성 정보를 얻을 수 있는지 확인하려면
@requestmapping ( "/address") public String getAddress () {return this.address; }방법.
demo-dev.properties 파일을 수정하고 값을
주소 = 안녕하세요 업데이트
그리고 그것을 git에 제출하십시오. 현재 GetAddress 인터페이스를 호출합니다
http : // localhost : 8041/주소
나는 최신 가치를 얻지 못한다는 것을 알았습니다. Git에 밀어 넣는 작업이 완료된 후에는 스프링 클라우드 버스에 알리지 않았기 때문입니다. Postman을 사용하여 게시물 요청을하고 다음 인터페이스에 전화하여 버스에 알릴 수 있습니다.
http : // localhost : 8040/버스/새로 고침
이 인터페이스가 성공적으로 호출되면 버스는 RabbitMQ를 사용하여 모든 클라이언트에 구성이 업데이트되었음을 알립니다.
특별한 관심 :
클라이언트의 /버스 /새로 고침 인터페이스가 아니라 서버의 /버스 /새로 고침 인터페이스를 호출합니다.
제출할 때마다 서버에서 /버스 /새로 고침 인터페이스를 호출 해야하는 경우 너무 귀찮습니다. Webhook을 사용하여 도움을 줄 수 있습니다.
새로운 gitlab을 사용하는 경우 프로젝트에서 [설정]을 클릭 한 다음 [통합]을 클릭하여 아래 그림과 같이 Webhook을 설정하십시오.
구성 센터 서버의 /버스 /새로 고침 인터페이스 주소로 URL을 채우고 [WebHook 추가]를 클릭하십시오.
Ctrip의 아폴로와 비교
스프링 클라우드 구성에 대한 절묘한 점은 구성이 GIT에 저장되어 구성 수정, 권한, 버전 및 기타 문제를 자연스럽게 분리한다는 것입니다. 이 디자인은 스프링 클라우드 구성 전체를 전반적으로 매우 간단하게 만들지 만 불편 함을 가져옵니다.
간단한 요약을 시도해 봅시다.
| 기능적 요점 | 아폴로 | 스프링 클라우드 구성 | 주목 |
|---|---|---|---|
| 구성 인터페이스 | 하나의 인터페이스는 다른 환경과 다른 클러스터 구성을 관리합니다 | 아무것도 git을 통해 작동해야합니다 | |
| 유효 시간을 구성하십시오 | 실시간 | 다시 시작하거나 수동 새로 고침이 적용됩니다 | Spring Cloud Config는 Git Webhook와 실시간 효과를 지원하기위한 추가 메시지 대기열을 통과해야합니다. |
| 버전 관리 | 릴리스 기록 및 롤백 버튼은 인터페이스에서 직접 제공됩니다. | 아무것도 git을 통해 작동해야합니다 | |
| 그레이 스케일 릴리스 | 지원하다 | 지원되지 않습니다 | |
| 승인, 감사, 감사 | 인터페이스에서 직접 지원되며 수정 및 게시 권한 분리를 지원합니다. | GIT 저장소를 통해 설정해야하며 수정 및 릴리스 권한 분리를 지원하지 않습니다. | |
| 인스턴스 구성 모니터링 | 현재 어떤 구성을 사용하고 있는지 쉽게 알 수 있습니다. | 지원되지 않습니다 | |
| 성능을 얻기위한 구성 | 빠른, 데이터베이스를 통한 액세스 및 캐싱 지원 | 느리게, Git Clone 저장소에서 읽은 다음 파일 시스템에서 읽어야합니다. | |
| 클라이언트 지원 | 기본적으로 모든 Java 및 .NET 응용 프로그램을 지원하고, 다른 언어 애플리케이션을 지원하는 API를 제공하며, 구성을 얻기 위해 스프링 주석을 지원합니다. | 스프링 응용 프로그램을 지원하고 구성을 얻기 위해 주석을 제공하십시오 | Apollo는 더 넓은 범위의 응용 프로그램을 가지고 있습니다 |
커뮤니티에서 매우 가볍고 활동적인 Spring Cloud 구성을 개인적으로 사용하는 것이 좋습니다. 문제가 발생할 때 솔루션을 쉽게 찾을 수 있습니다. 또한 개인적으로 아폴로와 스프링 클라우드 구성의 차이는 인터페이스가 없다는 것입니다. 인터페이스를 수행 할 수 있으며 GIT를 통해 수행 할 수 있지만 사용자 경험은 그리 좋지 않습니다.
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.