vlambda博客
学习文章列表

第六章:侵入式服务治理

侵入式服务治理

  • 在应用端使用框架提供的API开发程序并提供服务治理方案。

dubbo

更侧重于RPC而非服务治理

概述

  • 服务间基于RPC调用
  • RPC 抽象一点将就是序列化,远程通信,反序列化。

核心流程

  • 组成部分:服务提供者,服务消费者,注册中心
  • 流程:
    • 1:服务提供者完成初始化后向注册中心注册服务
    • 2:服务消费者完成初始化后向注册中心订阅服务
    • 3:注册中心在服务提供者列表发生变化时将变化同步给服务消费者
    • 4:服务消费者和服务提供者初次建立链接后,即持有长链接,他们之间将通过透明化的远程调用进行通信。

注册中心

  • 支持类型,1:Multicast,2:Zookeeper,3:Redis,4:Simple,5:Nacos
  • 目前主流注册中心是Zookeeper和2.8之后的Nacos。
  • 注册信息写入ZK节点,其中根节点为dubbo,URL为临时节点,保存IP端口调用方法等元数据信息,以及传输协议,最大连接数,路由决策等信息。
  • 支持多注册中心
  • ZK保存节点如图

负载均衡

  • 负载均衡为客户端负载均衡。即由消费者一方决定将通信发往哪个服务提供者。
  • 消费者实例启动时会从注册中心同步一份服务列表,并在服务提供者发生变化时跟新本地数据副本。每次远程调用时,消费者读取本地副本,并根据合适的负载均衡策略选择不同的服务提供方。
  • 特点
    • 1:弹性好:机遇服务发现可以快速扩容或缩容,相比生硬服务列表配置更加动态,灵活和实时(之前NG好像在upStream中是这么玩的,但两个不是同一个东西),使得应用能够已原生方式利用云资源的弹性伸缩。
    • 2:高可用,去中心化,任何节点挂掉不会对服务产生实质影响。
    • 3:性能优,采用dubbo协议的服务消费者和服务提供者之间是点对点直连的。建立链接后无需断开,无需重新经过三次握手,无需经过负载均衡服务器的二次转发。

远程通信

  • RMI,Hessian,HTTP,WebService,Thrift,dubbo等。
  • 默认支持Dubbo(特点)
    • 1:创建固定长链接,减少建立链接握手次数
    • 2:通过使用线程池并发处理请求提升并发效率
    • 3:由于链接复用,适合小数据量请求,避免大文件占用带宽
    • 4:并非原生NIO,而是才用netty做为底层通信,可以切换为mina
    • 5:支持多种序列化,Dubbo,Json,pb,java原生等,可通过配置切换。序列化会对远程通信的吞吐量,响应速度,网络带宽消耗产生比较大的影响,是提升分布式系统性能的关键因素

限流

  • 针对服务提供方,保护自己不被打垮。可配置实例的最大可接受连接数,最大线程数,每个服务提供者可建立的长链接数。

治理中心

  • dubbo-admin,仅需要与注册中心关联即可
  • 提供一个可视化中心,辅助做运维工作。提供了分组查询、配置更改、加权降权、禁用启用、权限控制、负责人管理等运维功能。

监控中心

  • 现有dubbo-monitor不够好
    • 1:缺乏完善的调用链统计功能
    • 2:无法绘制系统的整体调用关系
    • 3:无法钻去dubbo之外的请求信息

spring-cloud

  • 提供了一套云原生开发组件,使用统一编程模型,为配置管理,服务发现,负载均衡,网关,限流熔断,日志追踪等提供了一套完成且便捷的解决方案。每个组建都可以写好多,这里就展开了。