20 | 总结(二):分布式架构关键设计10问
20 | 总结(二):分布式架构关键设计10问
讲述:欧创新
时长19:10大小13.15M
一、选择什么样的分布式数据库?
1. 一体化分布式数据库方案
2. 集中式数据库 + 数据库中间件方案
3. 集中式数据库 + 分库类库方案
二、如何设计数据库分库主键?
三、数据库的数据同步和复制
四、跨库关联查询如何处理?
五、如何处理高频热点数据?
六、前后序业务数据的处理
七、数据中台与企业级数据集成
八、BFF 与企业级业务编排和协同
九、分布式事务还是事件驱动机制?
十、多中心多活的设计
总结
思考题
赞 20
提建议
精选留言(24)
- 狮锅艺2020-03-18学完欧老师的DDD实战,在具体项目中战略设计和战术设计完成后,可以看看 https://microservices.io/ 这个网站,很多微服务开发部署的细节都有讲解。共 8 条评论29
- OpenMind2020-03-12请问小表广播是什么意思?是把分布在不同库中需要连表的叫小的表在每个与他关联查询表所在的库中冗余一份吗?比如订单表和客户信息表分布在不同库内需要连表查询,客户信息表数据少,小表广播就是在订单表所在的库中冗余一份客户信息表?
作者回复: 是的。
9 - Geek_88604f2020-03-06老师,单元化架构中,发生故障的那个单元是如何做故障恢复的?
作者回复: 因为单元数据在其他数据中心是有多副本的,通过云计算平台可以很快的扩展出单元新的应用节点,启用新单元后,前端接入路由完成切换就可以实现多活了。带故障解除就可以重新切回原来的单元
8 - 钱晟龙🐲龍🐉2020-02-27领域事件驱动的异步方式是分布式架构常用的设计方法,它可以解决非实时场景的数据最终一致性问题。基于消息中间件的领域事件发布和订阅,可以很好地解耦微服务。通过削峰填谷,可以减轻数据库实时访问压力,提高业务吞吐量和处理能力。你还可以通过事件驱动实现读写分离,提高数据库访问性能。对最终一致性的场景,我建议你采用领域事件驱动的设计方法。 你还可以通过事件驱动实现读写分离,提高数据库访问性能,老师这个是啥意思??没看懂。。展开
作者回复: 有一些数据的写和改是在一个地方,当这些数据修改后,可以通过事件驱动的方式,将修改后的数据异步到读服务。通过这种读写分离的设计,可以提高数据库的查询性能。
共 2 条评论4 - 南山2019-11-30一直尝试着建立自己的知识体系,分布式的经典问题是很重要的一环,今天看老师的这篇也有些新的收获补充进去,比如OceanBase,听过大名,但是不知道是多副本机制实现的分布式数据库。
作者回复: PAXOS协议的数据库还是很强大的。
2 - 深山小书童2019-11-29这么课程就只看这两篇总结就值回票价了!前两天刚刚碰到老师说的前后序实体关联问题,也是按照领域事件来冗余实体的。
作者回复: 谢谢,这里面有我的很多总结和思考。
2 - Eternal2020-11-22BFF感觉和微前端得抽象一样,不知对不对?
作者回复: 两者还是有比较大的差异的。BFF位于微服务与前端之间,它的主要职能是组合和编排多个微服务的API形成新的粗粒度的服务,然后供前端调用。微前端与微服务类似,也就是将前端微服务化,解决单体前端臃肿和集成复杂度的问题。
1 - 李亮亮2022-12-17 来自上海上tidb
- killer2022-09-12 来自上海BFF层和新增一个微服务聚合层有什么区别?
- 徐李2021-12-22这里的分布式架构设计也是中大型公司才有机会遇到的吧,小公司不管是业务体量还是数据都没有这个必要。老师罗列的这10点,每一点单列出来都是很大的一个工程。 就算不用DDD,只要你是微服务的架构设计,当然前提是集群环境,那么肯定就会遇到这些一致性的问题,事务的问题,性能的问题。
- 小邦plus2021-12-09你可以在货物运输微服务,一次获取前序订单的清单数据和货物运输单数据,将所有数据一次反馈给前端应用,降低跨微服务的调用。如果前序数据被设计为实体,你还可以将前序数据作为查询条件,在本地微服务完成多维度的综合数据查询。 老师还在看留言吗?前序实体关联这段不是很理解,可以解答一下吗
- 花生2021-08-30老师,有两个问题,一、对于第二类场景,对于不在同一个数据库的表与表之间的关联查询场景,你可以采用小表广播。您的意思是在每个数据库都建机构和业务表,有变化就异步更新吗。二、这一章分布式架构的问题,能否推荐一些书籍。
- 王志2020-12-31老师:我看你直接在foreach里面调用数据库查询操作,有什么原因吗?这样会导致查询很慢
- Hello.World.唐 2020-09-23老师好,在实际的环境中,当多个服务共享数据(非数据字典类的数据)时,目前采用的是冗余表,即将共享数据信息冗余到部分业务数据里面,避免过渡查询和服务调用。这样会有一个问题,当共享的源数据发生改变后,如何更好的通知更改其他服务中冗余的数据。或者有没有更好的方式来处理谢谢业务上的冗余数据
作者回复: 你可以通过消息中间件,采用领域事件驱动的机制,当源端共享数据发生变化时,可以通过发布订阅机制修改目的端多个共享的冗余数据。
共 3 条评论 - 熊猫大侠2020-02-12前提:BFF层调用多个微服务,BFF主要职责是做服务聚合,流程的编排给前端 页面提供服务。像一些前端的页面逻辑,比如文案的处理,数据的筛选,BFF是否应该有领域服务层在处理这些逻辑,BFF是否应该有领域服务?这些逻辑通常在微服务不愿意做的 。
作者回复: BFF里面没有领域服务的,它的功能与应用层的功能比较接近。它主要处理企业级的跨微服务的服务编排。
共 3 条评论 - silentyears2020-02-04老师好,请问: 1、第四点“在业务库中增加冗余的代码副表,当主表数据变化,通过消息发布和事件驱动,异步刷新所有副表数据”具体怎么理解,难道要在微服务业务库A中增加B的冗余数据存储,比方说订单库中增加冗余副表存储客户库中的客户信息? 2、第四点介绍的两种场景的解决方式和CORS这种技术方案有何关系? 谢谢展开
作者回复: 1、是的,增加了副表后,就不需要跨微服务调用了,而且微服务内部可以实现跨表查询,这样就解决了,微服务拆分后的数据联表查询的问题。 2、第一种场景实际上就是读写分离的方式,有一部分分散在不同微服务的数据,在进行数据归集后,就可以统一对外提供查询服务。第二种是小表广播的模式,主要解决少量数据的联表查询的问题。
- YEROM2020-01-20BFF有没有更深入的一些资料可以参考的?
作者回复: 网上有不少,搜BFF就可以了。每日一课里杨波有讲过。
共 2 条评论 - 胡鹏2020-01-10实战篇还得一边实践一遍反复观看才行, 直接看的话, 容易一眼就过去了而不知所云
作者回复: 真的,是这样的。
- quietwater2020-01-01干货满满,任重道远。
- krugle2019-11-30微服务 服务要做拆分 我们做电商saas的 比如商品服务 要不要区分商城和管理后台的商品服务
作者回复: 你可以通过领域建模找出实体和聚合,来划分限界上下文。建议你的边界划分和设计从领域建模开始。建立领域模型后大概就知道边界在哪里了。
共 3 条评论