1.微服务架构的必要条件
一般微服务架构需要实现以下功能或满足以下场景:
(1)把整个系统根据业务拆分成几个子系统。
(2)每隔子系统可以部署多个应用,多个应用之间使用负载均衡。
(3)需要一个服务注册中心,所有的服务都在注册中心组册,负载均衡也是通过在注册中心住的的服务来使用一定的策略来实现。
(4)所有的客户端都通过同一个网关地址访问后台的服务,网关通过路由配置来判断一个URL请求由哪个服务去处理,请求转发到服务上的时候也使用负载均衡。
(5)服务之间有时候也需要相互访问。例如有一个用户模块,其他服务在处理一些业务的时候,要获取用户服务的用户数据。
(6)需要一个断路器,及时处理服务调用时的超时和错误,防止由于其中一个服务的问题而导致整体系统的瘫痪。
(7)还需要一个监控功能,监控每隔服务调用花费的时间,以及服务成功率等。
2.Spring Cloud Netflix框架概述
Spring Cloud Netflix框架刚好满足上面的所有需求,实现方案如下:
(1)Eureka:服务注册和发现,它提供了一个服务注册中心、服务发现的客户端,还有一个方便的查看所有注册的服务的界面。 所有的服务使用Eureka的服务发现客户端来将自己注册到Eureka的服务器上。
(2)Zuul:网关,所有的客户端请求通过这个网关访问后台的服务。他可以使用一定的路由配置来判断某一个URL由哪个服务来处理。并从Eureka获取注册的服务来转发请求。
(3)Ribbon:即负载均衡,Zuul网关将一个请求发送给某一个服务的应用的时候,如果一个服务启动了多个实例,就会通过Ribbon来通过一定的负载均衡策略来发送给某一个服务实例。
(4)Feign:服务客户端,服务之间如果需要相互访问,可以使用RestTemplate,也可以使用Feign客户端访问。它默认会使用Ribbon来实现负载均衡。
(5)Hystrix:监控和断路器。我们只需要在服务接口上添加Hystrix标签,就可以实现对这个接口的监控和断路器功能。
(6)Hystrix Dashboard:监控面板,他提供了一个界面,可以监控各个服务上的服务调用所消耗的时间等。
(7)Turbine:监控聚合,使用Hystrix监控,我们需要打开每一个服务实例的监控信息来查看。而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。这样就不需要挨个打开一个个的页面一个个查看。