Spring Cloud는 MSA를 신속하게 구축할 수 있는 도구를 제공한다.
대표적으로 다음의 도구들이 사용되어 진다.
1 2 3 4 5 | Service registration and discovery Central configuration Dynamic Load balancer Circuit Breakers 기타 등등... 꽤 많다. | cs |
Spring Cloud는 다른 오픈소스와 통합하여 보다 쉽게 사용할 수 있도록 커스터마이징 한 후 오픈소스화 하는 전략을 취하고 있다.
1 2 3 | Service discovery : Netflix Eureka Dynamic Load balancer : Netflix Ribbon Circuit Breakers : Netflix Hystrix | cs |
위의 Netflix에서 제공하는 오픈 소스를 Netflix OSS(Open Source Software)라고 부르기도 한다.
이처럼 Spring Cloud는 다양한 오픈 소스를 도입하여 보다 더 쉽고 빠르게 서비스를 구축할 수 있게 도와준다.
여기서 잠깐 Spring Cloud를 이용하여 MSA를 구축하기에 앞서 장점이 무엇인지 알아보자.
1. 기능별 Scale-Out
운영을 하다보면 특정 기능을 하는 페이지에 부하가 집중되는 경우가 있다. 모노리틱 아키텍처와는 반대로 부하가 집중되는 서비스만 Scale-Out(수평확장) 할 수 있다.
예를 들어 상품 이벤트 페이지에 엄청난 부하가 몰리고 있다면 상품 서비스만 Scale-Out 하면 될 것이다.
2. DB 부하 절감
기능별로 서비스가 분리되면서 각 기능에 의존하는 DB또한 분리가 된다.
모노리틱 방식이 하나의 DB를 이용하는 것과는 다르게 MSA는 각 서비스별로 DB가 분리되어 진다.
이는 DB 부하 절감의 효과를 얻을 수 있다.
3. 배포 안정성 (배포 영향 범위 제한, 배포 속도 개선)
주문서 페이지의 변경 사항이 있을 때 해당 주문 서비스만 빌드하고 배포할 수 있는 장점이 있다.
이는 배포 영향 범위를 최소화 할 수 있고, 빌드 배포를 빠르게 할 수 있다.
더불어 개발자의 불안감 또한 최소화 할 수 있다. 이 마음은 경험해 본 사람만 안다.
4. API 서버별로 업무에 최적화된 기술 사용 가능
Spring Cloud를 사용한다고 해서 꼭 Java로 개발해야 하는 법은 없다.
각 API 서버별로 Node, Python등으로 개발할 수 있다.
Spring Cloud로 개발하면서 Java가 아닌 다른 랭귀지로 개발해 보진 않았지만 Eureka Client 역할을 하는 라이브러리들이 제공되어 지고 있다.
python : https://github.com/KristianOellegaard/python-eureka
nodejs : https://www.npmjs.com/package/eureka-js-client
5. 도메인에 최적화된 DB 사용 가능
데이터의 적합성과 일관성을 보장하기 위해서는 RDB
일시적으로 데이터를 보관하고 있다가 빠르게 데이터를 리턴해야 하는 서비스는 Redis
스키마에 제약없는 데이터를 쌓아야 하는 경우는 Hadoop, mongoDB, Elasticsearch 등..
장점이 있으면 단점도 있기 마련이니 무작정 적용하는 것은 위험 부담이 많다.
기본적으로 빌드와 배포가 자동화 되어 있는 환경에서 MSA를 적용하는 것을 추천한다.
추가 설명
Scale-Out
장비를 신규로 추가하여 수평 확장
여러 대의 서버로 분산 처리할 수 있는 장점이 있다.
비교적 저렴한 서버를 사용함으로써 비용 부담이 적다
서버가 늘어남으로써 운영 비용이 증가한다.
Scale-Up
기존 장비의 물리적 하드웨어를 고성능으로 교체
점차적으로 성능을 증가시키기 위해 비용 부담이 커진다.
한 대의 서버만 관리하면 되기에 운영하기 편함
'프로그래밍' 카테고리의 다른 글
19. [JPA] 트랜잭션 테스트 (0) | 2017.11.27 |
---|---|
18. [JPA] N+1 문제 (fetch 조인 해결 방안) (0) | 2017.11.24 |
17. [JPA] N+1 문제 (@BatchSize 해결 방안) (0) | 2017.11.23 |
2. Spring Cloud를 이용한 MSA 구축하기 - config server (0) | 2017.09.22 |
14. [JPA] Lock - 잠금 (0) | 2017.09.20 |
13. [JPA] 트랜잭션 격리 수준 (Transaction Isolation Level) (0) | 2017.09.12 |
12. [JPA] 복합키 (0) | 2017.09.08 |
11. [JPA] Querydsl (0) | 2017.09.01 |