Programming/MSA 22

Domain Driven Design/Eric Evance - 1. 개요 ~ Crunching Knowledge

개요 A domain model is not a particular diagram; it is the idea that the diagram is intended to convey. It is not just the knowledge in a domain expert’s head; it is a rigorously organized and selective abstraction of that knowledge. 도메인 모델이란 실질적인 다이어그램이 아니라 전달해야할 추상적인 다이어그램이다. 단지 도메인 전문가의 머릿속 지식에 그칠뿐만 아니라 엄격하게 "조직화"되고 "선별된" 지식이다. Knowledge Crunching 효과적인 domain 모델러는 지식을 잘 쪼개는 사람이다. Knowledge Crun..

Programming/MSA 2022.07.19

CQRS 패턴이란

한마디로 "Read와 CUD 트랜젝션을 분리할 수 있도록 어플리케이션 Model을 나누는 것" 기존의 무슨 문제가 있었나? 작업의 일부로 필요하지 않더라도 올바르게 업데이트해야 하는 추가 열 또는 속성과 같이 데이터의 읽기 및 쓰기 표현이 일치하지 않는 경우가 많습니다. 동일한 데이터 집합에서 작업을 병렬로 수행할 때 데이터 경합이 발생할 수 있습니다. 기존의 접근 방식은 데이터 저장소 및 데이터 액세스 계층의 로드와 정보를 검색하는 데 필요한 쿼리의 복잡성으로 인해 성능에 부정적인 영향을 미칠 수 있습니다. 보안 및 사용 권한 관리는 복잡해질 수 있습니다. 각 엔터티는 읽기 및 쓰기 작업이 모두 적용되므로 잘못된 컨텍스트에서 데이터를 노출할 수 있습니다. 어떤 효과가 발생하는가? 독립적인 크기 조정 :..

Programming/MSA 2022.07.06

MSA에 대한 기본개념 - 5. 회복성

회복성을 결정하는데 있어서 다음의 요소가 있다. (회복성에 대한 이슈는 동기호출에서 많이 발생한다.) 그리고 구현기술/패턴은 다음과 같다. 1. 로드벨런싱(부하분산) → 일반적인 로드벨런서, Gateway, Ribbon 등 2. 회로차단기| 3. 폴백 4. 벌크헤드 → 서킷 브레이커 동기호출로 서비스를 구현하게 되었을 경우 특정 서비스의 트랜잭션이 지연되어 동기된 다른 서비스에도 지연현상이 전파될 수 있음. 이를 차단하기 위해 서킷브레이커 패턴을 적용 장애감지 시 차단기 작동 ▶ 일시적으로 Failback으로 서비스 대체 ▶ 일부 트래픽으로 서비스 정상여부 확인 ▶ 정상확인 시 차단기 해제

Programming/MSA 2022.06.12

MSA에 대한 기본개념 - 4. 서비스를 나눈뒤 상호참조, 통합

MSA 서비스를 분리한 후에는 어떻게 통합(상호연동, 객체참조)할 것인가? → API Gateway 역할 서비스 라우팅 CORS(교차출처) 허용 ACL 적용하여 잘못된 호출 필터링 기타 보안정책 적용(ex. Prevent DDOS) 로드벨런싱 관련도구 Proxy, Kube Gateway Service, [Zuul, Ribbon] → Service Registry+Service Discovery 역할 서비스 Discovery가 가능하도록 서비스 경로 저장 관련도구 Eureka, Kube DNS Service, 일반DNS서비스, Feign Client → URI Path-based Call (Req-Res) 역할 동기호출 관련도구 REST API → Message Queue Call (Pub-Sub) 역할 ..

Programming/MSA 2022.06.12

MSA에 대한 기본개념 - 3. Domain Driven Design 으로 가는 여정

어플리케이션 도메인의 변화 회사가 성장함에 따라 어플리케이션의 Core(중요한것)와 Supporting(덜 중요한것)으로 나누게 된다. 예시) Core - 사용자들은 주문하기 위해 많은 상품을 클릭하고 "구매" 버튼을 클릭 - 상품이 주문되면 배송팀은 상품의 배송을 준비 - 주문이 취소되거나 완료되면 상품재고 수치 감소 Supporting - 고객들은 매진된 상품을 구매할 수 있으며 이는 입고뒤 해소 - 배송 상태 변화시마다 Notification이 고객에게 전달 - 주문과 취소를 반복하는 고객은 블랙리스트로 관리 - 마케팅 팀은 매일 오전 9시에 추천상품을 메일링 회사가 더 규모가 성장하면 팀은 자치성과 동기부여를 위해 더 나뉘어 지게 된다. 예시) 배송관리팀 - 상품이 주문되면 배송팀은 상품의 배송을..

Programming/MSA 2022.06.10

MSA에 대한 기본개념 - 2. 동기 비동기 호출

Micro Service Architecture 설계의 발전 1. Rest API 방식의 설계 (동기호출) - Code Coupling 해소. 그러나 Time Coupling 잔존 - 서비스 Blocking 가능성 내제 - 장애전파 우려 - Point to Point 연결에 따른 복잡한 스파게티 네트워크 Request-Response 모델의 데이타 보호 장애전파를 방지하기 위해 필요한것이 서킷브레이커 패턴. 하나의 트랜젝션이 가능한 블로킹이 발생하지 않도록 미리 차단 → Fail-Fast 전략 메모리 사용 폭주 막음 장애 감지시 차단기 작동 ▶ 일시 동안 Failback으로 서비스 대체 ▶ 일부 트래픽으로 서비스 정상여부 확인 ▶ 정상 확인 시 차단기 해제 Rest방식 MSA 에서도 모놀리식의 2단계 커..

Programming/MSA 2022.06.09

MSA에 대한 기본개념 - 1. Legacy에서 MSA로 진화하는 여정

AS-IS시스템의 Pain-Points는 다음의 것들이 있었다. 서비스 업그레이드가 수시로 요청이 들어와 거의 매일 야근 테넌트별 다형성 지원을 제대로 하지 못하여 가입 고객이 늘 때마다 전체 관리 비용이 급수로 올라가는 한계에 봉착 운영팀과 개발팀이 분리되어 개발팀의 반영을 운영팀이 거부하는 사례 발생 개발팀은 새로운 요건을 개발 했으나 반영하면서 발생하는 오류가 두려워 배포를 꺼려함 현재 미국, 일본, 유럽 등 수요가 늘어나는 상황이나 상기한 문제로 신규 고객의 요구사항을 받아들이지 못하는 상황 수동 운영의 문제로 SLA 준수가 되지 못하여 고객 클레임이 높은 편 기존 모놀리식 아키텍처의 한계로 장기적인 발전의 한계에 봉착 모놀리식의 장점 상호 데이터 참조가 용이하여 개발 리소스를 최소화 시킬 수 있..

Programming/MSA 2022.06.08

(아키텍처) 현대적 어플리케이션 구축을 위한 Outer아키텍처 시 고려할 점

원문 : https://www.cncf.io/blog/2022/03/15/cluster-out-a-design-approach-to-building-modern-apps/ Cluster out: A design approach to building modern apps | Cloud Native Computing Foundation Guest post by Rob Whiteley, Vice President and General Manager of the NGINX Product Group at F5 This past August at NGINX Sprint 2.0, I discussed the patterns we see customers adopt to successfully… www.cncf.io ..

Programming/MSA 2022.03.16

[완독정리]스프링 마이크로서비스 코딩 공작소 9. 스프링 클라우드 슬루스와 집킨을 이용한 분산 추적-길벗

- 상관관계 ID를 사용해 여러 서비스 사이의 트랜잭션을 서로 연결한다. - 여러 서비스 사이의 로그 데이터를 검색 가능한 단일 소스로 수집한다. - 여러 서비스 사이의 사용자 트랜잭션 흐름을 시각화하고 트랜잭션 각 부분의 성능 특성을 이해한다. 이 세가지 사항을 만족하기 위해 세가지 다른 기술을 사용한다. - 스프링 클라우드 슬루스 : 상관관계ID를 사용해 HTTP 호출을 측정한는 스프링 클라우드 프로젝트이며, 생성 중인 추적 데이터를 오픈 집킨에 공급할 수 있는 연결고리를 제공한다. - 페이퍼트레일 : 여러 데이터 소스의 로그 데이터를 검색이 가능한 단일 데이터베이스로 수집하는 클라우드 기반의 프리미움 서비스다 - 집킨 : 여러 서비스 사이의 트랜잭션 흐름을 보여주는 오픈 소스 기반의 데이터 시각화 ..

Programming/MSA 2021.03.07

[완독정리]스프링 마이크로서비스 코딩 공작소 8.메시지와 EDA, 마이크로서비스의 사례-길벗

마이크로서비스에서의 캐싱 - 캐싱된 데이터는 서비스의 모든 인스턴스에 일관성이 있어야 한다. - 컨테이너 메모리에 조직데이터를 캐싱해서는 안된다. 서비스를 호스팅하는 런타임 컨테이너는 종종 크기 제약이 있으며 다양한 엑세스 패턴으로 데이터를 엑세스한다. - 업데이트나 삭제 연산으로 레코드가 변경될 때 서비스는 상태 변화를 인식해야 한다. 동기식 요청-응답 방식으로 상태 변화 전달의 특징 - 서비스간 강한 결합 - 쉽게 깨지는 서비스 관계 - 조직 서비스 변경에 관심있는 새 소비자를 추가할 때 경직성 메시징을 사용해 서비스 간 상태 변화 전달의 특징 - 메시징 방식을 사용하면 서비스 사이에 큐를 삽입한다. 데이터의 상태가 변할때 메시지를 발행하여 변경사항을 전달한다. - 느슨한 결합 - 내구성 - 확장성 ..

Programming/MSA 2021.03.06