컨테이너 기술의 발전과 MSA
LXC(Linux Container) cgroups cpi,메모리,디스크,네트워크를 프로비저닝 namespaces 프로세스 트리, 사용자 계정, 파일 시스템, IPC,… 호스트와 별개의 공간 설정 chroot chroot jail chroot 상의 폴더에서 외부 디렉토리 접근 안됨 os수준에서의 가상화 하나의 리눅스 시스템에서 가상화된 프로세스는 호환해야된다.
컨테이너 기술의 역사 lxc ibm / docker / google k8s 오케스트라 / cncf 기증 /
컨테이너 기술이란? 1960년대 인터넷보편화되면서 물리적인 서버가 필요 하나의 os 설치해서 프로세스 간섭등 비용문제 hyperviser가 생김 물리적장치에서 분리할수있다 하드웨어를 애뮬레이션 하는 방법으로 컨테이너는 운영체제를 제외하고 패키징한 형태로 빠르고 가볍다는 장점
소프트웨어 아키텍처의 발전 초기는 모놀리식 단일코드 어플리케이션 단일데이터베이스 코딩 처음할때 아키텍처 덜 복잡함 서비스가 커질수록 유지보수 어렵고 팀작업이 어렵다 모놀리식 어플리케이션은 다른 기술로 변경하는게 어렵기 때ㅜㅁㄴ에 일반적으로 오래기간동안 동일 기술을 사용해야한다는 치명적인 단점이 사용
컨테이너기술로 msa에서는 독립적으로 서비스를 구현하고 복잡성 오류찾기 힘듬
마이크로 서비스 아키텍처란?
monolithic vs msa 모놀리식 하나의 어플리케이션에 모든 로직이 들어가있는
모놀리식의 장단점
- 전체 애플리케이션이 하나로 되어있어 보통 동일한 개발 툴을 사용해 개발
- 배포 및 테스트도 하나의 애플리케이션만 수행하면 되기에 개발 및 환경설정이 비교적 간단
-
각 컴포넌트들이 함수로 호출되기에 성능의 제약이 덜하고. 운영 관리가 용이
- 빌드/테스트 시간이 연장 작은 수정에도 시스템 전체를 빌드해야함
- 선택적 확장 불가 이벤트로 인해 트래픽이 몰릴 경우 프로젝트 전체 확장 필수
- 하나의 서비스가 모든 서비스에 영향 트래픽 증폭으로 서버가 다운되면 다른 모든 서비스 역시 마비
msa의 장단점
- 복잡성의 문제 해결 각 서비스는 모듈화되어 있어 유지 보수가 쉬우면 개별의 서비스 개발을 빠르게 가능
- 독립적 배포 수정 용이 서비스 별로 독립적인 컴포넌트로 구성되어 있어 독립적으로 배포가 가능
-
개별 scale-out 각 서비스의 부하에 따라 개별적으로 scale-out 가능 즉 메모리 , cpu 적으로 상당부분 이득
- 하지만 데이터 트랜잭션의 일관성 유지 어려움 서비스가 분산되어 비즈니스 트랜젝션 유지 어려움
- 통신의 복잡성의 증가 서비스가 모두 분산되어 있기에 개발자는 내부 시스템의 통신을 어떻게 가져가야 할지 어려움
- 배포의 어려움 서비스 1개를 재배포한다면 다른 서비스들과의 연계가 정상적으로 이루어 지는지 확인 필수
service type
with api gateway 외부 클라이언트 암호화와 복호화 로드밸런스의 역할도 같이 함
with message queue Event driven architecture
msa의 특징 api를 통해서만 Msa와 서비스가 상호작용 가능 다양한 언어로 구성가능 마이크로서비스 환경에서의 자동화 동적이고 분산돼 있는 마이크로 서비스 msa는 상당히 많은 마이크로서비스 saoa에서 사용하는 집중화된 관리체계 엔터프라이즈같은 무거운 의존하지 않는다.
마이크로서비스 설계 tdd test driven development
- 장점
- 보다 튼튼한 개체 지향적인 코드 생산
- 재설계 시간의 단축
- 디버깅 시가느이 단축
- 테스트 문서의 대체 가능
- 추가 구현의 용이함
- 단점
- 가장 큰 단점은 바로 생산성의 저하 bdd behavior driven development tdd에서 디벨롭된 특징 테스트에 대상의 기능/책임 명시 시나리오 테스트 목적에 대한 상황을 설명 기븐 시나리오 진행에 필요한 값을 설정 언제 시나리오를 진행하는데 필요한 조건을 명시 then 시나리오를 완료했을때 보장해야 하는 결과를 명시
ddd domain driven development
- 장점
- 느슨하게 결합된 아키텍처는 확장성 , 복원성, 유지보수성,위치 투명성, 프로토콜 ddd방법론은, 각 비즈니스의 도메인 패턴을 중심에 놓고 설계하는 방식을 말합니다. 도메인 그 자체와 로직에 초점을 맞추어, 순수한 도메인의 모델과 로직에만 집중 합니다. 분석 모델과 설계 및 코드가 다른 구조가 아니라 도메인 모델부터 코드까지 항상함께 움직이는 구조의 모델을 지향하는 것이 ddd의 핵심 원리 입니다.
stratic