# 服务编排
## DSL设计
为了实现服务编排,需要定义一个数据结构来描述服务之间的依赖关系、调用顺序、调用服务的入参和出参等等。之后对获取的结果进行处理,也需要在这个数据结构中具体描述对什么样的数据进行怎么样的处理等等。所以需要定义一套DSL(领域特定语言)来描述整个服务编排的蓝图。
## 架构设计
- Facade:对外提供统一接口,供客户端调用
- Parser:对于输入的DSL进行解析,解析成内部流转的数据结构,同时得到所有的task,并且构建task调用逻辑树
- Executor:真实发起调用的模块,目前支持平台内部的RPC和HTTP调用方式,同时对HTTP等其它协议有良好的扩展性
- DataProcessor:数据后处理。这边会把所有接口拿到的数据转换层客服场景这边需要的数据,并且通过设计的一些内部函数,可以支持一些如数据半脱敏等功能
- 组件插件化:对日志等功能实现可插拔,调用方可以自定义这些组件,即插即用
## 主要特点
主要特点如下:
- 采用去中心化设计思路,引擎集成在SDK中。方案通用化,每个需要业务数据的场景都可以通过框架直接调用数据提供方
- 服务编排支持并行和串行调用,使用方可以根据实际场景自己构造服务调用树。通过DSL的方式把之前硬编码组装的逻辑实现了配置化,然后通过框架引擎把能并行调用的服务都执行了并行调用,数据使用方不用再自己处理性能优化
- 使用JSON DSL 描述整个工作蓝图,简单易学
- 支持JSONPath语法对服务返回的结果进行取值
- 支持内置函数和自定义指令(语法参考ftl)对取到的元数据进行处理,得到需要的最终结果
- 编排服务树可视化
# 服务降级
什么是服务降级?当服务器压力剧增的情况下,可以将一些**不重要**或**不紧急**服务**暂停使用**或**延迟使用**,从而释放服务器资源以保证核心服务的正常运作或高效运作。服务降级的设计架构图如下:
## 使用场景
服务降级主要用于什么场景呢?当整个微服务架构整体的负载超出了预设的上限阈值或即将到来的流量预计将会超过预设的阈值时,为了保证重要或基本的服务能正常运行,我们可以将一些 **不重要** 或 **不紧急** 的服务或任务进行服务的 **延迟使用** 或 **暂停使用**。
## 服务降级要考虑的问题
- 核心和非核心服务
- 是否支持降级,降级策略
- 业务放通的场景,策略