基于SpringCloud框架搭建微服务涉及的技术框架
Spring Cloud简介
Spring Cloud是一系列框架的有序集合。目的是协调各个微服务,简化分布式系统开发。这里做一个有关于Spring Cloud知识的汇总,包括Spring Cloud核心组件、Spring Cloud Alibaba及分布式事务Seata,使用的版本是Spring Cloud Hoxton及SpringBoot 2.2.x。
服务基础开发 | 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框架搭建微服务项目,需要用的技术和工具有很多,可选择的工具也很多。比如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可以很好地解决该问题。