分布式微服务架构(一)

一、为什么要使用微服务架构?

  随着用户增加,流量增大,单个服务器部署已无法满足复杂业务处理和系统运行时,考虑负载均衡,横向扩展将整个项目部署到很多台机器,使用代理来协调用户访问问题;

但随之出现的问题是,负载均衡只是将同一套系统部署了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  一站式解决方案

    。。。

分布式微服务架构(一)

上一篇:协同开发中SVN的使用建议


下一篇:Golang解决fatal error: all goroutines are asleep - deadlock!