引言

  • 以前用Spring Boot的时候,所有的功能都是部署在同一个地方,这样会使得项目在团队开发的时候不是很方便,所以这边引入了一个微服务的概念。
  • 微服务的意思就是,将一个项目分成不同的模块,不同的模块分布在不同的地方,每一个模块都相当于是一个微服务。
  • 所以微服务的核心就是模块化

初识微服务

然而微服务架构在应用过程中会出现以下四个核心问题

  • ① 服务很多,客户端(手机、浏览器、物联网)该怎么访问
  • ② 服务很多,服务之间如何通讯(比如订单服务需要和交易服务进行通讯);(补:通讯可以基于HTTP或者RPC,一般就这两种,当然还有其他的)
  • ③ 服务很多,如何治理;(用到服务注册与发现机制
  • 服务挂了怎么办;
    这个是微服务最难解决的问题,我们要去做容灾。可以采用备份一个服务的方式等;(比如阿里服务炸了怎么办,他还有各种备份… …)

有问题就要去解决,Spring Cloud(做分布式的)的诞生就是为了解决这四个问题;

初识Spring Cloud

Spring Cloud不是一个技术,而是一个生态;
现代化的Java开发是构建用Spring Boot,协调用Spring Cloud;
因为这四种问题的解决方案有很多,所以Spring Cloud生态里面的框架也有很多;
现在用的比较多的就是下面几种:

  • Spring Cloud Netflix(这个已经在18年12月停止维护了,但是公司用的还是比较多的,因为比较成熟)
    它属于一站式解决方案,四个问题都可以解决;

它是如何解决那四个问题的呢?

  1. 客户端访问问题:看上图可以发现三种客户端先通过一个网关(API Gateway)然后才与各个模块之间接触,所以它的解决方案就是用一个API网关;也是用的一个Zuul组件(其实对于我们写代码来说就是加上两个注解,但是还是要去学)
  2. 服务间的通讯问题:用的是Feign;
    Feign是基于HttpClient,也就是基于HTTP通信方式,是同步、会阻塞的;而下面的那个Dubbo是异步、非阻塞的;
  3. 服务器治理问题:具备服务器注册与发现机制,这里用的是Eureka;而在大数据里面,zookeeper用的比较多;
  4. 服务器挂了问题:具备熔断机制,用的是Hystrix;

该框架中除了具备解决上面四个问题的这些技术外,还有很多其他技术… …

  • Apache Dubbo Zookeeper
    它属于半自动的解决方案,其中它无法解决的问题需要整合别人的;

那么它对微服务中出现的四个问题是如何解决的呢?

  1. 客户端访问问题:没有API网关去解决,所以需要找第三方组件或者自己实现(网关自己实现起来其实并不难)
  2. 服务间的通讯问题:用Dubbo,专门去做通信的,比Feign做的好;
  3. 服务器治理问题:服务注册与发现机制用zookeeper,用起来很简单,只需要搭建然后向里面注册;
  4. 服务器挂了问题:没有自己的熔断机制,只能去找别人的

总得来说,这个方案其实并不是很完善,但是它在通信这一块做的比较好,有专攻;

  • Spring Cloud Alibaba(这个是最新的,可能没有被很多公司使用)
    最新的一站式解决方案,出现的原因主要是Spring Cloud Netflix停更了,而现在阿里巴巴的这个要更简单了;其实是和它类似,就是界面不一样了;

这三套都有彼此的优缺点,都需要我们了解;

微服务新概念

关于微服务现在还有一些新概念:服务网格(Server Mesh),据说成为下一代微服务的标准;
它有代表的新的解决方案,istio,以后可能会学得到

小结

微服务和Spring Cloud万变不离其宗的四个相关面:

  1. API(解决服务路由问题)
  2. HTTP、RPC(解决服务通信问题)
  3. 注册和发现(解决高可用?)
  4. 熔断机制(服务降级?)

如果我们可以根据微服务发生的四个问题创作出自己的解决方案,那么我们也可以开发出自己的一个Spring Cloud框架;

上面四个问题出现的原因就是:网络不可靠。以前东西都在一个地方,就不会出现这种问题;现在分布式,需要靠网络连接;

常见面试题

  1. 什么是微服务;
  2. 微服务之间如何独立通讯的;
  3. Spring Cloud和Dubbo有哪些区别;
  4. Spring Boot和Spring Cloud,谈谈对他们的理解;
  5. 什么是服务熔断,什么是服务降级;
  6. 微服务的优缺点分别是什么,说下你在项目开发中遇到的坑;
  7. 你所知道的微服务技术栈有哪些?请列举一二;
  8. eureka和zookeeper都可以提供服务注册与发现机制的功能,请说说两个的区别;
    … …