一、微服务设计原则
- 高内聚低耦合、职责单一:每个微服务模块职责单一独立,负责各自业务功能。微服务之间尽量减少调用,做到高内聚低耦合。
- 前后端分离:将前端和后端代码进行分离,包括开发分离,部署分离,代码存放分离。前端负责页面展示,后端负责业务数据处理。前端通过HTTP协议或者其他协议进行交互。
- 围绕业务拆分:微服务应该围绕业务进行拆分,每个微服务聚焦于一个特定的业务功能,在技术选型上比较灵活,不局限于某个固定的技术栈。
- 日志与监控:随着微服务系统不断升级演进,微服务数量剧增,系统出现故障的几率也在增大,需要考虑日志与监控的设计开发,提升系统可维护性。
- 先横向拆分再纵向拆分:先按照业务进行横向拆分,再把每个业务的不同模块或组件进行纵向拆分,实现服务分层。
二、命名规范
服务名唯一,在一个微服务系统中应用名不能重名。微服务按功能类别分为4大模块:
微服务 | 一个功能模块做成一个普通微服务,对系统业务功能的实现的微服务属于这一类。 |
interface | 对外提供接口,比如f1-interface-model是model的接口,其它微服务引入f1-interface-model就可以访问model中的功能。 |
starter | 用自动装配的方式在微服务启动时加载一些公共组件,比如f1-starter-data, 其他微服务引入f1-starter-data之后,就可以使用GenericDao的springbean操作数据库数据。 |
util | 经常用到的一些工具类库,比如f1-util。 |
2.1、服务命名
服务命名规范:
模块 | 规则 | 示例 |
前端服务 | [项目名]-[模块名]- [web]
| f1-model-web |
微服务 | [项目名]-[模块名]- [business]
| f1-model-business |
interface
| [项目名]-interface-[模块名]
| f1-interface-model |
starter | [项目名]-starter-[模块名] | f1-starter-model |
util
| [项目名]-util
| f1-util |
下面以信息总览为例,按照前后端分离的原则,前端服务命名为项目名-模块名-web,后端微服务命名为项目名-模块名-business。
微服务命名示例
微服务名称 |
项目名-informationOverview-web |
项目名-informationOverview-business |
项目名-interface-informationOverview |
项目名-starter-informationOverview |
项目名-util |
2.2、参数命名
参数指的是微服务中自定义的配置参数,以键值的形式进行定义。
配置参数定义规范:
分类 | 规范 | 示例 | 取法 |
平台参数
| platform.config.[参数名] | platform.config.messageSwitch 平台的消息开关 | Platform.getPlatform().getString(参数名) |
项目参数 | [项目名].[模块名].[参数名] | Aproject.product.maxCount A项目的产品模块的最大数量 | 微服务常用功能开发——微服务自定义配置参数 |