zookeeper向管控平台上报状态

devtools/2024/9/23 18:01:02/

问题

在你的场景中,由于 Django 应用启动了 4 个 uWSGI 进程,每个进程都会创建一个节点并上报状态,因此出现了 4 次状态上报的情况。这在大多数情况下是不合理的,尤其是在你只期望应用上报一次状态时。

要解决这个问题并优雅地进行修改,以下是几种常见的解决方案:

解决方案

  1. 使用单个进程上报状态 你可以通过 主进程 或 第一个工作进程 来进行上报,避免每个进程都上报。具体方法如下:

    方法一:仅在主进程上报 使用 uWSGI 的 --master 选项,确保只有主进程(master
    process)负责上报状态。你可以在创建 Zookeeper 节点时,检查当前进程是否为主进程,非主进程则不执行上报逻辑。
    import uwsgi if uwsgi.masterpid() == os.getpid():
    # 只有主进程执行上报逻辑
    report_status_to_zookeeper() 方法二:第一个 worker 进程上报 如果你希望使用第一个工作进程来上报状态,而不是主进程,可以使用进程 ID 来判断: import os if os.getpid()
    == min(uwsgi.workers(), key=lambda w: w[‘pid’])[‘pid’]:
    # 只有第一个 worker 执行上报逻辑
    report_status_to_zookeeper()

  2. 使用分布式锁 你可以使用 Zookeeper
    分布式锁机制,确保只有一个进程可以成功获取锁,获取锁的进程上报状态。这样即使启动多个进程,也只有一个进程可以创建节点并上报。 from
    kazoo.client import KazooClient from kazoo.recipe.lock import Lock

    zk = KazooClient(hosts=‘127.0.0.1:2181’) zk.start()

    lock = Lock(zk, “/my/lock/path”)

    with lock:
    –获取锁后上报状态 report_status_to_zookeeper()

  3. 使用共享存储或标志位 你可以使用
    Redis、数据库等共享存储系统,或者在本地文件系统中写入标志位,确保只有一个进程进行状态上报。例如,第一次上报后设置一个标志位,其他进程检测到标志位已存在就不再重复上报。
    from redis import Redis

    redis = Redis()

    if not redis.get(“status_reported”):
    –设置标志位,并上报状态 redis.set(“status_reported”, “1”) report_status_to_zookeeper()

  4. 在管理平台端处理重复上报 如果管理平台端支持去重机制,也可以通过在平台端处理重复上报的逻辑,从而避免对你应用层的改动。


http://www.ppmy.cn/devtools/116110.html

相关文章

camtasia2024绿色免费安装包win+mac下载含2024最新激活密钥

Hey, hey, hey!亲爱的各位小伙伴,今天我要给大家带来的是Camtasia2024中文版本,这款软件简直是视频制作爱好者的福音啊! camtasia2024绿色免费安装包winmac下载,点击链接即可保存。 先说说这个版本新加的功能吧&#…

HarmonyOS第八章:HTTP数据请求

🎉 博客主页:【剑九_六千里-CSDN博客】【剑九_六千里-掘金社区】 🎨 上一篇文章:【HarmonyOS第七章:应用状态共享(PersistentStorage、LocalStorage、AppStorage)】 🎠 系列专栏&…

CPLEX+Yalmip+MATLAB2022a配置

来源:yalmipcplex12.10文件及安装教程-CSDN博客https://blog.csdn.net/qq_41944352/article/details/126421198 安装包 来源:yalmipcplex12.10文件及安装教程-CSDN博客 Cplex 需下载: Microsoft Visual C 2015 Redistributable 添加路径&a…

住宅代理IP如何提高 IP声誉?

你有没有遇到过类似的问题?发送的邮件被标记为垃圾邮件并被屏蔽、访问某些网站被拒绝、广告效果不理想,甚至网上交易无缘无故被拒绝?这到底是什么原因造成的?其实,这些问题可能都和 IP 信誉息息相关。 如果你的 IP 地址…

Keil5 操作

目录 1.Debug(软件模拟调试:): 2.代码提示设置: 3.添加. c与.h文件: 常用技巧 安装下载推荐:正点原子 1.Debug(软件模拟调试:): 文章讲解 …

aws 容器镜像仓库操作

aws 容器镜像仓库产品叫ECR,官方文档参考:Amazon Elastic Container Registry。 1)账号认证 # 配置aws命令 $ aws configure set aws_access_key_id ${ak} $ aws configure set aws_secret_access_key ${sk} 2)镜像仓库登陆 #…

C#基础(14)冒泡排序

前言 其实到上一节结构体我们就已经将c#的基础知识点大概讲完,接下来我们会讲解一些关于算法相关的东西。 我们一样来问一下gpt吧: Q:解释算法 A: 算法是一组有序的逻辑步骤,用于解决特定问题或执行特定任务。它可以是一个计算过程、一个…

001.docker30分钟速通版

docker简介 docker就是一个用于构建(build),运行(run),传送(share)应用程序的平台做一个不恰当的类比,就是外卖平台,如果你自己做华莱士不一定好吃&#xff0…