数字化应用软件架构设计

企业的数字化转型最终需要通过一个个具体的项目来落地,这些项目大多需要通过实施数字化应用软件来实现数字化转型的业务目标。设计一个好的数字化应用软件架构是落地数字化应用的关键。数字化应用软件和一般软件架构设计方法是一致的。分层架构

分层架构是最常用的软件架构设计。事实上,软件的很多问题都可以增加一个抽象层来解决。一个软件需要分多少层,取决于具体的业务需求,非功能需求,技术水平等等,常用的四层架构模型如下:

分层架构

随着前后端分离设计思想的引入,通常我们会在客户端和业务逻层端之间增加API层。单体架构

虽然目前大家热议的是微服务架构,但对于很多数字化应用采用单体架构可能依然是首选,特别是对那些还没有足够的能力去驾驭微服务的团队来说更是如此。

对于单体架构,我们依然要采用分层的思想来设计,建议通过Client-API架构实现前后端分离。

单体架构

需要注意的是,即使采用单体应用架构,也需要按照领域驱动设计的思想合理设计业务领域模型。不同聚合之间的数据互操作通过调用聚合本地API的方式实现,不要直接访问另外一个聚合的数据库表。这样当业务持续增大,单体系统无法支撑业务而需要进行应用拆分的时候,可以按已经划分好的聚合拆分成不同的微服务,同时引进相对成熟的微服务框架(如Spring cloud),就可以相对容易的把单体架构转换成微服务架构。微服务架构

传统的单体应用(如ERP,CRM软件)随着业务的发展,软件变得越来越庞大,也越来越难以维护,导致应用难以满足业务推向市场的时间要求。而在数字化经济时代,业务快速推向市场成为首要任务,在加上容器技术的发展,微服务架构已成为开发数字应用的首选架构。

微服务是一种架构模式,旨在把一个复杂的单体应用拆分成多个小的应用(微服务),每个微服务可以独立部署、独立更新、独立替换,各个微服务之间是松耦合的,每个微服务都有明确的边界。从上述描述中,可以看出,要实现一个微服务架构,首先需要根据领域驱动设计的思想,合理划分业务领域聚合和实体。另外采用微服务架构,还需要考虑分布式应用部署所带来的问题:

1. 分布式系统的复杂性:微服务作为一种分布式系统,需要考虑网络时延,容错性,异步机制,分布式事务一致性等等问题

2. 可测试性挑战:一个业务功能,可能会由多个微服务来完成,这给测试带来很大的挑战。

3. 运维更加复杂:微服务架构的应用需要部署多个独立运行的服务,如何监控每个微服务的健康状况,微服务之间的调用链,都需要很好的考虑,否则微服务系统的线上运维将会是一个灾难。

下图是一个实现微服务架构的技术堆栈,对于每一层,可能会有不同的技术框架来实现,比如微服务框架有Spring Cloud和Service Mesh两种技术框架。

微服务架构技术栈示例事件驱动架构

对于大业务量的在线交易系统,有一个设计原则就是能异步的尽可能异步,避免客户端长时间等待服务端的响应。异步一般通过事件驱动架构来实现。对于采用微服务架构的软件应用,大多也会采用事件驱动架构来实现跨不同微服务之间的事务。事件驱动架构是通过事件进行通信的架构,当领域实体发生变化的时候,发出一个事件,事件生产者在发出事件后,会立即收到回复,而无需等待事件消费者的处理。对该事件关心的领域实体收到并处理该事件。

事件驱动架构数字化应用软件架构设计原则

架构一个数字化应用软件和架构任何一个软件一样,都需要遵循一般的软件架构设计原则:

1. 开闭原则

2. 单一职责原则

3. 接口隔离原则

4. 依赖倒置原则

5. 里氏替换原则

6. 迪米特原则

重温这些经典设计原则,有助于我们设计一个好的数字化应用软件架构。同时软件架构设计一定要围绕业务实际需求,要有一定的前瞻性,但要避免过度设计。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();