课题目标:
一、研究慧正工作流引擎与开发平台在微服务下的可行性;
二、研究慧正工作流引擎单服务单流程的可行性(单服务单流程:一个微服务仅运行一条流程,其他流程在其他服务运行)。
课题内容:
(一)系统部署架构
慧正工作流引擎微服务系统部署架构统一使用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.name为flow-support-${flowId} (若需要单服务可以运行多个流程,可将flowId修改为group)
2.需要提供一个默认的流程流转服务,即当某流程无法发现自己对应的单服务时,可以有默认的服务进行运行。
3.其他流转机制全部交于Feign走微服务架构机制。
通过本课题的研究,将明确慧正工作流引擎单服务单流程的可行性,为探索慧正工作流引擎在超大并发情况下的性能优化方案提供支撑。

转发左下角“阅读原文”中的文章才能获得积分哦!!!
转发左下角“阅读原文”中的文章才能获得积分哦!!!
转发左下角“阅读原文”中的文章才能获得积分哦!!!
重要的事情说三遍!!!


