<< 소프트웨어 개발의 낭비 | Home | 내 마음속의 염세주의 >>

Netflix가 가지고 있는 기술과 문화

그 유명한 '블록버스터' 비디어 대여점을 망하게 한 Netflix는 미국에서 VOD와 DVD 우편 대여 서비스를 제공하는 회사로, AWS를 가장 잘 사용하는 모범 사례로 높은 평가를 받고 있다. 그래서 AWS를 운영하거나 하고자 하는 회사들은 참고할만한 좋은 사례가 바로 Netflix이다.
그리고, Netflix는 기술 블로그를 운영중에 있기 때문에 거기에서 좋은 정보를 얻을 수 있기 때문에 자주 방문하는 습관을 가지는 것도 좋다.
Netflix는 기술 뿐만 아니라, 기업의 문화에도 신경을 많이 쓰고 있다. 기업이 건강하고 지속성을 유지하기 위해서는 기업 문화도 상당히 중요하다고 생각한다. 그래서 Netflix의 기업 문화도 한번 살펴봤다.

서비스 규모

  • 창업자이자 CEO : 리드 헤이스팅스(Reed Hastings)
  • 회원 수 : 2,500만명
  • 트래픽 : 피크타임에 미국 인터넷 트래픽의 30%이상을 점유함
  • 800개 이상의 디바이스들에 대해 스트리밍을 지원함
  • API 요청 수는 417억 RPM = 약 15,000 RPS(2012.1월 기준)

아키텍처

Netflix는 자체 데이터 센터를 가지고 있었고 그 데이터 센터를 증축을 하느냐 아니면, 외부(클라우드) 환경을 빌려서 사용하느냐의 갈림길에서 어떻게 AWS로 가게 되었는지의 과정을 설명한다.

1. 아마존 마이그레이션 전의 아키텍처
AWS로 마이그레이션하기 전에 Netflix는 데이터 센터를 가지고 있었다. 그 구조의 아키텍처는 아래와 같다.
  • Web 어플리케이션(Java + Tomcat)의 이중화 구성 : 버그 하나로 전체 시스템 영향 범위.
  • Oracle RAC로 구성된 데이터 베이스 : Scale Out 문제점, 스키마 변경 시 서비스 중지됨.
  • 단일 데이터 센터에 입주 : 지역 분산이 안되어 있음.
  • 완전한 백업은 없었음.
데이터 센터와 데이터 저장소가 SPOF고, 비즈니스 요구사항이 바뀌어 스키마 변경이 일어났을 경우 서비스 중단이 없어야 하고(가용성), 서비스가 성장해가면서 데이터량이 많아지면 데이터 베이스의 Scale Out 구조의 필요성이 대두되었을 것이다.
그리고 웹 어플리케이션의 버그가 전체 Netflix 시스템에 영향을 주는 구조에서는 인프라의 한계도 왔다. 그래서 AWS로 전환을 검토하게 되었다. 물론, 자체 데이터 센터가 비용 효율면에서 떨어지는 면도 없진 않았다.

2. AWS로 전환 검토
그래서 AWS로 전환하기 위해서 Netflix에서 내부적으로 목표를 정했다.
  • Faster : Netflix 데이터 센터보다 빠른 응답 시간을 가져야 함.
  • Scalable : Netflix 데이터 센터의 용량의 한계에 얽매이지 않음.
  • Available : 여러 데이터 센터에 분산되어 가용성 확보 되어야 함.
  • Productive : 자동화 및 도구를 사용한 민첩한 개발이 가능한 환경이어야 함.
그리고 왜 Cloud로 가야하는지에 대해, Netflix의 데이터 센터와 클라우드에 구축 할 때 아키텍처의 비교를 통해 Anti-patterns을 정리했다.



정리해 보면,
  • 중앙 집중적 데이터 베이스(Oracle)보다는 Scale Out이 가능한 분산 KVS(Cassandra)가 필요했고,
  • 자체 데이터 센터내에서 서비스할 때는 특정 인스턴스가 실패하는 경우가 드물어 메모리 기반 Sticky 세션 관리를 했는데, 트래픽과 데이터가 늘어나다보니 Sticky 세션 관리의 스케일링 문제 해결과 분산 공유 메모리 기반에서 세션 관리가 필요하게 되었고,
  • 자체 데이터 센터내에서는 대용량으로 빠르고 신뢰성있는 네트워크여서 원격 시스템간의 Chatty API도 가능했는데, 분산 환경에서는 Latenty Tolerant 구조여야 했고,
  • 복잡한 인터페이스에서, 레이어 기반의 서비스 인터페이스가 필요했고,
  • 코드 레벨에서 수정없이 원하는 기능을 부여하는 단계에서, 서비스 패턴까지 확장 설계가 필요했고,
  • 객체가 복잡하고 컸는데, 이제는 가볍게 시리얼라이즈 되는 객체 단위가 필요했고,
  • 콤포넌트의 단위가 Jar였다면, 이제는 서비스 레벨의 콤포넌트화가 필요하게 되었다.

3. AWS로 전환
전환기에는 KVS를 통해 스키마에 유연하고, 다운타임이 없이 Scale Out이 가능하게 했고, 쿼리 레이턴시를 보장하기 위해 캐시(memcached)와 Cassandra, SimpleDB를 도입했다.
그리고 오라클과 SimpleDB간의 복제, SQS의 큐 도입, 나머지 데이터나 백업 등은 Netflix 데이터 센터의 오라클에 저장했다.



그후, Oracle에서 SimpleDB(PaaS) Replication 방식으로 전환했지만, 자동 샤딩이 가능했지만 지연이 있었고, Scale Out에 문제가 있는 오라클을 Cassandra로 대체했고, 백업/복원 등에 문제가 있어서 SimpleDB를 S3 + Cassandra로 보완하게 되었다.



결국, 중앙 집중 방식에서 분산 방식으로 접근하는 유일한 해결책은 AWS의 클라우드밖에 없다는 결론을 내부적으로 정한 것 같다.
그리고 "Lessons Netflix Learned from the AWS Storm"에서 내용처럼 Cassandra를 Zone과 Region을 분리하고 AWS Region별로 중복 데이터 카피를 해 비즈니스 속도를 높였다.
Cassandra를 각 노드별로 S3에 풀 백업과 복원을 가능하게 했고 BI(Business Intelligence)도 지원이 가능하게 되었다.
아래는 그동안 Netflix에서 일어난 아키텍처의 현황들이다.


사용한 기술

Netflix를 이루고 있는 인프라 기술과 주요 데이터 저장소로 활용되고 있는 Cassandra를 선택하게 된 동기 등을 살펴본다.

1. 인프라 관련 기술
Netflix에서 사용된 기술을 살펴보면 아래와 같다.
  • 주요 OS : CentOS 5
  • 주요 언어/WAS : Java 6 or 7/Tomcat
  • RDB : MySQL
  • 분산 KVS : Cassandra(왜 Cassandra를 선택했는지는 여기 참조)
  • 로그 분석 : Hadoop with Hive (Amazon EMR)
  • 코디 : Zookeeper
  • 배포/테스트 등 : Jenkins(용도는 빌드 파이프 라인의 구축, Cassandra의 유지 보수, 자동화된 테스트 및 배포, 인프라의 하우스 키핑)
  • AWS auto scaling : 자체 스크립트(오픈 소스 공개함 - aws-autoscaling)
  • 모니터링 : 외부에서 URL 감시는 Keynote, ELB와 인스턴스 모니터링은 Amazon CloudWatch, 자원 모니터링은 AppDynamics과 자체 도구인 Epic, 로그는 Hadoop.
  • 운영 문화 : NoOps - 운영 업무를 최소화하는 전략.
  • 시험해보는 문화 : 인터랙션, 새로운 제품과 가격, 이 모든 것을 A/B 테스트를 한다.(A culture of testing)

2. 주요한 데이터 인프라인 Cassandra를 사용한 이유
  • Rich Value Model : 2차원의 super-column family.
  • 데이터의 제한이 없음 : SimpleDB는 256 Attributes/Item, 10억 Attributes/Domain, 1K Attribute값 길이 제한.
  • 클러스터가 증가함에 따라 키 리샤딩 관리가 쉬움 : SimpleDB는 사용자의 개입에 의해서만 가능함.
  • 타입들의 처리가 좋음 : SimpleDB는 모두 UTF-8 스트링이지만, Cassandra는 키의 native type과 소팅을 위한 type이 존재. byte[]도 존재.
  • 오픈 소스이며 자바로 개발되어 있다.
  • 비정상적인 Update/Delete가 없다.
  • Consistency와 Avaiabilty에 대한 Tradeoff를 조절 가능하다.

공개한 오픈 소스

  • Priam : Cassandra 도우미로써 백업/복구 설정,토큰 관리, AWS 지원(Zone, S3 백업 등), JVM의 관리, 모니터링 등.
  • Astyanax : Cassandra Java Client.
  • CassJMeter : cassandra test 플러그인.
  • job-dsl-plugin : Jenkins Job을 위한 Grooby 기반 DSL.
  • aws-autoscaling : 자동 스케일 아웃을 지원하는 스크립트.
  • Chaos Monkey : VM 죽이고, 다시 살아나게 하는 테스트 도구.
  • Asgard : AWS용 관리 콘솔(Auto Scale Web Console).
  • Eureka : middle-tier servers의 로그발란싱과 페일오버 처리.
  • servo : 애플리케이션 모니터링용 라이브러리.

기업 문화

해당 기업의 문화에 대한 투자를 살펴봐도 그 기업이 얼마나 훌륭한 기업으로 남기 위해 노력하는가를 알 수 있다. 아래는 Netflix에서 추구하는 기업 문화에 관련된 자료를 정리한 것이다.

1. 가치는 우리가 정말 가치라고 생각하는 것들이다.
Netflix에서 중요한 가치라고 생각하는 것들은 "판단(Judgment), 커뮤니케이션, 영향력, 호기심, 혁신, 용기, 열정, 정직, 사심 없음"이다.

2. 높은 퍼포먼스를 중요시한다.
훌륭한 직장이란 뛰어난 동료들이 있는 곳이다.

3. 자유와 책임을 강조한다.
책임감 있는 사람은 자유로운 환경에서 번성하고, 또 그런 사람이 자유를 누릴 가치가 있다.

4. 통제/지시(Control)하기보다는 상황(Context)을 중시한다.
훌륭한 관리자는 지시나 통제하기보다는 적절한 상황(환경)을 만들어줘 뛰어난 결과를 얻는 방법을 아는 사람이다.

5. 느슨하게 결합되어 있으나, 강하게 정렬된 조직을 지향한다.
강한 연결이란 전략과 목표를 명확히 하고, 전략과 목표에 기반해 팀간의 상호작용이 진행되도록 하고, 관리할 때는 분명하고 직관적으로, 투명하게 구체적이이어야 한다.
느슨한 결합이란, 타 조직간 미팅을 최소화하고, 프리뷰나 승인 과정없이 암묵적으로 서로를 신뢰하며, 리더는 적절한 전망과 조율을 능동적 준비하고, 필요에 따라 간헐적으로 사후분석을 진행하는 것 등을 의미한다.

6. 시장에서 최고의 연봉을 제시한다.
이것이야말로 높은 성과를 내는 문화에 핵심이다. 뛰어난 직원 한명이 어중간한 두명의 직원보다 비용은 적게 들면서 성과는 더 나온다.

7. 능력에 따라 승진하고 스스로 발전해야 한다.
소수의 재능있는 사람이 빨리 승진하고 개인의 발전은 스스로 할줄 알아야 한다.

[참조 사이트]
Tags :



Add a comment Send a TrackBack