微服务架构

先上一张微服务整体架构图

1、网关API Gateway

统一应用请求接口.API网关在微服务们的最前端,让 API网关变成由应用所发起的每个请求的入口,简化客户端实现和微服务应用程序间的沟通方式

API Gateway的作用:

  • 请求路由,版本控制: API Gateway 是微服务的入口,可以根据不同的请求路由到不同的服务上. 也可以进行路由的版本控制,这样即使后服务发生了变化,Gateway 的路径依然可以不改变
  • 用户登录,权限认证: 客户端在与我们后端服务进行交互之前,由API Gateway先进行登录鉴权操作,这是后端所有的服务都需要有的共有逻辑
  • 数据聚合: 由于不同的客户端往往需要的数据完全不同,而这些数据又是不同的 service 提供的,可以借助 Gateway 方便完成来自不同 service 的数据聚合
  • 协议转换:在项目实践中,CS(Client to Server)协议和SS(Server to Server)协议是不一样的,为了保证数据传输的可靠性,CS协议会有鉴权以及加密解密的逻辑,而在内部的SS协议则不需要这些逻辑,因此在 Gateway 我们需要有一个协议转换的过程
  • 熔断,降级,限流: 通过API Gateway可以在监测到某个服务发生异常,或者当服务的流量超过服务的承载能力等情况时,可以采取相应的措施. 提高整个系统的容错性、稳定性
  • 负载均衡: API Gateway知道所有服务实例的地址,可以根据不同服务采取不同的负载均衡策略
  • 灰度发布: 灰度发布允许直接只导入指定量的流量请求到新的版本

API Gateway的架构:

  • 多网关集群(Backends for frontends):针对不同的客户端,都有相应的网关层来接入.功能主要有:用户登录,鉴权,服务发现注册,协议转换,接口版本控制等以及监控,APM调用链,日志,流控策略等
  • 聚合服务(Merge Service):在某些客户端的需求中,需要从多个服务拉取数据,为了减少客户端的复杂度,以及加快客户端的访问速度,可以加一个聚合层,用来做聚合查询,在某些接口中可以把多个服务的数据一次性返回给客户端
  • 仪表盘管理端(Dashboard):Dashboard: 提供可视化的分析平台,包括服务的管理,监控数据报警配置,日志查询,灰度发布操作,API文档管理等

2、Eureka(服务发现框架)

Eureka是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的. SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能

Eureka的两个组件:

  • Eureka Server(注册中心):Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中看到,Eureka Server之间通过复制的方式完成数据的同步
  • Eureka Client(服务消费者,服务提供者):是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器
  • Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性在应用启动后,将会向Eureka Server发送心跳, 如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除。Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性

Eureka的作用:
消费者该如何获取服务提供者具体信息?

  1. 服务提供者启动时向Eureka注册自己的信息
  2. Eureka保存这些信息
  3. 消费者根据服务名称向Eureka拉取提供者信息
    如有有多个服务提供者,消费者该如何选择?
  4. 服务消费者利用负载均衡算法,从服务列表中挑选一个
    消费者如何感知服务提供者健康状态?
  5. 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
  6. Eureka会更新记录服务列表信息,心跳不正常会被剔除
  7. 消费者就可以拉取到最新的信息
posted @ 2022-03-31 16:34  爱晚亭的那一片枫叶林  阅读(256)  评论(0)    收藏  举报