高并发系统设计--注册中心与分布式Trace

注册中心

注册中心主要用来解决在服务端异常、扩容、缩容时如何快速通知客户端。常见的注册中心有Zookeeper、etcd、consul、nacos、eureka等。

  • 注册中心主要提供两个基本功能:
  1. 提供服务地址的存储
  2. 当存储内容发生变化时,将变化内容推送给客户端
  • 完整的服务注册和发现的过程:
  1. 客户端会与注册中心建立连接,并且告诉注册中心,它对哪一组服务感兴趣;
  2. 服务端向注册中心注册服务后,注册中心会将最新的服务注册信息通知给客户端;
  3. 客户端拿到服务端的地址之后就可以向服务端发起调用请求了。
  • 注册中心一个很重要的功能是如何管理服务状态,有两种思路:1. 主动探测;2. 心跳模式
  1. 主动探测;注册中心每隔一段时间探测服务端口是否可用,根据是否可用来判断是否正常。这种方式有两个问题:服务端需要开放统一的端口来判断是否正常;实例多时,会增加探测成本。
  2. 心跳模式:服务端每隔一段时间就发送心跳请求,来更新注册状态;心跳机制相比主动探测的机制,适用范围更广。

注册中心节点提供一些保护策略,避免节点被过度摘除导致的服务不可用。

分布式Trace

经过服务化拆分之后,服务的可扩展性增强,服务节点增加。一个请求会经过多个RPC服务或者使用多个资源,当请求出现异常或时延过长时,如何快速定位异常及确定请求时延长的节点。此时需要能过分布式Trace来快速定位问题。

  • 可以通过 requestId 将多个服务器上的日志串起来,但是仅仅依靠 requestId 很难表达清楚服务之间的调用关系,所以从日志中就无法了解服务之间是谁在调用谁。因此,我们采用 traceId + spanId 这两个数据维度来记录服务之间的调用关系(这里 traceId 就是 requestId),也就是使用 traceId 串起单次请求,用 spanId 记录每一次 RPC 调用。
  • 对于分布式trace一般会与到性能问题,也就是因为引入了分布式追踪中间件,导致对于磁盘 I/O 和网络 I/O 的影响。可以通过增加一个开关,方便在线上随时将日志打印关闭;或者增加一个日志采样率的参数,开始设置一个较低的日志采样率,观察系统性能情况再调整到一个合适的数值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值