一、为什么要使用微服务架构?
随着用户增加,流量增大,单个服务器部署已无法满足复杂业务处理和系统运行时,考虑负载均衡,横向扩展将整个项目部署到很多台机器,使用代理来协调用户访问问题;
但随之出现的问题是,负载均衡只是将同一套系统部署了N遍,分别部署在了A、B、C.....等多台服务器上,假设系统有用户模块、订单模块、物流模块、售后模块等等。。。,但每个模块的使用频率不同,所以有可能造成服务器资源浪费,而且并未从根源解决核心业务处理速度问题。
于是,出现了微服务架构:将系统按照功能模块进行拆分,各个服务器各司其职,分别处理整个业务环节中自己所负责的模块。例如:A服务器专门处理用户管理相关功能,B、C服务器专门处理订单相关功能,D服务器专门处理支付结算功能等等。。。,将各模块拆分单独处理,对外提供服务,各模块之间通过调用其他服务器提供的服务进行数据交换。由于需要不同服务器之间进行通信,所以微服务需要解决以下几个问题
二、微服务需要解决哪些问题?
1、这么多服务,客户端该如何进行访问?(API网关)
2、这么多服务分别部署在不同的服务器上,他们之间如何进行通信?(RPC框架)
3、这么多服务如何暴露出去?如何让别人可以知道并且调用?如何统一管理这些服务?(服务注册与发现)
4、服务挂了怎么办?(熔断机制)
基于这四个核心问题,于是就出现了以下几种解决方案
三、微服务解决方案
1、SpringCloud Netflix ,出了一整套解决方案
API网关:Zuul 组件
RPC框架:Feign ---> HTTPClient ---> http通信方式,同步并阻塞
服务注册与发现:Eureka
熔断机制:Hystrix
2、Apache Dubbo + Zookeeper 并不是一套完善的解决方案
API网关:未提供,需自行实现或使用第三方插件
RPC框架:Dubbo 一个高性能的基于Java实现的RPC框架
服务注册与发现:Zookeeper
熔断机制:未提供,借助了 Hystrix
3、SpringCloud Alibaba 一站式解决方案
。。。