大数跨境

研究慧正工作流引擎单服务单流程运行的可行性

研究慧正工作流引擎单服务单流程运行的可行性 慧正工作流
2018-01-08
3
导读:应用背景:

课题目标:

一、研究慧正工作流引擎与开发平台在微服务下的可行性;

二、研究慧正工作流引擎单服务单流程的可行性(单服务单流程:一个微服务仅运行一条流程,其他流程在其他服务运行)。

课题内容:

(一)系统部署架构

慧正工作流引擎微服务系统部署架构统一使用springcloud 框架进行研发,以下为慧正工作流引擎基于spring cloud的选型的架构方案。

用户端

慧正工作流引擎使用完全的前后端分离,后端服务仅统一提供rest方式,前端无论是web端,移动端或其他服务均统一面向rest服务,即所有用户端请求均为一致的。

Nginx负载均衡、静态服务器

通过nginx服务器进行系统的反向代理,负载均衡;

通过nginx服务器支持https协议;

若有静态文件,静态化的页面,可直接通过nginx进行实现。

SpringBoot

Springboot提供了更好的解决方案,如服务器内嵌,统一配置文件,多环境配置,声明式开发等。

每个微服务均为一个springboot项目。每个springboot都有单独的内嵌服务器,可单独运行,每个springboot服务可进行单机、集群扩展。

所有的springboot项目过程整合后即成为慧正工作流引擎。

每个springboot服务有自己的服务id,即通过配置属性spring.application.name指定。服务id相同的服务被视为集群模式,服务id相同的慧正工作流引擎进行部署,即成为慧正工作流引擎的服务集群模式。

注册中心Eureka

Eureka 作为所有服务的注册中心,对所有服务进行管理,可通过此处的监控进行查看服务的状态与关系

Eureka 同时肩负服务发现的功能,即所有服务均需要注册到本服务上,且所有服务都向此服务索取需要的服务。不必关心具体的服务在什么地方,什么ip

Eureka本身服务同时也是一个springboot服务,支持进行集群部署。

服务消费者、通信框架Feign

Feign是一个声明式的伪Http客户端,默认使用Ribbon,默认进行软负载均衡,Springcloud可使用Feign进行多个微服务间的通信。

Feign的负载均衡策略可通过配置com.netflix.loadbalancer.IRule 进行指定.

断路器Hystrix

在微服务中,整个慧正工作流引擎被拆分为多个小型的服务,多个服务之间通过rpc(本架构中通过Feign实现)进行调用,为了保证系统的高可用,在由于网络问题,或其他原因,导致下游项目不可用,此时会造成一定时间内的线程阻塞。而此时若有大量请求涌入,会导致线程被消耗殆尽,导致服务瘫痪,易造成雪崩效果。

断路器的作用是在下游服务不可用或无法承载时,打开备用电路,通过断路服务进行响应一个固定值。如抛出异常或返回null

路由网关Zuul

在慧正工作流引擎中,被拆分的每个小型服务均可单独部署,单独完成其分内工作。即前端请求可以直接请求小型服务进行业务处理。

但在整个微服务系统中,由于小型服务众多,服务器,ip,端口众多,若全部单独调用,会增大耦合度,此时通过zuul路由网关进行服务分发,即所有的请求均请求到zuul服务上,由zuul进行统一的对请求进行分发。

同时zuul作为统一的网关。可直接进行权限,过滤等一系列的统一的操作。

 

(一)单服务单流程的解决方案

由以上分布式微服务架构可以看出,所有的请求均由Zuul网关服务进行分发。而流程流转仅需两个接口:

//打开流程

public String open(WorkParaBean workParaBean)

 

//提交流程

public String action(WorkParaBean workParaBean)

可在zuul网关服务中进行对这两个接口进行定制化。

示例代码:

@RestController
public class FlowSupportController {

   
@Autowired
   
private LoadBalancerClient loadBalancer;

   
@RequestMapping(value = "/open")
   
public String open(String id) {

        ServiceInstance instance =
loadBalancer.choose("flow-support-"
+ id);
        if
(instance == null) {
            instance =
loadBalancer.choose("flow-support");
       
}

        FlowSupportClient computeService = Feign.builder().target(FlowSupportClient.
class,
               
instance.getHost().toString());
        return
computeService.open();

   
}
}

 

具体思路:由zuul网关服务对这两个接口进行重写,

1.通过流程id对应服务id进行匹配,即单流程的单服务配置spring.application.nameflow-support-${flowId} (若需要单服务可以运行多个流程,可将flowId修改为group

2.需要提供一个默认的流程流转服务,即当某流程无法发现自己对应的单服务时,可以有默认的服务进行运行。

3.其他流转机制全部交于Feign走微服务架构机制。

        

       通过本课题的研究,将明确慧正工作流引擎单服务单流程的可行性,为探索慧正工作流引擎在超大并发情况下的性能优化方案提供支撑。


转发左下角阅读原文中的文章才能获得积分哦!!!

转发左下角阅读原文中的文章才能获得积分哦!!!

转发左下角阅读原文中的文章才能获得积分哦!!!

重要的事情说三遍!!!


【声明】内容源于网络
0
0
慧正工作流
慧正公司多年来致力于工作流引擎产品技术研究,为软件产业提供高性价比的流程引擎部件,促进用户业务过程管理的自动化。公司发展目标是研发一流的工作流产品技术,领导中国乃至全球工作流技术的发展潮流,成为中间件产品技术的领先厂商。
内容 105
粉丝 0
慧正工作流 慧正公司多年来致力于工作流引擎产品技术研究,为软件产业提供高性价比的流程引擎部件,促进用户业务过程管理的自动化。公司发展目标是研发一流的工作流产品技术,领导中国乃至全球工作流技术的发展潮流,成为中间件产品技术的领先厂商。
总阅读190
粉丝0
内容105