XDCR(Cross Datacenter Replication) 이해 – Part 1

Posted by b모노리스d
2019. 1. 31. 13:34 IT/NoSQL
반응형

XDCR(Cross Datacenter Replication) 이해 – Part 1

 

당신이 카우치베이스를 잘 알고 있다면, 당신은 확실히 XDCR을 알 것이다.

응용 프로그램에 대해 Couchbase를 사용하는 경우 XDCR을 사용할 가능성이 매우 높다.

XDCR은 고객이 가장 좋아하는 제품 중 하나라고 해도틀린 말은 아닐 것이다.

지금 XDCR을 멋지게 만드는 것에 관심이 있다면, 제대로 들어온 것이며, 계속해서 읽으십시오.

반대로, 만약 여러분이 무슨 말을 하고 있는지 모른다면, 이것은 여러분이 그것에 대해 배울 수 있는 기회랍니다.


복제는 향상된 성능, 고가용성 및 내결함성을 제공하기 위한 분산시스템의 효율성의 핵심이다. XDCR은 두 개의 Couchbase 클러스터간에 데이터를 복제하는 데 사용되는 고성

능 복제 기술이다.

이것은 클러스터 내 복제를 보완한다. XDCR은 비동기식 복제를 제공하며, 궁극의 일관성을 통해 사이트 간 데이터 일관성을 유지한다.

이는 단일 돌연변이 복사본이 실행되자마자 승인이 애플리케이션에 전송되고 결국 데이터가 토폴로지의 서로 다른클러스터 간에 일관된다는 것을 의미한다.

 

 

기술의 핵심 원칙

고성능: XDCR은 대기 시간이 매우 짧은 네트워크 및 메모리 속도로 작동하는 고성능 복제 시스템이다. 복제는 메모리에 대한 메모리다.

독립적으로 확장 가능한 시스템 : XDCR은 클러스터를 추가하거나 제거할 수 있고 위상의 모든 클러스터를 다른클러스터에 영향을 미치지 않고 스케일업 또는 스케일다운

할 수 있는 피어 투 피어 아키텍처

인프라 불가지론: XDCR은 구축 플랫폼에 관계없이 베어 메탈, VM, 프라이빗 클라우드, 퍼블릭 클라우드, 하이브리드 또는 컨테이너로 데이터를 복제하는 데사용할 수 있다.

토폴로지 인식: XDCR은 토폴로지를 인식하며 노드가 클러스터에서 추가/제거될 때 시스템이수동 개입 없이 복제를 조정하고 관리함

단순화된 설정 및 관리: XDCR은 두 개의 Couchbase 클러스터 간에 <15초 이내에 설정될 수 있다. 일단 설정되면, 문서는 원본과 대상 간에 계속 동기화된다. 페일오버나 재

조정 같은토폴로지 변경 중에도 수동 개입 없이 작동한다.

유연한 위상 : 단방향, 양방향, 허브및 스포크, , 메시 등 복잡한 위상을 설정할 수 있다.

탄력적 : 모든 네트워크 장애의 경우, XDCR은 중단된 곳으로부터 복제를재개할 수 있다. 또한 XDCR 복제가 성공할 때까지 계속 재시도 한다.

 

 

XDCR 내부 구조

Couchbase 서버 아키텍처에 익숙해지려면 이 대화를 들어 보십시오.

이 블로그에서는 XDCR 아키텍처에 초점을 맞출 것이다.




상위 레벨의 흐름을 설명하기 위해 애플리케이션 서버의 애플리케이션 데이터가 클라이언트 SDK를 통해 내장된 메모리(캐시)에 기록됨.

이 데이터가 메모리에 저장되면 복제 및 지속성을 위해 다른 대기열로 채널 조정됨.


클러스터 간 복제는 위의 그림에서 표시한 대로 메모리 간에서 발생한다. 이것은 XDCR이 매우 짧은 대기시간을 제공할 수 있게 하는 주요 요인들 중 하나이다.


또한 소스와 타깃의 노드 간에 복제가 매우 유사함.

복제 대기열은 대역폭 가용성과 원하는 성능에 따라 2-100 사이에서 튜닝할 수 있다.




카우치베이스에 있는 버킷은 문서를 위한 논리적인 컨테이너다. XDCR은 버킷 레벨에서 설정할 수 있다. 각 버킷은 vbuckets라고 하는 1024개의 가상 버킷으로 분할됨.

이러한 vbuckets는 각 클러스터의 노드 간에 균등하게 분할된다. 이러한각 노드는 결국 일부 활성 및 일부 복제본 데이터가 된다. XDCR은 클러스터 내의 이러한 노드 간

에 복제를 분산시킨다.


카우치베이스는 주문된 changelog를 이용해 데이터 상태를 전달하기 위해 "데이터베이스 변경 프로토콜(DCP)"이라는 스트리밍 프로토콜을 유지한다. XDCR은 이 프로

토콜의 소비자로, 변화를 전파하기 위해 DCP에 의존한다.


XDCR 복제 대기열은 XDCR 관련 변경 사항을 유지 관리하며, XDCR 작업자 스레드는 노드에서 지정된 활성 vbucket에 대한 변경 사항을 선택하고 대상 클러스터에서 

vbucket을 유지하는 원격 노드에 변경 사항을 전달한다. 아키텍처에서는 지연 시간이 짧고 처리량이 높은 특성을 가진 각 vbucket의 복제를 위해 

중앙집중적 조정이 필요하지 않다. 가용 대역폭에 따라 처리량을 극대화하도록 작업자 스레드수를 구성할 수 있다.

XDCR은 체크포인트를 유지한다. 네트워크 장애 또는 소스 클러스터 페일오버등으로 인해 복제가 중단될 때마다 XDCR은 마지막 체크포인트에서 복제를 재개한다.

떤 이유로든 성공하지 못한 경우, XDCR은 성공할 때까지 계속재시도한다. 복제는 또한 키만 복제하는 비관적인 복제와 키와 값이 모두 복제될 수 있는 낙관적인 복제에

서도일어난다.


또한 XDCR은 문서 압축, 네트워크 조절및 낙천적 복제와 같은 기능을 통해 대역폭 보존을 위해 최적화되어 있으며, 여기서 복제를 위해 문서를압축하고 대역폭 활용도

를 제한하며, 지연 시간을 줄이기 위해 특정 임계값까지 낙천적인 복제를 선택하여문서를 복제한다.


XDCR 시리즈의 첫 번째 부분에서 XDCR의 정의, 작동 방식 및 효율적인 복제 시스템에 대한 좋은 개요를 제공받았기를 바란다.


다음 파트에서 이 제품의 기능, 이점, 애플리케이션, 성능 튜닝 등에 대해 자세히 알아보도록 하자


출처 : Chaitra Ramarao, 2018-12-01, https://blog.couchbase.com/understanding-xdcr-part-1/



반응형

'IT > NoSQL' 카테고리의 다른 글

Couchbase Eventing Service 예제  (0) 2019.01.28

Couchbase Eventing Service 예제

Posted by b모노리스d
2019. 1. 28. 11:49 IT/NoSQL
반응형
Eventing 서비스의 예제

Eventing Service는 Couchbase Server 5.5 부터 사용할 수 있는 새로운 기능입니다.

이번 게시글은 이벤트 기능에 대한 예제를 소개하는 게시글 입니다.

VIP고객에게 보다 신속하게 서비스를 제공하고자 합니다관리자는 한 명 이상의 VIP에게 할당됩니다. VIP가 야구장에 입장하면 문자 메시지가관리자에게로 전송됩니다관리자는 그 자리에서 VIP를만날 수 있습니다.

함수 (Eventing의 일부)를 사용하여 텍스트 메시지를 보내는 예제를만들었습니다Twilio  평가판 계정을 사용 하여 메시지를 보냅니다.  Twilio를 사용하여 시작하는 것은 무료이며 쉽습니다. 그래서 이벤트 기능을 알리기 위해서 예제로 사용하기로 결정했습니다. HTTP API가있는 한 원하는 메시징 / 알림 서비스 (대신)를 사용할 수 있습니다.

참고 : 컬 구성은 아직 개발 중입니다. 이 기능은 개발 목적으로 만 사용되며 프로덕션 환경에서는 사용하지 않아야 합니다.


티켓 검색


첫 번째 단계는 게이트에서 고객의 티켓을 스캔하는 것입니다나는 이것을 시뮬레이션 하는 프로그램을 썼다. Couchbase "티켓"버켓에 임의의 "ticketscan"문서가 생성됩니다.


티켓을 검색하기 전에 몇 가지 데이터를 Bucket에 미리 채워야 했습니다.

고객 1 ~ 9 VIP이고 그 외의 고객은 기타고객 이라고 결정했습니다.

1
2
3
4
5
6
7
8
9
_bucket.Upsert("customer::1", new { Name = "George Clooney" });
_bucket.Upsert("customer::2", new { Name = "Josh Hutcherson" });
_bucket.Upsert("customer::3", new { Name = "Darius Rucker" });
_bucket.Upsert("customer::4", new { Name = "Brooklyn Decker" });
_bucket.Upsert("customer::5", new { Name = "Eddie Vedder" });
_bucket.Upsert("customer::6", new { Name = "Nick Lachey" });
_bucket.Upsert("customer::7", new { Name = "Nick Goepper" });
_bucket.Upsert("customer::8", new { Name = "Johnny Bench" });
_bucket.Upsert("customer::9", new { Name = "Ryan Collins" });

또한 3명의 관리자를 만들었으며 그들에게 각각 3명의 VIP를 할당했습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
_bucket.Upsert("concierge::1", new
{
    Name = "Matt Groves",
    CellNumber = _yourVerifiedNumber,
    vips = new List<string> { "customer::1", "customer::2", "customer::9" }
});
_bucket.Upsert("concierge::2", new
{
    Name = "Mr. Redlegs",
    CellNumber = _yourVerifiedNumber,
    vips = new List<string> { "customer::3", "customer::4", "customer::5" }
});
_bucket.Upsert("concierge::3", new
{
    Name = "Rosie Red",
    CellNumber = _yourVerifiedNumber,
    vips = new List<string> { "customer::6", "customer::7", "customer::8" }
});

위의 예에서 고객 1, 2, 9 "Matt Groves"에게 지정합니다. 이것은 George Clooney, JoshHutcherson

Ryan Collins관리자 Matt Groves가 관리하는 VIP 인 것을 의미합니다. _yourVerifiedNumberTwilio로 확인한

전화 번호로 대체 하십시오.

또한 Twilio 자격 증명을 문서에 저장하고 있습니다. Couchbase Function 내부에 자격 증명이 필요하기 때문에 이

작업을 수행 함으로써 하드 코딩하지 않으려고 했습니다. 자격 증명 문서는 다음과 같습니다.

1
2
3
4
5
6
{
  "url": "https://api.twilio.com/2010-04-01/Accounts/< twilio user name here >/Messages.json",
  "username": "< twilio user name here >",
  "password": "< twilio password name here >",
  "fromNumber": "< twilio 'from' number here >"
}


새로운 "ticketscan"문서를 만들 콘솔 앱을 만들었습니다. 
실행하면 VIP 스캔 또는 기타 고객 스캔을 만들도록 선택할 수 있습니다.
1
2
3
4
Console.WriteLine("1 - Simulate a VIP ticket scan.");
Console.WriteLine("2 - Simulate a regular joe ticket scan.");
Console.WriteLine("Q - End simulation.");
var choice = Console.ReadKey().KeyChar;


ticketscan 문서에는 고객 문서의 ID, 타임 스탬프 및 시트 번호의 세 가지 필드 만 포함됩니다.
1
_bucket.Upsert(ticketScanId, new {CustomerId = customerId, Timestamp = ticketScanTimestamp,
Seat = seatInformation });
Github 에서 전체 소스 코드를 찾을 수 있습니다 .


이벤트 함수

이 글의 핵심은 함수입니다. 이 함수를 만들 때 "notifyConcierge"라고 했습니다. "tickets_metadata" Bucket을 사용했습니다 (아래 그림 참조). 가장 중요한 것은 "tickets" Bucket의 별칭을 만들고 이를 "src"라고 했습니다. 함수 내에서 이 Bucket은 읽기 전용이지만 Twilio 자격 증명뿐만 아니라 고객 및 관리자 정보를 얻기 위해 필요합니다.

전체 기능에 Github에서 볼 수 있습니다. 다음은 함수의 분류입니다.

1 - 돌연변이 된 문서가 ticketcan 있습니까? 그럴 경우 계속하십시오. 그렇지 않은 경우 이 함수는 이를 무시할 수 있습니다.

2 - 스캔 한 티켓의 고객이 VIP입니까? 그렇다면 관리자세부 정보를 받아 계속 진행하십시오. 그렇지 않으면 무시하십시오. 함수의 이 부분에서 인라인 N1QL을 확인하십시오. 이것은 Couchbase 기능에 사용되는 JavaScript의 고유 한 기능입니다.

3 - VIP의 세부 정보를 가져옵니다.

4 - Twilio 자격 증명을 가져옵니다.

5 - 메시지를 구성하십시오 (VIP 이름, 좌석 번호 및 관리자이름 포함). dataTwilio의 API를 사용하는 데 필요한 최소값입니다.

6 - Twilio API를 사용하여 관리자에게 문자 메시지 보내기. curl 구성은 여전히 ​​개발 중입니다. 이 기능은 개발 목적으로 만 사용되며 프로덕션 환경에서는 사용하지 않아야 합니다.

Eventing 데모 실행

이제 ticketcan 문서가 생성되거나 수정 될 때마다 관리자에 휴대 전화로 알림이 전송됩니다. 다음은 티켓 스캔에서 SMS 알림에 이르는 전체 데모의 예입니다.


이 이미지에서 4 장의 티켓 스캔을 만듭니다. 첫 번째는 VIP 용이고, 다음 두 개는 기타 그룹 용이며, 마지막은 VIP 용입니다. 두 개의 문자 메시지가 나타납니다. 실제로 이것은 다른 전화기에 표시되지만 모든 알림을 하나의 번호로 보내 테스트합니다. 참고 : join.me  사용하여 내 안드로이드 화면을 콘솔과 나란히 표시합니다.

어떤 문제가 발생하면 좋은 소식은 Couchbase의 함수에서 디버깅이 가능하다는 것입니다. 자바 스크립트에서 중단 점을 설정하고 Chrome과 같은 도구를 사용하여 단계별로 실행할 수 있습니다. 그것에 대한 더 자세한 내용은 Eventing 공지 사항을 확인하십시오.


출처 :Matthew Groves, 2018년 8월 6일, https://blog.couchbase.com/eventing-notification-couchbase-functions/



반응형

'IT > NoSQL' 카테고리의 다른 글

XDCR(Cross Datacenter Replication) 이해 – Part 1  (0) 2019.01.31
$(document).ready(function(){ var tmpLogin = document.getElementsByClassName("tt_menubar_logout")[0].getElementsByTagName("a")[0]; tmpLogin.className = ""; tmpLogin.innerHTML = tmpLogin.innerHTML.replace("로그아웃",' Logout'); tmpLogin.innerHTML = tmpLogin.innerHTML.replace("로그인",' Login'); document.getElementById("loginout_append").innerHTML = tmpLogin.outerHTML; });