基于SpringCloud框架搭建微服务涉及的技术框架

Spring Cloud简介

Spring Cloud是一系列框架的有序集合。目的是协调各个微服务,简化分布式系统开发。这里做一个有关于Spring Cloud知识的汇总,包括Spring Cloud核心组件、Spring Cloud Alibaba及分布式事务Seata,使用的版本是Spring Cloud Hoxton及SpringBoot 2.2.x。

为什么选择Spring Cloud构建微服务?
微服务一词是Martin Fowler(马丁.福勒)于2014年提出来的,近几年微服务架构的讨论非常火热,无数的架构师和开发者在实际项目中实践着微服务架构的设计理念,他们在微服务架构中针对不同应用场景出现的各种问题,也推出了很多解决方案和开源框架,其中我们国内的互联网企业也有一些著名的框架和方案。
整个微服务架构是由大量的技术框架和方案构成,比如:
服务基础开发 Spring MVC、Spring、SpringBoot、SpringCloud。
推荐基于SpringCloud开发。
服务注册与发现 Eureka(Netflix公司)、ZooKeeper(Apache公司)、Nacos(Alibaba公司)、Consul(Google公司)等。
推荐使用Nacos。
服务调用

Dubbo(Alibaba公司/RPC方式)、Dubbox(当当网/Rest方式调用)、Ribbon(Rest方式)、Feign(Netflix公司/Rest方式)。

推荐使用Feign、Dubbo。

配置中心 ZooKeeper(Apache公司)、Disconf(Baidu公司)、QConf(360公司)、Diamond(Alibaba公司)、Archaius(Netflix公司)、Spring Cloud Config、Nacos(Alibaba)等。
推荐使用Nacos。
负载均衡 Ribbon、Nginx
服务熔断 Hystrix(Netflix公司)、Sentinel(Alibaba公司)。
Hystrix已经不再更新且功能比Sentinel少,但是Hystrix已经比较稳定。感觉Sentinel要比Hystrix复杂一些,根据需要选择即可。如果使用了Dubbo还是推荐Sentinel。
服务限流 Sentinel(Alibaba公司)
API网关(路由) Zuul(Netflix公司)、Gateway(Spring官方)、OpenResty、Orange、Kong、Tyk等。
推荐Gateway
分布式事务 Seata(Alibaba公司)
分布式消息 RocketMQ(Alibaba公司)、Kafka、RabbitMQ。
推荐RocketMQ。
批量任务 Elastic-Job(当当网)、Azkaban(Linkedln)
服务跟踪 Hydra(京东)、Zipkin(Twitter)等
但是在微服务架构上,几乎大部分的开源组件都只能解决某一个场景下的问题,所以这些实施微服务架构的公司也是整合来自不同公司或组织的诸多开源框架,并加入针对自身业务的一些改进,没有一个统一的架构方案。
所以当我们准备实施微服务架构时,我们要整合各个公司或组织的开源软件,而且某些开源软件又有多种选择,这导致在做技术选型的初期,需要花费大量的时间进行预备研、分析和实验,这些方案的整合没有得到充分的测试,可能在实践中会遇到各种各样的问题。
Spring Cloud的出现,可以说是为微服务架构迎来一缕曙光,有SpringCloud社区的巨大支持和技术保障,让我们实施微服务架构变得异常简单了起来,它不像我们之前所列举的框架那样,只是解决微服务中的某一个问题,而是一个解决微服务架构实施的综合性解决框架,它整合了诸多被广泛实践和证明有效的框架作为实施的基础组件,又在该体系基础上创建了一些非常优秀的边缘组件将它们很好地整合起来。
加之Spring Cloud有其Spring的强大技术背景,极高的社区活跃度,也许未来Spring Cloud会成为微服务的标准技术解决方案。

 

Spring Cloud搭建微服务推荐使用的框架

使用SpringCloud框架搭建微服务项目,需要用的技术和工具有很多,可选择的工具也很多。比如SpringCloud、alibaba等都针对某个需要实现功能而开发了不同的工具。目前选择使用的工具如下。

 

注册中心:

注册中心主要用于服务治理,提供了服务的注册与发现功能,微服务架构中的服务可以注册到注册中心,也可以通过注册中心获取到其他服务的信息。这里提供了Eureka、Consul、Nacos三种解决方案。推荐使用Nacos。

 

配置中心:

配置中心主要用于提供统一的外部配置管理,微服务架构中的服务可以从配置中心获取配置信息,同时支持动态刷新配置。这里提供了Spring Cloud Config、Consul、Nacos三种解决方案。推荐使用Nacos。

备注:Nacos是阿里开源的项目。可以用来替代Eureka和SpringCloudConfig,作为注册中心和配置中心。

 

 

服务调用:

微服务架构中有的服务会部署多个,Ribbon提供了服务间调用的客户端负载均衡功能,OpenFeign基于Ribbon提供了声明式的服务间调用。推荐使用OpenFeign。

Feign是Netflix公司开发的一个声明式的REST调用客户端。Feign可以帮助我们更快捷、优雅地调用HTTP API。Feign整合了Ribbon和Hystrix,拥有客户端负载均衡和服务容错功能。OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解。推荐使用OpenFeign。

 

服务网关:

API网关主要用于为微服务架构中的服务提供统一的外部访问入口,实现请求的路由与过滤功能。这里提供了Zuul和Gateway两种解决方案。

 

熔断与限流:

熔断与限流是对微服务架构中服务的一种保护措施,当系统中有故障发生时,可以防止故障的蔓延。这里提供了Hystrix和Sentinel两种解决方案。Feign整合了Ribbon和Hystrix。所以推荐使用OpenFeign即可。

 

安全保护:

Spring Cloud Security为构建安全的SpringBoot应用提供了一系列解决方案,结合Oauth2可以实现单点登录、服务安全保护等功能,可以很好地保护微服务架构中的服务。

 

监控中心:

Spring Boot Admin 结合 Spring Cloud的注册中心使用可以用来监控微服务架构中的服务。

 

分布式事务解决:

微服务架构中,当一次业务操作需要操作多个数据源或需要进行远程调用时就会产生分布式事务问题,Seata可以很好地解决该问题。

 

posted @ 2021-05-18 17:09  悬铃木pp  阅读(289)  评论(0编辑  收藏  举报