引言
- 以前用Spring Boot的时候,所有的功能都是部署在同一个地方,这样会使得项目在团队开发的时候不是很方便,所以这边引入了一个微服务的概念。
- 微服务的意思就是,将一个项目分成不同的模块,不同的模块分布在不同的地方,每一个模块都相当于是一个微服务。
- 所以微服务的核心就是模块化。
初识微服务
然而微服务架构在应用过程中会出现以下四个核心问题:
- ① 服务很多,客户端(手机、浏览器、物联网)该怎么访问;
- ② 服务很多,服务之间如何通讯(比如订单服务需要和交易服务进行通讯);(补:通讯可以基于HTTP或者RPC,一般就这两种,当然还有其他的)
- ③ 服务很多,如何治理;(用到服务注册与发现机制)
- ④ 服务挂了怎么办;
这个是微服务最难解决的问题,我们要去做容灾。可以采用备份一个服务的方式等;(比如阿里服务炸了怎么办,他还有各种备份… …)
有问题就要去解决,Spring Cloud(做分布式的)的诞生就是为了解决这四个问题;
初识Spring Cloud
Spring Cloud不是一个技术,而是一个生态;
现代化的Java开发是构建用Spring Boot,协调用Spring Cloud;
因为这四种问题的解决方案有很多,所以Spring Cloud生态里面的框架也有很多;
现在用的比较多的就是下面几种:
- ① Spring Cloud Netflix(这个已经在18年12月停止维护了,但是公司用的还是比较多的,因为比较成熟)
它属于一站式解决方案,四个问题都可以解决;
它是如何解决那四个问题的呢?
- 客户端访问问题:看上图可以发现三种客户端先通过一个网关(API Gateway)然后才与各个模块之间接触,所以它的解决方案就是用一个API网关;也是用的一个Zuul组件(其实对于我们写代码来说就是加上两个注解,但是还是要去学)
- 服务间的通讯问题:用的是Feign;
Feign是基于HttpClient,也就是基于HTTP通信方式,是同步、会阻塞的;而下面的那个Dubbo是异步、非阻塞的; - 服务器治理问题:具备服务器注册与发现机制,这里用的是Eureka;而在大数据里面,zookeeper用的比较多;
- 服务器挂了问题:具备熔断机制,用的是Hystrix;
该框架中除了具备解决上面四个问题的这些技术外,还有很多其他技术… …
- ② Apache Dubbo Zookeeper
它属于半自动的解决方案,其中它无法解决的问题需要整合别人的;
那么它对微服务中出现的四个问题是如何解决的呢?
- 客户端访问问题:没有API网关去解决,所以需要找第三方组件或者自己实现(网关自己实现起来其实并不难)
- 服务间的通讯问题:用Dubbo,专门去做通信的,比Feign做的好;
- 服务器治理问题:服务注册与发现机制用zookeeper,用起来很简单,只需要搭建然后向里面注册;
- 服务器挂了问题:没有自己的熔断机制,只能去找别人的
总得来说,这个方案其实并不是很完善,但是它在通信这一块做的比较好,有专攻;
- ③ Spring Cloud Alibaba(这个是最新的,可能没有被很多公司使用)
最新的一站式解决方案,出现的原因主要是Spring Cloud Netflix停更了,而现在阿里巴巴的这个要更简单了;其实是和它类似,就是界面不一样了;
这三套都有彼此的优缺点,都需要我们了解;
微服务新概念
关于微服务现在还有一些新概念:服务网格(Server Mesh),据说成为下一代微服务的标准;
它有代表的新的解决方案,istio,以后可能会学得到
小结
微服务和Spring Cloud万变不离其宗的四个相关面:
- API(解决服务路由问题)
- HTTP、RPC(解决服务通信问题)
- 注册和发现(解决高可用?)
- 熔断机制(服务降级?)
如果我们可以根据微服务发生的四个问题创作出自己的解决方案,那么我们也可以开发出自己的一个Spring Cloud框架;
上面四个问题出现的原因就是:网络不可靠。以前东西都在一个地方,就不会出现这种问题;现在分布式,需要靠网络连接;
常见面试题
- 什么是微服务;
- 微服务之间如何独立通讯的;
- Spring Cloud和Dubbo有哪些区别;
- Spring Boot和Spring Cloud,谈谈对他们的理解;
- 什么是服务熔断,什么是服务降级;
- 微服务的优缺点分别是什么,说下你在项目开发中遇到的坑;
- 你所知道的微服务技术栈有哪些?请列举一二;
- eureka和zookeeper都可以提供服务注册与发现机制的功能,请说说两个的区别;
… …