前言
开始之前,我们先聊聊,从我们最先接触服务,应该很多都是在tomcat中部署好自己的服务(常见的web服务器还有WebLogic、Apache、Nginx等),提供给外部进行访问。这时候就有个问题值得思考,万一这个tomcat挂了,服务死了呢?这时候我们了解到了集群,多加了一个tomcat,这样一个挂了还有一个。那么两个tomcat怎么访问比较好呢,Nginx出来了,使用Nginx做反向代理,通过Nginx将请求根据相应的规则代理到指定的tomcat中。等等,Nginx也会挂吧。没错,我们继续为Nginx做集群,这样看起来是不是就好很多了,服务也有了很好的保障。
这个时候,我们的服务在足够庞大的情况下,想一想,我们修改任一个模块的某个配置,这个时候我们需要全部重新打包进行部署,是不是感觉就比较麻烦了。那么这个时候我们将服务中的各个模块进行垂直分割。比如我们的电商系统中有:用户模块、商品模块、订单模块、支付模块、物流模块等,我们将每一个模块拆分出来做成一个单独的服务,这个时候,我们无论对其中的哪个模块进行修改,只需要对该模块重新打包发布,其余的将不受影响,这样是不是方便更多了。这个时候我们每个模块之间通过RPC(远程过程调用)互相进行通信,照样可以完成各个模块之间的功能。
可是呢,随着模块的增多,各个模块之间的调用关系是不是就显得比较复杂且难以维护了呢。这个时候是不是找一个能把这些服务进行管理的领导者呢。没错,注册中心就是来做这件事情的。所有的服务将自己注册到注册中心中,报告自己的实时状况,调用者需要服务的时候,就去找注册中心,告诉它自己需要什么服务,取对应的服务进行调用,这样是不是就清晰很多了。当然,这仅仅只是开始,一个强大的分布式系统不仅仅以这点东西作为支撑,我们慢慢来学习。
当前所知的两套开发微服务的技术栈:
Dubbo+zookeeper(注册中心)
SpringCloud+Eureka(注册中心)
了解SpringCloud
1、什么是SpringCloud
SpringCloud是基于SpringBoot提供了一套完整的微服务解决方案,包括服务的注册与发现、客户端负载均衡、熔断器、配置中心、服务网关、全链路追踪等组件。在学习SpringCloud之前,必须了解SpringBoot,SpringCloud是基于SpringBoot进行开发的。
2、首先通过下面这张图了解一下SpringCloud相关功能:
注:图不是我画的,在此感谢画图的大牛!!!
3、SpringCloud的五大核心组件:
服务注册与发现:Netflix Eureka
客户端负载均衡:Netflix Ribbon
断路器:Netflix Hystirx
服务网关:Netflix Zuul
分布式配置中心:Spring Cloud Config
4、Spring Cloud版本
SpringCloud版本名称的命名方式采用了伦敦地铁站的名称,同时根据字母表的顺序来对应版本时间顺序,比如:最早的版本:Angel,第二个版本:Brixton,然后是Camden、Dalston、Edgware、 Finchley、Greenwich、Hoxton。
spring-cloud版本列表如下:
https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies
spring-boot-starter-parent 版本如下:
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent
5、SpringCloud与SpringBoot版本的对应关系
查看地址:
https://start.spring.io/actuator/info
"spring-cloud": {
"Finchley.M2": "Spring Boot >=2.0.0.M3 and <2.0.0.M5",
"Finchley.M3": "Spring Boot >=2.0.0.M5 and <=2.0.0.M5",
"Finchley.M4": "Spring Boot >=2.0.0.M6 and <=2.0.0.M6",
"Finchley.M5": "Spring Boot >=2.0.0.M7 and <=2.0.0.M7",
"Finchley.M6": "Spring Boot >=2.0.0.RC1 and <=2.0.0.RC1",
"Finchley.M7": "Spring Boot >=2.0.0.RC2 and <=2.0.0.RC2",
"Finchley.M9": "Spring Boot >=2.0.0.RELEASE and <=2.0.0.RELEASE",
"Finchley.RC1": "Spring Boot >=2.0.1.RELEASE and <2.0.2.RELEASE",
"Finchley.RC2": "Spring Boot >=2.0.2.RELEASE and <2.0.3.RELEASE",
"Finchley.SR4": "Spring Boot >=2.0.3.RELEASE and <2.0.999.BUILD-SNAPSHOT",
"Finchley.BUILD-SNAPSHOT": "Spring Boot >=2.0.999.BUILD-SNAPSHOT and <2.1.0.M3",
"Greenwich.M1": "Spring Boot >=2.1.0.M3 and <2.1.0.RELEASE",
"Greenwich.SR6": "Spring Boot >=2.1.0.RELEASE and <2.1.999.BUILD-SNAPSHOT",
"Greenwich.BUILD-SNAPSHOT": "Spring Boot >=2.1.999.BUILD-SNAPSHOT and <2.2.0.M4",
"Hoxton.SR9": "Spring Boot >=2.2.0.M4 and <2.3.8.BUILD-SNAPSHOT",
"Hoxton.BUILD-SNAPSHOT": "Spring Boot >=2.3.8.BUILD-SNAPSHOT and <2.4.0.M1",
"2020.0.0-M3": "Spring Boot >=2.4.0.M1 and <=2.4.0.M1",
"2020.0.0-M4": "Spring Boot >=2.4.0.M2 and <=2.4.0-M3",
"2020.0.0-M6": "Spring Boot >=2.4.0.M4 and <2.4.2-SNAPSHOT",
"2020.0.0-SNAPSHOT": "Spring Boot >=2.4.2-SNAPSHOT"
}
6、相关资料
Spring Cloud Netflix中文文档
https://www.springcloud.cc/spring-cloud-netflix.html
Spring Cloud中文网
https://www.springcloud.cc/
SpringCloud常用五大组件
SpringCloud之Eureka服务的注册与发现
SpringCloud之Ribbon负载均衡器
SpringCloud之Hystrix断路器
SpringCloud之Zuul服务网关
SpringCloud之Spring Cloud Config分布式配置
SpringCloud其他组件