Spring Cloud Alibaba 读书笔记_3:微服务架构下的服务治理

微服务架构下的服务治理

RPC

远程过程调用(Remote Procedure Call)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。
RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。【来自维基百科】
流程

  • 客户端调用客户端stub(client stub)。这个调用是在本地,并将调用参数push到栈(stack)中。
  • 客户端stub(client stub)将这些参数包装,并通过系统调用发送到服务端机器。打包的过程叫 marshalling。(常见方式:XML、JSON、二进制编码)
  • 客户端本地操作系统发送信息至服务器。(可通过自定义TCP协议或HTTP传输)
  • 服务器系统将信息传送至服务端stub(server stub)。
  • 服务端stub(server stub)解析信息。该过程叫 unmarshalling。
  • 服务端stub(server stub)调用程序,并通过类似的方式返回给客户端。

Apache Dubbo

框架产生原因:

  • 大规模服务化后,当服务提供者出现故障或需要动态扩容时,需要更新相关配置,维护成本非常高。实现服务的上下动态线感知及服务地址的动态维护就显得极为重要。
  • 服务指标监控,需要根据不同服务的访问情况来合理的调控及分配服务器资源,提高机器利用率。
    在这里插入图片描述

ZooKeeper

ZooKeeper是一个高性能的分布式协调中间件,主要解决分布式环境中各个服务进程的访问控制问题ZooKeeper并不是注册中心,只是基于ZooKeeper本身的特性可以实现注册中心这个业务场景而已。

  • Znode
    • 安装注意:
      • 默认下载的 zk_sample.cfg ,拷贝一份并命名为 zk.cfg
      • 在版本高于 3.5 时, 8080 端口会被 ZooKeeper Admin Server 占用,需要在 zk.cfg 中配置 admin.serverPort 进行配置。
    • 数据结构【结构化层级存储

ZooKeeper中每个节点被称为 ZnodeZnode 维护了一个 stat 的状态信息,其中包含数据变化的时间和版本等。每个 Znode 可以设置一个 value 值,且每个节点的数据是允许的。读:获得指定 Znode 上的 value 数据;写:修改指定 Znode 上的 value 数据。

  • 类型【同级目录下,节点的名称必须是唯一的,根节点:/dubbo
    • 持久化节点:节点数据需要持久化到磁盘disk。
    • 临时节点:节点的生命周期和创建该节点客户端生命周期保存一致。客户端会话结束,该临时节点会被自动删除。
    • 有序节点:创建的节点后边会增加一个递增的序列该序列在同一级父节点之下是唯一的。持久化节点或者临时节点也可以设置为由有序节点。
    • 容器节点(3.5.3+):当容器节点下的最后一个子节点被删除时,容器节点就会被自动删除
    • TTL节点(3.5.3+):针对持久化节点或者持久化有序节点,可以设置存活时间,如果存活时间之内该节点没有任何修改并且没有任何子节点,就会被自动删除。
  • Watcher机制Znode 的订阅/通知机制
    • 设置观察操作API: existsgetChildrengetData
    • 触发观察操作API: createdeletesetData
    • 触发机制的说明:事件触发都是一次性的,客户端设置观察注册监听后,若服务节点发生数据修改,客户端会收到通知。但是当服务节点再次发生数据修改时,客户端无法收到Watcher事件。因此,客户端必须要在收到事件通知回调中再次注册事件。
  • 应用场景
    • 分布式锁:分布式架构中,多进程对同一个共享资源的访问存在数据安全问题,需要通过锁的形式解决。结合锁的排他性,在获得锁、释放锁的的过程中实现多进程共享资源访问的控制。
    • Master选举
      • 同一级节点不能重复创建一个已经存在的节点,类比分布式锁。非Master节点注册Watcher事件,当有节点处于非存活状态下时,重新进行Master选举。
      • 通过临时有序节点实现选举,临时节点具有时效性,有序节点会存在递增序列,在单次回话中借助递增序列,每个节点会按序排列,在按照后者看前者的原则,注册Watcher事件,当前置节点被删除时,当前节点的下一个节点则被选举为Master节点。
  • RPC通信较为尖锐的问题:
    • 服务动态上下线感知:维护服务配置管理,动态处理
    • 负载均衡:结合实际情况,对服务配置资源进行合理的调度分配及管理

Apache Dubbo 高级应用

  • 支持多种协议的服务发布,默认是 dubbo:// ,还支持 rest://webservice://thrift:// 等。
  • 支持多种不同的注册中心,如 NacosZooKeeperRedis 等。
  • 支持多种序列化技术,如 avrofstfastjson 等。

服务治理应用举例

  • 集群容错:服务异常的优雅解决方案【实际应用中,查询操作建议使用默认的Failover策略,增删改操作建议使用Failfast策略】
    • Failover:失败自动切换,默认重试次数 2,适用于读操作,事务性操作会带来数据重复的问题
    • Failfast:快速失败,只发起一次调用,适用于幂等性的写操作,及时止损
    • Failsafe:失败安全,忽略异常
    • Failback:失败后自动回复,定时重发,适用于消息通知操作
    • Forking:并行调用集群中多个服务,成功一个就返回
    • Broadcast:广播调用所有服务的提供者,出现失败即为调用失败,适用于通知服务提供者更新服务或本地缓存资源
  • 负载均衡:平衡服务提供方压力及请求转发
    • Random:随机算法,针对性能优秀的服务器设置较大权重值,有更大几率随机选中
    • RoundRobin:轮训,按照约定后的权重设置轮训比例
    • LeastActive:最少活跃,处理较慢、性能较差会收到更少的请求
    • ConsistentHash:一致性哈希,相同参数的请求会被分配到同一个服务提供者
  • 服务降级:系统保护策略,根据业务场景将非必要服务进行关闭或降级
    • 按照是否自动化可分为自动降级人工降级
    • 按照功能可分为读服务降级写服务降级

猜你喜欢

转载自blog.csdn.net/Nerver_77/article/details/108237225