课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
无论是微服务架构开发还是分布式开发都属于目前互联网时代环境下的主流编程开发形式,下面我们就一起来了解一下,分布式编程开发在不同组件上的选择方法,
企业一旦采用分布式架构和微服务技术体系,在设计时需要关注商业模式、业务边界、数据体系、微服务设计、前台交互以及多活容灾等多领域的协同。
1、数据是本难念的经
分布式架构下数据面临的问题远比集中式架构复杂。诸如:分布式数据库的选型、数据的分库和分表、数据的同步与异步、跨库和联表查询、数据的分布与集中、在线业务数据与统计分析数据的协同、集中式数据库向分布式数据库的迁移以及面向场景的集中数据复制等。
(1)分布式数据库的选择
从集中式架构向分布式架构转型,一步就需要考虑选择什么样的分布式数据库。
为解决交易型分布式数据库的横向计算能力,目前主要有三种类型的分布式数据库:一体化交易型分布式数据库方案(如阿里 OceanBase 和华为高斯数据库,多采用 Paxos 协议实现多副本数据一致)、单机交易数据库加数据库中间件方案(如腾讯 TDSQL 和 TBase 等,多采用数据同步实现多副本数据一致)和单机交易数据库加分库基础类库(如 ShardingSphere 等,主要实现数据路由和归集)方案。三者的使用场景基本相同,都是通过对大表数据作水平切分,业务请求动态路由到指定节点,以此达到计算能力的线性扩展。一体化方案是以数据库和中间件一体化产品的形式解决线性扩展问题,支持多副本,高可用,提供统一的运维界面。 数据库中间件方案是以独立数据库中间件结合集中式数据库的方式来解决线性扩展问题,高可用功能由中间件和数据库自身功能分别保证。分库基础类库方案是一种类似中间件的轻量级解决方案,适合简单快速的交易操作,在强一致性和聚合分析查询方面较弱。
(2)数据的分库和分库主键
选择完分布式数据库后,二步就需要考虑如何按照领域模型和微服务进行数据库的分库设计,选择合适的分库主键将是一个关键技术点。
对于与客户接触的业务领域,个人认为可以以客户维度作为数据分库主键,以客户为实体,确保所有与本客户接触和服务的数据都在一个单元内,通过集中共享的中台服务,为所有渠道的客户提供一致性体验。如果后序管理流程需要基于区域管理要求,也可以考虑在后序业务环节的数据库中以区域维度作为数据库分库主键,满足业务基于区域的管理要求。
如何将客户维度的数据传输到以区域为维度的数据库中?我们可以考虑基于消息队列的事件驱动模型。
系统如果做不到“以客户为中心”,又如何能实现“以客户为中心”的业务需求呢?
(3)高频热点数据的缓存
对于像产品基础数据、主数据之类的热点高频访问数据,在进行系统设计时需考虑将这些数据加载至缓存中,降低数据库的压力,对外提供高性能的数据访问能力。
缓存技术的使用就像调味料一样,投入小见效快,用户体验提升快。
(4)数据副本与跨库联表查询
采用分布式技术后,数据将碎片化,为了减轻由于跨库以及联表查询给分布式数据库的压力,需要建立多维的全局数据视图(如客户统一视图、业务统计数据视图等)和面向具体场景的预处理好的数据聚合副本,提供复杂场景的数据查询服务,减轻交易型数据库的压力。
全局数据视图其数据来源于各业务条线的分布式数据库,从源端分布式数据库通过准实时的方式汇集(可以基于数据库日志捕获技术加消息队列)。全局视图的数据库也可以是分布式数据库,根据业务要求选择合适的分库主键进行数据重分布。
对于分布式数据库跨库关联查询性能低的问题,有两种解决方案,根据具体场景采用合适的方案:
1)面向场景的数据副本查询库。将这些需要关联查询的数据副本集中存放在一个分布式数据库中。在进行数据汇集时,提前做好数据关联处理(如多表数据合并成一个宽表),通过查询微服务,专职提供关联查询服务。
2)小表广播模式。有些业务场景中少量表(如用户、机构表等)需要跟业务数据进行关联查询,这种场景可以考虑在业务数据库中新建一张复制表(无需全部字段,取必要字段即可),在主表发生变化时,可以通过发布订阅的消息队列模式刷新复制表的数据,保证数据的一致性。
(5)合理的数据冗余
完成领域模型和微服务设计后,集中式数据库的数据将被分散到不同微服务的分布式数据库中。数据实体的依赖关系将被打破,如果需要调用前序或后序微服务的数据实体(如:投保微服务生成的投保单、保单管理微服务的保单需要关联投保单,理赔的报案需要关联保单等,或电商业务中:销售过程中的商品、运输过程中的货物需要关联商品信息),这时候就会跨库或者跨微服务调用了,必然影响系统性能。
如何处理这些跨微服务的关键实体数据?
好的方式就是数据冗余,将前序或后序环节的关键数据以数据清单复制表(只需必要的关键数据,不需要所有明细数据)的方式冗余存储。冗余的好处是,前台页面可以一次性获取本领域实体数据和关联实体清单数据,同时也可以在本库对关联清单数据进行查询。只有在需要获取关联实体数据明细时,才调用前序或后续微服务获取全量数据。
合理的数据冗余可以减少跨库查询,提升系统性能。
(6)如何数据迁移?
从集中式数据库向分布式数据库切换时,数据迁移的复杂度将大大增加。需要考虑如何进行数据迁移?现有技术条件下,是不是不做数据迁移也可以无缝切换?
传统集中式架构数据多集中在一个集中式数据库中,数据关联度高。
分布式架构下,数据会随着微服务而同步拆分,数据将变得碎片化,存在复制表,数据重分布,数据关联被打破,甚至还可能需要重建数据关联。另外,分布式架构的容灾和多中心多活要求,数据迁移时还需要考虑数据的多副本和多中心的数据复制。分布式架构下数据迁移的复杂度大增。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!