안정적이고 일관되며 대기 시간이 짧은 데이터로 대규모 사용자 기반에 서비스를 제공하는 것은 모든 백엔드 팀에게 매우 어려운 과제입니다. Ledger에서 우리는 자체 블록체인 핵심 데이터 서비스를 호스팅하기로 전략적 선택을 했습니다. 타사에 의존하지 않음으로써 고객의 데이터를 직접 관리하여 기본 프로세스가 보안 지침 및 성능 지향 서비스 수준 목표(SLO)를 준수하는지 확인할 수 있습니다.
하지만 이 전략은 나름의 과제도 가지고 있습니다.
우리의 첫 번째 과제는 이러한 핵심 데이터 제공 서비스를 멋지고 반짝이는 noSQL 도구에서 마이그레이션하는 것입니다. 이 기사에서는 우리가 왜 이 어려운 결정을 내렸는지, 우리가 겪은 복잡성과 우리가 얻은 이점에 대해 자세히 설명합니다.
이 기사의 목표는 PostgreSQL을 블록체인 데이터를 위한 새로운 기본 스토리지 레이어로 선택하게 된 기술적 측면을 보여주는 것입니다.
블록체인 데이터에 대한 심층 분석
블록체인 데이터에는 몇 가지 주요 기능이 있습니다.
첫째, 그것은 계속 성장하고 있으며 아무것도 삭제되지 않습니다. 그러나 실제로는 대부분의 블록체인이 변경할 수 없지만 해결해야 할 충돌로 인해 블록체인의 가장 어린 부분이 변경될 수 있습니다. 실제로 체인이 피어 투 피어 네트워크이기 때문에 여러 개의 합법적인 블록이 일시적으로 공존할 수 있습니다. 일반적으로 오래된 것이 삭제되어 재구성이라고 합니다. 간단히 말해서, 데이터는 변경 불가능한 콜드 테일과 드물게 변경되는 헤드 상태로 나뉩니다.
우리가 해결하려고 하는 문제는 블록체인이 비잔틴 내결함성 데이터를 보유하는 데는 훌륭하지만 여러 축에 걸쳐 데이터를 쪼개고 자르는 데는 덜 효과적이라는 것입니다. 즉, 계정에 영향을 미치는 작업 목록을 가져오는 것은 매우 어렵습니다. 트랜잭션 목록이 아직 없는 경우 비트코인과 같은 블록체인에서 계정 잔액을 얻는 것조차 어려운 일입니다.
이러한 문제를 극복하기 위해 Ledger Explorer Services는 전체 블록체인을 인덱싱합니다. Scala로 완전히 작성된 크고 중요하며 성능에 민감한 서비스입니다. 고양이 효과 고성능 런타임. 테일 p10 대기 시간을 95ms 미만으로 유지하면서 비트코인에서 100k rps 이상입니다. 우리도 모집중 😊.
약간의 역사
우리 이야기의 시작 부분에서 제가 회사에 합류하기 훨씬 전에 Ledger 데이터 서비스 계층은 임베디드 Neo4j 데이터베이스에 의해 처리되었습니다. 각 서빙 박스는 자체 데이터를 인덱싱하고 로컬에서 제공하여 많은 문제를 일으켰습니다.
인스턴스 간의 데이터 일관성이 보장되지 않았으며, neo4j 디스크 및 램 사용으로 결합된 인덱싱해야 하는 상태의 순전한 크기는 확장할 수 없었습니다. 이 문제는 회사가 성장함에 따라 더욱 악화되어 새로운 인스턴스를 생성하는 것이 점점 더 어려워졌습니다.
카산드 라 그런 다음 이 새로운 설정의 주요 동인으로 선택되었습니다. CAP 정리의 AP 측에 있는 클러스터링되고 수평 확장 가능한 데이터베이스입니다. 데이터 공유와 관련된 문제를 해결하고 인덱싱, 블록체인 인식 구성 요소 및 헤드리스 API 서버를 명확하게 분리할 수 있습니다.
그러나 우리가 실제로 읽지 않을 경우 전체 역사적 상태를 사용할 수 있다는 점은 무엇입니까?
사용 사례와 관련하여 원시 기록 데이터는 사용자의 계정 상태를 집계할 수 있기 때문에 거의 필요하지 않습니다. 이로 인해 Cassandra 분산 데이터베이스를 기반으로 하는 기존 데이터 스토리지 솔루션에 도전하게 되었습니다.
블록체인당 저장해야 하는 데이터의 양은 테라바이트 수준이지만 "빅 데이터"라고 부를 수 있는 수준은 아닙니다. 또한 대부분의 쿼리에 응답하는 데 사용되는 if 부분(일명 The hot path)은 훨씬 더 작습니다. 요즘에는 16TB 이상의 NVMe SSD 스토리지가 있는 상용 하드웨어 서버를 쉽게 찾을 수 있습니다. 수직 확장은 매우 강력한 도구이며 관계형 데이터베이스도 마찬가지입니다.
마지막으로 현재 cassandra 설정에서 우리가 가진 주요 문제는 낭비적인 스토리지 모델이나 적합하지 않은 데이터 사용 사례가 아니라 개발자 친화성 부족이었습니다. Cassandra에서 새로운 데이터 기반 기능을 개발하는 것은 불필요하게 시간이 많이 걸리는 것으로 입증되었습니다. 우리는 데이터를 제공해야 하는 각각의 새로운 축을 구현하기 위해 노력했습니다.
데이터 모델링 기술과 SQL 숙련도에 대한 우리 팀의 전문 지식을 감안할 때, PostgreSQL 완벽한 후보였다. 이 솔루션은 실전 테스트를 거쳤고 견고하며 확장하기 쉬워 이상적인 선택입니다.
NoSQL 대신 SQL을 선택한 이유:
- 잔액 읽기/쓰기: 블록체인 데이터 사용 사례는 쓰기보다는 읽기에 대해 크게 왜곡되었습니다(블록체인은 Polygon과 같은 블록체인의 경우에도 매우 합리적인 속도로 데이터를 거의 쓰지 않습니다). Cassandra는 매우 많은 양의 쓰기를 흡수할 수 있습니다. 읽기 경로는 실제로 이상 쓰기 경로보다.
- 인덱싱 지원: 인덱스는 쿼리 및 새로운 비즈니스 사례 또는 기회에 응답하는 DBMS의 핵심 구성 요소입니다. Cassandra는 인덱싱을 제한적으로 지원합니다. 인덱스는 쿼리가 실행될 파티션을 제한하는 방법을 쿼리에서 이미 지정하는 경우에만 유효합니다. 우리는 여기서 비용을 지불합니다 임의 분산 데이터 베이스. 인덱스에 대한 PostgreSQL 지원은 효율적이고 확장 가능하며 가장자리에 있습니다.
- 집계 지원: 집계와 동일한 경우; Cassandra는 다중 파티션 집계를 허용하지 않고 쿼리 언어에서 GROUP BY 절을 허용하지 않기 때문에 지원이 부족합니다. PostgreSQL은 범위 및 jsonb blob과 같은 이국적인 데이터 유형에서도 광범위한 집계 지원을 제안합니다.
- 데이터 모델링: Cassandra는 데이터 모델링이 가능한 방식이 매우 제한적입니다. 응답하려는 거의 각 요청에 대해 테이블을 생성해야 하며 데이터를 큰 행으로 비정규화해야 합니다(완전히 사용하여 넓은 기둥 매장 C*의 측면과 작성자가 매우 저렴하다는 사실). PostgreSQL을 사용하면 블록체인의 관계형 측면(호출, 트랜잭션, 블록)과 여유 디스크 공간을 활용하여 데이터 재사용을 장려할 수 있습니다.
- 임시 쿼리 및 감사: SQL의 전체 표준을 사용하고 임의 쿼리를 수행할 수 있다는 것은 잠재적인 버그 근본 원인을 탐색 및 검색하거나 향후 사용 사례에 대한 탐색 데이터를 가질 수 있음을 의미합니다. 우리는 데이터베이스를 멍청한 스토리지가 아닌 대화식 스마트 도구로 실제로 사용할 수 있습니다. Presto, Spark 등과 같은 광범위하고 비용이 많이 드는 분석 컴퓨팅 클러스터 없이 Cassandra에서 그렇게 합니다.
- 스토리지 사용: Cassandra의 가정은 스토리지가 매우 저렴하고 클러스터가 새 시스템으로 쉽게 확장될 수 있다는 것입니다. 즉 인덱스와 집계에 대한 모든 제한은 스토리지로 지불해야 합니다.. 전역적으로 효율적인 인덱스와 조인 지원이 없다는 것은 쿼리하려는 각 축에 대해 전체 테이블의 복사본을 비정규화하고 저장해야 한다는 것을 의미합니다. PostgreSQL은 테라바이트의 스토리지를 절약해 줍니다.
- 일관성: Cassandra는 분산된 AP 지향 데이터베이스이므로(노드 간 가십으로 통신이 이루어짐) 일관성은 쓰기 측면에서만 최종적입니다. 읽기 및 쓰기 모두에 대해 각 명령문의 일관성 정책을 조정할 수 있지만 이 데이터베이스의 목표는 강력한 일관성을 갖는 것이 아닙니다. PostgreSQL은 중요한 임무에 사용되는 강력한 스토리를 가지고 있으며 매우 탄력적입니다. 중앙 집중화된다는 것은 또한 쓰기 경로에 관련된 네트워크가 없다는 것을 의미합니다.
- 트랜잭션 및 MVCC:
- 트랜잭션: Cassandra 지원 가벼운 트랜잭션만 DML 쿼리에 대해. 일부 일괄 처리를 적용할 수 있습니다(의사) 그러나 수많은 주의 사항이 있습니다. 즉, 끔찍한 성능을 갖지 않으려면 행이 동일한 서버(= 파티션)에 있어야 합니다.
- MVCC: Cassandra는 행 타임스탬프를 지원하지만 전체 MVCC가 보장되지는 않습니다. 압축은 부실한 데이터를 지울 수 있으며 C*에게 그렇게 해서는 안 된다고 말할 방법이 없습니다(예: PG의 트랜잭션).
- PostgreSQL은 사용자를 위한 일관된 읽기 경로를 보장하는 강력한 MVCC 모델을 지원합니다.
- 정 자국이 나란히 나게하는 다듬질: PostgreSQL에는 데이터베이스를 쉽게 운영하기 위해 널리 사용되는 도구가 더 많이 있습니다. 또한 다음과 같은 도구 플라이 웨이 데이터베이스 스키마의 강력한 버전 관리를 유지하도록 합니다. 우리는 이미 그것을 코드 베이스와 성공적으로 통합했습니다. Cassandra에는 이 수준의 성숙도에 상응하는 것이 없습니다.
- 수평적 확장성: 이것이 Cassandra의 핵심 판매 포인트입니다. 데이터가 확장됨에 따라 머신을 추가하기만 하면 됩니다. 샤딩 및 파티셔닝을 수동으로 수행해야 하므로 PostgreSQL에 해당하는 것은 없습니다.
확장 계획
우리가 본 것처럼 Postgres 설정 사용의 유일한 단점은 읽기와 저장 모두에서 확장된다는 것입니다. 이 한계를 극복하기 위해 우리는 무엇을 할 수 있습니까?
우리가 가진 첫 번째 효과적인 도구는 우리가 지원하는 모든 프로토콜 또는 블록체인을 자체 데이터베이스로 분리하여 볼륨과 트래픽에 따라 적절하게 확장할 수 있도록 하는 것입니다. 비즈니스 영역별로 세분화하면 확장의 첫 번째 계층이 보장됩니다.
이 개념을 더 나아가서 우리는 차가운 과거 데이터를 시간 분할로 나눌 수도 있습니다. 최신 버전의 Postgres는 분할된 테이블의 유용성을 크게 개선하여 시스템 클러스터 간에 데이터를 원활하게 이동할 수 있습니다. 예를 들어, 컴퓨팅 성능이 적은 더 저렴한 시스템을 사용하여 대부분의 과거 데이터를 호스팅하는 동시에 강력한 사용자 서비스 RAM 스택 베헤모스를 유지하여 집계된 테이블과 사용자의 최신 작업을 호스팅할 수 있습니다.
이 접근 방식은 히스토리 스토리지에 파티션 간 외래 키가 없기 때문에 사용 사례에서 매우 잘 작동합니다(모든 것이 궁극적으로 블록에 연결됨). 메인 서버의 관점에서 과거 데이터는 분할 및 postgres_fdw 확장을 사용하여 투명하게 액세스할 수도 있습니다.
이 모든 것을 제자리에 두기 위해 TimescaleDB 확장도 조사했습니다. 이 확장은 기본 Postgres에 많은 기능을 추가하며 이들 중 대부분은 우리의 사용 사례에 완벽하게 맞습니다.
- 열과 같은 시간을 기준으로 테이블을 자동으로 분할합니다(이 경우 블록체인 높이를 참조로 사용하여 조정함).
- 이전 청크의 자동, 데이터 유형 인식 및 열 기반 압축. 이는 매우 유사한 데이터에 최신 알고리즘을 사용하여 거의 완벽한 압축 비율을 보장합니다.
- 과거 잔액과 시장 데이터 그래프를 쉽게 계산할 수 있는 효율적인 시간 버킷 기반 집계.
우리는 스토리지에 관한 실험의 시작 단계에 있으며 많은 사용 사례를 잠금 해제합니다. 소량의 데이터를 사용한 개념 증명(이더리움 메인넷에서 ~10k 블록이므로 약 2일의 데이터) 디스크 공간이 최대 40% 감소함.
우리가 본 것처럼 올바른 전략을 사용한다면 데이터 양은 문제가 되지 않습니다. 하지만 사용자 기반의 규모에 따라 확장하는 방법은 무엇입니까?
우리는 이미 여기에서 좋은 이점을 가지고 있습니다. 우리는 전체 블록체인 데이터를 인덱싱합니다. 따라서 필요한 저장소는 사용자 수가 아니라 전체 블록체인 크기와 같이 증가합니다. 스토리지 및 읽기 최적화는 해상도에서 완전히 직교합니다.
제공해야 하는 읽기 볼륨에 비례하여 매우 낮은 쓰기 요구 사항과 결합된 이 설정은 클래스 리더-팔로워 복제 패턴을 위한 꿈의 설정입니다. 성능과 처리량을 더 향상시키기 위해 Postgres 읽기 복제본을 API 서버와 동일한 시스템에 배치하고 UNIX 도메인 소켓을 활용하여 네트워크 왕복을 건너뛸 수도 있습니다.
다음은 읽기를 확장하는 데 사용할 수 있는 데이터 복제 전략의 예입니다. 밝은 회색 상자는 단일 서버를 나타냅니다. 여기에서 API 포드가 가장 인기 있는 데이터의 복제본과 직접 함께 배치되어 저장소와 사용자 간의 전송 시간을 최소화하는 것을 볼 수 있습니다. 앞에서 설명한 아카이브 인스턴스는 스키마를 너무 복잡하게 만들지 않기 위해 표시되지 않습니다.
끝 맺는 말
장기간 Cassandra 사용자로서 다양한 애플리케이션에 적합한 설계상 훌륭한 데이터베이스라는 점을 강조하고 싶습니다. 불행하게도 Ledger에서 그것을 사용하기로 한 선택은 결코 구체화되지 않은 데이터 사용 사례에서 이루어졌습니다.
우리 팀 생산성은 영향을 받았고 해결해야 할 과제를 기대하며 매몰 비용 오류에 빠지지 않고 총알을 깨물기로 선택했습니다.
많은 경우에 귀하의 데이터는 빅 데이터가 아닙니다. 데이터 배포 관리는 대부분의 경우 어려운 작업이 아니며 완전한 분산 데이터베이스의 장단점을 신중하게 고려해야 합니다. 중요한 고려 사항은 다른 것을 구축하는 데 귀중한 시간을 할애할 수 있는 개발자 경험입니다. 이것이 우리가 많은 투자를 해야 하는 실제 사용 사례입니다.
- SEO 기반 콘텐츠 및 PR 배포. 오늘 증폭하십시오.
- PlatoAiStream. Web3 데이터 인텔리전스. 지식 증폭. 여기에서 액세스하십시오.
- 미래 만들기 w Adryenn Ashley. 여기에서 액세스하십시오.
- PREIPO®로 PRE-IPO 회사의 주식을 사고 팔 수 있습니다. 여기에서 액세스하십시오.
- 출처: https://www.ledger.com/blog/serving-web3-at-web2-scale
- :있다
- :이다
- :아니
- $UP
- 10
- 10K
- 20
- a
- 능력
- 할 수 있는
- ACCESS
- 액세스
- 계정
- 가로질러
- 실제로
- 각색하다
- 더하다
- 추가
- 가입 한
- 이점
- 집합
- 알고리즘
- All
- 수
- 수
- 이미
- 또한
- 이기는하지만
- 양
- an
- 분석
- 분석
- 와
- 답변
- 어떤
- 아무것도
- API를
- 어플리케이션
- 적용된
- 접근
- 적절하게
- 아카이브
- 있군요
- 약
- 미술
- 기사
- AS
- 양상
- 측면
- 가정
- At
- 가능
- 인식
- 떨어져
- 축
- 축
- 백엔드
- 잔액
- 균형
- 기지
- 기반으로
- 기준
- BE
- 때문에
- 된
- 전에
- 처음
- 거대괴수
- 존재
- 혜택
- 사이에
- 큰
- 빅 데이터
- 비트
- 비트코인
- 블록
- blockchain
- 블록 체인 데이터
- blockchains
- 블록
- 두
- 보물상자
- 박스
- 돋보이게
- 곤충
- 빌드
- 사업
- 비자 면제 프로그램에 해당하는 국가의 시민권을 가지고 있지만
- by
- 전화
- 통화
- CAN
- 후보자
- 캡
- 면밀히
- 케이스
- 가지 경우
- 원인
- 발생
- 중앙
- 체인
- 도전
- 과제
- 도전
- 이전 단계로 돌아가기
- 변화
- 싼
- 저렴
- 저렴한 기계
- 선택
- 왼쪽 메뉴에서
- 선택
- 선택
- 선명한
- 클러스터
- 암호
- 코드베이스
- 저온
- 단
- 결합 된
- 상품
- 의사 소통
- 회사
- 복잡성
- 구성 요소
- 계산
- 개념
- 개념
- 고려
- 고려
- 일관된
- 시원한
- 핵심
- 비용
- 수
- 만든
- 임계
- Current
- 데이터
- 데이터 분석
- 데이터 공유
- 데이터 저장
- 데이터베이스
- 일
- 결정
- 기술 된
- 디자인
- 개발자
- 개발
- 어려운
- 직접
- 진흙
- 분산
- 분포
- 분할 된
- do
- 하지
- 하기
- 도메인
- 말라
- 단점
- 꿈
- 운전사
- 두
- e
- 마다
- 용이하게
- 쉽게
- Edge
- 유효한
- 효율적인
- 그렇지 않으면
- 임베디드
- 강조하다
- 가능
- 격려의
- 강화
- 확인
- 보장
- 보장
- 동등한
- 등
- 이더리움
- 이더리움 메인넷
- 조차
- 최후의
- EVER
- 모든
- 모두
- 예
- 현존하는
- 이국적인
- 확장하다
- 경험
- 전문적 지식
- 탐험
- 탐색기
- 확장
- 확장자
- 광대 한
- 사실
- 떨어지다
- 특색
- 특징
- 를
- Find
- 먼저,
- 맞게
- 럭셔리
- 외국의
- 앞으로
- 우정
- 에
- 가득 찬
- 본격적인
- 충분히
- 기능성
- 추가
- 미래
- 점점
- 주어진
- 세계적으로
- 골
- 가는
- 그래프
- 회색
- 큰
- 그룹
- 성장
- 성장하는
- 보장
- 가이드 라인
- 했다
- 하드
- 하드웨어
- 있다
- 데
- 머리
- 무겁게
- 신장
- 도움
- 여기에서 지금 확인해 보세요.
- 높은
- 고도로
- 역사적인
- 주인
- 뜨거운
- 가장 인기있는
- 방법
- How To
- 그러나
- HTML
- HTTPS
- i
- 이상
- if
- 불변의
- 영향
- 구현
- 개선하는
- in
- 더욱 더
- 색인
- 색인
- 예
- 통합 된
- 대화형
- 으로
- 사다
- 참여
- 발행물
- 문제
- IT
- 그
- 어울리다
- 합류 한
- JPG
- 다만
- 유지
- 키
- 키
- 종류
- 결핍
- 언어
- 넓은
- 숨어 있음
- 최근
- 층
- 지도
- 원장
- 합법적 인
- 적게
- 레벨
- 이점
- 빛
- 경량의
- 처럼
- 한정
- 한계
- 제한된
- 명부
- 작은
- 장소 상에서
- 긴
- 보고
- 찾고
- 롯
- 낮은
- 기계
- 만든
- 본관
- 메인 넷
- 유지하다
- 과반수
- 유튜브 영상을 만드는 것은
- 관리
- 관리
- 수동으로
- .
- 시장
- 시장 자료
- 만기
- 최대 폭
- XNUMX월..
- 방법
- 금속
- 이전
- 최소의
- 선교
- 모델
- 모델링
- 배우기
- 또한
- 가장
- 움직임
- 많은
- 절대로 필요한 것
- 즉
- 거의
- 필요
- 필요
- 요구
- ...도 아니고 ...도 아니다
- 네트워크
- 못
- 신제품
- 좋은
- 아니
- 노드
- 아무것도
- 번호
- 다수의
- 목표
- of
- on
- ONE
- 만
- 운영
- 행정부
- 기회
- or
- 주문
- 우리의
- 우리 스스로
- 위에
- 극복하다
- 자신의
- 지급
- 부품
- 파티
- 통로
- 무늬
- 지불
- 피어
- 피어 위해 피어
- 완전한
- 성능
- 관점
- 장소
- 계획
- 플라톤
- 플라톤 데이터 인텔리전스
- 플라토데이터
- 포드
- 포인트 적립
- 정책
- 다각형
- 가능한
- Postgresql
- 가능성
- 힘
- 강한
- 연습
- 문제
- 프로세스
- 생산력
- 증명
- 비율
- 제안하다
- 프로토콜
- 증명 된
- 제공
- 제공
- 놓다
- 쿼리
- 램
- 범위
- 율
- 차라리
- 비율
- 살갗이 벗어 진
- 읽기
- 현실
- 정말
- 합리적인
- 축소
- 에 관한
- 관련
- 신뢰할 수있는
- 재편 성함
- 대답
- 복제
- 대표
- 대표되는
- 의뢰
- 탄력
- 분해능
- 해결
- 결과
- 재사용
- 연락해주세요
- 강력한
- 뿌리
- 반올림
- 열
- 달리기
- 달리는
- 같은
- 스칼라
- 확장성
- 규모
- 스케일링
- 완벽하게
- 검색
- 보안
- 참조
- 본
- 분절
- 분할
- 판매
- 판매 시점
- 서비스
- 서비스
- 피복재
- 세트
- 설치
- 몇몇의
- 샤딩
- 공유
- 짧은
- 표시
- 측면
- 비슷한
- 이후
- 단일
- 크기
- 기술
- 작은
- 작은
- 스마트 한
- So
- 해결책
- 풀다
- 해결
- 일부
- 스페이스 버튼
- 불꽃
- 알
- SQL
- 표준
- 주 정부
- 성명서
- 저장
- 저장
- 이야기
- 전략의
- 전략
- 강한
- 강하게
- 성공적으로
- SUPPORT
- 지원
- 테이블
- 받아
- 복용
- 태스크
- 팀
- 테크니컬
- 이야기
- 조건
- 보다
- 그
- XNUMXD덴탈의
- 블록
- 국가
- 그들의
- 그때
- 그곳에.
- Bowman의
- 그들
- 제삼
- 제 3 자
- 이
- 처리량
- 시간
- 에
- 너무
- 수단
- 검색을
- 금액
- 완전히
- 교통
- 거래
- 거래 내역
- 이전
- 투명하게
- 유형
- 유형
- 궁극적으로
- 아래에
- 밑에 있는
- 운수 나쁘게
- 유닉스
- 잠금 해제
- 불필요하게
- us
- 유용성
- 용법
- 사용
- 유스 케이스
- 익숙한
- 사용자
- 사용자
- 사용
- 보통
- 가치 있는
- 종류
- 수직선
- 대단히
- 음량
- 필요
- 였다
- 방법..
- we
- Web2
- Web3
- 잘
- 뭐
- 언제
- 어느
- 동안
- 하는 동안
- 모든
- why
- 넓은
- 크게
- 의지
- 과
- 없이
- 일
- 쓰다
- 쓴
- 당신
- 최연소자
- 너의
- 제퍼 넷