micro service architecture 탐방기
TRANSCRIPT
Micro Service Architecture 탐방기 이용희����������� ������������������ ����������� ������������������
https://www.facebook.com/yonghee.lee.90����������� ������������������
Micro Service Architecture 적용하고����������� ������������������ 고생해����������� ������������������ 보니����������� ������������������ 이런����������� ������������������ 것들이����������� ������������������ 중요하더라����������� ������������������
왜?����������� ������������������ MSA에����������� ������������������ 관심을����������� ������������������ 가지시나요?����������� ������������������
Micro����������� ������������������ Services����������� ������������������ Architecture����������� ������������������ Google����������� ������������������ Trend����������� ������������������
혹시����������� ������������������ 뒤쳐질까����������� ������������������ 두려워서?����������� ������������������
고민하던����������� ������������������ 문제를����������� ������������������ 해결할����������� ������������������ 수����������� ������������������ 있지����������� ������������������ 않을까?����������� ������������������
Micro Service Architecture?
빨리����������� ������������������ 개발하고,����������� ������������������ 빨리����������� ������������������ 적용하여����������� ������������������ Time����������� ������������������ to����������� ������������������ Market����������� ������������������ 을����������� ������������������ 달성하게����������� ������������������ 할����������� ������������������ 수����������� ������������������ 있도록����������� ������������������ 소프트웨어의����������� ������������������ 구조를����������� ������������������ 단순하게����������� ������������������ 하는����������� ������������������ 방법����������� ������������������ 중����������� ������������������ 하나����������� ������������������
Micro Service Architecture?
작은����������� ������������������ 기능����������� ������������������ 요소����������� ������������������ 들을����������� ������������������ ����������� ������������������ 서비스����������� ������������������ 단위로����������� ������������������ 묶어서����������� ������������������ 배포����������� ������������������
MSA 의 9가지 특징 • Componentization����������� ������������������ via����������� ������������������ Services����������� ������������������
• Organized����������� ������������������ around����������� ������������������ Business����������� ������������������ Capabilities����������� ������������������
• Products����������� ������������������ not����������� ������������������ Projects����������� ������������������
• Smart����������� ������������������ endpoints����������� ������������������ and����������� ������������������ dumb����������� ������������������ pipes����������� ������������������
• Decentralized����������� ������������������ Governance����������� ������������������
• Decentralized����������� ������������������ Data����������� ������������������ Management����������� ������������������
• Infrastructure����������� ������������������ Automation����������� ������������������
• Design����������� ������������������ for����������� ������������������ failure����������� ������������������
• Evolutionary����������� ������������������ Design����������� ������������������
MSA 의 9가지 특징 • Componentization����������� ������������������ via����������� ������������������ Services����������� ������������������
• Organized����������� ������������������ around����������� ������������������ Business����������� ������������������ Capabilities����������� ������������������
• Products����������� ������������������ not����������� ������������������ Projects����������� ������������������
• Smart����������� ������������������ endpoints����������� ������������������ and����������� ������������������ dumb����������� ������������������ pipes����������� ������������������
• Decentralized����������� ������������������ Governance����������� ������������������
• Decentralized����������� ������������������ Data����������� ������������������ Management����������� ������������������
• Infrastructure����������� ������������������ Automation����������� ������������������
• Design����������� ������������������ for����������� ������������������ failure����������� ������������������
• Evolutionary����������� ������������������ Design����������� ������������������
대형����������� ������������������ 시스템을����������� ������������������ 개발할����������� ������������������ 때����������� ������������������ ����������� ������������������ ����������� ������������������ 기술적����������� ������������������ 계층에����������� ������������������ 따라����������� ������������������ 조직을����������� ������������������ 구성하는����������� ������������������ 것에����������� ������������������ 비해,����������� ������������������
����������� ������������������ ����������� ������������������ MSA에서의����������� ������������������ 접근����������� ������������������ 방식은����������� ������������������ ����������� ������������������
“비즈니스����������� ������������������ 수행����������� ������������������ 능력”에����������� ������������������ 따라����������� ������������������ 구분된����������� ������������������ 서비스����������� ������������������ 단위로����������� ������������������ ����������� ������������������ 조직을����������� ������������������ 구성함����������� ������������������
Any����������� ������������������ organization����������� ������������������ that����������� ������������������ designs����������� ������������������ a����������� ������������������ system����������� ������������������ (defined����������� ������������������ broadly)����������� ������������������ will����������� ������������������ produce����������� ������������������ a����������� ������������������ design����������� ������������������
whose����������� ������������������ structure����������� ������������������ is����������� ������������������ a����������� ������������������ copy����������� ������������������ of����������� ������������������ the����������� ������������������ organization's����������� ������������������ communication����������� ������������������ structure.����������� ������������������
--����������� ������������������ Melvyn����������� ������������������ Conway,����������� ������������������ 1967����������� ������������������
����������� ������������������
분업화를����������� ������������������ 통한����������� ������������������ 전문화����������� ������������������
재사용을����������� ������������������ 통한����������� ������������������ 생산성����������� ������������������ 향상����������� ������������������
기업의����������� ������������������ 본원적인����������� ������������������ ����������� ������������������ 2대����������� ������������������ 활동����������� ������������������ 원칙!����������� ������������������
비즈니스����������� ������������������ 환경����������� ������������������ 변화에����������� ������������������ 능동적으로����������� ������������������ 대응하기����������� ������������������ 위해!����������� ������������������
진짜����������� ������������������ 귀한����������� ������������������ 몸����������� ������������������
Oracle����������� ������������������ DBA님들����������� ������������������
각����������� ������������������ 서비스����������� ������������������ 팀에����������� ������������������ ����������� ������������������ 기술����������� ������������������ 구조를����������� ������������������ 선택하고����������� ������������������ 결정할����������� ������������������ 수����������� ������������������ 있는����������� ������������������ ����������� ������������������
권한이����������� ������������������ 있어야����������� ������������������ 함����������� ������������������
MSA 의 9가지 특징 • Componentization����������� ������������������ via����������� ������������������ Services����������� ������������������
• Organized����������� ������������������ around����������� ������������������ Business����������� ������������������ Capabilities����������� ������������������
• Products����������� ������������������ not����������� ������������������ Projects����������� ������������������
• Smart����������� ������������������ endpoints����������� ������������������ and����������� ������������������ dumb����������� ������������������ pipes����������� ������������������
• Decentralized����������� ������������������ Governance����������� ������������������
• Decentralized����������� ������������������ Data����������� ������������������ Management����������� ������������������
• Infrastructure����������� ������������������ Automation����������� ������������������
• Design����������� ������������������ for����������� ������������������ failure����������� ������������������
• Evolutionary����������� ������������������ Design����������� ������������������
단일����������� ������������������ 플랫폼에����������� ������������������ 의한����������� ������������������ 표준화를����������� ������������������ 통한����������� ������������������ 중앙통제모델이����������� ������������������ 아닌,����������� ������������������ 각����������� ������������������ 서비스팀에서����������� ������������������ 독자적인����������� ������������������ 거버넌스를����������� ������������������ 수행하도록����������� ������������������ 함����������� ������������������
단일����������� ������������������ 플랫폼에����������� ������������������ 의한����������� ������������������ 표준화를����������� ������������������ 통해����������� ������������������ ����������� ������������������ 전문성을����������� ������������������ 확보하고����������� ������������������
“사람"에의����������� ������������������ 의존성을����������� ������������������ 제거����������� ������������������
Monolithic Architecture 의 장점
모니터링이����������� ������������������ 쉽다����������� ������������������
SPOF����������� ������������������
Polyglot����������� ������������������ or����������� ������������������ Multilingual����������� ������������������
각����������� ������������������ 서비스파트에서����������� ������������������ 제공하는����������� ������������������ 서비스와����������� ������������������ ����������� ������������������ 제일����������� ������������������ 잘����������� ������������������ 어울리는����������� ������������������ 언어를����������� ������������������ 선택해서����������� ������������������ 사용����������� ������������������
다른����������� ������������������ 언어도����������� ������������������ 자바만큼����������� ������������������ 잘����������� ������������������ 할����������� ������������������ 수����������� ������������������ 있는����������� ������������������ 사람����������� ������������������ 손!����������� ������������������ ����������� ������������������
SI����������� ������������������ 환경에서����������� ������������������ 고객님으로����������� ������������������ 부터����������� ������������������ 이����������� ������������������ 모든����������� ������������������ 권한을����������� ������������������ 부여����������� ������������������ 받을����������� ������������������ 수����������� ������������������ 있을까?����������� ������������������
http://deanwampler.github.io/polyglotprogramming/papers/PolyglotPolyParadigm.pdf����������� ������������������
Any����������� ������������������ JVM����������� ������������������ language����������� ������������������ can����������� ������������������ be����������� ������������������ supported����������� ������������������ so����������� ������������������ each����������� ������������������ team����������� ������������������ can����������� ������������������ use����������� ������������������ the����������� ������������������ language����������� ������������������ best����������� ������������������ suited����������� ������������������ to����������� ������������������ them.����������� ������������������ ����������� ������������������ The����������� ������������������ Groovy����������� ������������������ JVM����������� ������������������ language����������� ������������������ was����������� ������������������ chosen����������� ������������������ as����������� ������������������ our����������� ������������������ first����������� ������������������ supported����������� ������������������ language.����������� ������������������ The����������� ������������������ existence����������� ������������������ of����������� ������������������ first-class����������� ������������������ functions����������� ������������������ (closures),����������� ������������������ list/dictionary����������� ������������������ syntax,����������� ������������������ performance����������� ������������������ and����������� ������������������ debugability����������� ������������������ were����������� ������������������ all����������� ������������������ aspects����������� ������������������ of����������� ������������������ our����������� ������������������ decision.����������� ������������������ Moreover,����������� ������������������ Groovy����������� ������������������ provides����������� ������������������ syntax����������� ������������������ comfortable����������� ������������������ to����������� ������������������ a����������� ������������������ wide����������� ������������������ range����������� ������������������ of����������� ������������������ developers,����������� ������������������ which����������� ������������������ helps����������� ������������������ to����������� ������������������ reduce����������� ������������������ the����������� ������������������ learning����������� ������������������ curve����������� ������������������ for����������� ������������������ the����������� ������������������ first����������� ������������������ language����������� ������������������ on����������� ������������������ the����������� ������������������ platform.����������� ������������������ ����������� ������������������
MSA 의 9가지 특징 • Componentization����������� ������������������ via����������� ������������������ Services����������� ������������������
• Organized����������� ������������������ around����������� ������������������ Business����������� ������������������ Capabilities����������� ������������������
• Products����������� ������������������ not����������� ������������������ Projects����������� ������������������
• Smart����������� ������������������ endpoints����������� ������������������ and����������� ������������������ dumb����������� ������������������ pipes����������� ������������������
• Decentralized����������� ������������������ Governance����������� ������������������
• Decentralized����������� ������������������ Data����������� ������������������ Management����������� ������������������
• Infrastructure����������� ������������������ Automation����������� ������������������
• Design����������� ������������������ for����������� ������������������ failure����������� ������������������
• Evolutionary����������� ������������������ Design����������� ������������������
각����������� ������������������ 서비스����������� ������������������ 영역에서����������� ������������������ ����������� ������������������ 자신이����������� ������������������ 제공하는����������� ������������������ 서비스의����������� ������������������ context에����������� ������������������ 따라����������� ������������������ ����������� ������������������
도메인����������� ������������������ 영역을����������� ������������������ 분리(논리적����������� ������������������ 분리)하고,����������� ������������������ 데이터의����������� ������������������ 성격에����������� ������������������ 맞는����������� ������������������ 적정한����������� ������������������ DB를����������� ������������������ 선택함(물리적����������� ������������������ 분리)����������� ������������������
Domain����������� ������������������ Driven����������� ������������������ Design����������� ������������������ –����������� ������������������ Bounded����������� ������������������ Context����������� ������������������
회원은����������� ������������������ 주소를����������� ������������������ 여러����������� ������������������ 개����������� ������������������ 가질����������� ������������������ 수����������� ������������������ 있고,����������� ������������������ ����������� ������������������ 주소가����������� ������������������ 같은����������� ������������������ 다른����������� ������������������ 회원이����������� ������������������ 존재할����������� ������������������ 수����������� ������������������ 있으므로����������� ������������������ ����������� ������������������ 주소는����������� ������������������ 회원의����������� ������������������ 부가정보다.(도메인����������� ������������������ 핵심����������� ������������������ 정보가����������� ������������������ 아님)����������� ������������������
회원 주소 배송
하나의����������� ������������������ 배송����������� ������������������ 정보는����������� ������������������ 반드시����������� ������������������ 하나의����������� ������������������ 주소를����������� ������������������ 가져야����������� ������������������ 함.����������� ������������������ 배송����������� ������������������ 한건에����������� ������������������ 여러����������� ������������������ 개의����������� ������������������ 주소를����������� ������������������ 가질����������� ������������������ 수����������� ������������������ 없음.����������� ������������������ 배송은����������� ������������������ 주소로����������� ������������������ 식별이����������� ������������������ 가능한����������� ������������������ 도메인����������� ������������������ 핵심정보����������� ������������������
회원 주소 배송
회원의����������� ������������������ 주소가����������� ������������������ 변경된다면����������� ������������������ 회원����������� ������������������ 정보는����������� ������������������ 즉시����������� ������������������ 반영(FK)되어야����������� ������������������ 하지만����������� ������������������ 과거����������� ������������������ 배송����������� ������������������ 이력����������� ������������������ 정보가����������� ������������������ 변경이����������� ������������������ 되면����������� ������������������ 안됨����������� ������������������
상품����������� ������������������ 주문배송����������� ������������������
-����������� ������������������ 재고����������� ������������������ -����������� ������������������ 결제����������� ������������������
결제가����������� ������������������ 실패하면����������� ������������������ 재고가����������� ������������������ 하나����������� ������������������ 줄어����������� ������������������ 들었던����������� ������������������ transaction을����������� ������������������ rollback����������� ������������������ 해야����������� ������������������ 하는데…⋯����������� ������������������
서비스간 트랜잭션 처리 • 서비스 context����������� ������������������ 의 영역을 아주 잘 정의 해서 사용한다����������� ������������������
• XA를 사용한다����������� ������������������
• compensation����������� ������������������ transaction����������� ������������������ 을 사용한다
문을����������� ������������������ 열고,����������� ������������������ 코끼리를����������� ������������������ 넣고,����������� ������������������ 문을����������� ������������������ 닫는다����������� ������������������
코끼리����������� ������������������ 보다����������� ������������������ 큰����������� ������������������ 냉장고를����������� ������������������ 만들어서����������� ������������������ 코끼리를����������� ������������������ 넣는다.����������� ������������������
코끼리를����������� ������������������ 미분해서����������� ������������������ 냉장고에����������� ������������������ 넣고,����������� ������������������ 냉장고����������� ������������������ 속에서����������� ������������������ 적분한다.����������� ������������������
실패를����������� ������������������ 통해서����������� ������������������ 경험을����������� ������������������ 축적해����������� ������������������ 나가야����������� ������������������ 하는데,����������� ������������������ 어느����������� ������������������ 정도의����������� ������������������ 사소한����������� ������������������ 장애를����������� ������������������ 감수하더라도,����������� ������������������ ����������� ������������������ 지속적으로����������� ������������������ 시스템을����������� ������������������ 개선해����������� ������������������ 나갈����������� ������������������ 수����������� ������������������ 있는����������� ������������������ ����������� ������������������ 권한을����������� ������������������ 보장����������� ������������������ 받는����������� ������������������ 것이����������� ������������������ 사실상����������� ������������������ 불가능����������� ������������������
서비스간 트랜잭션 처리 • 서비스 context����������� ������������������ 의 영역을 아주 잘 정의 해서 사용한다����������� ������������������
• XA를 사용한다����������� ������������������
• compensation����������� ������������������ transaction����������� ������������������ 을 사용
API����������� ������������������ 를����������� ������������������ 조합하는����������� ������������������ 주체는����������� ������������������ 어디?����������� ������������������
MSA����������� ������������������ 는����������� ������������������ 서비스����������� ������������������ 간의����������� ������������������ 협조를����������� ������������������ 중요하게����������� ������������������ 생각합니다.����������� ������������������ M.F����������� ������������������ ����������� ������������������ 는����������� ������������������ 여러����������� ������������������ 개의����������� ������������������ 간단한����������� ������������������ 기능(function)이����������� ������������������ 모여����������� ������������������ 하나의����������� ������������������ 서비스를����������� ������������������ 구성한다고����������� ������������������ 얘기합니다.����������� ������������������ 여러����������� ������������������ 개의����������� ������������������ 기능을����������� ������������������ 모으는����������� ������������������ 녀석을����������� ������������������ 따로����������� ������������������ 모아����������� ������������������ 추상화를����������� ������������������ 할����������� ������������������ 수����������� ������������������ 있다면����������� ������������������ 밖에서����������� ������������������ 보이는����������� ������������������ 그림은����������� ������������������ 아주����������� ������������������ 깔끔한����������� ������������������ 모습이����������� ������������������ 될����������� ������������������ 수����������� ������������������ 있습니다.����������� ������������������
성능����������� ������������������
SPOF����������� ������������������
복잡성����������� ������������������ 증가����������� ������������������
복잡함을����������� ������������������ 해결하기����������� ������������������ 위해����������� ������������������ 시작했는데,����������� ������������������ 왠지����������� ������������������ 더����������� ������������������ 복잡해����������� ������������������ 지는����������� ������������������ 것����������� ������������������ 같다!!����������� ������������������
모니터링����������� ������������������
Governing����������� ������������������ 추상화����������� ������������������
성능����������� ������������������ 복잡도����������� ������������������ 증가����������� ������������������
SPOF����������� ������������������
Scale����������� ������������������ 코드����������� ������������������ 중복����������� ������������������ 방지����������� ������������������
Fault����������� ������������������ Tolerance����������� ������������������ Layer����������� ������������������
https://github.com/Net1lix/eureka/wiki/Eureka-‐at-‐a-‐glance
API����������� ������������������ 의����������� ������������������ 버전����������� ������������������ 관리,����������� ������������������ 로드����������� ������������������ 밸런싱,����������� ������������������ 서비스����������� ������������������ repository����������� ������������������ 에����������� ������������������ 대한����������� ������������������ 고민은����������� ������������������ ����������� ������������������ Netflix����������� ������������������ 의����������� ������������������ Eureka����������� ������������������ 가����������� ������������������ 좋은����������� ������������������ 해답이����������� ������������������ 될����������� ������������������ 수����������� ������������������ 있습니다.����������� ������������������
MSA 의 9가지 특징 • Componentization����������� ������������������ via����������� ������������������ Services����������� ������������������
• Organized����������� ������������������ around����������� ������������������ Business����������� ������������������ Capabilities����������� ������������������
• Products����������� ������������������ not����������� ������������������ Projects����������� ������������������
• Smart����������� ������������������ endpoints����������� ������������������ and����������� ������������������ dumb����������� ������������������ pipes����������� ������������������
• Decentralized����������� ������������������ Governance����������� ������������������
• Decentralized����������� ������������������ Data����������� ������������������ Management����������� ������������������
• Infrastructure����������� ������������������ Automation����������� ������������������
• Design����������� ������������������ for����������� ������������������ failure����������� ������������������
• Evolutionary����������� ������������������ Design����������� ������������������ 장애����������� ������������������ 없는����������� ������������������ 시스템은����������� ������������������ 없다!����������� ������������������
Email����������� ������������������ ����������� ������������������ Notifiyer����������� ������������������
SMS����������� ������������������ ����������� ������������������ Notifiyer����������� ������������������
참고한 자료 • http://martinfowler.com/articles/microservices.html����������� ������������������
• http://techblog.netflix.com/����������� ������������������
• https://github.com/Netflix/Hystrix/wiki����������� ������������������
• https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance����������� ������������������
• http://deanwampler.github.io/����������� ������������������
• http://bcho.tistory.com/����������� ������������������
• Domain����������� ������������������ Driven����������� ������������������ Design