第2章 模块拆分
2.1 拆分逻辑
2.2 单模块
2.3 基础模块
2.4 复杂模块
将完整地使用本地调用方式的垂直应用拆分成多个微小的服务,每个服务模块负责提供各自独立的服务接口,并通过网络调用的方式将各个服务模块组织起来形成完整的微服务系统。
这里介绍微服务架构中拆分模块的基本逻辑,更为完善的模块拆分可以基于领域驱动设计(Domain-Driven Design,DDD)进行。
2.1 拆分逻辑
模块拆分是分布式微服务实施时的困难之一,它将直接影响到系统的复杂度、团队协作、代码维护难度、硬件资源分配等方面。模块拆分得越细,则能够更灵活地分配硬件资源与更方便地进行团队协作,但这样也会增加系统复杂度与代码维护难度,在团队人数较少的情况下无疑增加了负担。拆分模块时需要以具体的业务需求与系统请求压力分布为出发点进行权衡取舍。
系统复杂度
业务的复杂性决定了被拆分的模块之间必然存在一定的依赖,模块被拆分得越细就意味着会产生更多的依赖关系,在拆分解耦的同时必然增加了整个系统的复杂度。
随着业务的丰富不可避免地使系统越来越复杂,我们没有办法拒绝复杂但应通过规范、约定、框架等手段尽量做到结构及代码的清晰与整洁。
团队协作
当垂直应用变得庞大且复杂需要更多的工程师维护时,一般会使用Maven的多模块依赖特性将单一的应用拆分成多个模块,每个模块分给不同的工程师维护,最终团队成员提交模块,根据依赖关系打包成一个应用发布。
微服务天生由多模块组成,各个模块交由具体的专人负责,团队之间通过模块所暴露的服务进行协作。拆分模块的同时也确定了团队协作的方式。</