[Spring Cloud] Cloud Native Applications에 대하여

lin·2023년 9월 11일
0

스프링 클라우드는 확장성 메커니즘을 제공하는데 초점을 맞추고 있다.

특징

  • Distributed/versioned configuration
  • Service registration and discovery
  • routing
  • Service-to-Service calls
  • Load balancing
  • Circuit breakers
  • Distributed messaging

🗒️Cloud Native Applications

Cloud Natvie는 continuous delivery and value-driven development 분야에서 best practices를 쉽게 채택할 수 있도록 지원하는 애플리케이션 개발 스타일이다.

12-Factors Applications를 구축하는 것이 관련된다.

The Twelve Factors
1. Codebase
one codebase tracked in revision control, and deploys
2. Dependencies
Explicitly declare and isolate dependencies
3. Config
Store config in the environment
4. Backing services
Treat backing services as attached resources
5. Build, release, run
Strictly separate build and run stages
6. Processes
Execute the app as one or more stateless processes
7. Port binding
Export services via port binding
8. Concurrency
Scale out via the process model
9. Disposability
10. Dev/prod parity
Keep development, staging, and production as similar as possible
11. Logs
Treat logs as event streams
12. Admin processes
Run admin/management tasks as one-off processes

Cloud Native의 시작점은 분산 시스템의 모든 구성 요소에 쉽게 엑세스해야 하는 기능 집합들이다.
이러한 기능의 대부분은 Spring cloud가 구축하는 Spring boot에 포함된다.

또한 몇 가지 추가 기능은 Spring Cloud Context, Spring Cloud Commons 이 두 가지 라이브러리로 제공된다.

spring cloud contextsms ApplicationContxt에 대한 유틸리티 및 특수 서비스를 제공하며, Spring Cloud Commons는 다양한 Spring Cloud 구현 (Netflix 및 Consul)에 사용되는 공통 클래스 집합이다.

📙 Spring Cloud Context : Application Context Services

The Bootstrap Application Context

스프링 클라우드 애플리케이션은 기본 애플리케이션의 상위 컨텍스트인 bootstrap 컨텍스트를 생성하여 작동한다.

외부 소스에서 configuration properties를 불러오거나 속성을 해독하는 역할을 한다. 부트스트랩 속성이 높은 우선 순위로 추가된다.
bootstrap.yml을 사용하여 부트스트랩 및 기본 컨텍스트에 대한 외부 구성을 분리할 수 있다.

If you build an application context from SpringApplication, the the Bootstrap context is added as a parent to that context. child contexts inherit property and profiles from their parent, so the main application context contains additional property sources.

bootstrap.yml 이 있는 경우 해당 속성은 Bootstrap 컨텍스트를 구성하는 데 사용된다.

부트스트랩 컨텍스트에 의해 애플리케이션에 추가되는 속성 소스는 종종 " 원격 " 입니다 (예: Spring Cloud Config Server). 기본적으로 로컬로 재정의할 수 없습니다. 애플리케이션이 자체 시스템 속성 또는 구성 파일을 사용하여 원격 속성을 재정의하도록 하려면 원격 속성 소스에서 설정을 통해 권한을 부여해야 합니다.

spring.cloud.config.overrideNone=true: override from local property source

Environment Changes

application listens for an EnvironmentChangeEvent and reacts to the change in a couple of standard ways.

when an EnvironmentChangeEvent is observed, it had a list of key values that have chaged, and the application uses those to:

** Re-bind any @ConfigurationProperites beans in the context

** Set the logger levels for any properties in loging.level.~

NOTE That the Config Client DOES NOT, by default, poll for changes in the Environment!!!
So You can broadcast the EnvironmentChangeEvent to all the instances instead of having them polling for changes.
이를 위해 Spring Cloud Bus를 사용할 수 있는 것이다.

RefreshScope

위에서 말한 것처럼 구성 변경이 있는 경우에 알아서 안한다고 치고 이벤트 전파한다고 치면 다 알아서 되는건가? 놉!

Problem :: stateful beans that only get their configuration injected when they are initialized.
@RefreshScope 어노테이션을 통해 이러한 문제를 해결할 수 있다.

📙 Spring Cloud Commons

서비스 검색, 로드 밸런싱, 서킷 브레이커 등의 패턴 구현과 관계없이 모든 클라이언트가 사용할 수 있는 공통 추상화 계층에 적용된다.

@EnableDiscoveryClient

META-INF/spring.factories를 사용하여 DiscoveryClient 인터페이스의 구현을 찾는다. discoveryClient의 구현 예로는 Eureka, Consul Discovery, Zoopeeper Discovery가 있다.

ServiceRegistry

Commons now provides a ServiceRegistry interface that provides methods such as register(Registration) and diregister(Registation).

Eureka에서도 its own Registry 구현체가 있다.
=> EurekaRegistration used with EurekaServiceRegistry

기본적으로 ServiceRegistry는 작동중인 서비스를 자동 등록한다.
이 동작을 비활성화하기 위해서는 아래와 같이 수정할 수 있다.

@EnableDiscoveryClient(autoRegister=false) OR

spring.cloud.service-registry.auto-registration.enabled=false

Spring Cloud Commons provides a /service-registry actuator endpoint. This endpoint relies on a Registration bean in the Spring Application Context.

참고 자료 ::
https://cloud.spring.io/spring-cloud-static/Greenwich.SR2/multi/multi_spring-cloud.html

profile
BE

0개의 댓글