SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
비트윈 서버 아키텍처와
 그에 따른 배포 방법


  VCNC 개발팀 이정행 사용자 모임
   아마존 웹 서비스 한국
    VCNC 개발팀 이정행 (@eincs)
     2013.02.16
          2013.02.16
비트윈?

커플들을 위한 모바일 서비스

 •   2.57M downloads

 •   611K weekly active users

 •   19M message per day

 •   160K photos per day
비트윈 서버 개발 스택

JAVA로 개발되었고, Tokyo region에서 운영됨

  •   Netty for network framework

  •   Thrift for defining protocol

  •   HBase for storing data
비트윈 서버 아키텍처

서비스 상태 또는 제공되는 기능에 따라 변경됨

 •   Single instance for closed beta

 •   Multi instance for open beta

 •   Shared instance for tcp chatting
비트윈 아키텍처 #1 (closed beta)

한 개의 인스턴스, 가정집의 Mac mini로 운영
비트윈 아키텍처 #1 (Cont'd)

세 개의 Git repository로 개발 및 배포

                   S3


   dev




   build
                      stunnel    API Server      HBase
                   (for HTTPS)    (HTTP)      (Standalone)




  deploy       dev에서 작업한 내용을 deploy에 반영 후, 운영 서버에서 git pull
비트윈 아키텍처 #2 (open beta 이후)

여러 대의 인스턴스, AWS에서 운영



                                API          HBase
                 ELB           API
                               API          (Cluster)
       HTTP




                  S3



              다운 타임을 최소화하기 위해, 인스턴스를 차례대로 롤링 업데이트
              (특정 인스턴스를 ELB에서 떼어낸 후, pull 받고 Netty서버 재시작)
비트윈 아키텍처 #3 (빠른채팅 이후)

    메세징에 대하여 TCP 프로토콜을 구현

                          ELB
                         (HTTP)
                  HTTP                API #1    HBase
                                               (Cluster)
                          ELB
                         (TCP)
                   TCP                API #2



•   TCP를 위한 ELB를 하나 두기
                                      API #3
•   작성 중 상태가 변경 될 때 마
    다 HBase 요청이 일어나게 됨
                            HBase 요청이 지나치게 많이 일어나므로
•   메모리에 들고 있고 싶지만 각
                              실제 시스템에 적용하기에 부적절함
    연인이 다른 서버로 연결 됨
비트윈 아키텍처 #3 (cont'd)

    특정 API 서버가 특정 커플을 샤딩

                                ELB
                               (HTTP)
                        HTTP                 API #1    HBase
                                                      (Cluster)
                               ELB #1
                               (TCP)
                         TCP                 API #2

                               ELB #2
                               (TCP)
•   채팅 상태를 메모리에 들고 있음
                                             API #3
•   특정 커플은 특정 서버에 할당
                               ELB #3
•   어떤 서버로 할당될지는               (TCP)
    Consistent Hashing으로 결정            각 API서버의 설정을 매번 바꾸어
•   각 API 서버가 살아있는
                                    줘야하므로, 새로운 버전 배포가 매우 복잡함
    API서버 리스트를 관리해야함
비트윈 아키텍처 #3 (cont'd)

    샤딩 정보를 ZooKeeper에서 관리

                           ELB
                          (HTTP)
                  HTTP                 API #1      HBase
                                                  (Cluster)
                          ELB #1
                          (TCP)
                    TCP                API #2

                          ELB #2                 ZooKeeper
                          (TCP)
•   API 서버가 추가 되거나 삭
                                       API #3
    제되면 샤딩 정보가 바뀜
                          ELB #3
•   샤딩 정보 변경시 ZK에서 살      (TCP)
    아 있는 API 서버로 바로 알
    려줌                    ZooKeeper에서 살아있는 API서버를 바로바로
                          알려주므로 그나마 간편한 롤링업데이트가 가능
비트윈 아키텍처 #3 (cont'd)

   그나마 간단하게 롤링 업데이트가 가능함

                                 ELB
                                (HTTP)
                        HTTP               API #1           HBase
                                                           (Cluster)
                                ELB #1
                                (TCP)
                         TCP               API #2
1. ELB(HTTP)에서 API #3 제거
                                ELB #2                    ZooKeeper
2. ZooKeeper 업데이트하여             (TCP)
   살아 있는 노드에서 API #3 제거                    API #3
3. API #1, API #2는 API #3가 제거   ELB #3
   되었다는 사실을 즉시 알게 되고            (TCP)
                                         pull 받고 Netty서버 재시작
   커플은 다시 샤딩 됨
4. API #3에서 pull받고 Netty 재시작
5. 다시 ELB들을 붙이고 ZooKeeper 업데이트
                                         여전히 복잡함
비트윈 아키텍처 #3 (cont'd)

  인스턴스가 새로 추가 될 때, ELB Warm-up이 필요함

                            ELB
                           (HTTP)
                    HTTP               API #1     HBase
                                                 (Cluster)
                           ELB #1
                           (TCP)
                    TCP                API #2

                           ELB #2               ZooKeeper
                           (TCP)
1. AMI에서 인스턴스 생성
                                       API #3
2. 새로 붙이는 ELB를 Warm-up
                           ELB #3
3. ZooKeeper에 새로운 인스턴스     (TCP)
  붙이기
4. HTTP ELB에 새로운 인스턴스
  추가                        Warm-up 과정 때문에 오토스케일링이 어려움
비트윈 아키텍처 #4 (가까운 미래)

자동화가 어려운 문제를 해결하기 위한 Multitier 아키텍처

                                              Rocky


                               Presentation
                                              APP #1
                                   #1
                   ELB                                    HBase
                  (HTTP)                                 (Cluster)

        HTTP                   Presentation
                                              APP #2
                                   #2
                    ELB
                   (TCP)
         TCP                   Presentation
                                              APP #3
                                   #2



                Presentation Tier는 Stateless하므로, 오토 스케일이 쉽게 가능
     Application Tier는 Rocky의 도움을 받아, 배포 자동화, 오토 스케일, Failover가 가능
                (Rocky는 Between 서비스를 위해 개발한 일종의 Coordinator)
비트윈 아키텍처 #5 (먼 미래)

     좀더 나아가서, HBase 리전들을 APP 서버 로컬에 할당

                                                                                       Rocky
                                                                                                        HBase
                                                                                                       (Cluster)
                                                               Presentation                           HBase
                                                                                       APP #1
                                                                   #1                                Region #1
                                             ELB
                                            (HTTP)
                             HTTP                              Presentation                           HBase
                                                                                       APP #2
                                                                   #2                                Region #2
                                              ELB
                                             (TCP)
                              TCP                              Presentation
                                                                                       APP #3
                                                                                                      HBase
                                                                   #2                                Region #3



              HBase 리전들을 분산에 따라 APP서버의 담당 커플을 결정함특정 유저로 국한 됨
           Application Tier와 HBase Region간 통신이 로컬에서 이루어 지기 때문에 응답속도에 유리함

http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/ko// people/jeff/MIT_BigData_Sep2012.pdf
비트윈 아키텍처 #5 (cont’d)

     Multizone으로 구성이 가능해짐
                                                            Rocky



                                                     P #1   APP#1



                                                     P #2   APP#2

                                       ELB
                                      (HTTP)         P #3   APP#3


                            HTTP
                                       ELB                  Rocky
                                      (TCP)
                            TCP                      P #1   APP#1



                                                     P #2
    Presentation Tier는 비동기식으로 동작하므로 Zone간 Latency가
                                                            APP#2
•
    부담이 없음                                           P #3   APP#3


•   HBase에 Haeinsa 적용 후, Region서버간 통신은 묶여서
    호출되므로, HBase Cluste의 Rack설정을 잘하면 하면 부담이 적음
Thank you for listening

Mais conteúdo relacionado

Destaque

4.[d2 오픈세미나]LINE Rangers 게임 클라이언트/서버 아키텍쳐
4.[d2 오픈세미나]LINE Rangers 게임 클라이언트/서버 아키텍쳐4.[d2 오픈세미나]LINE Rangers 게임 클라이언트/서버 아키텍쳐
4.[d2 오픈세미나]LINE Rangers 게임 클라이언트/서버 아키텍쳐NAVER D2
 
Android Push Server & MQTT
Android Push Server & MQTTAndroid Push Server & MQTT
Android Push Server & MQTT광운 이
 
결제를 구현하고 싶은 개발팀을 위한 안내서
결제를 구현하고 싶은 개발팀을 위한 안내서결제를 구현하고 싶은 개발팀을 위한 안내서
결제를 구현하고 싶은 개발팀을 위한 안내서수보 김
 
Kgc2012 유연한 컨텐츠 개발을 위한 온라인 게임 아키텍처
Kgc2012 유연한 컨텐츠 개발을 위한 온라인 게임 아키텍처Kgc2012 유연한 컨텐츠 개발을 위한 온라인 게임 아키텍처
Kgc2012 유연한 컨텐츠 개발을 위한 온라인 게임 아키텍처kgun86
 
Kgc2012 온라인 게임을 위한 게임 오브젝트 설계
Kgc2012 온라인 게임을 위한 게임 오브젝트 설계Kgc2012 온라인 게임을 위한 게임 오브젝트 설계
Kgc2012 온라인 게임을 위한 게임 오브젝트 설계kgun86
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 

Destaque (6)

4.[d2 오픈세미나]LINE Rangers 게임 클라이언트/서버 아키텍쳐
4.[d2 오픈세미나]LINE Rangers 게임 클라이언트/서버 아키텍쳐4.[d2 오픈세미나]LINE Rangers 게임 클라이언트/서버 아키텍쳐
4.[d2 오픈세미나]LINE Rangers 게임 클라이언트/서버 아키텍쳐
 
Android Push Server & MQTT
Android Push Server & MQTTAndroid Push Server & MQTT
Android Push Server & MQTT
 
결제를 구현하고 싶은 개발팀을 위한 안내서
결제를 구현하고 싶은 개발팀을 위한 안내서결제를 구현하고 싶은 개발팀을 위한 안내서
결제를 구현하고 싶은 개발팀을 위한 안내서
 
Kgc2012 유연한 컨텐츠 개발을 위한 온라인 게임 아키텍처
Kgc2012 유연한 컨텐츠 개발을 위한 온라인 게임 아키텍처Kgc2012 유연한 컨텐츠 개발을 위한 온라인 게임 아키텍처
Kgc2012 유연한 컨텐츠 개발을 위한 온라인 게임 아키텍처
 
Kgc2012 온라인 게임을 위한 게임 오브젝트 설계
Kgc2012 온라인 게임을 위한 게임 오브젝트 설계Kgc2012 온라인 게임을 위한 게임 오브젝트 설계
Kgc2012 온라인 게임을 위한 게임 오브젝트 설계
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 

Mais de AWSKRUG - AWS한국사용자모임

IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021
보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021
보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021
자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021
자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...AWSKRUG - AWS한국사용자모임
 
자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021
자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021
자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...AWSKRUG - AWS한국사용자모임
 
커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021
커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021
커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021
복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021
복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021
ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021
ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021
복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021
복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...
EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...
EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...AWSKRUG - AWS한국사용자모임
 
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...
[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...
[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...AWSKRUG - AWS한국사용자모임
 
초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020
초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020
초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020AWSKRUG - AWS한국사용자모임
 
[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...
[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...
[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...AWSKRUG - AWS한국사용자모임
 
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020AWSKRUG - AWS한국사용자모임
 
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020AWSKRUG - AWS한국사용자모임
 
엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C) :: AWS Community Day Online 2020
엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C)  :: AWS Community Day Online 2020엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C)  :: AWS Community Day Online 2020
엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C) :: AWS Community Day Online 2020AWSKRUG - AWS한국사용자모임
 

Mais de AWSKRUG - AWS한국사용자모임 (20)

IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
 
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021
Docker를 활용한 손쉬운 ECS 활용기 - 김민태 (AUSG) :: AWS Community Day Online 2021
 
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021
AWS와 함께하는 무중단 배포 파이프라인 개선기 - 황성찬 (AUSG) :: AWS Community Day Online 2021
 
보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021
보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021
보안을 위한 AWS Network 구성 - 우수연 (AUSG) :: AWS Community Day Online 2021
 
자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021
자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021
자연어 처리 ML모델을 활용한 이커머스 문제 해결하기 - 진현두 (카카오스타일) :: AWS Community Day Online 2021
 
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
 
자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021
자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021
자바개발자가 최대한 빠르게 서비스를 오픈하는 방법 - 최진환 (드라마앤컴퍼니) :: AWS Community Day Online 2021
 
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
 
커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021
커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021
커뮤니티 빌더를 아시나요? - 윤평호(AWSKRUG) :: AWS Community Day Online 2021
 
복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021
복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021
복잡한 권한신청문제 ConsoleMe로 해결하기 - 손건 (AB180) :: AWS Community Day Online 2021
 
ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021
ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021
ECS to EKS 마이그레이션 경험기 - 유용환(Superb AI) :: AWS Community Day Online 2021
 
복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021
복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021
복잡한 기존 시스템에 피쳐 애드업 후기 - 김태웅(브랜디) :: AWS Community Day Online 2021
 
EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...
EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...
EKS에서 Opentelemetry로 코드실행 모니터링하기 - 신재현 (인덴트코퍼레이션) :: AWS Community Day Online...
 
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
 
[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...
[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...
[AWS Hero 스페셜] 서버리스 기반 검색 서비스 구축하기 - 이상현(스마일벤처스) :: AWS Community Day Online ...
 
초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020
초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020
초기 스타트업의 AWS - 김지훈(투어라이브) :: AWS Community Day Online 2020
 
[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...
[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...
[AWS Hero 스페셜] Amazon Personalize를 통한 개인화/추천 서비스 개발 노하우 - 소성운(크로키닷컴) :: AWS C...
 
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020
 
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
 
엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C) :: AWS Community Day Online 2020
엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C)  :: AWS Community Day Online 2020엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C)  :: AWS Community Day Online 2020
엔터프라이즈 기업을 위한 Digital 플랫폼 구축 사례 - 권낙주(SK C&C) :: AWS Community Day Online 2020
 

Último

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 

Último (6)

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

[AWS KR UG 1회 세미나] 비트윈 서버 아키텍처와 그에 따른 배포 방법 @ 이정행

  • 1. 비트윈 서버 아키텍처와 그에 따른 배포 방법 VCNC 개발팀 이정행 사용자 모임 아마존 웹 서비스 한국 VCNC 개발팀 이정행 (@eincs) 2013.02.16 2013.02.16
  • 2. 비트윈? 커플들을 위한 모바일 서비스 • 2.57M downloads • 611K weekly active users • 19M message per day • 160K photos per day
  • 3. 비트윈 서버 개발 스택 JAVA로 개발되었고, Tokyo region에서 운영됨 • Netty for network framework • Thrift for defining protocol • HBase for storing data
  • 4. 비트윈 서버 아키텍처 서비스 상태 또는 제공되는 기능에 따라 변경됨 • Single instance for closed beta • Multi instance for open beta • Shared instance for tcp chatting
  • 5. 비트윈 아키텍처 #1 (closed beta) 한 개의 인스턴스, 가정집의 Mac mini로 운영
  • 6. 비트윈 아키텍처 #1 (Cont'd) 세 개의 Git repository로 개발 및 배포 S3 dev build stunnel API Server HBase (for HTTPS) (HTTP) (Standalone) deploy dev에서 작업한 내용을 deploy에 반영 후, 운영 서버에서 git pull
  • 7. 비트윈 아키텍처 #2 (open beta 이후) 여러 대의 인스턴스, AWS에서 운영 API HBase ELB API API (Cluster) HTTP S3 다운 타임을 최소화하기 위해, 인스턴스를 차례대로 롤링 업데이트 (특정 인스턴스를 ELB에서 떼어낸 후, pull 받고 Netty서버 재시작)
  • 8. 비트윈 아키텍처 #3 (빠른채팅 이후) 메세징에 대하여 TCP 프로토콜을 구현 ELB (HTTP) HTTP API #1 HBase (Cluster) ELB (TCP) TCP API #2 • TCP를 위한 ELB를 하나 두기 API #3 • 작성 중 상태가 변경 될 때 마 다 HBase 요청이 일어나게 됨 HBase 요청이 지나치게 많이 일어나므로 • 메모리에 들고 있고 싶지만 각 실제 시스템에 적용하기에 부적절함 연인이 다른 서버로 연결 됨
  • 9. 비트윈 아키텍처 #3 (cont'd) 특정 API 서버가 특정 커플을 샤딩 ELB (HTTP) HTTP API #1 HBase (Cluster) ELB #1 (TCP) TCP API #2 ELB #2 (TCP) • 채팅 상태를 메모리에 들고 있음 API #3 • 특정 커플은 특정 서버에 할당 ELB #3 • 어떤 서버로 할당될지는 (TCP) Consistent Hashing으로 결정  각 API서버의 설정을 매번 바꾸어 • 각 API 서버가 살아있는 줘야하므로, 새로운 버전 배포가 매우 복잡함 API서버 리스트를 관리해야함
  • 10. 비트윈 아키텍처 #3 (cont'd) 샤딩 정보를 ZooKeeper에서 관리 ELB (HTTP) HTTP API #1 HBase (Cluster) ELB #1 (TCP) TCP API #2 ELB #2 ZooKeeper (TCP) • API 서버가 추가 되거나 삭 API #3 제되면 샤딩 정보가 바뀜 ELB #3 • 샤딩 정보 변경시 ZK에서 살 (TCP) 아 있는 API 서버로 바로 알 려줌 ZooKeeper에서 살아있는 API서버를 바로바로 알려주므로 그나마 간편한 롤링업데이트가 가능
  • 11. 비트윈 아키텍처 #3 (cont'd) 그나마 간단하게 롤링 업데이트가 가능함 ELB (HTTP) HTTP API #1 HBase (Cluster) ELB #1 (TCP) TCP API #2 1. ELB(HTTP)에서 API #3 제거 ELB #2 ZooKeeper 2. ZooKeeper 업데이트하여 (TCP) 살아 있는 노드에서 API #3 제거 API #3 3. API #1, API #2는 API #3가 제거 ELB #3 되었다는 사실을 즉시 알게 되고 (TCP) pull 받고 Netty서버 재시작 커플은 다시 샤딩 됨 4. API #3에서 pull받고 Netty 재시작 5. 다시 ELB들을 붙이고 ZooKeeper 업데이트 여전히 복잡함
  • 12. 비트윈 아키텍처 #3 (cont'd) 인스턴스가 새로 추가 될 때, ELB Warm-up이 필요함 ELB (HTTP) HTTP API #1 HBase (Cluster) ELB #1 (TCP) TCP API #2 ELB #2 ZooKeeper (TCP) 1. AMI에서 인스턴스 생성 API #3 2. 새로 붙이는 ELB를 Warm-up ELB #3 3. ZooKeeper에 새로운 인스턴스 (TCP) 붙이기 4. HTTP ELB에 새로운 인스턴스 추가 Warm-up 과정 때문에 오토스케일링이 어려움
  • 13. 비트윈 아키텍처 #4 (가까운 미래) 자동화가 어려운 문제를 해결하기 위한 Multitier 아키텍처 Rocky Presentation APP #1 #1 ELB HBase (HTTP) (Cluster) HTTP Presentation APP #2 #2 ELB (TCP) TCP Presentation APP #3 #2 Presentation Tier는 Stateless하므로, 오토 스케일이 쉽게 가능 Application Tier는 Rocky의 도움을 받아, 배포 자동화, 오토 스케일, Failover가 가능 (Rocky는 Between 서비스를 위해 개발한 일종의 Coordinator)
  • 14. 비트윈 아키텍처 #5 (먼 미래) 좀더 나아가서, HBase 리전들을 APP 서버 로컬에 할당 Rocky HBase (Cluster) Presentation HBase APP #1 #1 Region #1 ELB (HTTP) HTTP Presentation HBase APP #2 #2 Region #2 ELB (TCP) TCP Presentation APP #3 HBase #2 Region #3 HBase 리전들을 분산에 따라 APP서버의 담당 커플을 결정함특정 유저로 국한 됨 Application Tier와 HBase Region간 통신이 로컬에서 이루어 지기 때문에 응답속도에 유리함 http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/ko// people/jeff/MIT_BigData_Sep2012.pdf
  • 15. 비트윈 아키텍처 #5 (cont’d) Multizone으로 구성이 가능해짐 Rocky P #1 APP#1 P #2 APP#2 ELB (HTTP) P #3 APP#3 HTTP ELB Rocky (TCP) TCP P #1 APP#1 P #2 Presentation Tier는 비동기식으로 동작하므로 Zone간 Latency가 APP#2 • 부담이 없음 P #3 APP#3 • HBase에 Haeinsa 적용 후, Region서버간 통신은 묶여서 호출되므로, HBase Cluste의 Rack설정을 잘하면 하면 부담이 적음
  • 16. Thank you for listening