APP下载

一种.Net框架下微服务框架设计研究

2019-05-08郑卫胜

通信电源技术 2019年4期
关键词:状态机实例集群

方 圆,郑卫胜

(中国电子科技集团公司第二十七研究所,河南 郑州 450047)

0 引 言

微服务架构是一种将单个应用程序开发为一组小型服务的方法,每个小服务运行在自己的进程中,并且以轻量级机制通信。这些服务是围绕业务能力建立的,在最理想的情况下,每个服务都可独立地开发、测试、发布、部署、扩展、集成和维护。

随着微服务架构的发展,出现了许多开源的微服务框架。在Java生态环境中出现了Spring Boot、Eclipse MicroPro fi le、Dropwizard等集成开源框架[1],这些开源框架大大促进了微服务架构在Java生态环境中的推广。

.Net因其生态环境的封闭性,流行的微服务统一开源的框架很少,软件开发者大部分选择微软自身的产品来构建微服务架构的软件应用,极大地增加了软件开发的经济成本,也降低了新开发系统与异构系统集成的能力。因此,提出了一种以集成HAProxy、KeepAlived、MassTransit以及RabbitMQ中间件构建微服务框架的设计方法,以支持.Net框架下微服务架构软件应用的运行。

1 微服务框架设计

1.1 整体架构

微服务框架整体系统架构图见图1。

图1 微服务框架结构

使用HAProxy和KeepAlived相互组合实现基于微服务访问的高可用性,负载均衡和故障迁移,通过MassTransit和RabbitMQ集群保障系统的服务可靠通信、服务注册与发现和数据最终一致性。

1.2 服务通信

微服务框架中中采用MassTransit框架来完成微服务之间的通信。MassTransit框架是一个自由、开源、轻量级的消息总线,实现在.Net框架下创建分布式应用程序。MassTransit框架保证了整个系统消息的可靠传递和通信消息数据最终一致性。

1.2.1 通信消息可靠传递

MassTransit默认使用RabbitMQ消息中间件作为服务通信的基础设施[2]。通信消息在分布式系统中传递不可靠,为了保证消息的可靠传递可采用如下方法。

第一,通过MassTransit框架提供的API接口设置RabbitMQ交换机,队列和消息为持久化和消息确认机制。解决消息中间件服务器的异常崩溃而导致的消息丢失问题。第二,通过配置RabbitMQ集群,保证不会因为任何一台RabbitMQ节点故障而造成系统故障的情况。

1.2.2 通信消息数据最终一致性

微服务系统的数据最终一致性是指数据对象在没有更新前,最终所有获取数据的请求都将返回最后更新值。本文采用MassTransit提供的Saga组件,可保证分布式系统的数据一致性[3-4]。

MassTransit中提供了Automatonymous状态机组件定义状态机Saga实例,并通过 fl uent语法定义对应状态机实例。Saga实例中通过CorrelationId字段将消息串联起来,维护消息的状态,同时MassTransit还可与NHibernate等框架集成,完成Saga实例的持久化工作。

定义状态机Saga实例的例子见图2,对应状态机实例定义见图3。最后通过IRabbitMqBusFactory Con fi gurator类的LoadStateMachine-Sagas()方法将状态机实例注册到ReceiveEndpoint上,完成通信消息数据最终一致性的配置。

1.3 服务注册与发现

本文采用RabbitMQ作为通信机制,服务的调用者和微服务的实例之间完全进行了解耦,服务的调用者无需知道微服务实例的存在。只要服务调用者能将服务调用消息发送至RabbitMQ节点,RabbitMQ节点就能将服务调用消息转发到可用的微服务实例上,这一切对服务调用者是完成透明的。

1.4 高可用性

微服务架构软件中的网络通信需要多个物理组件和逻辑组件共同协作,这些组件都有可能出现故障。为了最小化局部故障带来的影响,本文采用了HAProxy和KeepAlived实现整个微服务框架的高可用性访问。

如图1所示,HAProxy服务器1和HAProxy服务器2提供对RabbitMQ集群访问,通过设置KeepAlived,在两台服务器上不断进行故障检测,保证RabbitMQ集群能被正常访问。在接入交换机后配置两台HAProxy服务器用于实现对RabbitMQ集群的负载均衡,当用户访问量急剧增长时,能有效解决RabbitMQ集群中的单台服务器成为访问瓶颈的问题。KeepAlived不断检测两台HAProxy服务器的状态,若其中一台宕机或工作出现故障,自动完成故障迁移另一台为用户提供访问服务,待故障服务器恢复正常,KeepAlived自动将其重新加入到检测集群中,保证整体系统的高可用性。

图2 Saga实例定义

图3 状态机定义

2 结 论

文本给出了一种.Net框架下微服务框架设计,重点分析了服务通信、高可用性等问题,并给出了关键程序和中间件配置代码。使用该框架开发降低了开发难度,提高了开发效率。目前本方案已在多个实际工程项目中成功应用,第三方评价和用户验收效果良好。

猜你喜欢

状态机实例集群
FPGA状态机综合可靠性探究 ①
基于有限状态机的交会对接飞行任务规划方法
海上小型无人机集群的反制装备需求与应对之策研究
培育世界级汽车产业集群
基于Spring StateMachine的有限状态机应用研究
一种无人机集群发射回收装置的控制系统设计
勤快又呆萌的集群机器人
完形填空Ⅱ
完形填空Ⅰ
基于VHDL的一个简单Mealy状态机