低代码平台--基于surging开发微服务编排流程引擎构思
前言
微服务对于各位并不陌生,在互联网浪潮下不是在学习微服务的路上,就是在使用改造的路上,每个人对于微服务都有自己理解,有用k8s 就说自己是微服务,有用一些第三方框架spring cloud, dubbo ,abp, nginx,kong就说是微服务的,还有用一些第三放分布式平台去架设部署也认为它是微服务,反正微服务的架设是各种各样,没有定义哪个架构是对的,只要是集大成者,全部用docker, 满足服务发现,服务治理就是微服务。而对于以上架构选择不去评判是对是错。没有一杆称砣去评判是否满足微服务思想架构,所以这种口伐笔诛是没有意义,那么现在浅谈一下对于微服务中微是如何理解,如何架构实现。
而对于微服务,微服务一词中的前缀"微"是一个隐含体系结构最佳实践,让服务在设计阶段保持简单、傻瓜式。虽然传统上微服务仅应用于架构,但它也开始与日常中所说的服务、webapi等进行替换。
"微"是一个重要的提示词,它可以消除企业对系统过渡复杂化的架构。如果你去拆解数年业务系统,然而可以将一个大功能分解为许多小的功能模块服务,从而提供微服务给其它服务终端调用。
而每个微服务都能成为模块功能或者是API.通过微服务集成,可以轻松实现复杂的集成方案。例如,物联网的设备多终端交互,流媒体的多终端推流订阅播放,支付成功多终端消息推送,对于这些都可以分解为独立的微服务进行调用集成,如果不能满足业务需要,不能扩展实现的,只能说你只是对于现有的服务演变升级为分布式服务治理,并不是微服务,因为你还停留在以往需要找寻第三框架,工具去实现,这样还是造成架构臃肿。
而对于业务会有源源不断的需求需要实现,对于这种需求的情况下不可能重复去实现微服务,而我们要做的是对于现有的微服务进行聚合,形成新的服务以提供给其它服务终端进行调用,而surging 现有的做法是通过在服务代码中远程调用微服务数据整合的方式去实现服务聚合,这种方式有一种弊端,需要投入大量的人力去架构维护,并不能满足大型系统架构需要。那么怎么去解决这个难题呢?首先就需要通过现有的微服务进行流程化服务编排,以便实现新的业务服务,那么我们可以通过这篇文章来浅谈一下微服务编排,后面surging 将如何实现。
什么是微服务编排?
微服务编排是指把已经开发好的微服务按照一定的业务流程进行可视化编排的过程,微服务编排引擎会在内部重新聚合为一个新的服务进行发布,而这个服务我们称为聚合服务
通过微服务编排引擎可以把已经开发好的微服务无需任何代码就可以进行业务逻辑的重组与重构,可以提升微服务的复用效率实现前台业务或业务系统集成的的敏捷交付,通过微服务编排引擎也能把业务系统、数据、业务逻辑进行解藕,业务逻辑的编排交由专门的微服务编排引擎完成,而微服务只需要专注完成自已内部逻辑即可。
为什么需要微服务编排引擎
试想一下当你在没有微服务编排引擎,在已经完成微服务拆分的情况下,第三方合作商或者移动端要求你增加逻辑处理服务调用,你该怎样去实现,重新研发扩展微服务?如果是这样的话,整个系统的微服务将比较臃肿,而且违反了单一职责,完全作为独立的业务服务存在。
那么微服务编排引擎可以进行可视化的业务流程编排来降低这些重复没有技术含量的工作、提升服务调用逻辑的可视化。
微服务编排流程的思路
通过微服务rpc,提供的routepath,参数模型和结果模型,再通过流程编排这些微服务来实现一个新的聚合服务。
编排流程的模型
- 服务节点模型。例如(参数赋值、invoke(远程调用和本地调用))
- 控制模型。例如(顺序、分支、循环、异常抛出、并行)
微服务编排框架提供了很多的服务节点模型基础化设置,比如编排框架引擎可以支持本地调用、远程RPC调用、协议转化其它第三方服务调用等服务节点,从而在使用上更加的方便,有了这些基本的模型,我们就能方便的编排出复杂的聚合服务
基于surging 如何研发微服务编排流程引擎
首先现在只是对于需要实现服务编排流程引擎的构思,那么我们从二个方面着手
- 可视化流程编排:对于服务节点,控制模型的属性和规则进行可视化设置
- 服务编排引擎的逻辑处理:需要对于业务流程,服务节点逻辑处理调用,配置处理返回结果。
那么针对于微服务之间怎么样顺序,分支调用处理呢?我们可以抽象出需要调用的模型
比如每个服务节点都可以以routepath 作为调用标识,然后可以设计输入参数和输出参数, 输入参数是通过网关调用传入的json 类型的httpbody ,再通过httpbody 可以转为字典参数模型。就比如以下操作
可以举例通过网关传入以下参数:
{ “name”:"fanly", "age":36, "sex":1 }
那么我们在服务节点如何设置输入参数呢? 比如需要传入的是name,那么我们可以通过以下设置
"inputParameters": {
"name": "${input.name}"
}
那么我们怎么样去设置输出参数呢?比如我们需要获取服务节点名称为node1 的结果,那么我们可以通过以下进行设置
"outputParameters": {
"result": "${node1.output.entity}"
}
通过以上我们就可以这样定义业务流程的json
{
"name": "workflow_name",
"description": "测试",
"version": 1,
"services": [
{
"name": "node1",
"routepath": "api/user/getuser",
"inputParameters": {
"name": "${input.name}",
},
"type": "microservice",
"metadata":{}
},
{}
...
],
"outputParameters": {
"result": "${node1.output.entity}"
}
}
而对于以上阐述,如何抽象数据模型来满足流程化调用,而对于surging 是可以通过routepath调用的,所以配置routepath,输入,输出参数完全是可以实现微服务调用,就比如可以通过以下代码routepath方式进行调用
Dictionary<string, object> model = new Dictionary<string, object>();
model.Add("username","name");
string path = "api/user/getuser";
string serviceKey = "User"; var userProxy = ServiceLocator.GetService<IServiceProxyProvider>().Invoke<object>(model, path, serviceKey);
var s = userProxy.Result;
总结
以上是对于低代码平台微服务编排流程引擎构思,后续会陆续实现,现在surging 能支持服务发现,服务治理,多协议扩展,缓存中间件,消息中间件,扫描引擎,并且还支持多语言版本(现支持java 和.net core 两个版本)完全可以满足企业多语言混合异构开发,后面会陆续开源至https://github.com/microsurging,建立surging 微服务引擎低代码平台
低代码平台--基于surging开发微服务编排流程引擎构思的更多相关文章
- 基于低代码平台(Low Code Platform)开发中小企业信息化项目
前言:中小企业信息化需求强烈,对于开发中小企业信息化项目的软件工作和程序员来说,如何根据中小企业的特点,快速理解其信息化项目的需求并及时交付项目,是一个值得关注和研讨的话题. 最近几年来,随着全球经济 ...
- 社区活动分享PPT:使用微软开源技术开发微服务
上周六在成都中生代技术社区线下活动进行了一个名为"微软爱开源-使用微软开源技术开发微服务"的技术分享. 也算是给很多不熟悉微软开源技术的朋友普及一下微软最近几年在开源方面所做的努力 ...
- 使用.NET Core+Docker 开发微服务
.NET Core发布很久了,因为近几年主要使用java,所以还没使用过.NET Core,今天正好有一个c#写的demo,需要做成服务,不想再转成java来实现,考虑使用.NET CORE来尝下鲜, ...
- 2021年哪个低代码平台更值得关注?T媒体盘点国内主流低代码厂商
2020年圣诞前夜,国内知名创投科技媒体T媒体旗下的T研究发布了2020中国低代码平台指数测评报告.报告除了对国内低代码行业现状进行总结外,还对主流低代码厂商的市场渗透和曝光进行测评. 报告认为,低代 ...
- 分析师机构发布中国低代码平台现状分析报告,华为云AppCube为数字化转型加码
摘要:Forrester指出,中国企业数字化转型过程中,有58%的决策者正在采用低代码工具进行软件构建,另有16%的决策者计划采用低代码. 华为消息,知名研究与分析机构Forrester Resear ...
- .net 与 java 开发微服务对比
java+spring boot+maven对比.net 优势: 1. spring 自身带的ioc 比.net 更简单易用. 2. spring actuator的健康检测等运行时状态查看功能很赞. ...
- [学习笔记]尝试go-micro开发微服务<第一波>
平时项目都是基于c++,lua,node, 现在打算开始自学开发微服务; 也顺带磨砺下go和docker 前期准备 1. 有golang编程基础 本系列文章是基于有golang编程基础,有过实际开 ...
- 干货!可以使用低代码平台代替Excel吗?
低代码开发平台可以代替Excel?不用惊讶,答案是肯定的,而且,低代码开发平台可以完全代替Excel.例如Zoho Creator低代码平台,可以围绕数据存储.管理和创建工作流程.期间不需要IT人员介 ...
- Spring boot 零配置开发微服务
2018年12月29日星期六 体验Spring boot 零配置开发微服务 1.为什么要用Spring boot? 1.1 简单方便.配置少.整合了大多数框架 1.2 适用于微服务搭建,搭建的微服务 ...
随机推荐
- frp穿透内网使用vsftpd服务
本篇文章将会介绍如何使用frp穿透内网以及如何在centos8环境下安装和使用vsftpd,最后在公网通过frp穿透内网使用ftp. 一.内网穿透神器frp frp 是一个专注于内网穿透的高性能的反向 ...
- 力扣 - 剑指 Offer 09. 用两个栈实现队列
目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 09. 用两个栈实现队列 思路 刚开始想的是用stack1作为数据存储的地方,stack2用来作为辅助栈,如果添加元素直接push入stac ...
- Android学习之活动的最佳实践
•问题的起源 先来模拟一个场景:打开一个 App,最先映入眼帘的是主活动(MainActivity),在该活动中给用户提供了一个 Button, 用户点击该 Button 实现由 MainActivi ...
- vue之mixin理解与使用
使用场景 当有两个非常相似的组件,除了一些个别的异步请求外其余的配置都一样,甚至父组件传的值也是一样的,但他们之间又存在着足够的差异性,这时候就不得不拆分成两个组件,如果拆分成两个组件,你就不得不冒着 ...
- 简易计算器实现:while循环+switch语句
个人练习: 写一个计算器,要求实现加减乘除功能,并且能循环接收新的数据,通过用户交互实现(即Scanner对象) 用到了 while循环 switch语句,实现了数据的循环输入并计算!!!!妙啊!!! ...
- Redis系列-存储篇list主要操作命令
Redis系列-存储篇list主要操作命令小结 在总结list之前,先要弄明白几个跟list相关的概念: 列表:一个从左到右的队列,个人理解更类似于一个栈,常规模式下,先进列表的元素,后出. 表头元素 ...
- 使用Gensim库对文本进行词袋、TF-IDF和n-gram方法向量化处理
Gensim库简介 机器学习算法需要使用向量化后的数据进行预测,对于文本数据来说,因为算法执行的是关于矩形的数学运算,这意味着我们必须将字符串转换为向量.从数学的角度看,向量是具有大小和方向的几何对象 ...
- 【转载】C# get 与set的一些说明
转载 在面向对象编程(OOP)中,是不允许外界直接对类的成员变量直接访问的,既然不能访问,那定义这些成员变量还有什么意义呢?所以C#中就要用set和get方法来访问私有成员变量,它们相当于外界访问对象 ...
- (十)struts2的异常处理机制
成熟的MVC框架应该提供成熟的异常处理机制.当然可以在方法中手动捕捉异常,当捕捉到特定异常时,返回特定逻辑视图名. 这种方式非常繁琐,需要在方法中写大量try catch块,最大的缺点还是一旦需要改变 ...
- 将 Python 打包的 exe 进行反编译
Python 打包成 exe 之后,是否能从二进制文件中恢复出源代码?没有加密的话是可以的. 首先需要解包. 直接从 github 上下载就行:https://github.com/counterce ...