云原生数据库VS传统数据库
# 一、前言
随着计算机技术的飞速发展,大数据时代已经逐渐成为人们的共识,数据量越来越庞大,数据库优化读写等等瓶颈已经成为一个迫在眉睫需要解决的问题,传统数据库的发展已经跟不上数据量的增长,一个个瓶颈逐渐凸显,为了解决这一问题,基于多种架构设计的云原生数据库应运而生,目前大部分企业在逐渐往云原生方向靠拢,云原生数据库无疑是其中的掌上明珠。
亚马逊云科技提供了100余种产品免费套餐。其中,计算资源Amazon EC2首年12个月免费,750小时/月;存储资源 Amazon S3 首年12个月免费,5GB标准存储容量;数据库资源 Amazon RDS 首年12个月免费,750小时;Amazon Dynamo DB 25GB存储容量 永久免费。亚马逊免费套餐传送门 (opens new window)。
# 二、传统的数据库面临的问题
# 1.性能瓶颈
一般来说一个数据库建立之初的用户量,不是很大,数据记录也比较少,此时选择单个数据库进行部署相对而言比较方便,且容易部署,随着用户量和用户产生的数据日趋壮大,当数据库的查询性能开始下降时,一般有两种选择,设计更优秀的数据库架构,即重新设计表结构,重新定义表约束,重新定义触发器等等,这个属于从软件的角度做的改造和升级。当数据量极大的时候,例如达到了百万级甚至千万级,此时业务规模也在扩大,不得不考虑更换性能更高的服务器,增加服务节点等提高数据的处理能力。
上面的解决方案是大部分企业会采取的做法,但遇到类似节假日的访问量暴增,并发处理成为性能瓶颈,此时通过动态扩展可以很方便的解决上述痛点,平行的增加节点以应对超高的访问量,但动态扩容要求企业具有比较多服务节点,可以应对突发情况,很明显并不是所有的企业拥有这种能力,为了满足这种需求云原生数据库开始逐渐登入数据库的舞台。
# 2.存储瓶颈
急剧增长的数据要求,我们必须对数据库的存储进行优化和整理分片存储,很多数据是有时效性的,有些数据仅仅是备份使用的,有些数据是为了应急情况而产生,很多时候我们不能抛弃数据,但可以临时将数据存储起来,下一次查询的表中数据量将大大减少,数据存储脱离数据库就可以使用各种压缩算法和工具进行压缩,保证数据尽可能占用存储量少,不过这里有一些问题,数据是否能在数据库层面进行压缩加密等等操作,这个肯定是可以的,但云数据库各大厂商提供了更好的思路和方法。
# 3.迁移成本高
有些行业的对于数据库的可用性要求非常,例如银行、股票等金融行业,进行数据库迁移时需要考虑的因素非常多,不能影响用户的正常活动,同时迁移需要在短时间内完成。由于行业的原因,数据库的记录数非常大,同时需要考虑数据的安全性等问题,迁移成本昂贵。
# 三、云原生数据库的特性
有兴趣的可以参加这个云原生数据库在线大会 (opens new window),为了克服传统数据库瓶颈,云原生数据库应运而生,解决了传统数据库的很多痛点,例如不支持动态扩容,服务器性能资源浪费,容易产生并发问题,并且存储空间急剧增大导致的磁盘空间不足等等问题,目前云原生数据库已经日趋完善和强大起来,未来势必是云原生的时代,数据量日益庞大的今天,几乎上云已经成为一种必然的趋势,正在一步步代替传统的数据库,响应的量级甚至比原生的磁盘中数据查询更快,这得益于网络传输速度的飞速发展,未来网络传输速度不再是云原生数据库发展的瓶颈,所以我们接下来就来谈谈云原生数据库的一些特性,并了解为什么云原生是必然的趋势。
# 1.分层架构设计
云原生数据库最大的优势是进行架构级别的重新设计和重新定义,大幅度提高数据库的查询性能,当数据库的量级达到一定的程度,数据库由原本一体化的运行单位逐渐拆解成各个相对独立的模块是必然的趋势,这个和分布式架构上有异曲同工之妙,当然这得益于网络传输的高速发展,各个模块之间的通信不再是瓶颈。将数据库拆解成计算服务层,存储服务层,共享存储层。
计算服务层
负责解析SQL请求,并转换成底层的物理计划执行
存储服务层
存储服务层负责数据缓存管理和事务处理,保证数据的更新和读取符合数据存储的四大原则,原子性、一致性、隔离性、持久性即ACID
共享存储层
负责数据的持久化存储,并且利用分布式的一致性协议保证数据的一致性与可靠性。
这部分架构的设计,使得云原生数据库,天然的支持存算分离原则,大大提高了资源的利用率,在一定程度上缓解企业由于节日性高峰期的高并发的问题,也极大降低了节假日的运营成本。
# 2.资源解耦与池化
在云原生的时代,云基础设施都会通过虚拟化技术实现资源池化,由于使用的是分层架构,故云原生数据库天然支持存算分离即计算和存储资源分离。从而达到扩展的目的,并且可以大大减少因存算差异导致的资源浪费。基于资源池化技术,云原生数据库可以按需按量使用、弹性的进行资源之间的调度,提高服务的响应速度和可用性。在资源解耦方面,目前是将CPU和内存划为一个模块,SSD存储磁盘划分成一块,但随着技术的飞速发展,下一个时代CPU和内存隔离也会实现。形成三层池化,进一步解耦,更好的帮助客户实现按需按量使用云上资源。将资源进行解耦和优化,不仅提高了资源的利用率,同时也能够在问题发生时快速定位,降低传统数据库的短板效应。
# 3.良好的弹性伸缩能力
传统的中间库分库分表和分布式数据库都会面临这样一个挑战,由于分片和分区的不完美,通常需要进行跨库事务和跨分片处理数据,这样就面临一个问题,对于ACID要求比较高的数据库,分布式架构性能上可能会出现问题,尤其是数据的同步性问题,且事务本身就是比较消耗服务器性能的。但在云原生的架构中,合理的分层使得这个问题被较好的化解,本质上,下层是分布式共享存储,上层是分布式共享计算池,中间层用于计算存储解耦,可以提供比较高的可用性和灵活的弹性部署。与传统数据库中需要部署更多的节点以实现弹性部署相比,成本更低,同时解决方案上可以体验到专家级般的服务,更加适应于企业级应用。
# 4.高可用与数据一致性
由于分布式系统自身的原因,消息通信和协调无疑是其性能上的重要瓶颈之一,不可避免地会出现节点故障、通信异常和网络分区等等问题。在分布式领域地CAP理论中认为任何基于网络地共享系统最多只能满足一致性、可用性、分区容忍性三种特性中的两个。其中,一致性指更新操作完成后,各个节点可以同时看到数据的最新版本,各节点的数据完全一致;可用性指在集群的部分节点发生故障时,系统可以在正常响应时间内对外提供服务;分区容忍性指在遇到节点故障或网络分区时,系统能够保证服务的一致性和可用性。由于是分布式系统,故网络分区一定会发生,即天然地需要满足分区容忍性,因此需要在一致性和可用性之间做出权衡取舍。
在实际应用中,云原生数据库通常采用异步多副本复制的方式,例如Paxos、Raft等一致性协议,保证系统的可用性和最终一致性,以牺牲强一致性的代价换取系统可用性的提升。在真正使用时,云原生数据库会提供多种的高可用策略,保证业务的正常进行。高可用策略即根据用户自身业务的特点,采用服务优先级和数据复制方式之间的不同组合,组合出符合自身业务特点的高可用策略。服务优先级有以下两种策略,可以方便用户在可用性和一致性之间做出权衡。
RTO 优先:数据库应该尽快恢复服务,即可用时间最长。对于数据库在线时间要求比较高的用户,应当使用RTO优先策略。
RPO 优先:数据库应该尽可能保障数据的可靠性,即数据丢失量最少。对于数据一致性要求比较高的用户,应当使用RPO优先策略。
# 5.智能化运维
智能化运维技术是云原生数据库的重要特性之一。云原生数据库一般通过简易的操作界面和自动化流程帮助用户快速完成常见的运维任务,大大减少运维的成本,并可以在多数任务下执行自动化操作:
- 支持自定义备份策略,通过复制实例恢复到任意时间点,找回误删数据。
- 自动在线热升级,及时修复已知Bug。
- 资源和引擎双重监控,链接云监控自定义报警策略。
- 节点故障秒级探测,分钟级切换。
- 提供专家级自助式服务,可解决大部分场景的性能问题。
减低传统数据库中维护花费的成本,让更多的企业专注于自身业务逻辑的实现,减少在不擅长领域的时间物力人力等花费。
# 四、Amazon RDS
Amazon提供免费的数据库适用,点击链接即可领取相关福利, 数据库免费试用链接及上手教程 (opens new window)。快来体验一下云原生数据库的便利~~
# 1.产品简介
数据库实例是在云中运行的隔离数据库环境。 它是 Amazon RDS 的基本构建块。 一个数据库实例可以包含多个用户创建的数据库,并且可以使用客户端工具和应用程序进行访问、使用 Amazon AWS 命令行工具、Amazon RDS API 操作或 AWS 管理控制台可以轻松创建和修改数据库实例。Amazon RDS 是一项托管式数据库服务。它负责大多数管理任务。通过消除繁琐的手动任务,Amazon RDS 使得我们开发人员可以更加专注于应用程序和用户得维护和开发。
# 2.产品的特性
- 多节点部署
亚马逊云计算资源托管在全球多个位置。 这些位置由 AWS 区域、可用区和本地区域组成。 每个 AWS 区域都是一个单独的地理区域。 每个 AWS 区域都有多个独立的位置,称为可用区。多可用区部署可以有一个备用或两个备用数据库实例。当部署有一个备用数据库实例时,称为多可用区数据库实例部署。多可用区数据库实例部署有一个备用数据库实例,可提供故障转移支持,但不提供读取流量。当部署有两个备用数据库实例时,称为多可用区数据库集群部署。多可用区数据库集群部署具有备用数据库实例,可提供故障转移支持,还可以提供读取流量。
- 安全性保证
Amazon RDS 可以加密 Amazon RDS 数据库实例。静态加密的数据包括数据库实例的基础存储、其自动化备份、只读副本和快照。Amazon RDS 加密的数据库实例使用行业标准 AES-256 加密算法来对托管 Amazon RDS 数据库实例的服务器上的数据进行加密。在加密数据后,Amazon RDS 将以透明方式处理访问的身份验证和数据的解密,并且对性能产生的影响最小。无需修改数据库客户端应用程序便可以使用加密,极大方便了开发者。
- 故障恢复能力强
AWS全球基础设施围绕AWS区域和可用区构建。AWS区域提供多个在物理上独立且隔离的可用区,这些可用区通过延迟低、吞吐量高且冗余性高的网络连接在一起。利用可用区,可以设计和操作在可用区之间无中断地自动实现故障转移的应用程序和数据库。与传统的单个或多个数据中心基础设施相比,可用区具有更高的可用性、容错性和可扩展性。
Amazon RDS 创建并保存数据库实例的自动备份。Amazon RDS 创建数据库实例的存储卷快照,并备份整个数据库实例而不仅仅是单个数据库。在数据库实例的备份时段中,Amazon RDS 创建数据库实例的自动备份。Amazon RDS 根据指定的备份保留期保存数据库实例的自动备份。如果需要,可以将数据库恢复到备份保留期中的任意时间点。还可以通过手动创建数据库快照来手动备份数据库实例。如果源数据库实例失败,则可以通过从该数据库快照还原为灾难恢复解决方案来创建数据库实例。
# 五、总结
通过传统数据库和云数据库的对比,从中不难看出,日益增长的数据量驱使着我们日益开发解决各种数据量增大的工具,同时为了避免一些低效的部署,最佳的方式是让专门的人做专门的事,类似Amazon RDS数据就是很多企业的选择,不仅可以节省大量的人力和物力,还可以节省减少很多不必要的投入。当然当我们的业务不是非常大的时候,很多时候都不会产生太大区别,但事实上大部分情况都是当问题不得不直面的时候,我们才开始迁移,此时的投入的迁移成本事非常大,所以选择云原生数据是你的不二选择,迁移也十分方便。