티스토리 뷰
카테고리 없음
AWS re:Invent 2022 - Building and operating at scale with feature management 요약
rlawlstjd007 2022. 12. 13. 21:31Building and operating at scale with feature management
Background
- AWS re:invent 2022 에서 Launch Darkly 가 진행한 세션으로 feature flag 를 통해서 효과적으로 대규모 운영 및 관리를 하는 방법에 대한 내용을 설명한다.
지표
- 약 4,000 개 이상의 고객사
- 약 24M 정도의 동시 Streaming API connection 수
- 매일 약 20T 이상의 feature flag 평가
- 초당 약 16M API request
Architecture
- 대략적인 시스템은 아래 이미지와 같고 전체적인 아키텍쳐는 AWS East 1 에 3개의 AZ 에 걸쳐 호스팅 되어 있다고 한다.
- 실제로는 global distribution 형태로 multi-region 으로 시스템을 구축 해두었다고 한다.
- 아키텍쳐에는 3가지의 주요 컴포넌트로 이루어져 있다고 한다. (사실은 1개 더 있다고 함)
Gonfalon Application
- Go 로 짜여진 상당히 전통적인 모놀리틱 웹 어플리케이션
- flagging 과 관련된 REST API, front end 로 구성된 대시보드 어플리케이션
Event Ingestion Pipeline
- 16 millon RPS(Request Per Second)의 처리 성능을 가지며 150 TB 데이터가 저장되어 있다고 한다.
- Kinesis, Dynamo DB, Elastic Cache 를 비롯한 AWS Managed Service 를 heavily 하게 사용하고 있다고 함
Flag Delivery Network
- Dashboard 에서 변경되는 flag 의 상태를 거의 즉시 고객의 SDK 에 설정 정보를 전파하기 위한 네트워크 모델
- streaming model (aka. push base model) 로 구성되어 있으며 고객의 SDK <-> Streaming API 를 persistent HTTPS connections 형태로 연결하여 Server-Sent Events 형태의 프로토콜로 변경 사항이 생겼을 때 SDK 로 메시지를 push 해주는 방식이라고 한다.
- 물론 polling 방식도 하나의 옵션이었지만 운영 관점에서 발생할 수 있는 문제를 해결하고자 streaming 방식을 택했다고 함
- eventualy consistency 로 인한 여러 디바이스 혹은 infra 간의 설정 불일치 문제 등등
- 흥미로운 점은 Server-Sent Events 프로토콜이 그리 많이 사용되는 프로토콜은 아니라고 한다. (기껏 해봐야 Twitter 의 DM infrastructure 정도)
- 일종의 단방향 웹 소켓 방식으로 양방향 통신이 필요 없고 (Web Socket 은 불필요한 복잡도도 언급) 단지 변경사항을 단방향으로 push 만 해주면 되기 때문에 해당 방식을 택했다고 한다.
- 이러한 방식을 통해서 현재느 20 ~ 40 millon 정도의 동시 connection 을 처리하고 있다고 한다.
- 좀 더 디테일하게는 client side (mobile, browser) 와 server side (Java, Python 등) SDK 의 방식이 다르다고 함
Giant Elastic Search Cluster
- 보통 feature flagging event 가 발생하면 context 라고 하는 정보를 넘겨주게 된다.
- 일종의 user 프로퍼티 정보를 의미하며 이 context 를 기반으로 rule engine 이 동작한다.
- ex) user property 기반의 roll out, 타겟팅 등등
- 이러한 context 정보는 유저가 대시보드에서 설정할 때 반드시 필요한 정보들이며 이를 통해서 개발자가 아닌 직군들이 쉽게 값을 찾을 수 있게끔 할 수 있다.
- 현재까지 약 14 billion 이상의 document 들이 ES 클러스터에 저장되어 있다고 한다.
User Case 1: Application Modernization
- MongoDB + PostgresSQL -> CrDB 로의 마이그레이션 과정에서 Feature Flag 를 효과적으로 사용했다고 한다.
- 해당 예제에서는 단계별로 Mode 를 나누고 Feature Flag 의 Variation 을 활용하여 각 Mode 별 rollout 을 관리하는 용도로 사용을 하였다.
Mode A
- 기존 DB 만 사용하여 Read & Write 를 수행하는 단계로 문제가 생길 경우 roll back 을 해야하는 mode 이기도 하다.
Mode AB
- 새로운 DB 에 기존 DB 데이터를 backfill 한 후 Dual Write 를 수행하는 단계로 consistency 가 맞춰진 상태를 가정한다.
Mode BA
- 새로운 DB 에 일부 read 트래픽을 할당하여 Dual Write 를 수행하는 단계로 기존 DB 로의 검증 단계가 수반된다.
- 이 단계에서 만약 문제가 발생한다고 하더라도 언제든지 roll back 이 가능하다.
Mode B
- 신규 DB 검증이 완료되어 fully 새로운 DB 로 스위칭이 완료된 단계를 의미힌다.
- Launch Darkly 에서 실제로 활용한 F/F 의 설정 화면으로 Multi Variation 으로 위 Mode 를 각각 구성한 모습이다.
- F/F 를 이용하면 각 단계별로 점진적으로 roll out 을 할 수가 있다는 것을 강조한다.
User Case 2: Compliance
- Compliance 는 여러 Third Party 를 이용하는 SaaS 기업에 있어서 골치 덩어리이다.
- 특히나 global SaaS 인 경우 상황에 따라서 준수해야 하는 규정들이 굉장히 다양한 것 같다 ..
- 일례로 FedRAMP (미국 연방 위험 및 권한 부여 관리 프로그램) 을 준수해야 하는 경우 사용할 수 있는 vendor 에 대한 제약사항이 생긴다고 한다.
- 그렇기 때문에 이를 해결하기 위해서는 단일 code base 가 아닌 여러벌의 코드 혹은 인스턴스를 관리해야 하는 pain point 가 생기는데 이를 해결하기 위해서 Feature Flag 를 사용할 수 있다고 한다.
- 아래는 상황에서 따라서 각각의 vendor 를 사용하는 코드를 control 하는 예
User Case 3: Cost and performance optimization
- 일부 서비스를 전통적인 X86 아키텍쳐에서 Graviton 으로 마이그레이션 하는 과정에서 Feature Flag 를 이용함
- Feature Flag 를 이용하여 비교적 간단하게 (?) 각 워크로드에 대해서 traffic 을 routing 하고 결과에 대해서 측정할 수 있었다고 한다.
- 그 결과 아래와 같은 비용 절감 효과와 더 높은 퍼포먼스를 얻을 수 있었다는 것을 강조하였다.
- Feature Flag 의 이점 보다는 결과치에 대해서 강조를 하는 느낌이었음 ..
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 일본 여행
- 텐트
- 배낭 여행
- 이펙티브자바
- 이펙티브
- Java UI
- JavaFX Table View
- 일본여행
- git
- JavaFX
- JavaFX Window Close
- 방통대 과제물
- springboot
- JavaFX 종료
- intelij
- TableView
- windows
- 자전거
- 배낭여행
- 인텔리제이
- JavaFX 테이블뷰
- 자전거 여행
- java
- effective java
- 스프링부트
- 이펙티브 자바
- 일본 배낭여행
- 자바
- effectivejava
- 일본 자전거 여행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함