[Fast Campus] Docker 강의 4

Jul 27, 2019


  • 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


마이크로 서비스의 문제점


  1. 서비스의 범위를 어떻게 설정해야 하는가

    • 얼마나 작아야, 어느 정도 범위에서 나누어야 하는가

    • 용어의 문제 -> Cloud Native / 용어 때문에 생기는 공격에 대상이 되기 쉽다

    • DDD (Domain Driven Develop)

      ‘도메인’ === ‘특정 업종, 비즈니스, 현업의 경험 / 지식’

      소프트웨어는 현실 문제를 해결하는 것, 현실을 잘 반영하는 것이 좋은 소프트웨어를 만드는 지름길.

  2. .

  3. 운영 이슈

    • DevOps
  4. 중복 이슈 : 코드 / 데이터

    • miniservices - 마이크로 서비스는 각 서비스 마다 스토리지를 따로 갖어야 하는데, 스토리지를 공유 할 수 있는 부분은 공유하면서 간다.

    스크린샷 2019-07-27 오후 4 22 30

  5. 복잡도

  6. 분산 이슈

    • Actor Model
      • 분산 환경에서 개별적인 작업 하나 하나를 해결해주는 Worker.
      • Actor 끼리 메시지로 통신.
      • 문제가 생기면 Mailbox 에 넣고 해결.
      • JVM 에서 동작하는 Actor Model 라이브러리 - akka.io

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 는 운영을 포괄한다.