https://medium.com/aws-in-plain-english/basics-of-aws-cloud-architecture-cf949129b824
기초적인 내용이 체계적으로 잘 정리되어 있다.
https://medium.com/aws-in-plain-english/basics-of-aws-cloud-architecture-cf949129b824
기초적인 내용이 체계적으로 잘 정리되어 있다.
business
L sub business
L adapter
L in
L web - controller
L out
L persistent adapter
L repository
L domain - entity
L application
L port
L in - usecase
L out
패턴 및 설계상의 일반적인 의사 결정
마이크로서비스의 과제
마이크로 서비스로의 진화
- 기업은 소셜미디어, 모바일, 클라우드, 빅데이터, 사물인터넷드을 주요 수단으로 활용하며 시장에 빠르게 진입하기위한 방법에 관심을 갖게 되었으며, 그러한 것을 가능하게 하기위해 애자일성, 변경 및 배포 신속성, 확장성 같은 요소들에 관심을 갖게 되었다.
- 기술적으로 다양한 관점에서 모든 계층의 구조를 다시 고려하게 하는 기술들이 개발 되었다. 프론트엔드의 Angular, Ember, Backbone등, 클라우드 환경의 AWS, 컨테이너 관련 Docker, 데이터베이스 영역에서는 NoSQL이 등장하였고 Hadoop, Cassandra, CochDB, Neo4j등이 있다.
마이크로서비스란 무엇인가?
- 물리적으로 분리할 수 있는 모듈화된 애플리케이션을 만들 수 있는 아키텍처 스타일이다.
- IT 시스템을 자율적이고, 자기 완비적(self-contained)이면서도 느슨하게 연결된 비즈니스 범위의 집합으로 만드는 아키텍처 스타일이다.
- 마이크로서비스 사이의 통신이나 전송방식에 정해진 표준은 없으나, 일반적으로 HTTP REST같은 경량프로토콜, AMQP같은 메시징 프로토콜을 주로 사용한다. 필요에 따라 Thrift, ZeroMQ, Protocol Buffers, Avro처럼 특수한 목적에 최적화된 통신프로토콜을 사용할 수도 있다.
- 마이크로서비스를 적용하기위해서 조직의 변화도 중요하다 기술에 대한 내재화, 개발과 운영의 간극을 좁히기 위한 DevOps같은 개념이 필연적이다
마이크로서비스의 원칙
- 서비스 하나에책임도 하나 : 클래스든 함수든 서비스든 간에 하나의 단위 요소는 반드시 하나의 책임만을 가져야 한다
- 마이크로 서비스는 자율적 : 자기 완비적이고, 독립적으로 배포할 수 있으며, 자율적인 서비스로서 비즈니스의 범위와 실행에 대해 전적인 책임을 진다.
- MSA 와 SOA의 차이점은 자율성 수준의 차이다. SOA는 서비스 수준의 추상화, MSA는 실행환경까지도 추상화
마이크로서비스의 특징
- 서비스는 일급 시민
- 서비스 계약
- 느슨한 결합
- 서비스 추상화
- 서비스 재사용
- 무상태
- 서비스 발견성
- 서비스 호환성
- 서비스 조립성
- 마이크로서비스는 경량
- 다양한 언어로 구성 가능
- 개발에서 배포까지 쉬운 자동화
- 마이크로서비스를 지원하는 생태계
- 동적이고 분산돼 있는 마이크로서비스
- 붕괴 저항성, 빨리 실패하기, 자체 치유
마이크로서비스의 장점
- 폴리글랏 아키텍처 지원 : 각 서비스는 자신만의 아키텍처와 여러가지 기술을 적용하여 구축 운영
- 실험과 혁신 유도
- 탄력적이고 선택적인 확장
- 대체 가능성
- 유기적 시스템 구축 유도 : 시간이 지남에 따라 점점 더 많은 기능을 추가하면서 성장해가는 시스템
- 기술적 부채 경감
- 다양한 버전의 공존
- 자기 조직화 시스템 구축 지원
- 이벤트 주도 아키텍처 지원
- 데브옵스 지원
다른 아키텍처 스타일과의 관계
SOA와의 관계 : SOA를 도입하는 방식에 따라 같기도 하고 다르기도 하다
- 서비스 지향 통합 : 다름
- 기존 시스템의 현행화 : 다름
- 서비스 지향 애플리케이션 : 마이크로서비스를 현재 도입한 SOA의 논리적인 다음 단계
12 요소 애플리케이션과의 관계
- 클라우드에서 운영 가능한 현대적인 애플리케이션에서 기대할 수 있는 특징을 기술하는 방법론
- 단일 코드 베이스 : 각 마이크로서비스는 자체적인 코드베이스를 가져야하고 다른 마이크로서비스와 공유되지 않는다(git/subversion)
- 의존성 꾸러미(bundling dependencies) : 모든 애플리케이션은 필요한 모든의존성을 애플리케이션과 함께 하나의 꾸러미에 담아야 한다(Maven/Gradle)
- 환경설정 외부화(externalizing configurations)
- 후방 지원 서비스 접근성(backing service)
- 빌드, 출시, 운영의 격리
- 무상태, 비공유 프로세스
- 서비스를 포트에 바인딩해서 노출
- 확장을 위한 동시성 : 프로세스가 복제를 통해 확장될 수 있게 설계
- 폐기 영향 최소화(disposability with minimal overhead) : 애플리케이션의 시동과 종료에 필요한 시간을 최소화하고, 서버가 종료될때에는 필요한 처리가 모두 수행되어야 함(lazy loading)
- 개발과 운영의 짝 맞춤(Development and production parity) : 개발 환경과 운영 환경을 가능한 한 동일하게 유지
- 로그 외부화 : 로그파일을 절대로 자기 자신안에 담지 않는다. 중앙집중식 로깅 프레임워크사용(Splunk, Greylog, Logstash, Logplex, Loggly) 로그백 추가자를 통해 로그를 중앙 저장소에 적재하고, 적재 도구의 종단점에 로그를 쓰는 방법
- 패키지 관리자 프로세스 : 관리자 태스크를 위한 코드도 애플리케이션 코드와 함께 패키징되어야 한다.
마이크로서비스 사용 사례
- 일체형의 전환
- 넷플릭스, 우버, 에어비앤비, 오비츠, 이베이, 아마존, 길트, 트위터, 나이키
참고자료
- hexagonal architecture : http://alistair.cockburn.us/Hexagonal+architecture
- avro : http://avro.apache.org/docs/current/
- DevOps : http://dev2ops.org/2010/02/what-is-devops/
- 일급시민 : https://ko.wikipedia.org/wiki/일급_객체
1.1 잘못된 soa
soa = 웹서비스 ->soa의 이점을 누리려면 웹서비스 플랫폼에 투자하기만 하면된다..(X)
1.1.2 이상적인 soa
- 일반적인 모델 - > 직무, 솔루션, 기업, 커뮤니티등에 동등하게 적용가능
- 추상화레이어 - > 로직과 정보의 표준을 제시
1.1.3 실제 soa
- 조직을 하향식으로 변환
- 가이드 필수
3.1 SOA 기본
- 서비스 지향 = 관심의 분리(SEPARATING CONCERN)
3.1.1 서비스 지향의 개념
- 서비스 지향 + 아키텍쳐 = 기술적 의미의 SOA
- SOA :자동화 로직이 작고 특정한 로직으로 분할할수있는 모델
- SOA : 로직의 개별단위 들이 상호간에 서로 고립되지 않고 상호작용하면서도 자율적으로 존재해야함
3.1.2 서비스의 로직 캡슐화 방식
- 전체 프로세스 -> 캡슐화된 서비스
- 개별적인 서브 프로세스 -> 캡슐화된 서비스
- 여러단계의 서브 프로세스 -> 캡슐화된 서비스
3.1.3 서비스 간의 연결 방식
서비스A ------->서비스B에 대한 명세 ------------------------> 서비스B
3.1.4 서비스 간의 커뮤니케이션 방식
- 메세지 : 커뮤니케이션이 독립적 단위 = 자율적 = 프로세스 로직의 일부를 스스로 통제할 수 있어야 함
3.1.5 서비스 설계 방식
- 느슨한 결합(Loose coupling)
- 서비스계약(Service Contract) : 서비스들은 커뮤니케이션에 동의해야하며, 하나 호은 그 이상의 서비스 명세와 관련 문서들로 정의된다.
- 자율성
- 추상화
- 재사용성
- 조합성
- 무상태 유지(Stateless)
- 발견성 : 명세를 기반으로 설계하므로 외부에서 쉽게 찾을 수 있고 서비스를 식별하는 메커니즘을 통해 접근할 수 있다
3.1.6 서비스 구축 방식
- 웹 서비스
3.1.7 초기 SOA
- 앞에서 말한 특성들을 만족하는 SOA
- 아이디어에서 좀더 진보한 SOA
3.2 최신 SOA
- 초기 SOA + 품질
- 서비스 지향 컴퓨팅 플랫폼의 핵심
- 서비스 품질향상
- 자율성
- 공개표준기반
- 다양한 벤더지원
- 서비스 발견성
- 상호운영성
- 통합용이성
- 아키텍처 조합성
- 재사용성
- 확장성
- 서비스지향 비즈니스 모델 지원
- 추상화된 레이어 구현
- 느슨한 결합관계
- 조직적 기민성
- 블록쌓기 방식의 구축
- 진화의 산물
- 계속되는 진화
- 실현 가능한 아이디어
- SOA 정의