首页 » 软件开发 » 浅谈分布式系统特点及其应用(分布式系统数据库业务数据)

浅谈分布式系统特点及其应用(分布式系统数据库业务数据)

admin 2024-07-24 20:21:14 0

扫一扫用手机浏览

文章目录 [+]

为提高数据的安全性与系统的可扩充性,可在两层模型的基础上考虑采用三层或多层设计模型,将数据库访问分布在一个或多个中间层。
这种体系结构称为多层分布式系统。

分布式数据库访问层的特点

1、可伸缩。

浅谈分布式系统特点及其应用(分布式系统数据库业务数据) 软件开发
(图片来自网络侵删)

这里是指水平可伸缩。
事实上,这点更应该是整个系统要考虑的目标了,而非DAL,DAL要考虑的是怎么更好地支持。
举例说,我们可以一个库一个服务,甚至可以是一个表一个服务,库、表拆分后,DAL应能路由查询、合并结果,而不是让应用程序去操心这些事。

2、高可用性。

我们认为出错失败是很正常的,一台机器倒下了,其它机器应继续保持系统正常运作。
容错是很重要的一个要求。

系统规模大了以后,很容易出现“异构”的情况,如原有模块MySQL表引擎是MyISAM的,是不支持事务的,而新上的模块又采用了InnoDB表引擎,在这种情况下,DAL应能对原有模块进行优雅降级。
即:一个系统支持多种数据库,来实现数据库层的迁移,升级等。

失败恢复也是要考虑的,失败后,需要把失败前驻留在内存中的消息找回来。

另外,DAL本身也在快速的迭代当中,升级是很经常的事,应能进行在线热升级(不重启原有服务)。

3、良好的性能。

对于根据id来取进行的查询,在缓存命中的情况下,应该达到和Memcached不相上下的读取速度。
在缓存不命中的情况下,则应该充分利用分库分表和并行计算的优势,最大化地提高查询的效率。
对于修改型查询,挂在上面的监听器,不应该影响性能。

4、易于编程。

需要设计一套简单好用的API便于应用程序的开发
API必须是自完备的应用开发者不需要太费力就能记住的。
应用开发人员不再关心分库分表问题,不再关心缓存问题,特别是缓存清除问题。
甚至不再关心后端的数据库是MySQL,还是Oracle,或者是其它。

5、可定制、可扩展、可维护的架构设计。

像连接池组件、缓存组件、查询分析组件、消息队列组件、通讯协议等等不应该写死,应设计成可方便定制的。
还应该提供足够的钩子用于扩展。
只有这样,DAL 的架构才是灵活的、拥抱变化的。
简单说,我们定的是机制,提供的是策略,机制是软件目标和宗旨的体现,一般是不能轻易改变的,而策略则应当是能比较简单地进行切换的。

分布式系统数据应用

传统银行使用的高端硬件资源和商业数据库,单机的性能和稳定性肯定占有绝对的优势。
互联网分布式架构,则需要从架构设计上做文章,提高系统整体的并发处理能力和容灾能力,其中容灾能力又主要有两个指标:

RTO,Recovery Time Objective,恢复时间目标。
表示能容忍的从故障发生到系统恢复正常运转的时间,这个时间越短,容灾要求越高。

RPO,Recovery Point Objective,数据恢复点目标。
表示能容忍故障造成过去多长时间的数据丢失,RPO 为 0 表示不允许数据丢失。

分布式领域 CAP 理论告诉我们,一致性、可用性、分区容忍性三者无法同时满足。
我们不要奢望寻找能解决所有问题的万能方案,而应该根据不同的场景作出取舍。
虽然业务场景五花八门,但是根据实际经验,往往可以归到有限的几种模式中,处理策略也是相对固定的。

我们抽象一个简化的支付系统模型来帮助理解,为了叙述方便,不一定跟支付宝的实际业务情况完全一致。
它采用 SOA 架构,主要划分了交易、账务、用户、运营支撑这几个子系统,各自有各自的数据库。
另外还有一个全局的配置库,存放一些会被各处用到的配置数据。

这几个子系统涵盖了几种常见的模式,先简要介绍它们的主要业务:

账务:金融/支付系统中最核心的业务,简化后姑且认为只保存每个账户的余额,主要操作是增减余额。
它的特点是要求数据强一致,每一次对余额的增减必须基于一个绝对正确的当前值,否则就会造成资损。

交易:负责记录每笔交易的状态和上下文。
在电商系统中,它可能是商品订单;在银行系统中可能是转账流水。
交易类的数据有生命周期,可能有创建、付款、发货、确认收货、退款等状态变迁。
这些都不重要,重要的是它的业务特点:每一笔交易的创建是独立的,不需要依赖其他交易的数据;推进一笔交易状态的时候,要求这条数据是强一致的,但跟其他交易数据无关。

用户:维护用户的用户名、密码、邮箱、手机等非账务信息,提供注册、登录、查询业务。
在执行核心业务的时候,有多处需要读用户的基本信息,关键业务链路对其有读强依赖。

运营支撑:供内部工作人员用的后台系统,包括但不限于工作流、客服等功能。

配置数据:这里是个宽泛的说法,笼统地表示各类变更不频繁,但是在主业务流程中需要频繁读取的数据,例如交易类目、机构代码、汇率。
它们实际可能是散在各个业务系统中的,为了方便描述,单独用一个配置数据库来表示。

把数据库按业务模块进行拆分,是典型的垂直扩展思路,突破了单库的能力限制,使得系统可以支撑更多的业务量。
当然这也引入了分布式事务的问题,另有专题介绍暂且不表。
拆分开后,就方便不同的业务采取不同的架构设计了。

相信随着技术的发展,分布式系统将会在越来越多的领域得到进一步的应用,从而提高服务器处理任务的能力,进一步提高分布式作业系统的性能。

相关文章

语言中的借用,文化交融的桥梁

自古以来,人类社会的交流与发展离不开语言的传播。在漫长的历史长河中,各民族、各地区之间的文化相互碰撞、交融,产生了许多独特的语言现...

软件开发 2025-01-01 阅读1 评论0

机顶盒协议,守护数字生活的新卫士

随着科技的飞速发展,数字家庭逐渐走进千家万户。在这个时代,机顶盒成为了连接我们与丰富多彩的数字世界的重要桥梁。而机顶盒协议,作为保...

软件开发 2025-01-01 阅读1 评论0

语言基础在现代社会的重要性及方法步骤

语言是人类沟通的桥梁,是社会发展的基础。语言基础作为语言学习的基石,对于个人、社会乃至国家的发展具有重要意义。本文将从语言基础在现...

软件开发 2025-01-01 阅读2 评论0

粤语电影,传承文化,点亮时代之光

粤语电影,作为中国电影产业的一朵奇葩,以其独特的地域特色、丰富的文化内涵和鲜明的艺术风格,赢得了广大观众的喜爱。本文将从粤语电影的...

软件开发 2025-01-01 阅读3 评论0

苹果游戏语言,塑造未来娱乐体验的基石

随着科技的飞速发展,游戏产业逐渐成为全球娱乐市场的重要支柱。在我国,游戏产业更是蓬勃发展,吸引了无数玩家和投资者的目光。而在这其中...

软件开发 2025-01-01 阅读1 评论0