- ElasticSearch
- 마이크로 서비스
- RESTful api
- DevOps
ElasticSearch
- ELK : ElasticSearch + LogStash + Kibana
- nGinx ->
- 서버의 로그는 json 포멧을 이용하는게 좋다
- nGinx 의 로그를 읽기 쉽게 json 포멧으로 변환한 후 호스트의 특정 위치로 바인딩 (volumn)
- logstash 띄우기 logstash 가 redis 바라보게 한다.
- Ela 로 넣어줄 때, 인덱서가 필요하다 redis 에 있는 것을 ela 가 꺼내서 가져가야 한다.
마이크로 서비스
작은 서비스를 결합해서 하나의 응용 프로그램을 만드는 아키텍처 스타일
- 작은 서비스, 독립적인 비즈니스 로직 - ‘다른 로직과 연결되어서 실행되는 것이 아니라, 그 자체로 실행 가능한 로직’
- 자동화 된 배포
- 최소한의 중심적인 관리 체계, 각각의 작은 서비스가 독립적이려면, 중앙집중적이면 안되고, 스스로가 관리가 되어야 한다. 체계가 최소한이어야 한다. 중앙 관리가 없을 순 없지만, 최소한이어야 한다.
- 작은 서비스는 각각 다른 프로그래밍 언어, 스토리지를 갖을 수 있다.
왜 마이크로 서비스 인가
- 클라우드 컴퓨팅이 일반화
- 스케일링에 대한 중요성이 증가
- scale-up / scale-out
- 특정 서비스에서만 트레픽이 많이 걸린다고 하면 그 부분만 스케일링을 해주면 된다.
- 특정 시점에 특정 서비스에만 서버를 늘리거나 줄여 줄 수 있다.
- 시스템 규모가 커지면서 복잡성도 증가
- 사용자가 많아지면, 어떤 종류의 장애가 생길지 모른다.
- 가장 유연하게 관리할 수 있는 것은, 작은 것으로 쪼개는 것. (최적화 전략)
마틴 파울로, 마이크로서비스 아키텍쳐
개별적으로 동작을 하면서 하나의 프로그램을 구성한다.
SOA vs 마이크로 서비스
- 개념적으로 보면 비슷하다.
- ESB 와 API Gateway
왜 이게 좋은 지에 대한 이론적인 이야기를 하고, 어떤 아키텍쳐인지 그려볼 줄 알아야 한다.
마이크로 서비스 특징
정말 잘하는 개발자가 마이크로 서비스를 구축하고 떠났다. 유지보수가 안된다.
- 심플하며 개발 요구사항에 특화되어 있다.
- 개별 팀에서 독립적인 개발/배포가 가능하다.
- 각각의 마이크로 서비스는 다른 프로그래밍 언어, 개발 도구로 개발 할 수 있다.
- Go 가 좋다고 해서, Go 로 개발 할 수 없다.
- 각각의 마이크로 서비스는 서로 다른 저장소를 갖는다.
- DB / File / …
- 고속 개발에 최적화 - DevOps
마이크로 서비스의 문제점
-
서비스의 범위를 어떻게 설정해야 하는가
-
얼마나 작아야, 어느 정도 범위에서 나누어야 하는가
-
용어의 문제 -> Cloud Native / 용어 때문에 생기는 공격에 대상이 되기 쉽다
-
DDD (Domain Driven Develop)
‘도메인’ === ‘특정 업종, 비즈니스, 현업의 경험 / 지식’
소프트웨어는 현실 문제를 해결하는 것, 현실을 잘 반영하는 것이 좋은 소프트웨어를 만드는 지름길.
-
-
.
-
운영 이슈
- DevOps
-
중복 이슈 : 코드 / 데이터
- miniservices - 마이크로 서비스는 각 서비스 마다 스토리지를 따로 갖어야 하는데, 스토리지를 공유 할 수 있는 부분은 공유하면서 간다.
-
복잡도
-
분산 이슈
- Actor Model
- 분산 환경에서 개별적인 작업 하나 하나를 해결해주는 Worker.
- Actor 끼리 메시지로 통신.
- 문제가 생기면 Mailbox 에 넣고 해결.
- JVM 에서 동작하는 Actor Model 라이브러리 - akka.io
- Actor Model
RESTful API 디자인 가이드
- API Endpoint
- /getAllEmployess -> GET /companies/3/employees
- HTTP Method
- GET / POST / PUT / DELETE
- HTTP 응답코드
- 2xx : Success
- 3xx : Redirect
- 4xx : Client Error
- 5xx : Server Error
- Versioning
- API 서버는 한번 나가면 수정이 안된다.
- 처음부터 API 버전에 대한 것이 없으면, 관리하기 어렵다.
- API Document
- Swagger / Postman
GraphQL
RESTful API 로 디자인 가이드 라인을 맞추면서 가기가 쉽지 않다.
따라서, 나온 것이 API 쿼리를 작성할 수 있는 DB.
카오스 엔지니어링
- 정상 상태 행동에 대한 가설 구축 (계획을 세우는 이유는, 계획대로 되는지 확인하기 위함)
- 현실 세계의 문제 시도하기
- ex. DB 를 끊어버렸을 때, 이중화된 디비에 연결하고, 사용자의 세션을 옮겨주는 작업이 성공하는지 확인
- 실제 프로덕션 환경에서 실험하기
- 자동화를 통한 지속적 실험
- 폭발 반경 최소화
DevOps
- DevOps 의 유래
- 개발과 운영에 대한 컨퍼런스를 열면서 용어가 생김
- _#DevOps 로 트윗되며 확산
-
DevOps 는 무엇인가
서비스나 제품의 릴리즈를 위해서 개발/운영/QA 활동 등이 서로 협업하여 장애없이 서비스나 어플리케이션을 빠르게 릴리즈 하는 방법.
- DevOps 주요 목표
- 제품을 배포 하는 것.
- 배포 파이프라인을 전 영역으로 확대하는 것.
- 어느곳을 보완해야 하는가
- 귀환한 비행기의 총알 자국을 분석하면 안되고, 추락한 비행기의 총알 자국을 분석해야 한다.
- Agile 과 DevOps 는 뭐가 다른가
- 애자일을 통해 자주 배포하면 Ops는 병목 현상이 일어난다.
- 애자일은 개발에서 운영으로 소프트웨어를 넘겨주는 것을 완료로 본다면 DevOps 는 운영을 포괄한다.