대형 웹 사이트에서 MySQL 응용 프로그램 아키텍처 진화

출처: 인터넷
작성자: 사용자
키워드: 분할 확대 통과 좁은 통로

가장 인기 있는 오픈 소스 데이터베이스, MySQL은 웹 응용 프로그램 및 다른 중간 규모 프로젝트에서 널리 이용 된다. 그러나, 많은 큰 IT 회사, MySQL은 점차적으로에서 이탈 원래 오픈 소스 버전 후 매우 최적화 하 고 사용자 정의 더 오래 전에 했다 페이스 북의 Webscalesql 같은 지점, 같은 오픈 소스. 최근, 씨 Xiong MySQL 응용 프로그램을 공유 하는 당신을 위해 여기에서 변경의 대규모 웹 사이트 아키텍처 개발의 관점에서 블로그 게시물을 출판 했다.

이 문서는 주로 웹사이트의 다른 동시 액세스 수준에서 MySQL 아키텍처를 설명합니다.

확장성

아키텍처의 확장성은 종종 밀접 하 게 동시성 관련, 거기에 아무 동시 성장, 확장성이 뛰어난 아키텍처를 할 필요가 없습니다 여기 확장성, 일반적으로 의미의 다음과 같은 두 가지 종류를 확장 하는 데 사용에 대 한 간단한 소개:

확장: 수직 확장, 더 나은 기계 및 서비스 기능 개선 자원을 대체 하 여 확장

확장: 수평 확장, 노드 (컴퓨터) 서비스 기능 향상을 추가 하 여 크기 조정

인터넷의 높은 동시 응용 프로그램에 대 한 그것은 의심의 여 지는 수평 확장은 탈출구, 높은-엔드 컴퓨터의 수직 구매를 통해 동료 되었습니다 우리의 금기 문제도 장기. 그래서 수평 확장의 이론에서 확장성의 이상적인 상태는 무엇입니까?

확장성의 이상적인 상태

서비스, 더 높은 동시성으로 직면 될 때 단순히 서비스 지원의 동시성을 향상 시키기 위해 기계를 증가할 수 있다 증가 온라인 서비스에 시스템 프로세스는 영향을 주지 않습니다 (시간 없음), 확장성의 이상적인 상태입니다!

아키텍처의 진화

V1.0 간단한 웹 사이트 아키텍처

간단한 작은 웹 사이트 또는 응용 프로그램 뒤에 구조 매우 간단 수, 데이터 저장 MySQL 인스턴스 데이터 읽기를 충족 하 고 요구 사항을 작성 해야 (여기 무시 하 고 데이터 백업의 예), 사이트의이 기간, 일반적으로 모든 정보 데이터베이스를 넣어 인스턴스 내부입니다.

이 아키텍처에서 살펴 봅시다 데이터 스토리지의 병목은 무엇입니까?

데이터는 컴퓨터의 전체 크기는 적합 하지 않습니다.

인덱스 데이터 (b + 트리)의 한 컴퓨터의 메모리에 적합 하지는

교통 (읽기-쓰기 혼합된) 인스턴스 견딜 수 없습니다

그것은 때 위의 3 가지 중 하나 이상이 충족 되는 우리가 첫 번째 수준 아래로 진화를 고려할 필요가. 다음에서 우리는, 사실, 많은 중소 기업 작은 응용 프로그램,이 아키텍처는 그들의 요구를 충족 하기에 충분 한, 초기 데이터 볼륨 정확한 평가 과도 한 디자인을 제거 하는 매우 중요 한, 모든 후, 아무도 불가능 한 것 들에 대 한 그들의 에너지를 낭비 하는 볼 수 있습니다.

여기 간단한 예제 내 경우의 사용자 정보에 대 한 같은 테이블 (3 지), 아래로, 약 20 백만 행의 데이터 인덱스 16 G 메모리를 넣을 수 있습니다, 간단한 읽기 및 쓰기 혼합 소통량 아무 문제, 응용 프로그램 시나리오 3000/s?

V2.0 수직 분할

일반적으로 v 1.0 병목 현상 발생, 분할 하는 첫 번째 및 가장 쉬운 방법은 무엇입니까 수직 수직 분할은? 비즈니스 관점에서 상호 관계는 강력한 데이터 병목 현상 제거 되므로 다른 인스턴스를 분할. 그림에서 사용자 정보 데이터와 비즈니스 데이터는 3 개의 다른 인스턴스도 분할 됩니다. 반복 읽기 시나리오의 자세한 종류에 대 한 우리 db에 압력을 줄이기 위해 캐시의 계층을 추가할 수도 있습니다.

이 아키텍처에서 살펴 봅시다 데이터 스토리지의 병목은 무엇입니까?

단일 인스턴스 비즈니스 여전히 존재 V1.0 병목: 병목 상태를 발생 하는 경우이 문서 높은 v 버전 업그레이드를 고려할 수 있습니다 경우 읽기 요청 리드 성능 병목을 달성 하기 위해 고려할 수 V3.0 업그레이드, 다른 병목 v 4.0 업그레이드 고려.

V3.0 마스터와 슬레이브 아키텍처

건축의이 종류 주로 V2.0 아키텍처 읽기 문제 해결, 인스턴스 데이터 실시간 백업 아이디어를 마이그레이션할 읽기 압력을 제공 함으로써 mysql에서 현장은 마스터-슬레이브 구조, 주요 라이브러리 작성 글을 읽기에 더 적은 대 한 읽기 압력을 공유 하는 라이브러리를 통해 압력을 통해 더 많은 애플 리 케이 션, V3.0 마스터-슬레이브 아키텍처 관할 수 있습니다.

이 아키텍처에서 살펴 봅시다 데이터 스토리지의 병목은 무엇입니까? 그것은 분명 쓰기 볼륨 주요 라이브러리 견딜 수 없습니다.

V 4.0의 수평 분할

V2.0, V3.0 시나리오 발생 병목, 수평 분할에 의해 해결 될 수 있다, 수평 분할과 수직 분할은 큰 차이, 수직 분할, 하나의 인스턴스에서 분할의 결과 데이터의 전체 양이 한 수평 분할 후 모든 인스턴스는 전체 양의 1/n 데이터 사용자 분할 예제에는 다음 그림 3 클러스터는 사용자 나누어, 각 클러스터 총 1/3 데이터를 보유, 3 클러스터 데이터의 합계와 완전 한 데이터.

참고: 이것은 더 이상 이라고는 단일 인스턴스. 그것은 라고는 클러스터. 대표는 주 서버와 하위를 포함 하는 작은 MySQL 클러스터.

스키마에 데이터를 어떻게 전달 해야?

1. 범위 분할

연속 간격 라우팅하여 딩 키 일반적으로 사용 현장, UserId, 같은 엄격한 ID 요구 사항에 UserId 분할 범위 30 백만을 작은 예제의 UserId 범위: 1th 번호 클러스터 UserId는 130 백만 수 2 클러스터 UserID 30.01 백만-60 백만 이다.

2. 목록 분할

목록 분할 정신 라우팅 다른 딩 키 다른 클러스터를 분할 하는 범위와 동일 하지만 특정 방법이 다소 다르다. 목록 샤 딩 할 데 주로 키가 다음 시나리오 같은 클러스터 상황에 떨어지는 연속 간격 시퀀스:

상점이 20 비디오, 다음 표와 같이 4 분포 지역에 배포 한다고 가정.

지역

저장소 ID 번호

3, 5, 6, 9, 17

동부

1, 2, 10, 11, 19, 20

서 부

4, 12, 13, 14, 18

중앙 지역

7, 8, 15, 16입니다.

비즈니스 검색, 영역에 모든 데이터를 조직 할 수 하 고이 시나리오 목록 분할을 쉽게 할 수 있습니다.

3. 해시 분할

딩 키 해시 분할 하는 방법으로 일반적으로 사용 되는 나머지 같은 해시 해시, 문자열 그리고에, 데이터 읽기 및 쓰기는 클러스터를 확인 하려면 %n 사용자 id의 값 뿐만 아니라, 여기에 다른 해싱 알고리즘은 상세한.

4입니다. 데이터 분한 후 도입 문제

수평 분할은 딩 키 읽기 및 쓰기 작업, 딩 키 세분화 예, 아이디 등을 통해 주로 데이터의 문제 사용자 id 정보를 읽고, UserID, 먼저 알아야 합니다. 계산 하는 쿼리에 클러스터는 사용자 정보를 검색할 사용자 필요가, 필요가 Redis 저장소에 추가 역 인덱싱 메커니즘 (HBase 수준 2 인덱스와 유사)를 소개 하기 위해 사용자 이름-사용자 id 매핑 > 사용자 이름 쿼리의 예제 사용자 쿼리를 통해 먼저 된다-> 아이디, 그리고 UserID를 통해 적절 한 정보를 쿼리.

실제로 이것은 간단 하지만 데이터와 일치 하지 않는 한 추가 위험을 간과 하지. 사용자 이름-> 아이디 Redis에 저장 하 고 userid-> MySQL에 저장 된 사용자 이름과 일치 해야 합니다, 종종 할, 예를 들어, 현장의 사용자 이름을 수정 하려면 어려운 것은 Redis와 MySQL 모두 동시에 수정 해야 합니다. 이 두 가지 트랜잭션 보장을 할 매우 어려운, MySQL 같은 작업이 성공 하면, 하지만 Redis 작업이 실패 했습니다 (분산된 트랜잭션 도입 비용이 높습니다). 유용성은 가장 중요 한 인터넷 응용 프로그램, 그리고 일관성 이므로 둘째, 불일치의 작은 금액을 용납 수 있습니다. 결국, 이러한 불일치의 비율 무시할 정도로 무시할 수 있습니다. (일반 쓰기 업데이트 또한를 사용 하 여 MQ 재시도 작업이 성공할 때까지 중지 되지 않습니다)

이 아키텍처에서 살펴 봅시다 데이터 스토리지의 병목은 무엇입니까?

이 프레임 워크의 구조 개념을 분할 아무 이론적 병목 (각 클러스터의 흐름 상대적으로 균형을 이뤄야 한다는 전제 아래 되도록 딩 키)입니다. 하지만 역 겨 운 것, 내가 원래 3 클러스터는 같은 데이터를 비용을 다시 실행 하는 시간 즉, 클러스터 확장 하지만 지금 내 데이터 성장 속도, 6 클러스터에 필요한 다음 각 클러스터 2로 분할 해야, 일반적인 연습 이다:

노예, 중지 동기화 선택

작성 하는 증분 로그 (구현 할 수 있습니다 비즈니스 측면 쓰기에 더 이상 한 번 영구 MQ 또는 MySQL 마스터 생성 트리거 기록 쓰기, 등.)

슬레이브 데이터를 정적 2 시작

재생 증가 모든 증가 구명, 기본적으로 원래 클러스터 유지 때까지 씁니다.

원래 3 클러스터에서 6 클러스터로 전환 하는 스위치를 쓰기

유사한 비행기 공기 급 유 느낌, 이것이 라이브 더러운, 더러운, 쉽게이 방지 하기 위해 작업, 문제, 우리가 일반적으로 시작, 디자인이 문제의 클러스터 확장의 가능성을 방지 하기 위해 충분 한 딩 클러스터.

V5.0 클라우드 컴퓨팅 이륙 (클라우드 데이터베이스)

클라우드 컴퓨팅은 주요 IT 기업, 그리고 그것을 확인 하는 방법 내에서 비용 절감의 열쇠는 SaaS는 MySQL, 데이터 저장소에 대 한 중요 한 지금. MS의 공식 문서에서 충분히 성숙 사스 (SaaS 응용 프로그램에 대 한 수준 4 만기의 MS 간단한 목록) 건물의 3 주요 과제는: 확장성, 확장성, 그리고 3 이끌린된 괴물 이라고 하는 다중 사용자 스토리지 아키텍처의 디자인. 구성 및 다중 사용자 저장소 아키텍처 디자인 확장성을 말 하는 것이 중요 하다 그래서 MySQL SaaS 문제에 특히 어렵지 않다.

SaaS 서비스로 MySQL 아키텍처 v 4.0, 진화 후 좋은 딩 키 디자인에 의존, 확장성 문제는 더 이상 하지만 그는 정신과의 확장에 직면, 거기 몇 가지 더러운 일을 할 그리고는 SaaS로 피할 수 없는 용량 감소의 문제 그럼으로 v 4.0의 더러운 일을 설정할 수 있습니다: 1th, 투명 프런트 엔드 응용 프로그램의 확장 능력 (비즈니스 코드 변경 필요 하지 않습니다); 2, 총 자동화 및 온라인 서비스에 대 한 충격의 볼륨의 확장 용량. 이 두 가지 포인트를 실현 하는 경우 그는 SaaS에 대 한 티켓을가지고 있다.

아키텍처의 구현에 키에 대 한 용량 확장 사업을 축소 하는 투명 한 비즈니스에 맞게 필요 변경, 필요 하지 않습니다 그때 우리 내부이 문제를 해결, 일반적인 연습 이다 우리는 프록시를 소개 해야 당신의 MySQL SaaS에서 우리 자신의 개가 음식을 먹어야합니다 클러스터를 찾을, 그것은 읽기 작업이 나 쓰기 작업이 마스터 또는 슬레이브를 요청, 모든 내부 세부 사항을 프록시에 의해 차단 됩니다 판사를 키 딩 SQL 프로토콜을 구문 분석 하는 프록시입니다.

여기를 프록시 할 필요가 열거 Taobao에 모습이 이다.

핵심 아키텍처 구현에 대 한 확장 용량은 완전히 자동화 되어 있으며 온라인에 영향을 주지 않습니다 서비스, 용량 확장 데이터 분할 및 데이터 병합에 해당 하는 데이터 작업 완전 한 자동화를 달성 하는 방법에 매우 여러 가지가 있습니다. 일반 아이디어와 v 4.0 도입 현재 병목 부분 문제의 보기 위장된 슬레이브 동기화 슬레이브, MySQL 동기화 프로토콜의 분석을 달성 하 고 다음 논리를 분할 하는 데이터의 총 금액을 분할 하는 데이터를 실현 하는 것입니다 더 나은 솔루션입니다. 자세한 구조는 다음 그림에 표시 됩니다.

동기화 슬레이브 원래 마스터에 대 한 일반적인 MySQL 슬레이브 다르지 이며 어떤 여분의 차별 필요 하지 않습니다. 용량 확대/축소 동기화 슬레이브를 걸어, 전체 동기화 + 증분 동기화 시작, 데이터를 복구 하는 시간 동안 대기 해야 합니다. 데이터는 기본적으로 동기화 하기 전에, 경우 서비스 용량 확대를 확대, 다음 스위치를 수행 하는 방법을 영향을 주지 않습니다 사업? 사실, 중요 한 점은 여전히 프록시의 소개에에서, 문제는 어떻게 프록시 변환 할 핫 스왑 백 문제. 이것은 아주 좋은 문제 처리 되었다.

또한 주목할 만한: 2014 년 5 월 28 일-웹과 클라우드 응용 프로그램에 대 한 현재의 수요를 충족 하기 위해 Oracle 도입을 발표 했다 나는 또한 직물 정보를 보고, 관심된을 많이 넣어 해당 데이터 섹션에서 MySQL 직물의 의미의 클라우드 데이터베이스 용량의 확장을 미래의 솔루션을 수 있습니다.

더 많은 V?

혁명에 대 한 대기...

관련 문서

연락처

이 페이지의 내용은 인터넷에서 가져온 것이므로 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.