수석의 비밀 엔지니어: 어떻게 LinkedIn의 큰 데이터 무대 작품

출처: 인터넷
작성자: 사용자
키워드: 또는 우리는 이러한

에디터의 참고: 제이 리드, 링크 드 인에서 기관장 말한다 로그 컴퓨터의 창조의 시간에서 거의 존재 그리고 다양 한 분산 컴퓨팅 또는 추상 분산된 컴퓨팅 모델 사용. 이 논문에서는, 그는 로그의 원리와 데이터 통합, 실시간 데이터 처리를 달성 하기 위해 별도 서비스는 로그를 사용 하 여 설명 하 고 분산 시스템 디자인. 기사 콘텐츠 학습 가치가 매우 건조 하다입니다.

다음은 원래의 텍스트입니다.

나는 흥미 진 진한 시간 6 년 전 링크 드 회사에 합류 했다. 그 시점에서 우리는 단일 중앙된 데이터베이스에 아래로 부 하 고 특별 한 분산된 시스템 제품군으로 전환 시작 했다. 이것은 흥미로운 것 이다: 오늘까지 실행할 수 있으며 배포, 분산 그래픽 데이터베이스, 분산된 검색 백 엔드, Hadoop 설치 및 키 값 데이터 저장을 우리가 구축, 첫 번째와 두 번째 세대.

우리 모든이의 배운 가장 보람 있는 일은 우리가 구축 하는 것의 많은 것의 핵심 포함 간단한 아이디어: 로그. 미리 쓰기 로그 또는 커밋 또는 트랜잭션 로그 라고도, 로그, 컴퓨터의 창조의 시간에서 거의 존재 하며 많은 분산된 데이터 시스템 및 실시간 응용 프로그램 구조에의 중심에 합니다.

저널의 지식 없이 당신이 완전히 데이터베이스, NoSQL 저장소, 키 값 저장, 복제, Paxos, hadoop, 버전 관리, 및 거의 모든 소프트웨어 시스템을 이해할 수 없다; 그러나, 대부분의 소프트웨어 엔지니어는 그들과 함께 알고. 이 상황을 변경 하겠습니다. 이 블로그 게시물에서 난 당신이 걸릴 것입니다 모든 것 들을 통해 당신이 알고 있어야 합니다 포함 하는 로그, 로그에 대해 로그 데이터 통합, 실시간 처리 및 시스템 구축에 사용 하는 방법.

첫 번째 부분: 로그는 무엇입니까?

로그를 더 이상 간단할 수 있다 간단한 스토리지 추상화 이다. 그것은 고 될 수 있는 추가 시간을 정확 하 게 정렬할 레코드의 일련입니다. 로그는 다음과 같이 보입니다.

우리는 로그의 끝에 레코드를 추가할 수 있습니다 그리고 우리가 오른쪽 왼쪽에서 로그 레코드를 읽을 수 있습니다. 각 레코드는 로그 레코드의 고유 일련 번호를 지정합니다.

왼쪽에 있는 로그 레코드는 오른쪽에 하나 보다 이전 있기 때문에 로깅의 종류 시간에 의해 결정 됩니다. 로깅 수가 로그 레코드의 "타임 스탬프"로 생각할 수 있습니다. 그것은 이런이 종류는 처음에 정렬의 말을 조금 불필요 하지만 시간 특성은 어떤 특정 물리적 시계에 비해 매우 사용 하기 쉬운 속성. 이 특성은 우리가 여러 분산된 시스템을 실행 하는 경우에 중요 한.

이 면담을 위해 콘텐츠 및 로그 레코드 형식 중요 하지 않습니다. 또한, 저장 공간이 완전히 소진 될 때 로그에 레코드를 추가할 수 아니다. 우리는이 질문을 말할 것 이다.

로그는 파일 또는 데이터 시트에서 완전히 다른. 파일은 바이트의 일련의 구성 테이블 레코드의 일련의로 구성 되어 있고 로그는 실제로 데이터 시트 또는 시간 순서 대로 레코드를 저장 하는 파일.

이 시점에서, 당신은 왜 당신이 그런 간단한 문제를 논의 해야 궁금해 수 있습니다. 어떻게 서로 다른 환경에서 추가 될 수 있는 로그 레코드의 수는 증가 데이터 시스템 연결 합니까? 대답은 로그 특정 응용 프로그램의 목표는: 그것은 일어나는 시간에서 기록. 분산된 데이터 시스템의 여러 측면,이 문제의 진짜 핵심입니다.

하지만 우리가 더 깊이 있는 토론으로 하기 전에, 몇 가지 혼란 스러운 개념을 명확히 하자. 각 프로그래머는 사용자가 다른 유형의 로깅-응용 프로그램 로그를 사용 하는 또는 log4j 구조적 오류 메시지 없이 로컬 파일에 쓸 수 있습니다 또는 정보 추적. 이 경우 "응용 프로그램 로깅." 로깅 호출 우리 차별화, 로깅 응용 프로그램 로그 나 여기에 말의 저수준 변종 이다. 가장 큰 차이점은 텍스트 로그는 주로 읽고, 사람에 대 한 의미 "로그" 또는 "데이터 로그" 설명한 프로그램 액세스를 촉진 하기 위해 만들어집니다.

(사실, 그것에 대해 깊이 생각 하면, 읽기 로그 특정 기계에 사람들이 생각 하지 않는 준수는 시대의 추세에.) 이 이렇게 신속 하 게 되 면 많은 서비스 및 서버를 여러 컴퓨터의 동작을 이해, 신속 하 게 로그인의 목표 된다 쿼리 입력, 이러한 행동의 그래프를 관리 하는 어려운 방법-특정 동작에 대해 여러 컴퓨터의 파일에서 텍스트의 영어 형태가입니다 여기에 설명 된 구조적된 로그에 비해 거의 적당 한. )

데이터베이스 로그

난 모 르 겠 어디 로그 개념 유래-어쩌면 그것은 이진 검색: 발명가 줄 알았는데 너무 간단 발명. 그것은 IBM의 시스템 R 등장으로 일찍 등장. 데이터베이스에 사용은 충돌 때 다양 한 데이터 구조 및 인덱스를 동기화 하는 데 사용 됩니다. 원자성 및 작업의 영속성을 보장 하기 위해, 데이터베이스 로그에는 데이터베이스에서 유지 관리 하는 데이터 구조를 변경 하기 전에 수정 하는 정보를 녹음 됩니다. 로그 기록 무슨 일이 있었는지, 그리고 이러한 테이블 또는 인덱스의 각 데이터 구조 또는 인덱스의 역사적인 매핑. 로그 즉각적이 고 영구적인 이기 때문에, 충돌이 발생 하면 다른 모든 영구 구조를 복원할 데이터의 신뢰할 수 있는 원본으로 사용할 수 있습니다.

시간이 지남에, 로깅의 목적은 데이터베이스 간에 데이터를 복제 하 고 산 성 내용의 실현에서 성장 하는 방법입니다. 로그를 사용 하 여 데이터베이스에서 발생 하는 변경의 순서와 원격 복제 데이터베이스에 변경 내용을 완전히 동기화 된 유지 될 필요가입니다.

오라클, mysql과 PostgreSQL 로그는 다른 복제 데이터베이스에 로그를 전송 하기 위한 전송 프로토콜을 포함 합니다. Oracle도은 로그 제품 공통 데이터 구독 메커니즘을 비 Oracle 데이터 가입자는 Xstreams 및 Goldengate를 사용 하 여 데이터를 구독할 수 있습니다 유사한 구현 MySQL 및 PostgreSQL에는 많은 데이터 구조의 주요 구성 요소.
이 기원 때문에 기계 식별 로그의 개념은 크게 내부 데이터베이스에 국한 됩니다. 로그 사용으로 데이터 구독 사고, 것 처럼 보이지만 그것은 모든 종류의 메시지 전송, 데이터 흐름 및 실시간 데이터 처리를 지원 하기 위해이 추상화를 사용 하는 메커니즘입니다.

분산 시스템 로그

로그는 두 가지 문제를 해결: 작업의 순서를 변경 및 배포는 모두에서 특히 중요 한 데이터 분산 데이터 시스템. 그것은 분산된 시스템 디자인 작업 순서 대로 일관 된 변화를 협상 하 (또는, 서브 시스템의 관행을 유지 하기 위해 하지만 부작용 데이터의 복사본을 만들)의 핵심 문제 중 하나입니다.

로그 중심으로 분산된 시스템의 실현은 단순한 경험에 의해 영감, 상태 머신 복사의 원칙으로이 경험을 참조: 두 동일, 결정적 프로세스 같은 상태에서 시작 하 고 동일한 순서로 동일한 입력을 받을 경우 두 프로세스가 동일한 출력을 생산할 예정 이다. 그리고 동일한 상태에서 끝입니다.

이 이해 하 고, 더 깊이 탐구 하자 조금 어려울 하 고 그것의 진정한 의미를 이해할 수 있습니다.

확실성 의미는 과정은 시간에 그리고 다른 "외부" 입력 처리 결과는 영향을 미치지 않습니다. 예를 들어 프로그램의 출력은 스레드 실행, 또는 gettimeofday 호출, 또는 다른 비 반복적인 이벤트에 의해 영향을 받는 특정 순서에 의해 영향을 하는 경우 다음 이러한 프로그램은 일반적으로 가장 비 결정적인 것으로 간주 될 것.

프로세스 상태 프로세스는 메모리에 저장 하거나 프로세스 처리의 끝에 디스크에 저장 된 컴퓨터에 보유 하는 데이터입니다.

동일한 입력 동일한 순서로 획득은 장소 발견이 되어야 로그 소개는 이다. 여기에 중요 한 상식은: 만약 당신이 두 개의 결정적 코드를 입력 하는 동일한 로그를 주고, 그들은 동일한 출력을 생성.

분산 컴퓨팅의 응용 프로그램은 특히 명백 하다. 이러한 프로세스에 대 한 분산된 일관성 로그에 같은 일을 수행 하기 위해 여러 컴퓨터를 사용 하 여 문제를 줄일 수 있습니다. 이 로그의 목적은 각 복제 프로세스 입력을 동기적으로 처리할 수 있도록 입력 스트림에서 모든 비결 항목을 제외 하는 것입니다.

이 이해 하면 상태 기계 복사 원리는 더 이상 복잡 하거나 비:이 더 많거나 적은 의미는 "결정적 과정이 결정적". 어쨌든, 분산된 시스템 설계에서 더 일반적인 도구 중 하나입니다 생각.

이 방법의 아름다움 중 하나입니다 인덱스 로그의 타임 스탬프 시계 상태의 복사본 처럼-처리 로그의 타임 스탬프는 각 복사본을 설명 하는 별도 번호를 사용할 수 있습니다. 타임 스탬프 로그 하나 전체 복제본의 상태에 해당합니다.

시스템 로그의 다른 내용 때문에이 원리를 적용 하는 방법에 여러 가지가 있다. 예를 들어 우리는 응답에는 요청에서 서비스의 상태에 서비스, 또는 변경에 대 한 요청을 기록 하거나 명령의 변환 수행 합니다. 이론적으로, 우리 수 심지어 레코드 일련의 기계 지시 하거나 각 복사본에 대 한 메서드 이름 및 매개 변수를 호출 합니다. 두 프로세스가 동일한 방식으로 이러한 입력 처리로 이러한 프로세스는 복제본의 일관성을 유지 합니다.

1000 눈 사용 현황 로그의 1000 종류 있다. 데이터베이스 노동자는 일반적으로 물리적 및 논리적 로그를 구별. 실제 로그의 각 행에서 변경 된 내용을 기록 이다. 논리 로그는 변경 된 라인, 하지만 오히려 하 행의 내용이 되도록 SQL 문을 변경 (삽입, 업데이트 및 삭제 문이).

분산된 시스템은 일반적으로 데이터와 완전 한 응답을 처리 하는 두 가지로 나눌 수 있습니다. 상태 시스템 모델 자주 활성-활성 모델을 의미-즉, 개체는 요청 및 응답 기록. 이 사소한 변화 "준비 모델" 이라는, 지도자로 복사본을 선택 하 고 요청 도착 시간에 처리할 수 있도록 이며 그것의 상태 변경 과정에서의 로그 출력. 다른 복제본에 지도자 상태 변경, 동기화 하 고 리더 실패 하면 리더의 일 이상 걸릴 수 있습니다 순서에 따라 이러한 변경 내용을 적용 합니다.

두 방법의 차이 이해 하는 덜 엄격한 예를 살펴보겠습니다. 가정 알고리즘 서비스, (초기 값은 0)의 상태로, 별도 번호를 유지 하 고 추가 하 고 값의 복사본입니다. 액티브-액티브 모드 변환, "+ 1" 등을 출력 해야 "* 2" 및 등. 각 복사본은 솔루션의 동일한 집합을 얻으려면 이러한 변환을 적용 됩니다. 액티브-패시브 모드는 이러한 변환을 수행 하 고 "1", "3", "6" 결과 로그에 출력 하는 독립 기구를 할 것 이다. 이 예제에서는 또한 명확 하 게 보여줍니다 왜 순서 복제본 간의 일관성을 보장 하는 열쇠: 더하기와 곱하기 순서 변경 다른 결과 귀 착될 것 이다.

분산된 로깅 일관성 문제 모델의 데이터 구조로 이해 될 수 있다. 로그에 대 한 결정의 시리즈를 나타냅니다 때문에 다음 값을 추가. 당신은 다시 검사 해야 Paxos 알고리즘이 클러스터 로그 모듈은 그들의 가장 일반적인 응용 프로그램. Paxos 알고리즘에서 일반적으로 일련의 문제, 있는 각 문제는 해당 부분에는 로그를 모델 여러 Paxos 라는 프로토콜을 사용 합니다. Zab, 뗏목 및 다른 프로토콜에는 로그의 역할은 특히 저명한 문제 모델의 분산, 일관 된 로그의 유지 보수를 직접.

내가 용의자는 역사 발전의 우리의 보기는 편견, 아마도 분산 컴퓨팅의 이론까지 지난 몇 년간 그것의 실용적인 응용 프로그램을 초과 했기 때문에. 현실에서는, 일치의 질문은 좀 너무 간단 합니다. 컴퓨터 시스템은 거의 단일 값에 결정 해야, 그들은 거의 항상 요청 시퀀스 처리. 그러한 기록 보다는 간단한 단일 값 레지스터 자연스럽 게 더 추상입니다.

또한, 시스템 추상화 기본 로그 필요 알고리즘 마스크에 초점. 내가 용의자는 우리 것입니다 결국 여부 같은 구현 방법이 나, 그리고 우리는 종종 해시 테이블에 대 한 이야기 상품 초석으로 저널에 더 많은 관심을 지불 보다는 우리가 하는 해시 테이블의 복잡 하 게 얽힌 구체적인 내용을 하지 않습니다와 같은 선형 또는 어떤 다른 변형 해시 테이블. 로그는 대부분 알고리즘 및 그들의 구현 개선 위한 최고의 성능과 최고의 보증을 제공 하는 인기 있는 인터페이스 될 것입니다.

로그 101 변경: 테이블 및 이벤트의 두 번째 단계.

데이터베이스에 대 한 얘기 하자. 로그 테이블의 이중성 사이의 데이터베이스의 변경 내용 수가 있다. 이러한 로그는 직불 목록 및 은행의 프로세스 및 데이터베이스 테이블은 현재 흑자 문 처럼 조금. 변경 로그의 많은 수의 경우 현재 상태를 테이블을 만드는 이러한 변화를 사용할 수 있습니다. 이 테이블은 각 핵심 (로그에 시간 특정 시점)에 대 한 상태 정보를 기록 합니다. 그 이유는 로그는 아주 기본적인 데이터 구조: 로그는 기본 테이블을 만들 또는 다양 한 파생 테이블을 만드는 데 사용할 수 있습니다. 그것은 또한 관계형 형식이 아닌 개체를 저장할 수 있습니다 의미 합니다.

이 과정은 또한 가역: 변경 내용을 기록 하 고 테이블의 상태 정보를 모든 업데이트 로그를 게시할 수 있습니다 테이블을 업데이트 하는 경우. 이 변경 로그 준 실시간 복제를 지 원하는 데 필요한 있습니다. 이에 따라, 이해할 수 있는 명확 하 게 테이블 및 이벤트의 이중성: 테이블 지원 정적 데이터 및 로그 변경 캡처. 로그의 아름다움은 그것이 변경, 테이블의 마지막 버전의 내용을 뿐만 아니라 한 번 존재 하는 다른 버전의 정보 기록의 완전 한 기록. 로그는 기본적으로 일련의 백업 테이블의 역사적인 상태.

이 소스 코드 버전을 제어할 수 있습니다 발생할 수 있습니다. 소스 코드 제어 및 데이터베이스 사이의 긴밀 한 관계가입니다. 버전 관리 문제를, 모두에 게 잘 알려진 그리고 분산된 데이터 시스템 해야 해결 모든 변화 분산된 관리에서 동안 해결 한다. 버전 관리 시스템은 일반적으로 패치 자료, 실제로 로그 수는 기반으로 합니다. 현재 테이블에 유사한 코드와 직접 상호 작용 "스냅숏"을 만들 수 있습니다. 당신은, 다른 분산된 상태 저장 시스템, 같은 버전 제어 시스템 로그 복제, 업데이트 하 고 패치를 업데이트 하 고 현재 스냅샷을 적용할 때 주의할 것 이다.

최근에, 어떤 사람들 입수 했습니다 몇 가지 아이디어는 회사에서 그 datomic-판매 로그 데이터베이스. 이 아이디어를 그들에 게 그들의 시스템에 이러한 아이디어를 적용 하는 방법에 대 한 오픈 이해. 물론 이러한 아이디어는 그냥 시스템에 대 한, 그들은 10 년 이상 분산된 시스템 및 데이터베이스 문학의 일부가 될 것입니다.

이것 좀 너무 이상적 보일 수 있습니다. 하지만 비관 하지 말라! 우리 곧 일 하 게 됩니다.

(책임 편집기: 유산의 좋은)

관련 문서

연락처

이 페이지의 내용은 인터넷에서 가져온 것이므로 Alibaba Cloud의 공식 의견이 아닙니다.이 페이지에서 언급 된 제품 및 서비스는 Alibaba Cloud와는 관련이 없으므로이 페이지의 내용이 골칫거리 인 경우 저희에게 알려주십시오. 우리는 5 일 근무일 이내에 이메일을 처리 할 것입니다.

커뮤니티에서 표절 사례를 발견한 경우 info-contact@alibabacloud.com 으로 관련 증거를 첨부하여 이메일을 보내주시기 바랍니다. 당사 직원이 영업일 기준 5일 내에 연락 드리도록 하겠습니다.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.