본문 바로가기

아키텍처 | 설계12

blocking sync / blocking async / non-blocking sync / non-blocking async blocking / non-blocking async / sync 방식의 차이 1. blocking sync 작업 수행 -> 대기 -> 결과 반환 -> 다시 작업 진행 2. blocking async - node js 와 mysql 을 사용하는 경우에 이럴 수 있다. nodejs 는 async인데 mysql은 blocking 이다. 직접적으로 이렇게 사용하는 모델이 있지는 않다. blocking이기 때문에 함수 호출 후 대기한다. 콜백 함수를 리턴받고 호출한다. 3. non-blocking sync 작업 수행 -> 함수 호출 -> 바로 콜백 반환 -> 완료 확인 -> 완료 안됨 -> 다시 호출 -> -> 다른 작업 수행 -> 완료확인 -> 완료 안됨 -> 다시 호출 다른 작업을 수행할 수는 있는데 완료 .. 2020. 8. 10.
마이크로 서비스 아키텍처 12장 1. 비즈니스 개념에 따른 모델 - 바운디드 컨텍스트를 잘 나누고 개발한다. 2. 자동화 테스팅은 중요하다. - 빠른 피드백을 얻기 위해서 CI/CD 를 활용한다. - 어디에나 같은 방식으로 배포하기 위해서 같은 산출물(도커)를 활용한다. 3. 내부 구현 은폐 - REST 구조를 고려하라. - 서로 다른 MSA 가 다른 기술 스택으로 구현되어도 문제 없도록 만들어라 - DB도 분산해라 4. 팀을 조직에 맞춰서 조정하라. - 콘웨이의 법칙 5. 오케스트레이션보다는 코레오그래피를 지향하라. - 비동기적인 작업 처리 독립적인 배포 - 다른 서비스와 독립적으로 배포할 수 있도록 해라. - 블루/그린 배포나 카나리 배포를 고려하라. 소비자 주도 계약 테스트 - 소비자 입장에서 서비스는 ㅁㅁㅁ 해야 한다. 이런식의.. 2020. 6. 8.
콘웨이의 법칙과 시스템 설계 / 대규모 마이크로 서비스 - 마이크로 서비스 아키텍처 11장 시스템 구조는 설계하는 조직의 커뮤니케이션 구조를 닮게 된다. 모든 시스템은 그 조직의 의사소통 구조와 동일하게 만들어진다. 조직의 구조가 시스템 아키텍처 설계에 영향을 준다. 책에서는 팀의 분리 상태를 들어서 설명하고 있다. 연관성이 높은 조직 A와 B가 밀접하게 소통하지 못하고 원격으로 이메일만 조금 주고 받는다면 어떨까 이렇게 개발을 할때 정말 좋지 않은 상황은 그대로 커뮤니케이션 되지 않은채 서비스가 방치되는 것이다. 컨텍스트를 잘 나누고 관련 있는 조직끼리 잘 소통하게 해야한다. 예를 들어서 고객의 주문 서비스와 상담 서비스를 아예 다른 팀에서 개발 한다고 해보자. 두 조직은 분리되어 있다. 커뮤니케이션 없이 코드베이스도 완전히 분리되게 된다. 이렇게 개발하다 만약 상담 서비스 개발하던 곳에서 .. 2020. 6. 8.
MSA 모니터링 / 장애전파 / 테스트 테스트 종류 유닛 테스트: 함수 단위의 테스트 통합 테스트: api 요청 후 db insert 까지 테스트 하는 것 E2E 테스트: 사용자입장에서 end to end 테스트 스모크 테스트: QA 가 의미 없는 테스트를 하지 않도록 프로그램이 돌아가는지 테스트 테스트에서의 서비스 주도 계약 - CDC ( Consumer Driven Contract ) 서비스의 기대사항을 작성한다. 소비자가 어떻게 사용할지를 작성한다. 엔드 투 엔드 테스트에 드는 비용을 줄일 수 있다. // 고객은 주문 항목을 장바구니에 담을 수 있어야한다. // 장바구니에 담은 항목은 결제 할 수 있어야 한다. // 고객은 장바구니에서 수량을 조절 할 수 있어야 한다. // ... ... ... 모니터링 문제 모놀리틱 서비스는 모니터링 .. 2020. 6. 7.
카나리 배포 , 블루그린 배포 블루그린 배포 로드 밸런서를 활용해서 2개(이전 버전, 신규버전) 를 배포한다. 신규 버전을 테스트한다. 그리고 이전 버전의 트래픽을 신규 버전으로 보내는 방식이다. 카나리 배포 신규 버전을 지정한 서버 1대, 특정 유저에게만 배포한다. 정상적이면 전체를 배포한다. 문제가 있다면 롤백한다. 트래픽을 조금 흘려서 괜찮은지 확인하고 배포하는 방식이다. 2020. 6. 7.