(후기)마이크로서비스 아키텍처(MSA) 회사별 구축사례

Ronie🌊·2021년 2월 13일
2

Conference📋

목록 보기
3/4
post-thumbnail
post-custom-banner

Bingle
Netflix
SK Planet
PAYCO
소감


Bingle

  • 기존 인프라 구조

    • Elastic Load Balancer : 둘 이상의 가용 영역에서 EC2 인스턴스, 컨테이너, IP 주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산합니다.
    • EC2로 트래픽 분산
    • AWS Opsworks로 배포, 관리
  • 기존 인프라 구조의 문제점
    레파지토리 하나에 기능이 전체 포함되어 있었다.
    그의 문제는, commit이 복잡하고 테스트에 시간이 너무 걸린다는 것.

    • 언제나 모든 서비스를 함께 디플로이, 스케일 하는것
    • 새로운 기술 도입이 어려움(기능 추가)
    • 바로 시도해 볼 수 있는 상황이 아니기때문에, 기술적 자유로운 사고가 어렵다.
  • Bingle의 혁신목표

    • 독립적 스케일링
    • 독립적 배포
    • 독립적인 기술 스택
    • 독립적인 개발 언어
    • 독립적인 테스트, 모니터링
  • 마이크로서비스를 위한 AWS 템플릿 준비

    • API게이트웨이 - Lambda - DB
      (예전에 했던 프로젝트도 이런느낌)
    • 인프라를 코드로 관리
    • 이상의 기능들은 무한, 자동 스케일링이 가능하기때문에 서버 안정성이 확보
    • Lambda 업로드, 끊기지않고 바로 업로드, 배포 가능
    • 스팸 필터 마이크로 서비스 구조 만들기
      DynamoDB의 스팸 URL, 단어등을 추가 시켜서 필터 Lambda에서 해당 필터조건을 가지고 필터링 기능을 구현시킨 것
      (이것의 장점은 다양한 기능에 적용시킬 수 있다는 것이고, DynamoDB에 스팸 URL추가하기도 쉽고, 배포, 테스트하는 것이 모두 코드로 자동화 할 수 있다는 것이다. 그리고 얼마나 많은 스팸체크를 했는지 확인 할 수 도 있다.)
  • 마이크로서비스로의 마이그레이션

    • 새로 추가되거나 변경이 필요한 기능부터 하나씩 분리
    • BusinessDomain 단위로 서비스 구성(search, feed, tracking등)
    • 다른 개발자가 쓰기 쉽도록 인터페이스화, Swagger 문서화
    • AWS에서 제공하는 managed서비스 활용
      CloudSearch, KinesisStream등

Netflix

  • AdrinaCookcroft가 말하는 마이크로 서비스란?

    • 서비스들이 네트워크를 통해 서로 API통신을 한다.
    • 서비스는 독자적으로 업데이트하며, 서로 영향을 주지않는다.
    • 다른 서비스의 내부구조를 알지 못해도, 내 서비스 코드를 업데이트 할 수 있다

  • Edge

    • ElasticLoadBalancer
    • Zuul : API Gateway
    • NCCP : Netflix 인증 시스템
    • API
  • Netfelx가 가진 마이크로 서비스간 인터페이스 이슈 해결

    • 휴스트릭스
      외부 마이크로서비스가 일시적 오류가 나면 연동 초기에 차단하여 장애 확대를 초기에 차단, 자신의 서비스를 보호
      Exception이 발생할 경우, 대신 실행캐시로 응답을 미리 만들어서 제공
    • 리본
      CLientSide Load Balancer로서 주어진 서버 목록에 대해 부하분산
    • 유레카
      서버 리스트를 자동 업데이트해주는 디렉토리 서비스
  • 인프라를 위한 카오스 관리 기법
    Netflex는 서비스에 대해 완벽한 신용을 갖지않는다. 오히려 항상 Fail이 일어날것을 대비하는데 이를 위한 대비 방법이 바로 Chaos관리기법이다. Chaos는 실 서비스에 장애를 주입, 출시 전 테스트에서 드러나지 않은 아키텍처상의 문제를 직접 드러내는 것이다.

    • Chaos Monkey
      Netflix의 프로덕션 네트워크에서 의도적으로 컴퓨터를 비활성화하여 나머지 시스템이 중단에 어떻게 반응하는지 테스트
    • Chaos Gorilla
      Simian Army 계층의 맨 위에있는 Chaos Kong은 전체 AWS " Region "을 삭제합니다 . 비록 드문, 지역 전체의 손실이 발생 않으며 카오스 홍콩 이벤트의 유형에 대한 시스템 응답 및 복구를 시뮬레이션합니다.
    • Chaos Kong
      Chaos Gorilla는 전체 Amazon " 가용 영역 "(지역에 서비스를 제공하는 하나 이상의 전체 데이터 센터)을 삭제합니다.

  • Netflix로부터 배운 것
    • Dependency
    • Scale
    • Organization & Architecture
    • Auto Change

SK Planet

  • 11번가 마이스코 서비스 전환 사례
    • 가장 작고 독립적인 서비스부터 마이그레이션
    • 기존 레거시와 신규 서비스 사이 원활한 API처리를 위해 Zuul같은 API 게이트웨이 필요
    • 각 서비스별 폴백 테스트 및 인프라 자동화
    • Netflix OSS는 오픈소스이므로 내재화 노력필수

PAYCO

  • NCP(NHN Commerce Platform)
    국내최초 클라우드 기반 전자상거래 솔루션
    효율적인 비용의 사이트 구축가능
    클라우드 기반으로 이용자 급증에 대처가능
    API를 통한 맞춤형 기능확장 및 자유로운 디자인 변형 가능

  • MSA로의 전환 계획

    • 담당자 분배
    • 전환 범위
    • 도입방법
    • 어떤 서비스부터 전환
    • 어떤 기술스택을 사용할지
  • 현재 사용 기능 전수 조사

    • 기능 기준 RestFulApi조사
    • 업무 도메인 별 기능 취합
  • 도메인 별 마이크로서비스 준비

    • 공통적인 부분, 배포주기, 트랜잭션을 모아서 마크로서비스 준비
  • 4개의 마이크로서비스로 분할

    • Porduct
    • Display
    • Order
    • Partner
  • SpringCloudNetflix모듈 사용?

    • Zuul
    • 휴스트릭스
    • 리본
    • 유레카
  • 그러나, 마이크로서비스들을 웹플러스기반으로 만들었기때문에(논블로킹) 볼로킹 기반인 Zuul로 만들어진 게이트웨이로 인해 병목현상이 발생

    • 이를 위해 Netflix는 Zuul2를 만들었지만, Netflix자체의 문제해결이였기때문에 SpringCloudGateway를 사용하기로 함.
    • SpringCloudGateway
      Spring개발자에게 맞는 게이트웨이(그에 맞춰 Zuul은 Zookeeper로 변경)

  • 설정파일의 관리
    Spirng Cloud Config Server

    • Github를 사용해서, 설정파일을 콘피그서버에 업로드하여 콘피그서버의 yml에서 각 서비스로 json형태의 Refresh API Call을 통해 분배한다.
  • 서버관리를 위한 자동화(콘테이너)
    Docker이미지를 관리하기 위한 DockerRepository사용
    개발 관리를 위한 Jenkins사용

  • 모니터링

    • nSight : NHN사내 표준 모니터링 툴
    • Grafana
    • Zipkin
    • Xlog
  • 문서화

    • Swagger Annotaion
      • 장점
        API문서의 현행화가 쉬움
        이해하기 쉽고 개발이 쉬움
      • 단점
        개발 로직과는 상관없는 코드
        분산 환경에서의 문서통합이 어려움
        functional endpoint방식에서는 API문서화가 불가능
    • SpringRestDocs + OpenAPI 3.0 + SwaggerUI
      테스트 후에 문서화

소감

우선 반성, 그동안 이런 강연을 안보고 난 뭐하고 있었던건가 ㅠㅠ, MSA마이그레이션 관련 AWS공부를 해야겠다고 생각했다. 보면 볼수록 매력적이다. 예전 프로젝트에서는 Lambda, Stepfunction, CloudWatch, SNS만 사용했었는데 그나마 사용한것도 더 많은 활용방법을 사용하지못했다는 생각이 들었다. 아쉽다, 그때 더 많이 활용해볼걸 ㅠㅠ

각 기업마다 오픈API의 활용, 특히나 선구자급인 Netflix의 오픈API의 활용, 시도하는 것을 보며 개발자들의 노력이 느껴졌다. 실패할것을 무서워하지 말것. 아무것도 하지않으면 에러는 나오지않지만, 더이상 앞으로 나아갈 수도 없다.

AWS는 점점 좋은 서비스들을 출시하고 있다. 클라우드 프로그래머가 되기위해서는 항상 공부가 필요할 것 같다.
화이팅!


참조

post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 2월 20일

bingle 이 아니고 vingle 인 걸로 알고 있습니다!

답글 달기