1、什么是微服务
在开发项目之前,我们有必要了解一下,什么是微服务?简单来说:微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
2、Spring Cloud是什么
Spring Cloud是一个微服务框架的规范,并不是任何具体的框架。而Spring Cloud Netflix 和 Spring Cloud Alibaba 是 Spring Cloud 的实现方案。本项目中我们将对两种实现方案中的组件进行实战开发。Spring Cloud Netflix(https://spring.io/projects/spring-cloud/) 和 Spring Cloud Alibaba(https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md) 的最新动态可到相应官网进行了解。
3、服务注册中心
服务注册中心是微服务的另外一个必备组件,用来协调服务提供者和调用者的相互发现。
Spring Cloud Netflix默认的注册中心是Eureka,而Spring Cloud Alibaba推荐使用的注册中心是Nacos。当然,还有很多组件都实现了微服务注册中心的功能。比较常用的有consul、eureka、nacos。
下面对这几个组件进行一个比较:
配置中心:
- eureka 不支持
- consul 支持 但用起来偏麻烦,不太符合springBoot框架的命名风格,支持动态刷新
- nacos 支持 用起来简单,符合springBoot的命名风格,支持动态刷新
注册中心:
-
eureka
-
应用内/外:直接集成到应用中,依赖于应用自身完成服务的注册与发现。
-
ACP原则:遵循AP(可用性+分离容忍)原则,有较强的可用性,服务注册快,但牺牲了一定的一致性。
-
版本迭代:目前已经不进行升级。
-
集成支持:只支持SpringCloud集成。
-
访问协议:HTTP。
-
雪崩保护:支持雪崩保护。
-
上手:容易。
-
consul
-
应用内/外:属于外部应用,侵入性小。
-
ACP原则:遵循CP原则(一致性+分离容忍) 服务注册稍慢,由于其一致性导致了在Leader挂掉时重新选举期间真个consul不可用。
-
版本迭代:目前仍然进行版本迭代
-
集成支持:支持SpringCloud K8S集成。
-
访问协议:HTTP/DNS。
-
雪崩保护:不支持雪崩保护。
-
上手:复杂。
-
nacos
-
应用内/外:属于外部应用,侵入性小。
-
ACP原则:通知遵循CP原则(一致性+分离容忍) 和AP原则(可用性+分离容忍)。
-
版本迭代:目前仍然进行版本迭代。
-
集成支持:支持Dubbo 、SpringCloud、K8S集成。
-
访问协议:HTTP/动态DNS/UDP。
-
雪崩保护:支持雪崩保护。
-
上手:极易,中文文档,案例,社区活跃。
本教程重点学习Spring Cloud Alibaba,推荐使用Spring Cloud Alibaba的生态组件。在之前的项目中,使用过Eureka作为注册中心,而配置中心需要使用其他解决方案,比如Apollo。而Nacos实现了配置中心和注册中心的功能,在使用起来比较方便。下面了解一下官方对Nacos的介绍:
Nacos 能够快速实现动态服务发现、服务配置、服务元数据及流量管理。包括服务发现和服务健康监测、动态配置服务、动态 DNS 服务、服务及其元数据管理。Nacos 无缝支持 Spring Cloud,为 Spring Cloud 用户其提供更简便的配置中心和注册中心的解决方案。