服务管理到底管什么?
我们谈服务管理,管理的是服务,落在实现层面实际管理的就是数据,那我们来看看服务包含哪些方面的数据呢?
服务的静态数据
从结构和约束来梳理,主要包含如下几个方面:
-
服务风格
关于服务风格,上面已经做过简单陈述,包含常见的RPC、REST、GraphQL、服务端驱动(Webhook)等多种类型。
-
参数(请求&响应参数)
参数部分可以说是一个服务的骨干组成部分,是其功能约束的核心,具体来看其结构可以拆解分析如下:
-
结构类型:约定出入参的整体结构类型,常见的有:JSON、String、XML、MAP、Object对象
-
参数组成:按照参数职能划分,可以划分为基本协议参数、业务参数,协议参数封装的是可提取抽象的公共参数,常见的有公共头信息(版本、IP、来源、时间等);业务参数即完成当前服务能力/动作所需要的业务输入和输出信息。
-
参数类型:包含常见的数据类型结构以及自定义类型(基本类型、List、Map、自定义对象等)
-
参数约束:如非空限制、长度限制、字段字符类型限制、值域范围限制等
-
-
响应码设计
响应码属于参数的一部分,这里单独出来讲,为的是体现其独特的地位。在所有的响应参数里面,响应码可以说是最至关重要的一个参数,绝大部分情况下它决定了该服务的核心关键逻辑部分。这里单独强调如下一点:
- 全局码规划:响应码的规划宜早不宜迟,良好的响应码规划需要保持合理的结构以及必要的扩展性,以有效支撑后续业务的发展和系统的建设;要能快速锁定问题类型、问题的严重程度、问题归属系统以及服务。
-
非功能性约束
非功能性约束是为满足服务需求而必须具有且除功能约束以外的特性,主要包含内容如下:
- SLA:成功率、平均时延、错误调用次数、吞吐量,该部分定义了服务的性能以及可用性指标,即向服务客户承诺的服务质量。
- 安全性:加密、加签、编码类型,该部分根据服务安全需求选择,非必要
- 幂等性:该部分描述服务是否支持幂等(任意多次执行所产生的影响均与一次执行的影响相同),非必要
-
服务归属
服务归属定义服务归属的应用/系统/平台/组织,明确服务归属可以有效减少沟通成本
6. 服务上下游依赖
记录服务间的上下游依赖关系
7. 其他部分
- 服务描述:名称、简述等,从宏观上给服务客户提供对于此服务的基本介绍。
- 服务分组:为便于管理和可视化,将同类服务进行分组可有效降低管理成本以及学习成本。
剖析清楚服务的静态定义组成后,我们再看什么明确一个服务还涉及其他的方面内容吗?
既然提到的服务的静态定义数据,那当然还有服务的动态定义数据,其实服务的动态数据部分也是需要管理的范畴,何谓服务的动态部分呢,这部分主要指的就是服务的整个生命周期里涉及的过程以及控制流程,同样的,我们来看看,服务全生命周期包含哪些过程和控制流程呢:
服务全生命周期过程
服务生命周期
顾名思义,服务全生命周期过程是指服务从诞生到消亡的整个过程,按照时间顺序我们可以预见的核心过程主要有如下方面:
- 定义:规划定义服务归属应用以及系统
- 设计:确定服务的输入输出、上下游依赖关系等静态定义部分
- 开发:实现具体的服务
- 测试:测试服务功能,确保逻辑合理性
- 上线:服务发布上线
- 运行:服务在线运行
- 迭代:对服务进行优化升级
- 下线:下线销毁服务
服务全生命周期控制流程
那与之匹配的服务全生命周期控制过程又该包含哪些呢?服务在整个生命周期,新增、变更、调用、上线、迭代、下线都会对关联的服务造成影响,为确保服务质量控制风险,我们要在关键过程点上加必要的控制流程:
- 服务新增流程
- 服务变更流程
- 服务调用申请流程
- 服务上线流程
- 服务下线流程
具体各流程该如何设计,如何规范,后面的章节(参见下一章节)我们具体讨论。
明确了服务的组成,我们就清晰了解了我们具体该管什么,服务管理基本的功能结构也就清晰的呈现在我们的面前: