최근 몇 년 동안 서버리스 아키텍처와 에지 컴퓨팅이 애플리케이션 배포에 널리 보급되고 있습니다. 그러나 서버리스 및/또는 에지 기능 내부에 애플리케이션 상태와 데이터를 저장하는 것은 다른 이야기입니다. 데이터베이스에 대한 연결 관리, 여러 위치에서 데이터를 빠르게 액세스할 수 있도록 하는 등 많은 어려움이 있습니다. 서버리스 액세스를 지원하는 데이터베이스 서비스는 소수에 불과하며 에지 기능에도 적합한 서비스는 극소수입니다.(여기에서 자세한 분석을 읽을 수 있습니다. )
Upstash에서는 첫날부터 짧은 대기 시간과 요청당 가격 책정 모델을 위해 서버리스 Redis 호환 데이터베이스를 제공하고 있습니다. 또한 데이터베이스에 직접 구축된 일류 REST API를 공개합니다. REST API는 특히 서버리스 기능에서 사용할 때 번거로운 연결 관리를 제거할 뿐만 아니라 에지 위치 또는 웹 브라우저와 같은 제한된 환경에서도 액세스할 수 있습니다.
오늘 우리는 글로벌 데이터베이스를 발표하게 되어 기쁩니다. 이는 데이터베이스를 전 세계적으로 사용할 수 있도록 하고, 대기 시간이 짧은 읽기를 위해 클라이언트 및 엣지 로케이션에 더 가깝게 만듭니다. 글로벌 데이터베이스는 무료 등급으로 제공되며 무료로 사용해 볼 수 있습니다. .
언제 사용합니까?
글로벌 데이터베이스는 다른 대륙의 여러 지역에 배포되고 클라이언트 요청은 가장 가까운 지역으로 라우팅되어 사용자가 전 세계에 분산되어 있을 때 대기 시간을 최소화합니다. Upstash 글로벌 데이터베이스는 다음 용도로 사용할 수 있습니다.
-
에지 기능(Cloudflare 작업자, Fastly Compute):내장 REST API와 모든 에지 위치에서의 짧은 지연 시간 액세스로 완벽한 솔루션입니다.
-
다중 지역 서버리스 배포:AWS Lambda, Vercel 및 Netlify 기능을 여러 지역에 배포할 수 있습니다. 글로벌 데이터베이스는 서버리스 기능이 있는 곳이면 어디든지 저지연 데이터를 제공합니다.
-
웹/모바일 플랫폼:읽기 전용 REST API를 사용하여 웹/모바일 애플리케이션에서 Redis 데이터베이스에 직접 액세스할 수 있습니다. 글로벌 데이터베이스는 어디서나 사용자를 기대할 수 있으므로 더 나은 대기 시간을 제공합니다.
글로벌 데이터베이스의 또 다른 목표는 데이터베이스를 지역 전체의 장애에 복원하는 것입니다. 지역을 사용할 수 없는 경우 요청은 가장 가까운 사용 가능한 지역으로 라우팅됩니다. 데이터베이스를 계속 사용할 수 있습니다.
작동 방식
글로벌 데이터베이스 모델에는 동일한 데이터베이스의 여러 복제본이 있으며 함께 클러스터를 형성합니다. 각 복제본은 다른 클러스터 구성원에 연결되고 장애 감지기를 사용하여 각 구성원의 활성을 추적합니다. 클러스터 멤버십과 장애 감지는 모두 가십 기반 통신 프로토콜을 사용하여 관리됩니다.(SWIM:확장성 약하게 일관된 감염 스타일 프로세스 그룹 멤버십 프로토콜 참조)
데이터를 복제(보다 구체적으로 개별 쓰기/업데이트/삭제)하기 위해 단일 리더 복제 모델이 사용됩니다. 키 그룹은 구성원 변경 후 리더 선택 메커니즘을 사용하여 선출되는 리더복제본에 할당됩니다. 나머지 복제본은 해당 키 그룹에 대한 해당 리더의 백업이 됩니다. 리더 복제본이 오류 감지기에 의해 실패한 것으로 감지되면 나머지 복제본은 새 리더 선택 라운드를 시작하고 새 리더를 선택합니다. 선택 프로세스 동안 데이터베이스를 사용할 수 없게 됩니다. 짧은 기간 동안 모든 요청은 선거가 완료될 때까지 차단됩니다.
리더 복제본만 쓰기 요청을 수락하고 처리하며, 백업 복제본은 클라이언트에게 알리지 않고 내부적으로 쓰기를 리더에게 전달합니다. 따라서 복제본 유형, 리더 또는 백업에 관계없이 클라이언트는 쓰기 요청을 보낼 수 있습니다. 쓰기 요청을 처리한 후 리더 복제본은 이를 백업 복제본으로 전파합니다.
일관성에 대한 추가 정보
현재 글로벌 데이터베이스는 약한 일관성을 유지하고 있으며 아직 강력한 일관성을 지원하지 않습니다. 쓰기 요청의 응답은 대부분의 백업에서 ACK를 기다리지 않고 리더 복제본이 작업을 처리한 후 클라이언트로 반환됩니다. 쓰기 결과는 백업 복제본에 병렬로 비동기식으로 복제됩니다.
읽기 요청은 모든 복제본에서 처리되므로 더 나은 읽기 확장성을 제공하지만 동일한 키에 대한 쓰기 작업의 결과가 백업 복제본에 도달할 때까지 읽기 요청이 오래된 값을 반환할 수도 있습니다.
충돌 없이 더 쉬울 것입니다!
네트워크 파티션과 같은 클러스터 전체에 장애가 발생한 경우 동일한 키에 대해 여러 리더를 선택할 수 있습니다. 즉, 여러 복제본이 쓰기 및 데이터를 수락하여 서로 다른 복제본에서 분기할 수 있습니다. Calvin이나 Spanner(또는 Paxos, Raft)와 같은 프로토콜을 사용하여 더 강력한 모델을 사용하여 처음에 충돌이 발생하는 것을 방지할 수 있지만 현재로서는 다른 경로를 택하고 싶지 않습니다.
대신 글로벌 데이터베이스는 충돌이 발생하도록 허용하고 LWW(last-write-wins ) 알고리즘을 사용하여 복제본을 결국 동일한 상태로 수렴합니다. Upstash 데이터베이스의 각 쓰기에는 고유하고 단조로운 시퀀스 번호가 있습니다. 복제본이 리더가 될 때마다 첫 번째 writeit 프로세스의 순서를 표시합니다. 두 리더 레플리카가 서로를 발견하면 리더가 된 후 자신의 글을 공유하고 갈등을 해결한다.
모든 복제본이 동일한 것은 아닙니다
일부 복제본은 다른 복제본보다 동일합니다. 그들 중 일부만이 지도자로 선출될 수 있기 때문입니다. 글로벌 데이터베이스 클러스터에서 복제본은 학습자로 표시될 수 있습니다. , 리더 선출에 적합하지 않습니다. 학습자 복제본은 항상 읽기 전용으로 유지되며 리더십 후보가 될 수 없습니다.
학습자 복제본을 추가해도 클러스터의 안정성에 영향을 미치지 않으며 분리될 때 쓰기 충돌을 일으키지 않습니다. 리더에서 분리된 경우에도 읽기 요청을 계속 허용하고 분할이 복구된 후 나머지 쓰기를 동기화합니다. 따라서 학습자 복제본은 더 많은 엣지 로케이션을 확장하는 데 매우 유용한 유틸리티입니다.
더 많은 지역, 더 많은 복제본?
초기 릴리스에서는 5개 지역과 5개의 복제본이 있는 글로벌 데이터베이스를 제공합니다. 미국 및 EU 이외의 지역에 있는 복제본은 학습자로 표시됩니다. s, 따라서 미국 및 EU 지역의 복제본만 리더로 선출될 수 있습니다. 이렇게 하면 네트워크 파티션 중에 쓰기 충돌이 발생할 가능성이 줄어듭니다. 그러나 네트워크 파티션에 대한 걱정 없이 학습자 복제본으로 더 많은 영역을 추가할 수도 있습니다.
아직 갈 길이 멀다
현재 글로벌 데이터베이스는 읽기 작업의 대기 시간을 최적화/최소화하기 위해 설계되었습니다. 쓰기 작업이 많은 로드에는 적합하지 않습니다. 우리는 더 나은 디자인으로 쓰기 작업의 지연 시간을 개선하기 위해 노력하고 있습니다.
초기 5개 지역 설정 외에도 사용자의 요구와 피드백으로 인해 향후 더 많은 지역 및/또는 다른 지역 그룹을 여는 것을 고려하고 있습니다.
Twitter 및 Discord에서 저희에게 연락하여 생각/아이디어를 공유하고 질문을 할 수 있습니다.