概述
BFF 微服务-前端与中台的解耦合
企业级业务流程往往是多个微服务一起协作完成的,每个单一职责的微服务就像积木块,它
们只完成自己特定的功能。那如何组织这些微服务,完成企业级业务编排和协同呢?你可以在微服务和前端应用之间,增加一层 BFF 微服务(Backend for Frontends)。
BFF主要职责是处理微服务之间的服务组合和编排,微服务内的应用服务也是处理服务的组合和编排,那这二者有什么差异呢?
BFF 位于中台微服务之上,主要职责是微服务之间的服务协调;应用服务主要处理微服务内
的服务组合和编排。在设计时我们应尽可能地将可复用的服务能力往下层沉淀,在实现能力
复用的同时,还可以避免跨中心的服务调用。BFF 像齿轮一样,来适配前端应用与微服务之间的步调。它通过 Façade 服务适配不同的前端,通过服务组合和编排,组织和协调微服务。BFF 微服务可根据需求和流程变化,与前端应用版本协同发布,避免中台微服务为适配前端需求的变化,而频繁地修改和发布版本,从而保证微服务核心领域逻辑的稳定。如果你的 BFF 做得足够强大,它就是一个集成了不同中台微服务能力、面向多渠道应用的业务能力平台。
分布式事务还是事件驱动机制?
分布式架构下,原来单体的内部调用,会变成分布式调用。如果一个操作涉及多个微服务的
数据修改,就会产生数据一致性的问题。数据一致性有强一致性和最终一致性两种,它们实
现方案不一样,实施代价也不一样。
对于实时性要求高的强一致性业务场景,你可以采用分布式事务,但分布式事务有性能代
价,在设计时我们需平衡考虑业务拆分、数据一致性、性能和实现的复杂度,尽量避免分布
式事务的产生。
领域事件驱动的异步方式是分布式架构常用的设计方法,它可以解决非实时场景的数据最终
一致性问题。基于消息中间件的领域事件发布和订阅,可以很好地解耦微服务。通过削峰填
谷,可以减轻数据库实时访问压力,提高业务吞吐量和处理能力。你还可以通过事件驱动实
现读写分离,提高数据库访问性能。对最终一致性的场景,我建议你采用领域事件驱动的设
计方法。
多中心多活的设计
分布式架构的高可用主要通过多活设计来实现,多中心多活是一个非常复杂的工程,下面我
主要列出以下几个关键的设计。
1. 选择合适的分布式数据库。数据库应该支持多数据中心部署,满足数据多副本以及数据
底层复制和同步技术要求,以及数据恢复的时效性要求。
2. 单元化架构设计。将若干个应用组成的业务单元作为部署的基本单位,实现同城和异地
多活部署,以及跨中心弹性扩容。各单元业务功能自包含,所有业务流程都可在本单元完
成;任意单元的数据在多个数据中心有副本,不会因故障而造成数据丢失;任何单元故障不
影响其它同类单元的正常运行。单元化设计时我们要尽量避免跨数据中心和单元的调用。
单元化架构一般运用于大型saas企业中。
3. 访问路由。访问路由包括接入层、应用层和数据层的路由,确保前端访问能够按照路由
准确到达数据中心和业务单元,准确写入或获取业务数据所在的数据库。
4. 全局配置数据管理。实现各数据中心全局配置数据的统一管理,每个数据中心全局配置
数据实时同步,保证数据的一致性
最后
以上就是细心刺猬为你收集整理的架构设计导论多中心多活的设计的全部内容,希望文章能够帮你解决架构设计导论多中心多活的设计所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复