回顾过去二十年的技术发展,整个应用形态和技术架构发生了很大的升级换代,而任何技术的发展都与几个重要的变量相关。
1.应用形态的变迁,产生更多的场景和需求。整个应用形态从企业应用、互联网服务再到移动应用,历经了几个不同阶段的发展。从最早企业内应用系统,到通过移动互联网技术覆盖到每个人生活的方方面面,这个过程中产生了大量的场景和需求。而新的场景和需求,是推动产品和技术发展的主要因素。
2.更复杂的场景,更大规模的挑战,推动技术的快速发展。新一代应用面临更复杂的场景和更大的规模挑战,老一代技术架构无法支撑业务的快速发展,所以急需推动新的技术的研究和发展。这是一个综合的 ROI 的考虑,流量和数据到一定规模才能让技术架构升级带来更大的效率和成本的收益。
3.技术基础设施的完善,提供了技术和产品发展的基础。互联网、4G/5G 等基础设施的建立和完善,是新一代应用诞生和发展的基础。分布式技术、云计算、新一代硬件等技术的成熟,是技术架构变革的基础。
本篇文章会给大家分享应用系统数据架构的演进以及云上的架构最佳实践,这里先对数据系统的分类做一个定义,数据系统如果按照主体来区分的话分为以下两类:
本篇文章介绍的数据架构主要是第一类,即以『应用为主体』的数据架构。
应用系统数据架构历经了多次迭代,从传统的单一系统数据架构,到由多组件构成的现代数据架构。现代数据架构下包含不同的计算和存储组件,这些组件在处理不同类型数据以及负载下各有优劣。现代数据架构通过合理选择和组合这些组件,让各个组件能发挥最大的能力,从而让整个数据系统能满足更多样化的场景需求以及能支撑更大的数据规模。
LAMP 架构
一个应用系统的基本构成包括:API(提供服务接口)、应用(业务处理逻辑)、数据存储(应用数据存储)以及运行环境(应用和数据库的运行环境)。互联网早期最流行的 LAMP 架构就是典型的单一系统数据架构,其中使用 Apache Server 作为 API 层、使用 PHP 开发应用,使用 MySQL 作为应用数据存储,所有组件均运行在 Linux 系统上。
整套架构采用开源软件构建,相比商业软件能提供更低的成本,所以能快速在互联网早期的各大中小站点流行起来,成为最流行的建站技术架构。但随着互联网的流量越来越大,LAMP 架构面临的最大的问题是可扩展性,需要解决应用和存储的扩展问题。
如何进行扩展
关于扩展技术的几个基本概念:
Scale-out 具备更好的灵活性和经济性,计算和存储进行 Scale-out 的常见技术手段包括:
可扩展的传统数据架构
LAMP 架构应用上面提到的扩展技术,演变成了上图的可扩展的数据架构。应用侧通常是无状态计算,所以可以简单采取 Scale-out 的扩展方式,前置 Load Balancer 来进行流量调度。存储侧采取分库分表的方式来进行存储和计算的扩展,以及只读库的方式来对查询计算进行扩展。虽然各层具备了扩展能力,但该系统还存在一些问题:
如何解决存储侧扩展问题
MySQL 不是万能的,但 MySQL 对应用系统来说是不可替换的,到目前为止都是这样。虽然现在有更多新的云原生关系数据库出现来取代传统 MySQL 的位置,但本质上都脱不了 MySQL 这个壳,只是更强大的 MySQL 而已。所以很多解决方案都是围绕 MySQL 作为辅助方案而不是替换方案出现,比如说 Memcached/Redis 这类缓存系统,帮助 MySQL 抵御大部分查询流量,来解决 MySQL 容易被查询打崩的问题。
这个设计思想是『分而治之』,将原本 MySQL 所承担的职责进行细分,能分离解决的就分离解决。现代数据架构就是基于此思路,仍然以 MySQL 作为应用交互和业务数据存储的核心,但是使用一些辅助方案解决 MySQL 的问题。
定义问题,分而治之
前面提到 MySQL 是应用系统数据架构的核心存储,且是不可替换的组件。MySQL 直接承载业务数据和大部分业务交互,现代数据架构的演进思路是围绕 MySQL 提供辅助解决方案,采用『分而治之』的设计思路。所以我们首先得罗列清楚在单一系统架构中 MySQL 所承担的职责,以及明确哪些点是可以分而治之的。分而治之的具体手段包括:
为方便理解对 MySQL 承载的职责的具体含义,我们对应到一个实际场景来解释对应的职责,我们以『电商订单』系统来进行举例。
事务处理一般是需要根据数据库内的一致的状态决定操作的执行,必须要有 ACID 的保证,这部分只能由 MySQL 来承载。MySQL 的大部分查询流量都是可被卸载的,最简单的是创建只读库来卸载查询流量,但某些复杂查询操作只读库无法很高效的执行,必须依赖外部存储来加速,比如说数据搜索和数据分析。所以这部分流量需要卸载,并且需要复制部分或者全部数据。另外 MySQL 内存储的数据并不会都用于事务处理,很大一部分数据在生成后仅提供查询或非事务型操作,这部分数据的查询流量和存储都是可被卸载的。
我们把职责给定义清楚后,也明确了哪些职责是 MySQL 主要承担的,哪些职责是可以被卸载从而得以有效的『分而治之』的。
在理清了整个解决问题的思路后,接下来才是对架构师最大的挑战:如何选择合适的组件来卸载流量或者存储?
选择合适的存储组件
1)根据场景定义需求
准确的定义需求是选对组件的前置条件,切勿仅根据功能性需求来进行匹配,还需考虑一些基础性需求,例如存储组件可提供的 SLA、数据可靠性、扩展性、可运维性等等。从上面的表中,我们能够非常清晰的看到对各组件的功能性需求,那接下来我们再看看基础性需求如何区分和选择。
在做数据系统设计时可以把应用数据尝试落在上图的不同周期内,看下如何对存储组件定义合适的基础性需求。通常应用系统最先产生的是事务数据,事务数据会逐步向在线数据、离线数据转换和流动,在线性逐步降低,从面向前台逐步转向后台。再看从事务数据到离线数据,基础性要求的具体变化:
2)存储组件的种类和差异
先从宏观层面比较下数据库类存储组件的差异:
我们看下当前主流开源数据库以及对应的云原生数据库产品的对比:
在做存储组件选型时,要考虑功能性需求和基础性需求,选择合适的存储组件。以上表格只是列举了部分场景和其中推荐的产品,这些产品不是唯一选择也不一定是最适合的选择,因业务不同发展阶段和需求而异。选择对存储组件是一件很难的事,所以架构师在设计数据架构时,要提前考虑到存储组件的新增或替换,数据架构必须具备这样的灵活性,因为『构建快速迭代能力比应对未知需求的扩展性更重要』。
在一个复杂的应用系统中,必然会存在多套存储组件的组合,而不是单一的存储组件来支撑所有的场景和流量,所以架构师还得面临下一个难题:如何合理的组合这些存储组件?
合理的进行组合
1)派生数据架构
在数据系统架构中,我们可以看到会存在多套存储组件。对于这些存储组件中的数据,有些是来自应用的直写,有些是来自其他存储组件的数据复制。例如业务关系数据库的数据通常是来自业务,而高速缓存和搜索引擎的数据,通常是来自业务数据库的数据同步与复制。不同用途的存储组件有不同类型的上下游数据链路,我们可以大概将其归类为主存储和辅存储两类,这两类存储有不同的设计目标,主要特征为:
这种主与辅的存储组件相辅相成的架构设计,我们称之为『派生数据体系』。在这个体系下,最大的技术挑战是数据如何在主与辅之间进行同步与复制。
上图我们可以看到几个常见的数据复制方式:
『派生数据体系』是一个比较重要的技术架构设计理念,其中 CDC 技术是更好的驱动数据流动的关键手段。具备 CDC 技术的存储组件,才能更好的支撑数据派生体系,从而能让整个数据系统架构更加灵活,降低了数据一致性设计的复杂度,从而来面向高速迭代设计。MySQL 的 CDC 技术是比较成熟的,也演化出来一些中间件和云产品,比如 Canal 以及阿里云的 DTS。所以在我们的现代应用系统数据架构中,也主要是基于 MySQL 的 CDC 技术来进行数据派生。
现代应用系统数据架构
上图就是一个典型的现代应用系统数据架构,我们来系统的看下:
1.由多存储组件构成,每个存储组件各司其职:
2.基于 MySQL CDC 的派生数据架构,由开源产品 Canal 来做实时数据同步。但这里 ClickHouse 的数据同步并不一定需要是实时增量的,也可采用 T+1 的全量同步方式。
3.应用系统需要与这些不同组件分别进行交互,且交互接口各不相同。
这个架构具备一定的灵活性,通过 Canal 来解决异构存储间的数据同步问题,通过插件机制可灵活增加新的存储组件来应对未来的新的需求。每个组件都是开源界打磨多年的成熟产品,也有一些中间件来降低应用与这些组件的交互成本。但也存在一些明显的问题:
把现代数据架构搬到云上,可利用云的优势来优化整套架构:一是找到合适的云原生产品替换开源产品,最大好处是降低运维成本,其次能获得更强的稳定性和性能;二是用更少的组件做更多的事,来降低管理和使用成本,也能降低应用交互开发复杂度。
以上就是完整的云上数据架构,重点讲下替换开源组件的几个云产品:
接下来我们再重点提下 Tablestore,因为在应用系统在线场景,Tablestore 承载了流量卸载和存储卸载的重要职责。Tair 的使用和定位与 Redis 完全一致,而 Tablestore 相比 HBase 和 Elasticsearch 有更大的差异性。
1.表格存储 Tablestore
表格存储 Tablestore 是阿里云自研的面向海量结构化和半结构化数据存储的 Serverless 多模型结构化数据存储,被广泛用于社交、物联网、人工智能、元数据和大数据等业务场景。采用与 Google Bigtable 类似的宽表模型,天然的分布式架构,能支撑高吞吐的数据写入以及 PB 级数据存储,具体产品介绍可以参考官网以及权威指南。
Tablestore 提供兼容 HBase 的宽表引擎,以及能力和性能都优于 Elasticsearch 的索引引擎,它的核心能力包括:
技术架构的选择没有统一标准答案,是一个综合的权衡考虑。本文主要介绍了应用系统数据架构的变迁,相信随着应用场景越来越复杂、更多需求的提出,随着底层基础设施的完善,会有更多新技术和产品出现,而数据架构也会继续演进。但是一些经典的设计思想会保留,例如分而治之、派生数据架构、如何灵活的选择和组合存储和计算组件等。以通过以下二维码关注。转载本文请联系C you again公众号。
【本文为专栏作者“阿里巴巴官方技术”原创稿件,转载请联系原作者】
文章题目:云上应用系统的数据存储架构演进
网站URL:http://www.csdahua.cn/qtweb/news14/443864.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网