微服务,分层设计与领域驱动设计(DDD)?

当系统越来越复杂的时候,怎么将一个庞大的系统拆分成一个微服务,让后端服务能更好的迭代是一个架构师必须要具备的能力。

微服怎么拆,最经典的就是分层设计了。分层架构如此经典,以至于成为我们每个程序员的标配了。随着服务的更加复杂,基于领域的设计就显得更加有必要了,这个时候分层设计和领域设计该怎么权衡?

其实准确的说,分层设计和领域设计不在一个维度,没有必然的联系。但是在领域驱动设计中也有分层的思想。

画外音:小孩子才做选择,成年人都要!

分层设计

对于大部分互联网公司来说,后端架构分为三层:网关层、业务逻辑层、数据访问层。

微服务,分层设计与领域驱动设计(DDD)?_第1张图片

(1)网关层:负责提供对外的HTTP服务或者其他应用服务。

(2)业务逻辑层:负责处理核心业务逻辑,

(3)数据访问层:负责对数据库的增删改查,对业务逻辑屏蔽底层存储介质。

随着业务的复杂度增加,必然带来技术的复杂度增加。但是引起技术实现变化的原因与引起业务逻辑发生变化的原因显然不同,这就导致架构上对于基础设施(技术)和领域逻辑(业务)会以不同的速率发生变化。技术复杂性和领域复杂性的分离就是一种解决办法了。

画外音:架构的单一职责原则,拆!

领域驱动设计的经典分层

目前似乎没有一家公司真正严格按照DDD进行项目代码设计。根据DDD理论,领域建模主要发生在领域服务层,各领域模块都应该是高内聚低耦合的,具有清晰的业务边界。领域驱动设计在经典三层架构的基础上做了进一步改良。

微服务,分层设计与领域驱动设计(DDD)?_第2张图片

(1)应用层:很薄的一层,用来协调应用的活动,它不包含业务逻辑,它不保留业务对象的状态,但它保有应用任务的进度状态。

(2)领域层:包含关于领域的信息,这是业务软件的核心所在。

(3)基础设施层:作为其他层的支撑。它提供了层间的通信,实现对业务对象的持久化。

举个例子:

微服务,分层设计与领域驱动设计(DDD)?_第3张图片

通过不同的业务领域,将交易拆分成订单、支付、物流等专业领域。通过统一的应用层实现不同的功能组合给不同的业务场景进行赋能了。

总结:

(1)领域设计一定要有清晰的功能边界

(2)领域拆分并不是一步到位的,应当根据实际情况逐步展开

(3)领域拆分并不是一成不变的,应当具体情况具体分析

任何脱离业务的架构设计都是耍流氓

福利来了!!!

免费直播,深度剖析企业级“三高”场景下微服务架构设计思维与实践。

事件:“三高”场景下的微服务架构设计

人物:奈学教育创始人CEO,孙玄

时间:9月8日20:00(今天晚8点)

分享提纲是什么?

DAY1(9.08)

(1)领域驱动(DDD)在企业级微服务架构中的拆分方法论

(2)企业级微服务架构实践方法论

(3)企业级微服务架构同步/异步业务场景案例剖析

DAY2(9.09)

(1)企业级微服务架构高可用设计与实践

(2)企业级微服务架构广义负载均衡设计与实践(负载均衡、熔断、服务故障发现、故障恢复等)

(3)企业级微服务架构高并发设计与实践

DAY3(9.10)

(1)新浪微博三高业务场景综合案例

(2)优秀架构师的快速晋升之路

(3)解密百万架构师精品课程的故事以及价值

如何参加免费训练营,领取课程资料?

微服务,分层设计与领域驱动设计(DDD)?_第4张图片

扫码获取直播地址,免费领资料

祝大家在P8之路上前行,阅读原文,福利等你。

你可能感兴趣的:(java,编程语言,数据库,分布式,大数据)