마이크로 서비스
https://12bme.tistory.com/499?category=791106
[MSA] "마이크로서비스 아키텍처 구축" 훑어보기
기존의 일반적인 애플리케이션 개발 방법을 그대로 적용하면 비용절감, 탄력성, 회복성, 배포 편의성과 같은 좋은 특성을 누리기 어렵다. 아키텍처 설계, 서비스 모델링, 실제 구현, 통합, 배포,
12bme.tistory.com
마이크로 서비스가 제공하는 주요 혜택
1) 기술 이기종성
다수의 협업 서비스로 구성된 시스템에서는 각 서비스가 다른 기술을 사용하도록 결정할 수 있다.
시스템 특정 부분의 성능을 높이려 할때, 요구되는 성능 수준을 만족하는데 유리한 다른 기술 스택을 고려해야 할 수도 있고 변환할 데이터를 어떻게 저장할지 결정해야 할 수도 있다.
모놀리식 애플리케이션에서 새로운 프로그래밍 언어, 데이터베이스 또는 프레임워크를 시도하면 그 변경은 시스템에 큰 영향을 미칠 것이다. 하지만 다양한 독립 서비스로 구성된 시스템에는 새로운 기술 분야를 시험해볼만한 곳이 많다. 여러 기술을 함께 사용하면 문제가 전혀 없을 수는 없다. 몇몇 기업은 프로그래밍 언어 선택에 일부 제한을 걸어둔다. 예를 들어 넷플릭스와 트위터는 대부분 자바 가상 머신(JVM)을 플랫폼으로 상요하는데, 이는 JVM의 신뢰성과 성능을 매우 잘 이해하고 있기 때문이다. 또한 대규모 시스템의 운영을 더 수비게 만드는 JVM용 라이브러리와 도구를 개발하고 있지만 자바 기반이 아닌 서비스와 클라이언트로는 어려움이 더 많다.
2) 회복성
'Resilience Engineering'의 핵심 개념은 'bulkhead(격벽)'이다. 한 시스템의 컴포넌트에 장애가 발생하더라도 그 장애가 전파되지 않는다면 해당 문제를 격리하고 나머지 시스템을 계속 작동시킬 수 있다. 마이크로서비스에서는 서비스의 전체 장애를 차단하고 기능을 적절히 저하(degrade)시키는 시스템을 구축할 수 있다.
3) 확장성
하나의 큰 모놀리식 서비스에서는 항상 모든 것을 함께 확장해야 한다. 만약 전체 시스템에서 작은 한 부분만 성능이 떨어지는데, 해당 동작이 거대한 모놀리식 애플리케이션에 묶여 있다면 전체를 한 덩어리처럼 확장해야 한다. 그러나 만약 작은 서비스들로 구성되어 있다면 필요한 서비스만 확장하고, 나머지 서비스를 더 작고 낮은 사양의 하드웨어에서 실행할 수 있다.
4) 배포 용이성
거대한 모놀리식 애플리케이션에서는 한 줄만 수정하더라도 해당 변경을 릴리스하기 위해 전체 애플리케이션을 배포해야 한다. 마이크로서비스를 이용하면 하나의 서비스만 변경할 수 있고, 나머지 시스템과 독립적으로 배포할 수 있다. 코드를 더 신속히 배포할 수 있고, 문제가 발생하더라도 손쉽게 개별 서비스만 rollback 함으로써 해당 문제를 격리할 수 있다.
5) 조직 부합성
더 작은 팀이 더 작은 코드베이스로 일할때 더 생산적일 수 있다. 마이크로서비스를 이용하면 아키텍처를 조직 구조에 맞게 더 적절히 정렬할 수 있고, 최적의 팀 크기와 생산성을 위해 하나의 코드베이스에서 일하는 인원을 최소화할 수 있다.
6) 조합성
분산 시스템과 서비스 지향 아키텍처의 주요 장점 중 하나는 기능을 재사용할 기회가 많다는 것이다. 마이크로서비스를 통해 다양한 방법과 목적으로 우리가 제공하는 기능이 소비되도록 할 수 있다. 외부에서 직접 접근할 수 있는 시스템의 접합부(seam)을 마이크로서비스로 개방한다고 생각해보자. 환경이 바뀌면 다른 방식으로 구축할 수 있다. 모놀리식 애플리케이션은 외부에서 사용할 수 있는 하나의 큰 접합부를 가지고 있다. 그 하나의 접합부를 끊어내 외부에서 접근하기 더 유용한 것을 만들려면 전체 시스템을 변경해야 할것이다. 반면, 마이크로서비스는 재사용 및 재구성에 유용한 아키텍처이다.
출처: https://12bme.tistory.com/499?category=791106 [길은 가면, 뒤에 있다.:티스토리]