电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

如何定位及解决分布式锁缓慢问题,看这里!

来源:金蝶云社区作者:金蝶2024-09-233

如何定位及解决分布式锁缓慢问题,看这里!

1 业务背景


在苍穹系统中,zookeeper的使用场景包括:微服务配置服务、微服务注册中心、分布式ID、分布式锁、后台任务调度、分布式计算集群模式(AlgoX)。其中,分布式锁使用了zookeeper客户端CuratorFramework框架的Lock接口,并进行了增强。


随着业务发展和用户数量不断增加,分布式锁服务使用愈加频繁(在分布式环境下,需要独占(锁定)某个资源的时候,需要用到分布式锁。关于分布式锁的介绍及使用方法可参考“看完这份攻略,'苍穹分布式锁'拿捏得稳稳的”)。在一些环境中,可能出现用户操作业务后获取分布式锁缓慢的问题,导致zookeeper性能瓶颈,进而阻塞业务功能,影响系统的稳定性和可用性。


那么,如何解决上述问题呢?本期文章便手把手教你如何定位及解决分布式锁缓慢问题,以确保系统正常运行~


2 如何分析zookeeper性能瓶颈


通过Monitor的组件检测(菜单路径为:【基础组件】→【组件检测】),可以对zookeeper进行测速,正常情况应该小于10ms。如果持续大于50ms,就可以判断zookeeper有性能瓶颈,以下图为例,测速时间288ms,表明有非常严重的性能瓶颈。


上传图片

zookeeper性能瓶颈示例


那么,如何分析性能瓶颈的原因呢?根据经验,分布式锁由于频繁读写zookeeper,是造成zookeeper性能瓶颈的主要原因。具体分析步骤如下:


首先,进入zookeeper服务器,通过iotop命令观察IO(Input/Output)情况,zookeeper的读写IO高达86%,这台机器的磁盘读写速率不到300KB/s,属于比较差的IO磁盘。


上传图片

通过iotop命令观察IO情况


其次,通过Monitor线程监控页面,观察是否有线程阻塞在获取分布式锁中,且等待时间较长,如下图,等待时间长达6秒。


上传图片

monitor线程监控示例


如果出现了上面的现象,说明zookeeper遇到性能瓶颈,并且是由于分布式锁导致的。


3 解决方案


针对上述问题现象,建议为分布式锁单独部署一个zookeeper服务,同时,将分布式锁的zookeeper配置成不落盘,以降低磁盘IO差导致的性能瓶颈。方案具体实现步骤如下:


3.1 分布式锁独立部署zookeeper服务


部署一套新的zookeeper,然后在MC中将分布式锁的zookeeper地址改为新的zookeeper地址,最后为苍穹配置分布式锁zookeeper服务器信息,配置方法如下:


1. 在MC中新增公共配置DLock.zookeeper=部署的zookeeper地址:端口,例如:


  • 单机部署:DLock.zookeeper=ip:port

  • 集群部署:DLock.zookeeper=ip1:port,ip2:port,ip3:port


2. 在MC集群管理列表中编辑对应集群,配置后保存发布即可。


3.2 zookeeper部署配置为不落盘


分布式锁使用zookeeper是可以不落盘的,只作为临时存储。所以,为了提升zookeeper的读写性能,我们可以将zookeeper配置为不落盘。通过修改zookeeper的配置,让其不走磁盘IO,而是将数据和日志存储在内存中。具体步骤如下:

步骤一:在zookeeper部署机器的/dev/shm目录下创建两个目录,例如:


mkdir /dev/shm/datadir
mkdir /dev/s

如何定位及解决分布式锁缓慢问题,看这里!

1 业务背景在苍穹系统中,zookeeper的使用场景包括:微服务配置服务、微服务注册中心、分布式ID、分布式锁、后台任务调度、分布式计算集群...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信