인셔셔RSS 관심 있는 블로그, 뉴스, 기술 정보를 효율적으로 추적하고 읽으세요
원문 읽기 InertiaRSS에서 열기

추천 피드

博客园 - 司徒正美
V
V2EX
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
aimingoo的专栏
aimingoo的专栏
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
月光博客
月光博客
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI

阮一峰的网络日志

科技爱好者周刊(第 396 期):互联网通信的替代方案 科技爱好者周刊(第 396 期):互联网通信的替代方案 - 阮一峰的网络日志 科技爱好者周刊(第 395 期):软件开发的第三种方式 科技爱好者周刊(第 395 期):软件开发的第三种方式 - 阮一峰的网络日志 科技爱好者周刊(第 393 期):脑腐状态 科技爱好者周刊(第 392 期):axios 投毒与好莱坞式骗术 科技爱好者周刊(第 391 期):AI 的贫富分化 科技爱好者周刊(第 390 期):没有语料,大模型就是智障 套壳中国大模型撑起500亿美元估值?扒一扒 Cursor 的"套壳"疑云 科技爱好者周刊(第 389 期):未来如何招聘程序员 科技爱好者周刊(第 388 期):测试是新的护城河 零安装的"云养虾":ArkClaw 使用指南 科技爱好者周刊(第 387 期):你是领先的 科技爱好者周刊(第 386 期):当外卖员接入 AI 字节全家桶 Seed 2.0 + TRAE 玩转 Skill 科技爱好者周刊(第 385 期):马斯克害怕中国车企吗? 智谱旗舰 GLM-5 实测:对比 Opus 4.6 和 GPT-5.3-Codex 科技爱好者周刊(第 384 期):为什么软件股下跌 科技爱好者周刊(第 383 期):你是第几级 AI 编程 Kimi 的一体化,Manus 的分层 科技爱好者周刊(第 382 期):独立软件的黄昏 AI native Workspace 也许是智能体的下一阶段 科技爱好者周刊(第 381 期):中国 AI 大模型领导者在想什么 科技爱好者周刊(第 380 期):为什么人们拥抱"不对称收益" 科技爱好者周刊(第 379 期):《硅谷钢铁侠》摘录 我如何用 AI 处理历史遗留代码:MiniMax M2.1 升级体验 科技爱好者周刊(第 378 期):预测是新的互联网热点 科技爱好者周刊(第 377 期):14万美元的贫困线 科技爱好者周刊(第 376 期):太空数据中心的争议 科技爱好者周刊(第 375 期):一扇门的 Bug 终于有人做了 Subagent,TRAE 国内版 SOLO 模式来了 科技爱好者周刊(第 374 期):6GHz 的问题 VS Code 使用国产大模型 MiniMax M2 教程 科技爱好者周刊(第 373 期):数据模型是新产品的核心 国产大模型接入 Claude Code 教程:以 Doubao-Seed-Code 为例 科技爱好者周刊(第 372 期):软件界面如何设计 大模型比拼:MiniMax M2 vs GLM 4.6 vs Claude Sonnet 4.5 科技爱好者周刊(第 371 期):一个乐观主义者的专访 科技爱好者周刊(第 370 期):正确的代码高亮 错误处理:异常好于状态码 科技爱好者周刊(第 369 期):Tim 与罗永浩的对谈 科技爱好者周刊(第 368 期):不要这样管理软件团队 一天之内,智谱和 Anthropic 都发了最强编程模型 科技爱好者周刊(第 367 期):Nano Banana 的几个妙用 科技爱好者周刊(第 366 期):旧金山疯狂的 AI 广告 科技爱好者周刊(第 365 期):流量变现正在崩塌 科技爱好者周刊(第 364 期):最难还原的魔方 科技爱好者周刊(第 363 期):最好懂的神经网络解释 科技爱好者周刊(第 362 期):GitHub 工程师谈系统设计 科技爱好者周刊(第 361 期):暗网 Tor 安全吗?
분산 데이터베이스 입문: 국산 데이터베이스 TDSQL을 예시로
阮一峰 · 2024-05-29 · via 阮一峰的网络日志

제1장. 소개

오늘, 우리에게 업무용 인터넷 기술 몇 가지를 공유하겠습니다.

저가 소개할 것은 분산 데이터베이스(distributed database)입니다. 저는 최대한 쉬운 언어로 그 개념, 제품, 사용법을 명확히 설명하겠고, 마지막에는 학습 자료 다운로드를 제공할 것입니다.

분산 데이터베이스는 가장 중요한 데이터베이스로, 대부분의 대형 인터넷 서비스는 모두 이 위에서 작동합니다.

일상적으로, 우리가 개발하며 접하는 것은 단일 서버 데이터베이스(또는 중앙 집중형 데이터베이스)입니다. 즉, 데이터베이스는 한 대의 서버에서만 실행됩니다.

(이미지 설명:왼쪽의 단일 데이터베이스 서버가 전체 애플리케이션을 지원합니다。)

분산 데이터베이스는 데이터베이스 시스템이 여러 대의 서버에 분산되어 있다는 것을 의미합니다.

(이미지 설명:단일 데이터베이스가 여러 대의 서버에 분산되어 있으며, 공동으로 애플리케이션을 지원합니다。)

광범위한 측면에서 금융, 통신, 항공, 물류, 전자상거래 등 국가 경제의 중요 산업은 분산 데이터베이스 없이는 불가능합니다.

그것이 없다면 우리는 어떤 삶이 될지 상상하기 어렵습니다. 예를 들어 12306과 같은 예매 웹사이트는 서비스를 제공할 수 없습니다.

개인적인 측면에서, 초보 개발자에서 대규모 프로젝트 아키텍트로 성장할 때, 분산 데이터베이스를 마주하게 됩니다.

아키텍처 설계 시, 한 대의 서버만 사용한다면 제외하고, 여러 대의 서버 간에 데이터를 어떻게 분할하고 저장할지 고려해야 합니다.

결론적으로, 제품이 커지면 분산 데이터베이스는 피할 수 없습니다. 개인에게는 이것이 의미하는 바는 경력과 능력의 발전입니다.

2. 분산 데이터베이스의 장점

분산 데이터베이스가 왜 중요한가요? 그 이유는 단일 서버 데이터베이스와 비교할 수 없는 몇 가지 장점이 있기 때문입니다.

(1) 더 안전합니다입니다. 분산형 데이터베이스는 여러 노드를 포함하고 있으며, 같은 데이터 센터에 배치되어 있든 다른 데이터 센터에 배치되어 있든 단일 서버 데이터베이스보다 훨씬 안전합니다.

(2)고가용성입니다. 단일 데이터베이스 노드에 장애가 발생하더라도 다른 노드는 정상적으로 작동하여 단일 장애점이 발생하지 않습니다.

(3)성능이 더 좋습니다. 대규모 데이터 및 대규모 계산 작업에 대해서는 분산형 데이터베이스가 병렬 처리를 통해 처리 시간을 크게 단축할 수 있습니다.

(4)경험을 향상시킵니다. 데이터베이스가 여러 데이터 센터에 분산되어 있을 때, 사용자에게 가장 가까운 데이터베이스 노드를 할당하여 더 빠른 응답 속도를 제공할 수 있습니다.

3. 분산형 데이터베이스의 어려움

위의 이러한 장점이 있음에도 불구하고, 분산형 데이터베이스는 널리 사용되지 않으며 작은 회사에서는 일반적으로 사용하지 않습니다. 그 이유는 무엇일까요?

주된 이유는, 분산 데이터베이스는 두 가지 문제로 인해 보급이 막히고 있습니다: 비용이 높고 복잡합니다.

분산 데이터베이스는 "지리적 분산 다중 활성화"에 속하며, 추가적인 중복성을 제공하여 데이터 안전을 보장합니다. 비용이 높다는 것은 자명합니다.

그 복잡성은 주로 다음과 같은 점에서 나타납니다.

(1) 일관성 문제 . 다른 노드의 데이터 일관성을 어떻게 보장하나요? 노드의 데이터가 일관성이 없으면 어떡해야 합니까?

(2) 통신 문제 . 노드 간의 통신을 어떻게 신뢰할 수 있나요? 통신 지연이나 실패 시 어떻게 해야 합니까?

(3) 분할 문제 . 대규모 데이터 테이블을 분할하고 데이터를 다른 노드에 저장하면, 분할 전략 및 노드 간 데이터 이전이 매우 복잡할 수 있습니다.

(4) 최적화 문제입니다. 만약 여러 노드에서 오는 데이터를 조합해야 한다면, 쿼리를 최적화하여 성능을 향상시켜야 합니다.

4. CAP 정리

대부분은 알겠지만, 유명한 CAP 정리가 있으며, 이는 분산 시스템(분산 데이터베이스 포함)이 극복할 수 없는 한계를 말합니다.

분산 시스템에는 세 가지 주요 목표가 있습니다---- 데이터 일관성(Consistency), 높은 가용성(Availability), 데이터 분할 용량(Partition tolerance).

CAP 정리는 우리에게 말해줍니다, 세 가지 목표를 동시에 만족할 수 없으며, 최대한 두 가지를 동시에 만족할 수 있습니다. . 데이터 분할의 조건 하에서, 강한 일관성을 위해 높은 가용성을 포기해야 하거나, 높은 가용성을 위해 강한 일관성을 포기해야 합니다.

따라서 어떤 분산 데이터베이스도 완벽할 수 없으며, 세 가지 목표의 일부를 포기하고 균형을 이야기할 수밖에 없습니다.

5. 분산 데이터베이스 제품

분산 데이터베이스의 역사는 매우 오래되었으며, 시장에는 최소 100가지 이상의 제품이 있으며, 오픈 소스와 폐쇄 소스가 모두 있습니다.

거의 모든 분산 데이터베이스는 단일 컴퓨터에서 사용할 수 있으며(즉, 단일 컴퓨터 데이터베이스로서), 여러 컴퓨터가 연결되어 분산으로 사용할 수도 있습니다. 따라서 우리가 잘 알고 있는 많은 단일 컴퓨터 데이터베이스는 사실 분산 데이터베이스입니다.

오픈 소스 분산 데이터베이스 중 유명한 것은 Postgres와 MySQL(관계형 데이터베이스) 그리고 MongoDB와 CockroachDB(비관계형 데이터베이스)입니다.

상용 데이터베이스 중 가장 유명한 것은 Oracle입니다. 이것은 분산 데이터베이스의 실질적인 표준이며, 대기업들은 일반적으로 이를 선택합니다.

6. 국산 데이터베이스 TDSQL

이제, 국산 데이터베이스 TDSQL을 선택하겠습니다.를 예시로, 분산 데이터베이스의 기능과 사용법을 소개합니다.

TDSQL은 텐센트의 제품으로, 국내 선도적인 분산 데이터베이스입니다. 텐센트의 거의 모든 핵심 비즈니스, 예를 들어 위챗, QQ, 텐센트 뮤직, 텐센트 게임 등이 이 위에서 작동하며, 높은 강도와 대규모의 실전 테스트를 겪었습니다.

해외 많은 대기업도 이를 사용하고 있으며, 예를 들어 소홈스, 플푸드, Bilibili, 해리, 샤먼 지하철 등이 있습니다.

이는 완전히 금융 수준의 표준에 따라 구축되었으며, 금융 수준 데이터베이스로서 보안, 높은 가용성, 높은 병렬 처리에 중점을 둡니다. 현재 고객은 50만 명을 넘습니다. 국내 금융 산업에서는 TOP10 은행 중 7곳을 서비스하며, 이미 30여 개의 금융 기관의 핵심 시스템 개조를 돕고 있습니다.

TDSQL은 완전히 국산 데이터베이스로, 특히 Oracle의 호환성을 강조하며 기업이 기존의 Oracle 데이터베이스를 부드럽게 이전할 수 있습니다. 그 비용은 Oracle보다 훨씬 낮습니다. 국내 기업이 국산화와 공급망 안전을 고려하고 있다면, 이는 좋은 대체품입니다.

제품 능력과 자체 개발은 국가 인증을 통과했습니다(《중국 정보안전평가센터의 안전성 및 신뢰성 평가 결과 고지(2023년 제1호)》),국유기업의 기술 선택 시 이것도 중요한 고려 사항 중 하나입니다.

마지막으로,TDSQL은 텐센트 클라우드가 외부에 공개한 서비스로,누구나 사용할 수 있습니다. 웹페이지에서 몇 번 클릭만 하면 개통되므로 매우 쉽게 사용할 수 있습니다.

7. 분산 데이터베이스의 기능

우리는 TDSQL을 통해 분산 데이터베이스가 어떤 기능을 가지고 있는지 살펴보겠습니다.

(1)강력한 동기 복제 。분산 데이터베이스는 주로 마스터-슬레이브 구조를 채택하며,클러스터에는 하나의 주 노드(master)와 여러 개의 슬레이브 노드(slave)가 있습니다. 시스템은 노드 간의 강력한 동기 복제를 지원하여 데이터 일관성을 보장합니다.

구체적으로 말하면,데이터를 쓸 때 주 노드는 슬레이브 노드가 작업 성공 메시지를 반환할 때까지 기다린 후에야 사용자에게 결과를 반환하므로 주 노드와 슬레이브 노드의 데이터가 완전히 일치를 보장합니다.

(2) транзак션 일관성입니다. 시스템은 각 트랜잭션에 대해 전역적으로 고유한 숫자 시퀀스를 제공하며, 각 노드는 트랜잭션의 실행 상태를 조회할 수 있어 분산 환경에서의 트랜잭션 일관성을 보장합니다.

(3) 자동 분할입니다. 분산 데이터베이스의 대규모 테이블은 종종 분할하여 다른 노드에 저장해야 합니다. TDSQL은 자동 수평 분할(분 테이블)을 지원하여 데이터를 균등하게 다른 노드에 쓰고, 쿼리 시 자동으로 집계하여 반환합니다.

사용자에게는 테이블 분할이 투명하며 완전히 무시할 수 있으며, 비즈니스 측에서는 논리적으로 완전한 테이블을 볼 뿐, 뒷단의 분할 세부 사항을 인지할 필요가 없습니다.

(4) 높은 확장성입니다. 데이터베이스 성능이나 용량이 부족할 때 TDSQL은 중단 없이 확장할 수 있으며, 콘솔에서 클릭만 하면 자동으로 업그레이드가 완료됩니다. 시스템 내 데이터 이전, 데이터 균형 및 라우팅 전환은 모두 자동으로 이루어집니다.

(5) 높은 유연성입니다. 사용자는 온라인으로 테이블 구조를 변경할 수 있으며, 특정 유형의 장애 발생 시 시스템이 자동으로 복구될 수 있습니다. 모든 노드, 메인 노드든 또는 서브 노드든 읽기와 쓰기가 가능합니다.

(6) 제품 관리 능력 입니다. TDSQL은 개발자에게 친화적이며, 많은 모니터링 도구를 제공하며, 실시간 모니터링 및 알림을 수행하고, 매일 상세한 건강 검사 보고서를 전송합니다.

텐센트 클라우드에는 전문 클라우드 서비스 DBbrain이 있으며, 머신러닝, 빅데이터, 전문가 경험 엔진 등의 방법을 활용하여 사용자의 데이터베이스에 성능, 보안, 관리 기능을 제공합니다.

예를 들어, SQL을 전면적으로 진단하고 최적화하며 성능 병목 현상을 발견하고, SQL, 트랜잭션, 비즈니스 파이프라인 전체를 관찰 가능하게 만들며, 교착 상태와 같은 이상 현상을 시각화하여 이해하기 쉽게 보여줍니다.

이는 큰 정도로 인간 DBA를 대체하며, 전통적인 인간 운영을 지능형 서비스로 변환합니다.

TDSQL에는 또 다른 AI 지능 질의응답 시스템(아래 그림)이 있습니다. 이는 지식베이스와 작은 모델 훈련을 기반으로 빠르고 정확하게 사용자의 질문에 응답하며, 지능형 고객 서비스처럼 전문적이고 개인화된 답변을 제공합니다.

8. TDSQL의 사용법

아래에서 TDSQL의 사용법을 보여드리겠습니다. 간단합니다. 웹사이트에서 개통한 후, 분산형 데이터베이스를 사용할 수 있습니다.

첫 번째 단계 TDSQL의 공식 웹사이트 에서 제품 컨트롤 패널로 들어가세요.

두 번째 단계 컨트롤 패널 페이지에서 데이터베이스 서버가 있는 지역(클라우드 서버와 동일한 지역이어야 함) 및 데이터베이스 엔진을 선택한 다음 "새로 만들기" 버튼을 클릭하세요.

현재 TDSQL은 세 가지 엔진을 제공합니다: MySQL, 자체 개발한 TDStore, 그리고 PostgreSQL입니다. 어떤 엔진을 선택하든, 동일한 장애 조치 능력과 높은 가용성을 갖추며 Oracle과도 호환됩니다.

세 번째 단계에서는 설정 페이지가 표시되어 데이터베이스 설정을 선택하도록 합니다. 설정이 다를수록 가격이 다릅니다.

그 중 하나는 "강한 동기화"를 활성화할지 여부를 묻습니다.

강한 동기화는 메인 노드와 서브 노드의 데이터 일관성을 보장합니다. 애플리케이션이 강한 일관성을 요구하지 않고 빠른 응답 속도를 더 중요하게 생각한다면, 여기서 "비동기"를 선택할 수 있습니다.

네 번째 단계에서는 설정이 완료되면 결제 단계로 진행되며, 그 후 데이터베이스가 활성화되고 분산 데이터베이스는 온라인 상태가 됩니다.

사용 시에는 먼저 데이터베이스에 연결해야 하며, 내망 연결과 외망 연결로 나뉩니다. 여기서는참조 문서입니다. 주의해야 할 점은 외부 네트워크 연결을 개설하면 데이터베이스가 공공 인터넷에 노출되어 누구나 요청할 수 있으므로 보안 위험에 유의해야 한다는 것입니다.

데이터베이스에 연결한 후에는 SQL 문을 실행할 수 있으며, 이 단계에서는 일반 데이터베이스를 사용하는 것과 차이가 없습니다. 분산 데이터베이스의 SQL과 단일 머신 데이터베이스는 기본적으로 같습니다.

9. TDSQL의 최선의 관행

분산 데이터에는 몇 가지 최선의 관행이 있으며, 다음은 세 가지를 들어봅니다(MySQL 엔진을 예로 들어).

(1)분산 데이터베이스에 데이터를 가져오는 방법

이는 두 가지 경우로 나뉩니다. 첫 번째 경우는 기존의 단일 머신 인스턴스를 새로운 분산 인스턴스로 가져오는 것입니다. 작업 단계는 다음과 같습니다(상세 명령은문서를 참조하세요)

  1. 에서 단일 데이터베이스의 테이블 구조와 데이터를 내보내어 두 개의 SQL 파일을 얻습니다.
  2. 에서 데이터베이스의 테이블 구조 파일을 엽니다. 각 테이블의 주 키(primary key)를 설정하고 분할 기준인 shardkey를 설정합니다.
  3. 에서 수정된 두 개의 SQL 파일을 클라우드 서버에 업로드하여 분산 데이터베이스에 가져옵니다.

에서 두 번째 경우는 기존 분산 인스턴스를 다른 분산 인스턴스에 가져오는 것입니다. 위와 동일한 작업 단계지만, 두 번째 단계가 생략되어 있으며, 주 키와 shardkey를 지정할 필요가 없습니다. 이는 원래부터 존재하기 때문입니다. (자세한 명령은 문서 참조).

(2) 어떻게 분할하는가

분할(sharding)은 분산 데이터베이스의 핵심 문제 중 하나입니다: 몇 개의 데이터 분할을 설치해야 하는가? 데이터는 여러 분할에 어떻게 분포해야 하는가?

분할 수량은 전체 데이터베이스의 예상 최대 동시 접속 및 각 분할이 처리할 수 있는 요청 수에 따라 달라집니다. 아래의 공식으로 계산할 수 있습니다.

읽기/쓰기 동시 접속 성능 = ∑(분할 성능 * 분할 수량)

단일 분할의 성능은 주로 인스턴스의 CPU / 메모리 수량과 관련이 있습니다. 단일 분할 규격이 높을수록 분할 수량이 많을수록 데이터베이스 시스템의 처리 능력이 강해집니다.

성능 외에도 분할은 용량 문제도 고려해야 합니다. 일반적으로 단일 분할은 최소 5천만 행의 데이터를 저장해야 합니다.

(3) 하드웨어 구성

분산 데이터베이스의 하드웨어, 다음은 세 가지 추천 구성을 제시합니다.

A. 테스트 기능.

이 경우 성능이 요구되지 않으며 시스템을 검증하기만 하므로, 2개의 노드를 구성하며 각 노드는 2GB 메모리 + 25GB 하드 디스크를 권장합니다.

B. 비즈니스 초기 단계.

이 경우 데이터 규모가 작고 성장이 빠르므로, 2개의 노드를 구성하는 것이 좋습니다. 각 노드당 16GB 메모리 + 200GB 하드웨어를 사용하세요.

C. 비즈니스 성장 단계.

이 경우 비즈니스 현실 상황에 따라 구성할 수 있으며, 4개의 노드를 구성할 수 있습니다. 각 노드의 하드웨어는 (현재 비즈니스 피크 * 성장률) / 4로 계산합니다.

10. 요약

전반적으로, 현대의 분산 데이터베이스 제품은 자신의 많은 복잡성을 숨기고 사용자에게 편리한 인터페이스를 제공합니다.

일반적으로, 분산 데이터베이스를 직접 구축하는 것은 권장되지 않습니다. 전문 데이터베이스 엔지니어와 운영 엔지니어가 있더라도 비용이 매우 높을 수 있습니다. 클라우드 서비스 제공자의 제품을 사용하는 것이 더 경제적이고 편리한 선택입니다.

TDSQL에 대해서만 말하자면, 그것은 두 가지 버전이 있습니다: 클러스터 버전과 기본 버전입니다.前者는 다중 노드이며, 기업이 생산 환경에서 사용하기 위해 제공되고, 후자는 단일 노드이며 비용이 낮고, 개인 사용을 위해 전용으로 제공되지만, 기능은 동일하며 개인 개발자가 학습하거나 분산 데이터베이스를 시도하는 데 매우 적합합니다.

(끝)

혜택 콘텐츠

이 AI 시대에 클라우드 서비스를 어떻게 사용하여 기업의 데이터 관리를 돕을 수 있는지.

아래는 세 개의 국내 대기업의 실제 사례입니다.

사례 1: 위챗 독서의 "AI 문서" 이 기능은 AI가 독자의 질문에 답변하도록 하며, 방대한 책의 내용에 대한 다양한 질문에 답합니다.

사례 2: 해협은행 핵심 시스템 업그레이드. 지방은행이 TDSQL을 어떻게 사용하여 핵심 시스템을 분산 데이터베이스로 업그레이드할 수 있는가.

예시 3:극빛대자인포라마의 아키텍처 최적화. 극빛(URORA)은 국내 선도적인 개발자 서비스 제공업체로, 데이터 규모는 100PB에 육박하며 노드는 1000개를 넘고 파일은 4억개에 달합니다. 어떻게 아키텍처를 최적화해야 할까요?

그들은 텐센트 클라우드 내부에서 작성한 자료입니다《AGI 시대 표준 전역 데이터 관리 솔루션》, 도구 가이드, 사용자 사례 공유 등 다양한 콘텐츠 포함.

지금 가능합니다무료 다운로드, 아래 QR코드를 위쪽 위그래프로 스캔해 주세요. 국내 실제 환경에서의 기업급 개발에 관심이 있으시다면 참고해 보세요.