🔒
发现新文章,点击刷新页面。
昨天以前首页

分布式数据库入门:以国产数据库 TDSQL 为例

2024年5月29日 09:03
作者 阮一峰

一、简介

今天,跟大家分享一些企业级的互联网技术。

我要介绍的就是分布式数据库(distributed database)。我尽量用通俗的语言,说清楚它的概念、产品和用法,文末还会提供学习资料下载。

分布式数据库堪称最重要的数据库,几乎所有你知道的大型互联网服务,都运行在它之上。

平时,我们自己开发,接触的都是单机数据库(又称集中式数据库),就是数据库只运行在一台服务器上。

(图片说明:左侧的单个数据库服务器,支撑着整个应用。)

分布式数据库指的是,数据库系统分布在多台服务器。

(图片说明:单个数据库分布在多台服务器上,共同支撑应用。)

在宏观层面,金融、电信、航空、物流、电商等国民经济的重要产业,都离不开分布式数据库。

如果没有它,我们很难想象生活会变成什么样,比如12306那样的购票网站,就没法提供服务了。

在个人层面,当你从初级开发者成长为大型项目的架构师,就多多少少会遇到分布式数据库。

设计架构时,除非只用一台服务器,否则就免不了要考虑,数据在多台服务器之间如何拆分和保存。

总之,产品做大以后,分布式数据库是避不开的。对于个人来说,这也意味着事业和能力的进步。

二、分布式数据库的优点

分布式数据库为什么那么重要?因为它有一些单机数据库无法比拟的优点。

(1)更安全。分布式数据库包含多个节点,不管是放在同一个机房,还是不同机房,都要比单机数据库安全得多。

(2)高可用。如果单个数据库节点故障下线,其他节点还可以照常工作,不会单点失败。

(3)性能更好。对于大数据、大计算量的任务,分布式数据库可以并行处理,大大缩短处理时间。

(4)体验更好。当数据库分布在多个机房,可以为用户分配就近的数据库节点,提供更好的响应速度。

三、分布式数据库的难点

虽然有上面这些优点,但是分布式数据库的使用并不普及,小公司一般不用它,这是为什么?

主要原因是,分布式数据库有两大问题,阻碍了它的普及:成本高和复杂性。

分布式数据库属于"异地多活",提供了额外的冗余性,来保障数据安全,成本高自不必多言。

它的复杂性主要体现在下面几点。

(1)一致性问题。如何保证不同节点的数据一致?如果节点的数据不一致怎么办?

(2)通信问题。怎样保证节点之间的通信可靠?如果通信延迟或失败怎么办?

(3)分区问题。如果拆分大型数据表,数据储存在不同的节点,那么拆分策略、节点间的数据迁移可能会非常复杂。

(4)优化问题。如果来自多个节点的数据需要组合,查询就必须优化以提高性能。

四、CAP 定理

大家可能知道,有一条著名的 CAP 定理,说的就是分布式系统(包括分布式数据库)无法克服的局限性。

分布式系统有三大目标----数据一致(Consistency)、高可用(Availability)、数据分区(Partition tolerance)。

CAP 定理告诉我们,三大目标无法同时满足,最多只能同时做到两个。在数据分区的前提下,要么为了(强)一致性,舍弃高可用;要么为了高可用,舍弃(强)一致性。

因此,任何分布式数据库都做不到完美,只能是三大目标的某种取舍和均衡。

五、分布式数据库的产品

分布式数据库的历史非常悠久,市场上至少有上百种产品,有开源的,也有闭源的。

几乎所有的分布式数据库,既可以单机使用(即作为单机数据库),也可以多机联合,分布式使用。因此,很多我们熟悉的单机数据库,其实也是分布式数据库。

开源的分布式数据库,比较有名的是 Postgres 和 MySQL(关系型数据库),以及 MongoDB 和 CockroachDB(非关系型数据库)。

商业数据库里面,最有名的就是 Oracle。它是分布式数据库事实上的标准,大企业一般都选择用它。

六、国产数据库 TDSQL

下面,我选择国产数据库 TDSQL 作为示例,介绍分布式数据库的功能和用法。

TDSQL 是腾讯的产品,属于国内领先的分布式数据库。腾讯的几乎所有关键业务,比如微信、QQ、腾讯音乐、腾讯游戏等等,都运行在它之上,经受了高强度、海量的实战考验。

外部很多大公司也在用它,比如小红书、拼多多、B 站、海尔、深圳地铁等等。

它完全按照金融级的标准打造,属于金融级数据库,注重安全、高可用、高并发,客户目前超过50万。在国内金融行业,它服务 TOP10 银行中的7家,已经助力30余家金融机构的核心系统改造。

TDSQL 是完全的国产数据库,特别强调 Oracle 的兼容,企业现有的 Oracle 数据库可以平滑迁移,它的成本要比 Oracle 低很多。如果国内企业有国产化和供应链安全的考虑,它是很好的替代品。

它的产品能力和自主研发,通过了国家认证(《中国信息安全测评中心的安全可靠测评结果公告(2023年第1号)》),对于国有企业的技术选型,这也是很重要的考虑之一。

最后,TDSQL 是腾讯云对外公开的一个服务,任何人都可以使用。只要在网页上点击几下,就开通了,非常容易上手。

七、分布式数据库的功能

我们通过 TDSQL,看看分布式数据库有哪些功能。

(1)强同步复制。分布式数据库往往采用主从式架构,一个集群有一个主节点(master)和若干个从节点(slave)。系统支持节点之间的强同步复制,以保证数据一致。

具体来说,写入数据时,主节点会等待从节点返回操作成功消息,然后才向用户返回结果,这样保证了主节点和从节点的数据完全一致。

(2)事务一致性。系统为每一笔事务提供全局唯一数字序列,每个节点都可以查询事务的执行情况,保证在分布式环境下的事务一致性。

(3)自动拆分。分布式数据库的大型数据表,往往需要进行拆分,储存在不同的节点。TDSQL 支持自动水平拆分(分表),将数据均匀写入到不同节点,查询时也自动聚合返回。

对于用户来说,分表是透明的,完全可以无视,业务端看到的就是一张逻辑完整的表,无需感知后端的分表细节。

(4)高度可扩展。当数据库性能或容量不足时,TDSQL 可以不停机扩展,只需在控制台点击,就可自动升级完成。系统内的数据迁移、数据均衡和路由切换,都是自动的。

(5)高度灵活性。用户可以在线变更表结构;遇到某些类型的故障,系统可以自动恢复;所有节点,不管是主节点还是从节点,都可进行读写。

(6)产品管控能力。TDSQL 对开发者友好,提供大量监控工具,实时监控和告警,每日推送详细的健康探查报告。

腾讯云有一个专门的云服务 DBbrain,利用机器学习、大数据、专家经验引擎等手段,为用户的数据库提供性能、安全、管理等功能。

比如,它会全方位诊断和优化 SQL,发现性能瓶颈,让 SQL、事务、业务流水全链路可观测,可视化展现死锁等异常,易于理解。

它很大程度上了替代了人工 DBA,将传统的人工运维变成智能化服务。

TDSQL 还有一个 AI 智能问答系统(下图)。它基于知识库与小模型训练,快速准确地响应用户查询,相当于一个智能客户,提供专业且个性化的解答。

八、TDSQL 的用法

下面,我来演示一下 TDSQL 的用法,很简单,在网页上开通后,你就可以使用分布式数据库了。

第一步,在 TDSQL 的官网上,进入产品控制台。

第二步,在控制台页面,选择数据库服务器所在的地域(跟你的云服务器应该是同一个地域),以及数据库引擎,然后点击"新建"按钮。

目前 TDSQL 有三种引擎:MySQL、自研的 TDStore 和 PostgreSQL。不管哪一种引擎,都具备一样的容灾能力和高可用,并且兼容 Oracle。

第三步,会跳出一个配置页面,让你选择数据库配置。不同的配置,价格不一样。

其中有一项,问你要不要开通"强同步"。

强同步可以确保主节点和从节点的数据一致性。如果你的应用不要求强一致,更在意快速返回结果,这里可以选择"异步"。

第四步,配置完成后,会进入付款环节,然后数据库就开通了,你的分布式数据库就已经在线了。

使用时,需要先连接数据库,分成内网连接和外网连接,这里可以参考文档。需要注意,如果开通外网连接,数据库就暴露在公网上,任何人都可以请求,必须注意安全风险。

连接数据库以后,就可以执行 SQL 语句了,到了这一步,就跟使用普通数据库没有任何区别。分布式数据库的 SQL 与单机数据库,基本是一样的

九、TDSQL 的最佳实践

分布式数据有一些最佳实践,下面举出三个(以 MySQL 引擎为例)。

(1)如何将数据导入分布式数据库

这分成两种情况。第一种情况是将现有的单机实例,导入到新建的分布式实例。操作步骤如下(详细命令见文档)。

  1. 导出单机数据库的表结构和数据,拿到两个 SQL 文件。
  2. 打开数据库的表结构文件,设置每个表的主键(primary key),以及分片依据的 shardkey。
  3. 将修改后的两个 SQL 文件,上传到云服务器,导入到分布式数据库。

第二种情况是将现有的一个分布式实例,导入到另一个分布式实例。操作步骤与上面一样,只是少了第二步,不需要指定主键和 shardkey,因为原来就有了。(详细命令见文档)。

(2)如何分片

分片(sharding)是分布式数据库的核心问题之一:到底要架设多少个数据分区?数据在多个分区如何分布?

分片数量取决于,整个数据库预估的最大并发,以及每个分片能够处理的请求数量,可以用下面的公式计算。

读写并发性能 = ∑(分片性能 * 分片数量)

单个分片的性能,主要与实例的 CPU / 内存数量相关。单个分片规格越高、分片数量越多,数据库系统的处理能力越强。

除了性能,分片还要考虑容量问题。一般来说,单个分片至少存储5000万行数据。

(3)如何配置硬件

分布式数据库的硬件,下面给出三个推荐的配置。

A. 测试功能。

这种情况不要求性能,只用来验证系统,建议配置2个节点,每个节点 2GB 内存 + 25GB 硬盘。

B. 业务发展初期。

这种情况数据规模较小,增长快,建议配置2个节点,每个节点 16GB 内存 + 200GB 硬盘。

C. 业务发展稳定期。

这种情况根据业务实际情况配置,可以配置4个节点,每个节点硬件为:(当前业务峰值 * 增长率) / 4。

十、总结

总的来说,当代的分布式数据库产品,将自身的大量复杂性,都隐藏了起来,为用户提供一个易用的操作接口。

一般来说,不建议自己搭建分布式数据库,即使你有专门的数据库工程师和运维工程师,成本也会非常高。使用云服务商的产品,是更经济更省事的选择。

就拿 TDSQL 来说,它有两个版本:集群版和基础版。前者是多节点的,供企业在生产环境使用;后者是单节点的,费用较低,专门供个人使用,但功能是一样的,很适合个人开发者学习或者尝试分布式数据库。

(完)

福利内容

在这个 AI 时代,如何使用云服务,助力企业的数据管理?

下面是三个国内大厂的真实案例。

案例一:微信读书的"AI 问书"。这个功能让 AI 来回答读者提问,关于海量的书籍内容的各种问题。

案例二:海峡银行核心系统升级。省级银行如何使用 TDSQL,将核心系统升级为分布式数据库。

案例三:极光大数据平台的架构优化。极光(URORA)是国内领先的开发者服务提供商,数据量近百 PB,节点过千,文件4亿,应该如何优化架构?

它们来自腾讯云内部编写的资料 《AGI 时代首选的全栈式数据管理方案》 ,包括工具指南、用户案例分享等诸多内容。

现在可以免费下载,只需微信扫描下方二维码。如果你关注国内真实环境中的企业级开发,不妨看看。

文档信息

  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证
  • 发表日期: 2024年5月29日

2024最流行的网站架构----边缘平台架构:概念与产品

2024年3月26日 08:26
作者 阮一峰

互联网开发的核心是什么?

答案可能就是网站架构。你要选择一个合适的架构,用来组织代码,然后在服务器跑起来。

今天,我想给大家介绍,眼下最流行的一种网站架构。它非常合理,效果极佳,而且借助云服务商提供的工具,架设非常容易。

它就是本文的主题----边缘平台架构(edge platform)。

大家可能经常听到"edge"(边缘)这个词,但是未必了解它的意思。我尽量用通俗的语言,解释什么是边缘,什么是边缘平台架构,它的优势在哪里,以及怎样利用边缘平台,架设自己的网站。

一、从"服务器-客户端"谈起

为了理解边缘平台,需要从最基本、最传统的"服务器-客户端"(server-client)架构讲起。

在"服务器-客户端"的架构下,存在一个中心服务器,所有客户端都向它发出请求。

这种架构的优点是简单易行,缺点是中心服务器是一个单点依赖。一旦访问量大,可能会有性能问题,还可能中断服务。

而且,中心服务器的物理位置是固定不变的,导致用户的访问速度与地理距离有关。同样条件下,离服务器越近,访问速度越快;离服务器越远,访问速度越慢。

二、CDN 的出现

为了减轻中心服务器的负担,更是为了拉近与用户的地理距离,CDN 架构就出现了。

CDN 的想法很简单,就是在各地的机房中设置大量的节点服务器,把每次访问都不变的静态资源文件,复制到这些服务器上面。

用户访问时,涉及静态文件的请求就不会发到中心服务器,而是通过 DNS 系统,发到地理位置最靠近的节点服务器,由后者负责响应用户。

这样的设计,既减少了发往中心服务器的请求,也减少了用户与静态文件之间的物理距离,从而加快了访问速度。

三、边缘的概念

大家可能注意到了,CDN 架构中存在两种不同作用的服务器。

一种是中心服务器,负责数据计算和存储;另一种是节点服务器,负责发送静态资源文件。

由于节点服务器是在架构的外围,为了跟中心服务器相对应,人们就把起到外围辅助作用的节点服务器,称为"边缘服务器"(简称边缘)。

就像上图中,中心服务器在云端(cloud),它的外围是边缘服务器(edge),然后才是用户(user)。

边缘服务器有一个重要特征,它是距离用户最近的服务器。人们有时候提到"边缘",就特指最靠近用户的那组节点服务器。

四、边缘平台架构

CDN 架构只是把静态文件放到了边缘服务器,数据计算和数据存储还是在中心服务器,对于用户来说,这部分可能还是很慢。

很自然地,大家就想到了,能不能把数据计算、数据存储也放到边缘服务器呢?

答案当然是完全可以。只要把数据计算设计成不涉及状态的云函数,把数据存储限制在没有一致性要求的数据,它们就都可以放到边缘服务器。这就是边缘计算边缘存储的由来。

这样的话,数据计算、数据存储、文件下载,都由距离用户最近的边缘服务器处理,网站的响应速度就会整体提升。

由于边缘服务器这时具备多种功能,实际上就升级成了边缘平台,CDN 架构就变成了边缘平台架构。

在这种架构下,你的网站有许多个实例,分布在每一组边缘服务器上。用户访问的总是距离最近的那个实例。

注意,中心服务器这时还是存在的,只是它的工作主要变成了协调和同步边缘服务器,而不再是直接与客户端交互了,客户端只与最近距离的边缘服务器直接联系。

五、国外的边缘平台

国外很多新兴的云服务商,现在都主推边缘平台架构。

世界最大的 CDN 服务商 Cloudflare,早就不限于 CDN 服务了。它的边缘服务器除了存放静态文件,还可以进行云计算、数据库读写、图像处理等许多功能。

其他的云服务商 Vercel、Netlify、Netflix、Deno Deploy 提供的都是类似的服务。

国外的这些边缘平台,有一个最大的缺点,那就是服务器都在境外,基本没有中国大陆境内节点。

对于境内访问者,没有境内节点,就完全发挥不出边缘服务器响应速度快的优势。所以,如果你有境内的访问者,建议考虑使用国内的边缘平台。

六、腾讯云边缘平台 EdgeOne

根据官网,腾讯云的 EdgeOne 是"中国云服务商中首家提供安全加速一体化的边缘平台"。我自己也使用这个产品,对它比较熟悉。

下面,我就拿它举例,大家可以看看,真实的边缘平台是什么样的。

作为边缘平台,需要满足三个条件。

首先,必须有全球分布的大量节点。EdgeOne 基于腾讯云,目前全球节点有3200+,覆盖了100+的国家与地区。不管用户在哪个地方,都能找到就近的节点。

如果某个节点饱和或发生故障,也可以切换到其他节点,保证站点的可用性。

其次,必须有海量的带宽,否则难以经受大访问量的冲击。EdgeOne 的总带宽达到 160Tbps+,足以抵抗大流量业务的突增。

再次,必须集成大量功能,方便用户使用。EdgeOne 把腾讯云的能力,几乎都搬到了边缘服务器。具体来说,它集成了以下能力,有一些突出的技术亮点。

(1)全球的 CDN 加速。EdgeOne 是腾讯云的下一代 CDN,在底层对境内加速和境外加速分别作了适配,用户不再有感知。

(2)Web 应用防火墙。它不限制用户的 QPS(每秒请求数),提供智能 CC 防护,通过全平台流量分析,统计并识别正常业务和突增流程特征,制定动态适应策略。同时精准有效拦截 Web 漏洞威胁,抵御 SQL 注入、XSS 等多种攻击,保障站点健康可用。

(3)边缘函数。只需编写简单的函数,无需考虑服务器等基础设施,就可以在边缘节点上运行自己的代码。

(4)自定义安全策略。用户可以指定5条自定义拦截规则,实现个性化的管控需要。用户还可以实现基于黑名单及白名单的 IP 管控和区域封禁。

(5)DNS 解析服务。它的每个边缘节点上都预备域名解析能力,1个站点可以设置300个子域名。

(6)用户行为分析和日志记录。它会分析和监控异常流量,发现各种机器人爬虫,并提供详细的日志图表,以及各种访问者指标。

综上所述,边缘平台实际上是一种 All in one 的产品,属于 CDN 的升级版,多种功能集于一身,并提供简单的使用接口,极大地方便了用户

这里插一句,EdgeOne 的产品全称是"边缘安全加速平台",在边缘平台的产品基础上,特别突出了安全和加速两大特点,作为主要的功能卖点。

七、边缘平台的应用案例

读到这里,大家对边缘平台是什么产品,应该已经有一个大致的了解。

你可能还会有疑问,在真实的生产环境中,它的作用到底有多大?

下面是一些从 EdgeOne 官网摘录的真实案例,大家可以感受一下边缘平台对网站表现的巨大帮助。

(1)游戏行业。某大型热门游戏用了边缘平台以后,请求耗时改善60%,同时成功防护了 DDoS 攻击,攻击的峰值流量达到 2.04Tbps。

(2)社交文娱行业。某短视频的头部平台用了边缘平台,降低20%卡顿率和50%播放失败率,在部分东南亚国家性能改善高达100%,同时全面过滤海量攻击流量,保证直播等业务正常运行。

(3)电商零售行业。在边缘平台上,电商平台完成了所有商户域名的便捷接入,还能自动颁发和更新免费 HTTPS 证书。

(4)金融行业。边缘平台大幅提高金融服务的访问性能,保证网银、手机银行,信用卡都获得了安全加速。

(5)全球办公。在全球协同办公场景下,边缘平台优化国内与海外办公系统连接时的访问速度,提高办公效率和访问体验。

总之,只要你的网络服务,对访问速度和安全防护都有较高的要求,就可以考虑使用边缘平台

尤其对于那些有出海需求的国内企业,既要全球加速,又要防御各类攻击,像 EdgeOne 这样的边缘平台应该是首选的网站架构。

八、边缘平台动手试

大家千万不要觉得,边缘平台是大企业的专用产品,个人和小企业其实也完全可以用上边缘平台。它的功能并不区分访问量的大小,都统一适用。

再说,看了这么长一篇介绍,你难道不想动手试试吗?只有亲自上手,才能真正学会。

EdgeOne 刚刚进行了产品更新,发布了基础版和个人版。下面,我就以它为例,演示一下如何上手边缘平台的两大核心功能----网站加速和安全防护。

(1)网站加速。这跟 CDN 的操作是一样的,只需要一步操作,把域名交给边缘平台接管就可以了。

进入EdgeOne 的主页,点击"立即使用"。

它会提示你"添加站点",输入自己网站的域名即可。注意,该域名必须此时已经可以访问了。

然后,系统会问你选择哪一种套餐,初学者选择"个人版"即可。

接着,它会要求你设置加速区域和 DNS 接入模式。

加速区域就是哪些区域的边缘服务器将会生效,一共有三种可选----全球,中国大陆,中国大陆以外地区。

DNS 接入模式是最关键的部分,一般情况下,都是选择把域名的 DNS 服务器迁移到边缘平台。对于那些不方便迁移的用户,EdgeOne 还提供了另一种选择,将域名的 CNAME 记录指向 EdgeOne 即可。

然后就是最后一步,设置 DNS(或者 CNAME)的细节。

一旦 DNS 设置完成,边缘平台就会接管所有发往该域名的请求,分配给最近的边缘服务器,加速就自动实现了。

(2)安全防护。一旦边缘平台开始生效,就会检查所有请求,EdgeOne 会自动识别和过滤掉 DDoS 攻击和恶意请求。

这部分不需要用户设置,某些情况下,用户可能希望过滤掉具有指定特征的请求,那么就需要自定义拦截规则。

下图是设置某个服务的海外版,只接受海外用户访问,不接受来自中国大陆的请求。

下图则是同时设置两个条件,只有来自 IP 地址1.1.1.1的请求,才能访问指定路径(后台)。

九、总结

从上一节的操作步骤,大家可以看到,虽然边缘平台本身是一个复杂的产品,但是所有的复杂性都被封装了,用户的操作是非常简单的。

如果你希望自己的网站,对所有访问者都有良好的速度,能够应付瞬间的大流量,并且还有足够的服务器安全性,同时又不必支付高昂的费用,用多少付多少,那么 EdgeOne 这样的边缘平台架构就是你的最佳选择。

它把加速和防护赋予了每个开发者,让你的产品更安全、更易用、更开放,还节省成本。

EdgeOne 本次产品更新后,推出了力度很大的优惠,个人版第一年的费用不到4元/月,为大家学习和试用创造了良好的条件。

大家可以扫描加入产品交流群了解产品更多动态,或者访问这个链接,以优惠的价格用上边缘平台。

(完)

文档信息

  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证
  • 发表日期: 2024年3月26日

《TypeScript 教程》发布了

2023年8月8日 10:54
作者 阮一峰

长话短说,我写了一本《TypeScript 教程》,已经发布在网道,欢迎大家访问。

我以前写过《JavaScript 教程》《ES6 教程》,很自然地,一直有人问,有没有《TypeScript 教程》

嗯......说实话,我一开始不想写。

我那时的想法是,TypeScript 就是为 JS 语言添加静态类型系统。如果你真需要静态类型,可以考虑使用其他更成熟的语言(比如 Rust 和 Java),再编译成 JS(wasm 模块),何必新学一门语言呢。

但是,形势比人强。TypeScript 越来越流行,成为前端开发的主流工具,各种项目纷纷移植过去。我就逐渐改变了想法,觉得还是应该上车。

2021年底,我开始动笔,没想到一写,就是断断续续一年多。

写作过程很痛苦,我低估了 TypeScript 的难度。它为了适配 JavaScript,有很多不符合直觉的规则,内容又多又杂。

加之我对很多地方不够熟悉,边写边查资料,更加拖延了写作进度。

今年3月份,我已经快写完了,TypeScript 5.0 突然发布了,装饰器(Decorators)改用全新语法。我不得不重写这一章,于是装饰器现在就有新语法旧语法两章,因为 TypeScript 同时支持这两者。

如今终于完稿,如释重负,欢迎大家多提供反馈

这个教程采用创意共享许可证,免费使用,但需要保留署名,也就是保留出处。源码放在 GitHub,大家发现任何问题,欢迎提交 Issue 和 PR。

(完)

文档信息

  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证
  • 发表日期: 2023年8月 8日
  • 没有更多文章
❌