Spring Cloud微服务框架浅析

2021-11-13 08:36马荣彦
现代电影技术 2021年10期
关键词:调用组件框架

马荣彦

(中央宣传部电影数字节目管理中心,北京 100866)

1引言

随着我国国民经济整体建设水平进入一个新的时代,广大农村群众对于精神文化的消费需求也相应提高。农村电影放映工程是国家加强农村文化建设战略部署的贯彻落实成果,是公共文化服务体系的重要组成部分,要进一步聚焦农村电影放映,提高服务农村和农民群众的水平。因此农村公益电影公共服务平台的完善建设也显得越来越重要,而且随着互联网科学技术的快速发展,以及长时间以来用户需求的不断变化,诞生了许多比较前沿的互联网应用技术。在以前,我们只需要一个服务器,将程序全部打包并在这个服务器上部署好就可以,随着应用业务的扩展,在开发时如果使用常规单一的架构,需要的资源会越来越多,就会导致系统运行速度降低,而且维护也越来越困难,这就需要对现有的架构进行升级改造,亟需一个框架系统确保应用有条不紊运行,因此就发展出了微服务架构。本文对农村公益服务平台建设可以使用的比较流行的微服务框架技术进行了详细介绍,并对可行性进行了研究分析。

2 微服务简介

传统的web开发方式大都是一个WAR 包整合所有的功能,包含DO/DAO 层、Service层、UI等所有的业务逻辑和实现,然后部署在一个容器 (常用的容器有Tomcat、Jboss、Web Logic 等)里运行。它的主要优点是开发简单,集中式管理;功能都在本地,没有分布式的管理和调用消耗等,但是也存在比如效率低、维护难、稳定性差、扩展性不够等问题。随着用户要求的提高,对于大型的系统来说传统架构已经很难满足市场需求,于是衍生出了分布式架构,又从分布式衍生出了SOA 架构,在这个过程中,功能的颗粒度被拆解得越来越小,这就发展成为了微服务架构。

微服务在维基百科上的定义为:由以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务根据业务功能设计,以全自动的方式部署,与其他服务可以进行通信。我个人认为微服务架构就是一组单一功能服务的有机组合,每个服务只解决一个问题并且可以独立的开发、测试、部署、上线运行,有着非常完整的生命周期,服务之间也可以根据某种协议进行交互,这样使系统变得更加灵活。微服务架构的最小颗粒度是服务,根据服务来开发、管理和迭代应用,在每个服务中都可以使用云架构和平台式部署、管理等工具,并且可以用不同的编程语言与数据库等组件实现,这使对产品的管理变得快速且简单。

3 微服务架构技术比较

一个大型的复杂的系统由多个微服务组成,系统的各个微服务之间都是松散耦合的,并且能很好地解决单一功能问题。当前市场上微服务开源的框架主要有Dubbo、Spring Cloud等,本文主要介绍这两种框架技术。

3.1 Spring Cloud

图1 Spring Cloud技术体系主要组成部分

Spring Cloud是Spring体系的微服务解决方案,它在Spring Boot基础上集成了包括服务注册与发现、配置中心、网关、服务保护与熔断、分布式配置管理、负载均衡等简单易部署易维护的系统底层开发框架,不需要用户再集成其他的组件即可完成微服务架构的开发以及部署,同时它也支持与其它第三方组件集成开发。

Spring Cloud常用的5个核心组件:

(1)Netflix Eureka —— 注册中心;

(2)Netflix Ribbon—— 客户端负载均衡;

(3)Netflix Hystrix —— 服务熔断器;

(4)Netflix Zuul —— 服务网关;

(5)Spring Cloud Config—— 配置中心。

Spring Boot框架是Spring Cloud的基础,因此它是可以被独立使用来开发应用系统,但是Spring Cloud却是依赖Spring Boot而不能独立使用的,Spring Cloud对使用Spring Boot开发的单体微服务进行组合管理,是有着完整的一个生命周期的微服务框架。

3.2 Dubbo

Dubbo是阿里公司维护的致力于提供高性能和透明化的RPC 远程服务调用框架,它在RPC 通信与微服务治理方面表现优秀,因此使用Dubbo开发的微服务具备相互之间的远程发现与通信能力,同时Dubbo提供了丰富的服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo作为一款开源的高性能、轻量级框架,在实现风格上与Java传统的RMI、EJB技术非常相似,具备三个特点:面向接口的远程方法调用、智能容错和负载均衡以及服务自动注册和发现。

(1)在接口调用方面: 对于用户来说是非API侵入的,所有功能都可以通过配置文件解决,调用远程方法和本地方法是统一的,没有任何区别。

(2)在智能容错方面:可以通过配置使用软件负载均衡,来降低系统开发部署成本,避免单点故障。

(3)在服务管理方面:框架提供了基于接口名来查询服务提供者地址的服务,可以对服务提供者地址进行透明管理。

3.3 对比

Spring Cloud和Dubbo都是当下流行的RPC框架,各自都集成了一些服务和治理组件,但还是有一些差异比较大的地方:

(1)技术维度方面

Spring Cloud是Spring体系下的微服务解决方案,而Dubbo是阿里提供的分布式服务框架,从自身集成组件上来说Dubbo只提供了服务治理,需要集成其他的第三方框架来完成相应的功能开发,而Spring C loud目前已经包含了21个子项目满足目前的开发需求并且在不断升级中。

(2)远程调用方式方面

Dubbo的远程调用方式采用的RPC 方式,Spring C loud的远程调用方式是Http Rest方式或者采用HTTP 2.0+长链接方式 (可以灵活配置)。严格来说HTTP 跟RPC 并不是一个层的概念,HTTP也可以作为RPC 的传输层协议。两种方式的区别如下:

RPC方式中需要为每一个微服务进行接口定义,它对接口、语言等有很强的依赖性,需要严格控制才能保证不会出现调用冲突;而Http Rest是轻量级的接口方式,服务的提供和调用只需要通过一个约定进行规范,服务之间没有耦合,不过也可能会出现由于文档和接口不一致而导致的集成问题,但可以通过swagger等工具整合使代码和文档一体化解决,所以Http Rest在分布式环境下比RPC 更加灵活。而且在微服务提出者马丁·福勒的论文中提出的服务间通信机制就是Http Rest。

由于Dubbo默认保持着单一长连接和NIO异步通讯来进行数据处理,使用TCP协议,并且使用Hessian2框架序列化报文,因此在小数据且并发比较高的情况中或者服务消费者数量远大于提供者数量的情况下Dubbo要比Spring Cloud 性能要高一些,但不适用于大数据传输的情况。

(3)服务注册中心方面

Dubbo集成了第三方的Zoo Keeper组件来作为框架的注册中心,来实现对服务的管理,Spring Cloud使用本身带有的Spring Cloud Netflix Eureka组件作为实现注册中心进行服务管理,也支持与Zookeeper集成开发。

(4)技术发展角度

Spring Cloud依托在Spring家族的基础上,一直在不断的优化升级中,而Dubbo的理念在最初解决了许多服务治理的问题,但是它的发展相对停滞了一段时间,后来在2017 年重新启动进行开发维护,同时也涌现出了许多先进的技术和理念。因此Spring C loud的发展相比Dubbo来说相对完善和稳定,并且最新版本Dubbo3中的maven也有了新的变化,org.apache.dubbo:dubbo:3.0.0已经不是包含所有资源的all-in-one包,用户如果使用了一些不在核心包中的组件如registry-etcd、rpc-hessian等,需要在pom.xml配置文件中进行集成。

4 关键技术

4.1 负载均衡

负载均衡的目的是为了特定场景下,能够将请求合理地平分到各服务实例上,以便发挥所有机器的叠加作用。主要考虑的就是不将请求分配到出现故障的机器,性能越好的机器可以分配更多的请求。一般负载均衡可以借助外部工具,硬件负载均衡或软件负载均衡,如F5/nginx。当然了,在当前分布式环境遍地开花的情况下,客户端的负载均衡看起来就更轻量级,显得不可或缺。Dubbo 和Spring Cloud 均提供了几种负载均衡策略:Random LoadBalance(随机负载均衡算法)和RoundRobin LoadBalance(轮询负载均衡算法)等策略,可以根据需求进行选择配置。

4.2 通信机制

系统使用微服务架构后,就被拆分成了更细维度的子服务,小到一个功能子模块都可以作为一个微服务,各个微服务之间大都是互不影响的、松耦合的,可以被独立开发以及部署。因此各个服务之间的通讯变得非常重要,RESTful HTTP协议是微服务架构中最常用的通讯机制。

4.3 自动化部署

在微服务架构中,随着服务越来越多之后,服务的打包部署就会成为一件相当麻烦的事情。比如一个项目中有10个微服务需要部署,每次更新之后重新部署都需要手动操作10个微服务,这样带来的问题不可预估,有没有什么办法让我们部署一次之后 ,只要点击执行就可以自动部署呢? 我们可以借助Docker或者其它工具来完成一个微服务架构中的所有服务的自动化部署工作。

5 实验

针对农村公益平台中的影片订购管理功能应用Spring Cloud 微服务架构进行实验,后端使用Spring C loud框架进行实现,为前端业务提供支持,采用RESTful API方式并且前后端业务的数据交互使用JSON 格式。根据微服务架构的特点,我们将功能主要拆分为影片信息服务、用户信息服务、订单管理服务、购物车服务四个模块,考虑到实际开发中,由于各个服务模块之间相对独立,对于一些公用的实体类等信息将新增一个公共模块来存储以避免重复定义和开发,最终的系统层次图主要如图2所示。

图2 Spring C loud构建的简单的微服务系统

本次开发使用IDEA 作为实验项目的搭建工具,然后创建Maven项目,并搭建以下几个部分:

(1)搭建组件SpringBoot Eureka,用来发现服务以及进行服务注册;

(2)搭建组件SpringBootConfig,用于动态维护配置文件;

(3)搭建Spring Cloud组件网关服务Zuul,用于路由控制,如果有需要也可以加入Hystrix用于熔断处理;

(4)搭建Spring Cloud Oauth认证授权中心;

(5)创建影片信息服务、用户信息服务、订单管理服务以及购物车服务、公共服务模块,进行配置。

每个服务部署运行时都有单独的服务端口号对外开放,前端服务通过网关映射到对应端口号的服务进行调用。Spring Cloud的启动方式有多种,本次采用Java jar方式部署启动,程序开发完成使用IDE 中的package功能进行打包,再使用Java-jar*.jar(包名)进行启动。

6 总结

农村公益电影服务作为农村群众所喜好的一种文化娱乐方式,不仅让农民群众感受到了现代科技的进步,还丰富了农民的文化知识和精神世界。农村电影公益平台的升级建设非常有必要,随着信息化技术的飞速发展,微服务架构的应用越来越广,在技术选型的时候我们需要根据实际情况选择使用,其中Spring Cloud架构的调用方式Rest API更符合微服务官方的定义,而且Spring Cloud 来源于Spring家族,它更注重微服务架构生态,是解决微服务架构实施的综合性框架,整合了诸多优秀的组件,并且Spring Cloud是Java语言中最常用的微服务框架解决方案。而Dubbo从整个大的平台架构来看,Dubbo框架更专注于服务之间的治理,其他的功能实现比如配置中心、链路追踪等需要依赖第三方组件进行集成,这样增加了Dubbo开发的难度。Spring C loud几乎考虑了服务治理的各个方面,并有Spring Boot的支持,开发起来会相对便利和简单,但是具体使用还需要根据具体情况进行研究选择。❖

猜你喜欢
调用组件框架
框架
创建Vue组件npm包实战分析
智能机械臂
浅谈框架网页的学习
基于Jmeter对Node框架性能的测试研究
基于Android Broadcast的短信安全监听系统的设计和实现
利用RFC技术实现SAP系统接口通信
嵌入式组件技术的研究及应用
一元一次不等式和一元一次不等式组
C++语言中函数参数传递方式剖析