巧妙构建单体模式和微服务模式的双模架构

本文探讨了在应用系统设计中如何通过双模架构实现单体模式和微服务模式的切换,提出将应用拆分为独立模块,利用接口编程和Maven管理代码,实现在本地开发时选择单体模式,线上部署时采用微服务模式,以适应项目需求的变化。
摘要由CSDN通过智能技术生成

前言

我们在做应用系统架构设计的时候,经常会遇到一个问题,是使用单体架构模式,还是使用微服务架构模式?这是两种最常见的软件架构方式,他们各有优劣势。

有时候我们在项目设计初期,因为信息不准确或思路不完善,不得不进行二选一,而项目到了后期,发现设计不能满足项目需要的时候,再去转变架构模式,则需要付出巨大代价。

两种架构模式介绍

简单介绍下两种架构模式的优劣势。

1、单体模式:在单体模式中,整个应用被构建为一个单一的、统一部署的单元。所有的功能模块都打包在一起,共享同一个代码库、数据存储和资源。单体应用通常由多个层组成,如用户界面层、业务逻辑层和数据访问层等。优点包括开发简单、部署方便、调试容易等。但是,随着应用的规模不断增大,单体模式可能会面临代码耦合度高、扩展性差、部署和维护困难等问题。

2、微服务模式:微服务模式是一种将应用拆分成多个小型、独立部署的服务的架构设计方式。每个服务都可以独立开发、部署和扩展,服务之间通过轻量级的通信机制(如HTTP、消息队列等)进行通信。微服务架构的优点包括服务之间解耦、各服务可独立扩展、技术栈灵活等。但是,微服务架构也增加了系统的复杂性,需要额外考虑服务发现、负载均衡、监控等方面。

双模架构思路

应用系统如何实现一种既能支持单体模式、也能支持微服务模式的双模架构呢?笔者基于自己的实战经验,提供一个思路,供大家参考。

1、我们可以将应用系统拆分成多个小型的、独立的模块,按照微服务的思维方式去进行开发,每个模块的拆分粒度,可以根据项目情况自己把握,个人建议,粒度不需要太细。

2、我们使用maven进行工程代码结构的管理,每个模块都是一个独立的maven工程。模块内可以拆分成多个包,包含controller层的包、entity层的包、service+dao层的包。

3、模块与模块之间的调用,不要直接使用maven配置的方式将被调用模块service包引入当前模块,而是要在被调用模块内,定义一个api接口包,将api接口包引入当前模块的maven配置,然后使用被调用的api接口进行编程。注意,这里只引用api接口,不引用接口的实现类。

4、api接口包需要实现类,我们再定义两个包作为api接口的实现包,一个叫做 local 本地实现包,一个叫做 remote 远程实现包。local包引入模块的service包,基于service接口进行实现;remote包不引入模块的任何包,基于服务调用的方式,调用模块的controller服务进行实现。

5、构建单体启动工程,与微服务模式不同,工程的启动类和工程启动的配置文件,不直接在模块的代码中编写,而是独立出来。编写启动类和单体配置文件,基于maven配置,把所有模块的controller包、service+dao的包都引入进来,把用到的api接口的 local 本地实现包也引入进来,实现单体模式。

6、每个模块单独构建微服务启动工程,编写启动类和微服务配置文件、实现nacos注册、发现等微服务功能,每个模块分别引入模块的controller包、service+dao的包,把用到的api接口的 remote 远程实现包也引入进来,实现微服务模式。

双模架构示意图

下面是一个调用关系示意图,供参考。

总结

这样的架构模式,通过面向接口编程,我们开发一套代码,基于maven管理代码结构的方式,即可以组装单体模式的启动工程、也可以组装微服务模式的启动工程,而无需改动任何业务代码。当我们本地开发时,为了节省资源,可以使用单体模式,线上部署时,则直接按照微服务模式进行部署即可。无论项目需求如何变化,我们都能灵活应对。

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值