트위터 지금 150 백만 활성 사용자가 전세계, 그리고 firehose timeline (타임 라인)을 생성 하는 사용자에 대 한 300000 QPS를 지원 하기 위해 22 MB 초 당 데이터의 생성. 시스템 전송 400 백만 짹짹 하루 고만 5 분 레이디가가에서 그녀의 31 백만 팬 스크린 짹짹을 합니다. 크기와 현재 트위터 시스템의 강력한 처리량은 참으로 부러워 하지만 데뷔 초에 트위터는 그냥 작은 사이트 Ror, 그리고 여기에 어떻게 목록을 트위터 서비스 중심 시스템 아키텍처 ROR에서 그것의 변환을 완료 하기 위해 고군분투.
트위터 시스템의 일부 기능:
1. 트위터 웹 AP의 상태 이상 만족입니다. 트위터 세계에서 가장 큰 실시간 이벤트 체인의 하나로 전세계 모바일 클라이언트를 구동 하는 Api의 집합을 것으로 예상 된다.
2. 트위터는 소비 메커니즘, 아니라 생산 메커니즘에 의해 지배 된다. 타임 라인 읽기 매초 300000 쿼리 및 약 6000 초당 쓰기 요청에서 발생 합니다.
3. outliers, 개인 팬 들의 큰 숫자와 함께 시작, 인기가 그리고 많은 팬 들의 확산으로 인해 짹짹을 보낼 느릴 것 이다. 5 초 동안 지연 제어 하려고 트위터 하지만 사람들이 짹짹을 유도 하 고 더 자주 서로 전달 하는 때문에 특히 항상, 작동 하지 않았다. 이 하면 원본 콘텐츠 전에 일반적인 팬 인터페이스에 도달 전달된 콘텐츠 되므로 높은 값 사용자에 대 한 트위터의 주요 초점 쓰기 작업이 읽기 작업에서 이동 해야 합니다.
4. 800의 최대 수와 함께 홈 타임 (홈페이지 타임 라인, 추종자의 짹짹의 수를 포함), 처리 Redis 클러스터 사용.
5. 사람들에 초점을 클릭 하는 링크에서 트위터 일련의 당신에 대 한 정보를 배울 수 있습니다.
6. 사용자는 가장 짹짹 콘텐츠, 하지만 인프라의 대부분 내용에 무관 하다.
7. 모니터링 및 시스템 성능 등 복잡 한 스택 추적을 수행 하는 데 필요한 디버깅은 종종 매우 복잡 하 고 오래 된 결정의 영향 전에 자주 수 있습니다.
트위터도 전에 직면
타임 라인 (홈, 검색)을 지원 하기 위해 사용자와 300000 QPS 1.150 백만 느린 초기 구현 (Naive 구체화) 하 게 됩니다.
2. 초기 구현 사용 이후 금지 트위터 시스템 전체 문장의 큰 선택의 구성 되었다.
3.를 사용 하 여 쓰기 기반 확산 프로그램. 짹짹을 받으면 시스템 사용자 짹짹 렌더링 하는 데 컴퓨팅의 많은 않습니다. 이 빠르고, 쉽게 읽기 및 읽기에 대 한 아무 계산 됩니다. 모든 계산 작성 하 여 실행 계획은, 때문에 초당 약 4000 쓰기 처리, 읽기 작업 보다 느린 될 수 있습니다.
트위터의 팀 작업
1. 플랫폼 서비스 팀 트위터의 핵심 인프라에 이르기까지 촬영 하고있다:
그들은 타임 라인 서비스, 짹짹 서비스, 사용자 서비스, 소셜 그래프에 대 한 책임은
트위터 플랫폼을 구동 하는 모든 구성 요소 서비스. 대략 동일한 API 제품 팀을 사용 하 여 내부 및 외부 고객 타사 API 등록 응용 백만 용량 확장 가능한 백엔드 시스템 아키텍처를 만들 계획에 관련 된 어떤 크기에 대해 걱정 하지 않아도 될 때 인프라의 지속적인 교체의 예상된 성장 넘어 사이트.
2. 트위터는 또한 아키텍처 팀을 있다. 트위터의 전체 구조에 대 한 책임 기술 부채의 목록을 유지 하 고.
끌어오기 및 밀어넣기 모드
1. 어떤 주어진된 시간에 사용자가 트위터, 콘텐츠를 게시 하 고 트위터의 작업은 메시지를 동기화 하 고 팬 들에 게 제시 하는 방법을 고려 하는.
2. 진짜 문제는 5 초에 팬 들에 게 메시지를 보내는의 목표와 함께 실시간 제약 조건:
배달 의미 콘텐츠를 수집, 인터넷에, 가능한 한 빨리 지 고 짧은 가능한 시간에 반환 합니다. 결과물 게시 됩니다 메모리 타임 라인 클러스터, 푸시 알림 및 이메일, 모든 iOS, 블랙베리, 안 드 로이드 알림 및 SMS를 포함 하 여. 트위터는 큰 SMS 프로듀서 선거 콘텐츠 생성 및 빠른 속도
에서 콘텐츠 확산에 큰 힘 될 수 있다
3. 두 종류의 Timeline:user timeline (타임 라인 사용자, 지정된 사용자 짹짹 페이지)와 타임 라인 홈
사용자 타임 라인을 지정된 된 사용자 일정을 게시 하는 모든 tweethome 모든 사용자가 사용자 일정에 대 한 우려는 임시 병합 된 비즈니스 규칙입니다. 당신의 관심사가 없는 경우에, 당신은 자동으로 필터링 됩니다 하 고 전달 된 짹짹을 필터링 할 수 있습니다. 그것은 매우 도전적인 트위터
의 규모에 이러한 것 들을
풀 모드
1. 타임 라인, Twitter.com Hone_line Api 등을 가리킵니다. 당신에 게 짹짹을 보내는 이유 당신이 요청한 때문 이다. 당겨 배달: 당신은 트위터 나머지 API 호출을 통해이 데이터를 요청합니다.
2. 쿼리 타임 라인, API를 검색 합니다. 쿼리를 모두 반환 하는 데이터베이스는 짹짹 최대한 신속 하 게 지정 된 쿼리 일치.
밀어넣기 모드
1. 트위터는 firehose를 통해 22 M / 초의 속도로 짹짹을 못 살게 굴지는 대규모 실시간 이벤트 시스템을 실행 합니다.
트위터, 소켓 열리고 그들은 150 밀리초에서 모든 공공 짹짹을 밀어 수 있을 것입니다. 소켓 푸시 클러스터를 열 든 지 비슷한 검색 엔진을 사용 하 여 1 백만 이상의 firehose 클라이언트, 모든 공용 짹짹이 소켓
를 통해 전송 됩니다.
2. 사용자 스트림 연결입니다. 트위터의 TweetDeck 및 맥 버전도이 방식으로 구동 됩니다. 에 로그인 할 때 트위터 귀하의 소셜 그래프에 보이는 것입니다 그리고 그것은 단지 영구 연결에 동일한 타임 라인 대신 홈 타임 라인 재건 주의의 메시지를 밀어 것입니다.
3. 쿼리 API, 때마다, 새로운 짹짹 짹 짹짹, 지속적인 쿼리를 게시 하 고 결정 된 쿼리와 일치 하는, 시스템 해당 소켓을이 짹 짹짹을 보낼 것 이다.
풀에 따라 고급 타임 라인
짹짹 부하 분산 장치를 통해 간단 하 게 될 것입니다 쓰기 API 및 TFE (트위터 프론트 엔드)에 의해 생성 되 고 모든 비즈니스 논리는 짹짹 생성 될 때 실행 됩니다. 짹짹의 확산 시작, 새로 생성 된 짹짹 대규모 redis 클러스터에 배치 됩니다. 각 짹짹 3 다른 기계에 3 복사본을 만들 것입니다. 트위터의 크기 때문에 컴퓨터의 많은 매일을 실패 합니다. 무리의 소셜 그래프 서비스를 기반으로하는 팬 쿼리, 무리는 팬 들과 팬 들의 목록을 유지 하 고 있다:
무리 받는 사람의 소셜 그래프를 반환 하 고 테라바이트의 메모리 4 K의 배달 또는 tweetredis 20000 팬 들, 있는 경우 기본 테이블 구조를 사용 하는 그래서 Redis 클러스터에 저장 된 모든 Timelineredis 클러스터를 반복 하기 시작 팬 쿼리에 대 한 책임 데몬 Redis 클러스터에 20000 사용자의 위치를 확인 하 고 Redis 클러스터에서 적절 한 목록 짹짹 ID를 삽입 합니다. 그래서 때 20000 팬 들을가지고 글을 각 짹짹의 20000 삽입 발생 합니다. 저장 된 정보에는 새로 생성 된 짹짹의 ID, 짹 짹짹 작가 ID와 4 바이트 상태 정보 (전달, 코멘트, 또는 다른 관련) 포함 되어 있습니다. 홈 타임 라인은 각각 800 짹짹 Redis 클러스터에 위치 해 있습니다. 다시 너무 많은 페이지를 설정 하는 경우 RAM 목록에서 짹짹의 수를 제한에 큰 병목입니다. 대기 시간을 제어 하려면 모든 활성 사용자는 메모리에 저장 됩니다. 캐시 크기, 실제 사용에 따라 30 일 이내 변경 될 수 있는 트위터에 로그온 하는 데 active 사용자 정의 됩니다. 활성 사용자가 아닌 경우에, 짹짹 캐시에 넣어 하지 것입니다. 만 홈 타임 라인 (영구)을 저장 합니다. 추 신: 개인적으로 해야한다 고 생각이 사용자 타임 홈 타임 라인 다음 재건 메서드는 분명 과학, 홈 타임 라인 Redis 클러스터에 없으면 그것을 토론 하는 환영, 재건의 과정을 거쳐 하는 데 필요한 경우:
사회 그래프 당신이 걱정 하는 누구를 서비스 합니다. 각 액세스 디스크 모두의 데이터를 다음 Redis를 다시 그들을 보냅니다. 모래 주머니를 통해 디스크 스토리지를 처리 하는 데 MySQL을 사용 하 여,이 모든 SQL 트랜잭션 추상화 하며 글로벌 백업 합니다.
그는 컴퓨터 중 하나에 오류가 발생 하는 경우 각 짹짹 3 백업을 할 것입니다, 그들은 컴퓨터에 모든 일정을 다시 필요가 없습니다. 짹짹 전달 될 때 원래 짹 짹짹에 대 한 포인터가 저장 됩니다.
질의로 홈 타임 라인, 타임 라인 서비스
호출 됩니다. 타임 라인 서비스는 기계 집에 존재 하는 타임 라인 확인:
3 가지에 타임 라인 백업 이므로 기계, 3 다른 하시 필요가 실행. 일단 발견 되는 결과 최대한 빨리 반환 됩니다. 이 과정은 조금 더 오래 걸릴 수 있습니다, 하는 동안 독서의 처리는 여전히 매우 빠르다. 그것은 약 400 밀리초에 대 한 하나의 API를 호출 하는 있는 콜드 캐시에서 브라우저 렌더링을 약 2 초 걸립니다.
타임 라인만 짹짹의 ID를 포함 하므로, 짹짹에 대 한 쿼리 수행 되어야 합니다. ID 확인 후 트위터 T 새를 통해 병렬로 짹짹의 콘텐츠를 얻을 것 이다. Gizmoduck 사용자 서비스 이며 Tweetypie은 각각 별도 캐시는 짹짹 개체 서비스. 모든 사용자가 캐시 Memcache 클러스터를 사용 하 여 사용자 캐시. Tweetypie는, 물론, 내부 사용자는 별도 memcache 클러스터에서의 짹짹의 절반을 저장 지난 달의 내용을 다룹니다. 콘텐츠 필터링 또한 프랑스 나치 관련 콘텐츠를 렌더링 하기 전에 필터링 필터링 등 몇 가지 독서 시간을 삭제 한다.
고급 검색
1. 모든 계산 읽기 쓰기 보다 간결 하 게에 의해 수행 됩니다.
2. 짹짹 생성 될 때 Ingester 구문 분석 및 해당 구문에 색인 되며 조기 기계에 전달. 조기, Lucene의 수정된 된 버전 이며 인덱스가 메모리에 저장 됩니다.
3. 과정에서 짹짹 확산, 그것은 결정 하는 팬 들의 숫자와 여러 홈 타임 라인에 저장할 수 있습니다. 그러나, 조기에서 짹짹 (백업 제외) 일찍 일어나는 새 기계에 입금만 됩니다.
4. 믹서 기는 일정 문의 대 한 배포 작업을 전체 데이터 센터에 걸쳐 합니다. 그것은 각 조기 쿼리 조건과 일치 하는 콘텐츠를 찾기 위해 쿼리 합니다. 뉴욕 타임즈를 검색 하는 경우 믹서 기 데이터 센터 조각의 모든 쿼리 하 고 결과으로 정렬, 병합 및 반환 순서. 정렬에 대 한 규칙 전달, 수집, 및 의견의 번호와 같은 대화형 데이터를 기반으로 합니다.
5. 쌍방향 정보 서 면된 패턴을 사용 하 여 대화형 일정 설정 완료 됩니다. 대화형 타임 라인에 변화를 일으킬 것 이다 수집 하거나 짹짹에 응답; 홈 타임 라인와 마찬가지로, 그것은 또한 이루어져 즐겨찾기 ID, 댓글 ID, 등 등의 대화형 Id의 시리즈.
6. 모든이 정보 블렌더로 보내집니다. 검색 일정의 반환의 결과 인터페이스, 수학을 수 병합, 그리고 읽기 방법으로 분류.
7. 검색은 당신이 관심이 사람들, 오픈 링크, 그리고 그 정보에 따라 재정렬 규칙에서 주로 오는 귀하의 관련 정보에 따라 맞춤 검색.
검색 및 풀 반대입니다.
1. 검색 하 고 당겨 보면 매우 유사 하 고, 사실 그들은 차이의 본질.
2.의 경우 홈 타임 라인:
쓰기입니다. 쓰기-짹짹 액션 트리거는 O (n)-Redis 클러스터 쓰기 작업을 확장 하 고 레이디가가, 바락 오바마 같은 팬 들의 수백만의 수만 유명 인사 처리를 귀찮은 것 n의 값, 팬 들의 수에 따라 다릅니다. Redis 클러스터에 대 한 정보는 클러스터 디스크에 사용자의 타임 라인을 저장 하지만 타임 Redis 클러스터의 메모리에서 발견 되는 일반적으로 디스크, 그리고 무리에 기록 됩니다. Read。 API 또는 네트워크를 통해 Redis를 찾는 일정 규모 작업입니다. 트위터만 수십 밀리초 읽기는 집 tiimeline에 대 한 높은 가용성 최적화를 있다. 그것은 또한 Twitter 소비자 메커니즘, 아니라 생산 메커니즘에 의해 지배 된다 볼 수 있습니다. 300000 읽기 쓰기 작업 초당 6000을 처리 하는 동안 초당 처리할 수 있습니다.
3. 타임 라인:
Write。 짹짹 생성 하 고 Ingester, 일찍 일어나는 새 기계에만 기록 된 전송 됩니다. 약 5 초, 큐 등 찾고 쓸 조기 기계 짹짹 처리 시간. Read。 각 읽기 요청 트리거는 O (n)-규모 클러스터 읽기 작업. 그것을 읽고, 약 100 밀리초 고 검색 포함 하지 않는 저장. 모든 Lucene 인덱스를 수집 하 고 수집 디스크가 관련 되어 있기 때문에 매우 효율적 이므로 RAM에 저장 됩니다.
4. 콘텐츠 짹짹의 대부분 인프라에 크게 관련 되지 않습니다. T 새 모든 짹짹, 저장 하 고 메모리에는 짹짹의 대부분은. 그렇지 않은 경우에 선택 쿼리를 통해 메모리에 다시 당겨 수 있습니다. 짹짹 콘텐츠와 관련 된 거의 기능 및 검색, 그들 중 하나 이며 홈 타임 라인은 전혀 상관 하지 않는다.
미래 작업
는
1. 보다 빠르고 효율적으로이 데이터 파이프라인을 구축 하는 방법
2. 5에서 짹짹, 하지만 하지는 작업 시간을, 특히 높은 분말 단위의 증가 수의 확산을 초.
3. 트위터는 비대칭, 그리고 유일한 당신의 추종자의 짹짹 당신에 게 제공 됩니다. 트위터 정보를 얻을 수 있습니다 이러한 단방향 우려에서 그리고 일부 단방향 관심 또한 사회 계약에 alludes.
4. 문제가 일반적으로 발생 합니다 큰 기본 차트:는 @ladygaga 31 백만 팬 들을가지고, @katyperry 28 백만 팬, @justinbieber 28 백만 팬,이 고 @barackobama는 23 백만 팬 들.
5. 각 데이터의 많은 수 귀 착될 것입니다 짹짹 보내는 팬 들의 큰 배치의 소유자 센터 쓰기, 및 상호 작용 하는 점점 더 많은 유명 인사, 도전 더 발굴 된다.
6. 높은 볼륨 사용자에 게 확산 필요 이러한 짹짹 트위터에 대 한 가장 큰 과제는 그리고 이러한 유명인의 일반적인 팬에 원래 보다 일찍 배달 되는 짹짹 자주 응답 있다. 그들은 레이디가가에 관심이 있는 최근 팬 들이 분 일찍 팬 들 관심이 이전 보다 짹짹을 볼 것 같은 그들의 사이트에 경쟁 상태를 소개 합니다. 예를 들어 사용자는 먼저, 짹짹을 받은 고 응답, 하지만이 시간 레이디가가 원래 microblog 않았다 하지 밖으로 확산, 일부 사용자 표시 첫째, 사용자에 대 한 문제를 많이 일으키는 응답 될 것입니다. 그들의 대부분은 일정 하 게 증가 하 고 있다, 하지만이 같은 팬 규모에서 작동 하지 않습니다 때문에 짹짹 ID로 정렬 됩니다.
7. 읽기 및 더 이상 쓰기의 방법에 대 한 검색 같은 규모, 테일러 스위프트의 새 짹짹, 짹짹 ID는 빌드 시간에 확산 하지만 독서의 순간에 병합 대신의 확산 등이 펼쳐집니다. 읽기 및 쓰기 채널 균형에 의해 점수 리소스를 저장 합니다.
디 커플링의 상관 관계
1. 다양 한 방법으로 통해 트위터의 짹짹을 기반으로, 독립적으로 그들의 작업을 할 수 다른 기술 팀 수 수 분리.
2. 시스템도 필요 분리 성능 문제에 따라. 트위터 전체 동기화 모델을 사용 하 고 2 년 전 그들은 성능 문제 때문에 패턴을 비활성화. 장치를 짹짹 받을 145 밀리초 고 기술 부채 뿐만 아니라 받은 후 모든 클라이언트 연결의 연결을 끊습니다. 서 면된 경로 MRI, 단일 스레드 서버 사용 모든 유니콘 작업자 임무에 대 한 모든 처리 성능을 통해 구현 하는 루비에 의해 구동 됩니다. 때마다 짹짹에 흐르고, 루비 수신, 큐에 넣습니다 및 다음 링크 연결을 끊습니다. 그들은 실행만 45-48 프로세스 각 서버에서 짹짹 각 섀시를 동시에 처리할 수 있는 수는 너무 큰 그들은 최대한 빨리 연결을 해제 해야 합니다.
3. 현재 짹짹 비동기 모드에서 처리 하 고 비동기를 기반으로하는 이러한 논의.
모니터링 관련
1. 시스템 성능 실시간으로 계기판
2.를 사용 하 여 즉 시스템 요청 타임 라인 서비스에 대 한 평균 시간 각 클러스터를 모니터링 하 고 스칼라 클러스터에서 데이터를 가져오는 5 밀리초입니다.
3. Google 깔끔하게 시스템의 zipkin에 따라, 엔지니어 서비스 요청 및 요청된 시간 등 Zipkin에 의해 요청 세부 정보를 모니터링할 수 있도록 각 요청의 성능 세부 정보를 배울 수 있습니다. 일반적으로 시스템을 각 단계는 시간 뿐만 아니라 배달 시간에 대 한 요청에서 디버깅할 수 있습니다. 그것은 2 밀리초 활성 사용자의 타임 라인을 줄이기 위해 지 저 귐에 대 한 2 년 했다.
일부 통계 데이터:
경우 1 백만 팬, 각 짹짹 짹짹 입력된 통계를 전파는 몇 초를 걸릴 것입니다: 400 백만 매일, 매일 평균 초당 12000 위의 두 번째, 및 대형 이벤트 기간 당 두 번째, 일일 최대 7000 당 5000. 타임 라인 배달 통계: 하루 30 십억 번 (더 많은 데이터에 대 한 원문 참조)