本套课程是基于spring cloud最Finchely版微服务基础框架整合教程,主要以架构思想为核心,兼顾详细代码演示。
本使用Spring Cloud能够让我们的应用分布式部署,过去传统上,我们的应用总是将前端和后端打包成一个war包部署到Tomcat等服务器上,这种情况下,服务器这个概念成了我们应用的一个边界容器,每台服务器一般部署一个应用系统,这是一种传统的SOA架构,在这种情况下,WAR包、Tomcat服务器成了我们的服务的容器,而我们在编程时主要是面向一个个服务进行设计编码,怎么到了运行阶段反而多出了服务器概念?如何破?有了服务器概念,我们的服务的地位就下降了,而在微服务架构中,微服务才是第一等公民,服务器等概念应该隐藏在服务后面。
下面一个问题是如何破解一个WAR包?WAR包中一般有SpringMVC前端和我们服务后端代码,这两端代码是直接通过服务接口调用的:
前端SpringMVC + 后端服务 = war包
很显然,这是违背以服务为第一等公民和核心的宗旨的,前端耦合到后端服务,后端服务可能为前端定制一套代码,再通过暴露REST/web服务暴露另外一种接口服务给其他系统调用,我们把前端调用和其他系统调用分开处理,有了两套服务代码,无疑这加重了后端开发负担,那么只有将前端从后端分离出去,后端独立以后才能使用一套服务代码为不同的客户端服务。
前端(SpringMVC、ReactJS/VueJS或其他系统) ---->后端服务 = 分离部署
通过这种分离,我们的微服务才能被打包进Docker容器,被K8s这样的容器管理平台调度,哪里不够打哪里,哪里不够用直接调用扩展容器数量即可,做到性能调整精确制导,当我们的后端微服务加上Docker+K8s的底座以后,真正的云平台就诞生了。
SpringBoot框架配合SpringCloud帮助我们实现了这样目标,SpringBoot主要是实现了前后端分离,而SpringCloud则为后端服务建立了一套分布式系统架构,两者结合一起,使得开发人员不但开发业务,而且也介入云的基础底层设施,干涉到了业务系统运营管理,这就是DevOps的来历,Dev是业务开发,而Ops是运营,云应用包括这两部分概念,过去我们以服务器为第一公民的SOA架构中,服务器以下的基本属于运营部门管理,而业务人员只管开发即可,现在这种分离思维被打破了,这也是云计算平台化PaaS普及以后给我们带来的改变。
当我们使用SpringBoot和Rest+JSON方式分离了前后端,那么后端可以组成一种服务网格式,前后端之间可以引入API网关等代理机制,通过代理这种门户模式屏蔽了后端服务对前端的暴露,同时也能对前后端路由以及运营情况进行监控。
Spring Cloud是主要涉及分布式系统的开发,分布式系统主要有哪些概念呢?负载均衡、服务注册是必不可少的。
负载均衡这个我们应该熟悉,在服务器为王时代也是需要负载均衡的,几台机器可以平均处理大量请求。
服务注册则是延续SOA概念,因为在SOA过去是使用RPC方式进行服务调用,服务之间接口耦合,也就是调用者需要被调用者的代码,现在都采取 REST/JSON以后,因为JSON是一种字符串,调用双方就完全解耦了,因为对象的传输需要序列化和反序列化,这些当然不需要我们编码完成,因此双方实际是一种值数据额耦合,虽然降低一些性能,但是松耦合更高。
因此,整个后端微服务架构其实分四个部分:
1. API网关,用于前后端交互,如果没有前端就无法调用后端
2. 服务注册与发现,如果没有服务之间就无法调用。
3. 服务之间在分布式环境中找到对方以后,如果对方很忙怎么办?负载均衡策略需要引入,同时需要运营监控。
根据这三个主要部分,我们看看下面Spring Cloud微服务图:
我们发现Spring Cloud中主要有四个部分(中文红字),其中微服务容器里面提供了负载均衡Ribbon、REST客户端Feign和断路器Hystrix三个部分,也就是说,在我们每次编写微服务业务代码时,这三个基础设施的配置我们也需要完成的,表面上好像带来工作量,实际上这就是DevOps精华,能让我们细粒度控制我们业务的运行行为,当然也可以统一配置和修改,这就少不了配置服务器。
通过以上简单介绍,我们已经大概了解我们需要学习和掌握的基本单元:
•1. 微服务容器: 业务服务、负载均衡Ribbon、REST客户端Feign和断路器Hystrix
•2. 服务注册发现:Eureka
•3. 运营监控:能够对流量和断路器运营进行可视化监控
•4. API网关:单一入口点来管理所有API调用,通过规则将请求路由到微服务,Zuul/Spring Cloud Gateway
•5. 配置服务: 相当于源码编程阶段的网关,统一配置运行时的各种参数
引用网上的一幅图,可以完整了解一下这些部件如何运作:
很显然,SpringCloud的核心是服务注册发现和调用,把这个核心学会了,基本掌握其原理,这也是业务程序员每天编码需要经常碰到的问题,让我们从这个核心开始学习:
SpringCloud专题
Spring专题
Spring各种教程源码项目下载
分布式计算专题
云计算专题