`

Kstry框架一种服务编排的实现

    博客分类:
  • Java
阅读更多

Kstry能做什么?

如果您遇到了以下问题:

  • 代码复杂、模型文档更新不及时,致使新同学和非技术同学不能短时间内了解业务现状。技术和非技术间对同一业务理解存在分歧而不自知。甚至业务Owner也不能很流畅的描述出自己所负责的业务
  • 项目中涉及到许多领域对象,对象间不仅存在复杂的前后依赖关系还相互掺杂没有明显边界,代码多次迭代后更是混乱不堪难以维护
  • 某业务链路由一系列子任务组成,其中需要并行处理一些耗时长且数据间没有依赖的子任务,但苦于没有精简且无代码侵入的并发框架
  • 维护平台型产品,为众多上游业务线提供着基础服务,但在短时间内应对各个业务方的定制化需求捉襟见肘,更不知如何做好平台与业务、业务与业务之间的隔离
  • 业务流转数据状态追踪困难,只存在于线上环境的偶现问题更是难以排查。需要一种可以通过简单操作就能将重要节点数据都保存下来的能力,此能力堪比对链路精细化梳理后的系统性日志打印
  • 业务场景多样,不乏一些复杂的链路难以被测试覆盖。或者三方数据Mock困难,测试成本居高不下

那么可以尝试一下Kstry框架,因为其具备:

可视化

  • 框架引入了业界通用的BPMN流程编排语言
  • 使用事件节点、任务节点、网关节点等组件来描述业务动作和执行线路
  • 编排好的图示模型即为代码真实的执行链路,通过所见( 图示模型 )即所得( 代码执行 )的方式在技术和业务之间架起一道通用语言的桥梁,使彼此之间沟通更加顺畅

image-20211219163429668.png

服务编排

  • 框架通过定义任务节点来划分领域边界并实现业务功能,任务节点对应代码中Class的某个方法
  • 一个独立的任务节点理论上只承担着一种业务动作或领域能力
  • 输入完成任务所需参数的最小集,输出任务完成的结果或处理后的领域对象
  • 节点间使用箭头符号这种可视化编排手段来保证彼此间的相互作用有序,通过并行网关、包含网关、排他网关等来丰富节点间的执行依赖关系

image-20211219163540179

支持并发

  • 无需改动代码,仅仅在并行网关或包含网关上配置 open-async=true,即可将其后的子链路并行化
    image-20211213145202846

RBAC( Role-based access control )模式

  • 针对平台型服务,首先可以定义编排出通用的链路模型
  • 模型中的某个任务节点,应对不同业务场景或需求方的诉求时,可以扩展不同的服务能力( 比如A、B两个业务方都需要抽佣的服务,那么就可以定义一个抽佣的任务节点,然后A业务需要比例抽佣,而B业务需要阶梯式抽佣,这时就可以在抽佣的任务节点上再扩展两个不同的抽佣能力 )
  • 扩展出来的能力可视作资源,所有的资源都有着独一无二的资源名称,携带着包含某个资源名称的权限对象即可访问与之对应的资源( 资源也可称为:扩展出来的服务能力 )
  • 一批独立的权限对象有着较高的维护成本,所以可依次将某一业务场景所需的全部权限聚合起来组成角色对象
  • 提供平台能力时,根据参数标识判断出具体的业务场景或需求方,并找到与之对应的角色,携带该角色执行预设的链路模型,即可完成定制化的业务诉求

详见:RBAC模式

流程回溯

流程回溯可以在链路执行完之后,拿到结果或者异常之前,打印节点执行日志或执行自定义回调方法,可以应对如下问题:

  • 查看运行过节点的信息如:执行顺序、节点耗时、入参、出参、异常信息等重要数据
  • 自定义流程回溯日志,或者可以在出现异常时才打印详情日志
  • 检查节点执行、参数设置等是否符合预期。因为有时结果确实没有报错,但并不代表过程一定没有问题
  • 如果链路中有自定义角色的操作,检查最终角色是否符合预期

简化测试

  • 不依赖业务方入参,而是通过Mock业务角色的方式。之后请求携带该角色即可完成对包含有待测试服务节点或者能力扩展点的个性化业务链路的测试

Kstry如何使用?

下面步骤仅为简单介绍,具体细节请参考使用文档

1、配置引入

<dependency>
    <groupId>cn.kstry.framework</groupId>
    <artifactId>kstry-core</artifactId>
    <version>1.0.5</version>
</dependency>

2、项目引入

@EnableKstry(bpmnPath = "./bpmn/*.bpmn")
@SpringBootApplication
public class KstryDemoApplication {
   

    public static void main(String[] args) {
   
        SpringApplication.run(KstryDemoApplication.class, args);
    }
}

3、编写组件代码

@TaskComponent(name = "goods")
public class GoodsService {
   
    
    @NoticeResult
    @TaskService(name = "init-base-info")
    public GoodsDetail initBaseInfo(@ReqTaskParam(reqSelf = true) GoodsDetailRequest request) {
   
        return GoodsDetail.builder().id(request.getId()).name("商品").build();
    }
}

4、定义bpmn配置文件

image-20211211151733111

5、调用执行

@RestController
@RequestMapping("/goods")
public class GoodsController {
   

    @Resource
    private StoryEngine storyEngine;

    @PostMapping("/show")
    public GoodsDetail showGoods(@RequestBody GoodsDetailRequest request) {
   

        StoryRequest<GoodsDetail> req = ReqBuilder.returnType(GoodsDetail.class)
                                                  .startId("kstry-demo-goods-show").request(request).build();
        TaskResponse<GoodsDetail> fire = storyEngine.fire(req);
        if (fire.isSuccess()) {
   
            return fire.getResult();
        }
        return null;
    }
}

6、请求测试

image-20211211145528118
0
1
分享到:
评论

相关推荐

    Camel服务集成,服务编排操作文档

    它提供了一种声明式的方式来进行服务集成和服务编排,使得开发者可以方便地连接不同的系统、协议和API,从而构建复杂的数据流。在“Camel服务集成,服务编排操作文档”中,我们将深入探讨Camel的核心概念和实践技巧...

    面向普适计算环境的Android平台服务编排框架.pdf

    3. **服务绑定**:在运行时,移动终端根据当前上下文和可用资源,将抽象服务与实际的服务实例进行绑定,实现服务的动态组合和编排。 4. **轻量级混合服务编排**:A SOF框架支持轻量级的服务编排机制,使得终端能够...

    容器云平台-服务编排设计.docx

    在服务编排设计中,我们需要考虑多个方面的因素,如服务定义、服务实现、服务组合、服务调用、接口定义、拓扑支持等。这些建议性的设计可以帮助我们更好地规划和实现容器云平台的服务编排。 服务编排的实现方式有...

    基于Java的Kstry业务架构可视化轻量级框架设计源码

    该项目是一个基于Java开发的Kstry业务架构可视化轻量级框架设计源码,包含798个文件,涵盖494个Java源文件、89个SVG图形文件、69个JavaScript文件、28个BPMN流程定义文件、28个Vue组件文件、24个PNG图片文件、16个...

    Heimdall一种简单的方法来编排你的Api

    Heimdall就是这样一款工具,它提供了一种简单的方式来组织和管理你的API,尤其在Java开发领域,它作为一个REST框架,帮助开发者更有效地构建和维护API服务。 Heimdall的设计理念是提供一个直观、易用的接口,使得...

    wso2 esb 服务编排

    WSO2 ESB是开源软件供应商WSO2提供的中间件产品,它作为一个灵活且高效的集成平台,帮助企业在分布式环境中实现服务之间的通信。 WSO2 Business Process Server (BPS) 是与WSO2 ESB协同工作的组件,专门用于处理...

    Conductor:一个用于编排服务程序的小框架

    导体一个小小的 Golang 服务/程序框架使用 Conductor 编排异步功能/可关闭服务 cond := conductor . NewConductor ( func ( err error ) { log . Error ( err ) }) fi , _ ioutil. ReadFile &#40;“ path / to / ...

    基于Vue框架的游泳比赛编排前端设计源码

    本项目为基于Vue框架的游泳比赛编排前端设计源码,总计包含88个文件,涵盖36个Vue组件文件、14个JavaScript脚本文件、11个GIF动画文件、10个PNG图片文件、5个JSON数据文件、2个Markdown文档、2个HTML文件、2个JPG...

    示例4 如何编排几个细粒度服务形成粗粒度服务

    在IT行业中,服务编排是微服务架构中的一个重要概念,特别是在构建复杂系统时。本示例将探讨如何将几个细粒度的服务整合成一个粗粒度的服务,以提高效率、简化管理和优化整体系统架构。 首先,理解细粒度服务与粗...

    一个基于 Java 的 LLM(大语言模型)应用开发(及编排)框架

    一个基于 Java 的 LLM(大语言模型)应用开发(及编排)框架一个基于 Java 的 LLM(大语言模型)应用开发(及编排)框架一个基于 Java 的 LLM(大语言模型)应用开发(及编排)框架一个基于 Java 的 LLM(大语言模型...

    服务编排conductor介绍.docx

    "服务编排Conductor介绍" Conductor是一个微服务编排工具,具有良好的微服务编排功能和轻量化流程管理控制能力,在微服务架构中使用广泛。Conductor的优点包括: * 允许创建复杂的流程/业务流,其中由微服务实现...

    CXF框架实现Webservice服务.pdf

    Apache CXF是一个强大的开源框架,专门用于构建和实现Service-Oriented Architecture (SOA)中的Web Services。CXF集成了Celtix和XFire两个知名项目的优势,支持多种Web Services标准,如SOAP、Basic Profile和WS-...

    服务编排最佳实践.pptx

    总结来说,服务编排最佳实践旨在通过构建一个协调层,解决服务拆分带来的复杂性问题,提供全局的业务视图,强化业务流程的控制,并实现服务之间的有效协作。通过这些方法,企业可以更好地实现微服务架构的优势,提高...

    基于服务编排的云制造服务协同.pdf

    基于服务编排的云制造服务协同.pdf

    Rancher 2.0 架构设计

    从Rancher的发展历程来看,它从一个支持多种容器编排框架的平台转变为专注于Kubernetes的容器管理平台。Rancher 2.0的发布,适应了Kubernetes快速发展的趋势,并通过RKE和自定义控制器的使用,进一步加强了对...

    云产品-云计算基础-容器服务CCS

    Marathon支持多种编程语言和框架,提供了一个灵活的容器编排解决方案。 CoreDNS是一个开源的DNS服务器,可以提供一个灵活的DNS解决方案。CoreDNS支持多种DNS协议,提供了一个高度可扩展的DNS服务器。 CCS的使用...

    运动会赛前编排(能完一次编排)

    运动会赛前编排,能正确的实现第一次编排,第二次编排很简单我就没做了!第一次编排算法比较难实现,我里面有的数据都是理想化的,真正的运动会编排数据都不是那样的!因为我做了一个运动会系统,所以搞了个测试的!...

    阿里云-资源编排服务产品简介.pdf

    通过资源编排,用户可以一次性创建、配置和管理多个阿里云服务,如ECS(弹性计算服务)、RDS(关系型数据库服务)、SLB(负载均衡服务)、VPC(专有网络)和ESS(弹性伸缩服务)等,极大地提高了部署效率和应用的可...

    基于微服务架构的新一代调控系统服务编排技术.pdf

    为了实现这一目标,基于微服务架构的服务编排技术成为了关键所在。本文将围绕该技术的核心概念、关键技术及其应用场景进行详细介绍。 #### 微服务架构简介 微服务架构是一种将单一应用程序开发为一组小型服务的...

Global site tag (gtag.js) - Google Analytics