文/朱锋
火电SIS系统是集生产数据采集、生产过程监控、性能指标计算、优化控制及过程管理为一体的自动化信息系统,对提高电厂运营效益具有重要意义。传统的火电SIS系统都是采用单体应用架构进行开发,随着系统数据量和访问量的增加,单体应用架构已无法满足业务需求。
微服务作为一种新兴的软件架构模式,它基于模块化、 组件化等架构思想,具有易扩展、强解耦、去中心化等特点。它将单体应用拆分为多个高内聚低耦合的小型服务,服务间采用轻量级通信机制,可由不同的开发团队对各服务进行开发维护,使大型复杂的应用可持续交付和持续部署。
Spring Cloud 框架拥有功能完善的、轻量级的微服务实现组件,主要组件如下:
(1)服务治理组件Eureka:实现各个微服务实例的自动化注册和发现。
(2)负载均衡组件Ribbon: 实现客户端负载均衡。
(3)网关组件Zuul:实现对服务路由转发。
(4)熔断降级组件Hystrix: 实现服务的限流、 熔断和降级等功能。
(5)配置中心组件Conig Server:实现服务配置文件统一管理。
Docker是一种高级容器引擎,可以将应用程序和基础设施层隔离,做到应用组件级别的“一次封装,随处运行”。
Docker 容器有镜像、容器和仓库等三个核心概念:
(1)镜像,是一个特殊的文件系统,提供容器运行时所需的程序、库、资源和配置等文件。
(2) 容器,是镜像的实例,拥有独立的文件系统、网络配置和进程空间。
(3) 仓库,是集中的存储和分发镜像的服务中心,通常一个仓库包含同一软件不同版本的镜像。
基于微服务架构的火电SIS系统架构如图1所示。 由图1可知,火电SIS系统可拆分为以下服务:
(1)鉴权中心服务:将认证授权作为独立的服务,提供访问令牌和刷新令牌等接口服务。
(2)实时数据服务:将对实时数据库的访问作为独立的服务,提供读写实时值和历史值等接口服务。
(3)统计计算服务:将对指标的计算统计封装为独立的服务,提供按各种方式对指标统计查询接口服务。
(4)数据缓存服务:将对缓存的读写操作封装为独立的服务,提供对各种数据格式的缓存读写接口服务。
(5)业务数据服务:将业务数据的访问封装为独立的服务,提供各种业务数据接口服务。
本文系统基于JDK 1.8,使用IDEA 2018进行开发,采用Docker容器对各服务进行部署。系统主要模块主要实现过程如下:
(1)鉴权中心:采用Spring Security框架,基于OAuth2进行开发。网关Zuul接收到客户端请求后,Zuul通过向鉴权中心发出请求对API客户端进行认证鉴权。
(2)注册中心:采用Spring Cloud Eureka进行实现,各服务向服务作为Eureka Client注册中心Eureka Server注册自己。
(3)配置中心:采用Spring Cloud Config进行实现,使用Git存储配置信息,对配置信息进行版本管理。并通过Spring Cloud Bus广播配置文件的更改,实现配置的动态刷新。
(4)日志中心:采用主流的ELK套件进行实现,即Elasticserach、Logstash和Kibana。Elasticsearch是用作日志记录服务器;Logstash聚合服务日志并写入Elasticsearch的日志流水线;Kibana是Elasticsearch的可视化工具。
图1:火电SIS系统微服务架构
(5) Docker 部署:通过编写Docker 容器编排docker-compose.yml文件,为各服务容器设置相应的网络环境和参数配置,将各服务容器作为整体进行部署。
本文将微服务架构应用于火电SIS系统建设中,将系统拆分为独立的服务后,基于Spring Cloud框架进行系统的开发实现,使得火电SIS系统具有高度的扩展性和容错性。并使用Docker容器进行自动、快速独立的部署所有微服务,提升了系统开发、测试和部署运维一体化的能力。