DDD 实战课
欧创新
人保资深架构师
55517 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 26 讲
开篇词 (1讲)
DDD 实战课
15
15
1.0x
00:00/00:00
登录|注册

20 | 总结(二):分布式架构关键设计10问

十、多中心多活的设计
九、分布式事务还是事件驱动机制?
八、BFF与企业级业务编排和协同
七、数据中台与企业级数据集成
六、前后序业务数据的处理
五、如何处理高频热点数据?
四、跨库关联查询如何处理?
三、数据库的数据同步和复制
二、如何设计数据库分库主键?
一、选择什么样的分布式数据库?
分布式架构关键设计10问

该思维导图由 AI 生成,仅供参考

你好,我是欧创新。
前面我们重点讲述了领域建模、微服务设计和前端设计方法,它们组合在一起就可以形成中台建设的整体解决方案。而中台大多基于分布式微服务架构,这种企业级的数字化转型有很多地方值得我们关注和思考。
我们不仅要关注企业商业模式、业务边界以及前中台的融合,还要关注数据技术体系、微服务设计、多活等多领域的设计和协同。结合实施经验和思考,今天我们就来聊聊分布式架构下的几个关键问题。

一、选择什么样的分布式数据库?

分布式架构下的数据应用场景远比集中式架构复杂,会产生很多数据相关的问题。谈到数据,首先就是要选择合适的分布式数据库。
分布式数据库大多采用数据多副本的方式,实现数据访问的高性能、多活和容灾。目前主要有三种不同的分布式数据库解决方案。它们的主要差异是数据多副本的处理方式和数据库中间件。

1. 一体化分布式数据库方案

它支持数据多副本、高可用。多采用 Paxos 协议,一次写入多数据副本,多数副本写入成功即算成功。代表产品是 OceanBase 和高斯数据库。

2. 集中式数据库 + 数据库中间件方案

它是集中式数据库与数据库中间件结合的方案,通过数据库中间件实现数据路由和全局数据管理。数据库中间件和数据库独立部署,采用数据库自身的同步机制实现主副本数据的一致性。集中式数据库主要有 MySQL 和 PostgreSQL 数据库,基于这两种数据库衍生出了很多的解决方案,比如开源数据库中间件 MyCat+MySQL 方案,TBase(基于 PostgreSQL,但做了比较大的封装和改动)等方案。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

分布式架构设计是企业数字化转型中的关键环节,本文总结了分布式架构下的关键设计问题。首先,选择合适的分布式数据库方案至关重要,包括一体化分布式数据库方案、集中式数据库+数据库中间件方案和集中式数据库+分库类库方案。其次,设计数据库分库主键时应考虑业务需求,如以客户ID作为分库主键,以确保数据分布在同一数据单元内。此外,数据库的数据同步和复制、跨库关联查询处理、高频热点数据处理以及前后序业务数据处理也是关键问题。文章提出了解决方案,如采用数据库日志捕获技术实现准实时数据汇集、采用小表广播解决表与表的关联查询、将前序数据通过领域事件实体传输并冗余到当前微服务数据库中等。这些解决方案有助于提高系统性能、降低数据库压力,为读者提供了有益的技术指导。 在分布式架构设计时,还涉及数据中台与企业级数据集成、BFF与企业级业务编排和协同、分布式事务还是事件驱动机制以及多中心多活的设计等关键领域。这些领域都是复杂的系统工程,需要综合考虑技术组件和实施方案。最终,读者需要结合自身情况来选择合适的技术组件和实施方案。整体而言,本文提供了全面的分布式架构设计指南,涵盖了关键问题和解决方案,对于正在进行分布式架构设计的读者具有重要的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《DDD 实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(25)

  • 最新
  • 精选
  • OpenMind
    请问小表广播是什么意思?是把分布在不同库中需要连表的叫小的表在每个与他关联查询表所在的库中冗余一份吗?比如订单表和客户信息表分布在不同库内需要连表查询,客户信息表数据少,小表广播就是在订单表所在的库中冗余一份客户信息表?

    作者回复: 是的。

    2020-03-12
    9
  • Geek_88604f
    老师,单元化架构中,发生故障的那个单元是如何做故障恢复的?

    作者回复: 因为单元数据在其他数据中心是有多副本的,通过云计算平台可以很快的扩展出单元新的应用节点,启用新单元后,前端接入路由完成切换就可以实现多活了。带故障解除就可以重新切回原来的单元

    2020-03-06
    8
  • 钱晟龙🐲龍🐉
    领域事件驱动的异步方式是分布式架构常用的设计方法,它可以解决非实时场景的数据最终一致性问题。基于消息中间件的领域事件发布和订阅,可以很好地解耦微服务。通过削峰填谷,可以减轻数据库实时访问压力,提高业务吞吐量和处理能力。你还可以通过事件驱动实现读写分离,提高数据库访问性能。对最终一致性的场景,我建议你采用领域事件驱动的设计方法。 你还可以通过事件驱动实现读写分离,提高数据库访问性能,老师这个是啥意思??没看懂。。

    作者回复: 有一些数据的写和改是在一个地方,当这些数据修改后,可以通过事件驱动的方式,将修改后的数据异步到读服务。通过这种读写分离的设计,可以提高数据库的查询性能。

    2020-02-27
    2
    4
  • 南山
    一直尝试着建立自己的知识体系,分布式的经典问题是很重要的一环,今天看老师的这篇也有些新的收获补充进去,比如OceanBase,听过大名,但是不知道是多副本机制实现的分布式数据库。

    作者回复: PAXOS协议的数据库还是很强大的。

    2019-11-30
    2
  • 深山小书童
    这么课程就只看这两篇总结就值回票价了!前两天刚刚碰到老师说的前后序实体关联问题,也是按照领域事件来冗余实体的。

    作者回复: 谢谢,这里面有我的很多总结和思考。

    2019-11-29
    2
  • Eternal
    BFF感觉和微前端得抽象一样,不知对不对?

    作者回复: 两者还是有比较大的差异的。BFF位于微服务与前端之间,它的主要职能是组合和编排多个微服务的API形成新的粗粒度的服务,然后供前端调用。微前端与微服务类似,也就是将前端微服务化,解决单体前端臃肿和集成复杂度的问题。

    2020-11-22
    1
  • Hello.World.唐 
    老师好,在实际的环境中,当多个服务共享数据(非数据字典类的数据)时,目前采用的是冗余表,即将共享数据信息冗余到部分业务数据里面,避免过渡查询和服务调用。这样会有一个问题,当共享的源数据发生改变后,如何更好的通知更改其他服务中冗余的数据。或者有没有更好的方式来处理谢谢业务上的冗余数据

    作者回复: 你可以通过消息中间件,采用领域事件驱动的机制,当源端共享数据发生变化时,可以通过发布订阅机制修改目的端多个共享的冗余数据。

    2020-09-23
    3
  • 熊猫大侠
    前提:BFF层调用多个微服务,BFF主要职责是做服务聚合,流程的编排给前端 页面提供服务。像一些前端的页面逻辑,比如文案的处理,数据的筛选,BFF是否应该有领域服务层在处理这些逻辑,BFF是否应该有领域服务?这些逻辑通常在微服务不愿意做的 。

    作者回复: BFF里面没有领域服务的,它的功能与应用层的功能比较接近。它主要处理企业级的跨微服务的服务编排。

    2020-02-12
    3
  • silentyears
    老师好,请问: 1、第四点“在业务库中增加冗余的代码副表,当主表数据变化,通过消息发布和事件驱动,异步刷新所有副表数据”具体怎么理解,难道要在微服务业务库A中增加B的冗余数据存储,比方说订单库中增加冗余副表存储客户库中的客户信息? 2、第四点介绍的两种场景的解决方式和CORS这种技术方案有何关系? 谢谢

    作者回复: 1、是的,增加了副表后,就不需要跨微服务调用了,而且微服务内部可以实现跨表查询,这样就解决了,微服务拆分后的数据联表查询的问题。 2、第一种场景实际上就是读写分离的方式,有一部分分散在不同微服务的数据,在进行数据归集后,就可以统一对外提供查询服务。第二种是小表广播的模式,主要解决少量数据的联表查询的问题。

    2020-02-04
  • YEROM
    BFF有没有更深入的一些资料可以参考的?

    作者回复: 网上有不少,搜BFF就可以了。每日一课里杨波有讲过。

    2020-01-20
    2
收起评论
大纲
固定大纲
一、选择什么样的分布式数据库?
1. 一体化分布式数据库方案
2. 集中式数据库 + 数据库中间件方案
显示
设置
留言
25
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部