zookeeper向管控平台上报状态

news2024/9/22 15:25:23

问题

在你的场景中,由于 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.coloradmin.cn/o/2155356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLMs之MemLong:《MemLong: Memory-Augmented Retrieval for Long Text Modeling》翻译与解读

LLMs之MemLong:《MemLong: Memory-Augmented Retrieval for Long Text Modeling》翻译与解读 导读:MemLong 是一种新颖高效的解决 LLM 长文本处理难题的方法,它通过外部检索器获取历史信息,并将其与模型的内部检索过程相结合&…

IPsec-VPN中文解释

网络括谱图 IPSec-VPN 配置思路 1 配置IP地址 FWA:IP地址的配置 [FW1000-A]interface GigabitEthernet 1/0/0 [FW1000-A-GigabitEthernet1/0/0]ip address 10.1.1.1 24 //配置IP地址 [FW1000-A]interface GigabitEthernet 1/0/2 [FW1000-A-GigabitEthernet1/0/2]ip a…

C#测试调用PdfiumViewer浏览PDF文件的基本用法

印章管理项目后续准备实现打开浏览PDF文件并进行盖章的功能,需要在Winform中使用控件在线浏览PDF文件,在网上找了几个开源的PDF浏览控件进行测试,以便应用于印章管理项目。本文测试调用PdfiumViewer模块打开及浏览PDF文件。   PdfiumViewer…

VisionPro - 基础 - 模板匹配技术和在VP中的使用 - PMAlign - PatMax(4)- 控制模板的匹配

前言: 针对PatMax 的高级应用和原理,在这一节继续进行说明:这一节主要考虑的是PatMax模板匹配的原理:如何控制模板的匹配。 本节先介绍了几个模板匹配的衡量标准,比如模板匹配分数,和模板的几种模板匹配的…

JAVA并发编程系列之Semaphore信号量剖析

腾讯T2面试,现场限时3分钟限最多20行代码,模拟地铁口安检进站。其中安检入口10个,当前排队人数是100个,每个人安检进站耗时5秒。开始吧! 候选人,心中万马奔腾!!!吐了一口82年老血&am…

re题(37)BUUCTF-[GWCTF 2019]xxor

BUUCTF在线评测 (buuoj.cn) 用ida打开文件,ctrle定位main函数 也可以用shiftF12查找字符串,找与我们解题有关的字符串 通过字符串定位到引用字符串的函数 进入main entry 但还不是我们要分析的代码 进入__libc_start_main中的main参数,是我们…

C++20 std::format

一、前言 1、传统 C 格式化的问题与挑战 可读性差:使用 C 中的 printf 和 scanf 家族函数进行格式化输出和输入时,它们的语法较为复杂,难以阅读。在较大的代码项目中,可读性差会导致维护困难。类型安全性差:printf 和…

IS-ISv4/6双栈

文章目录 IS-ISv4/6双栈实验要求配置 IS-ISv4/6双栈 实验要求 配置双栈 R1、2、3、4配置 IS-ISv4 和 IS-ISv6,配置IPv6多拓扑 上面为Level-1类型、中间为Level-1-2、下面是Level-2类型 还有就是说ATT位置1有一定要求连接L1/2连接L1或者L2类型路由器,至…

java23发布啦

2024年9月java23发布啦!!! JDK 23 提供了12 项增强功能,这些功能足以保证其自己的JDK 增强提案 - JEP ,其中包括 8 项预览功能和 1 项孵化器功能。它们涵盖了对 Java 语言、API、性能和 JDK 中包含的工具的改进。除了 Java 平台上…

KVM环境下制作ubuntu qcow2格式镜像

如果是Ubuntu KVM环境是VMware虚拟机,需要CPU开启虚拟化 1、配置镜像源 wget -O /etc/apt/sources.list https://www.qingtongqing.cc/ubuntu/sources.list2、安装kvm qemu-img libvirt kvm虚拟化所需环境组件 apt -y install qemu-kvm virt-manager libvirt-da…

安装黑群晖,并使用NAS公网助手实现DDNS动态域名解析

很多人都会安装安装一个黑群晖进行练手,黑群晖有很多玩法和NAS套件,而且黑群晖安装比较简单,没有复杂的步骤,这也是很多人玩黑裙的理由,这里教大家如何安装黑群晖,并且安装神卓互联NAS公网助手实现DDNS动态…

arthas -- xxljob本地调试

方案一:测试类 package cn.wanda.wic.content.job.xxljob;import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;SpringBootTest public class ShopResourceMigrationJobTest {Reso…

C\C++内存管理详解

本次内容大纲: 1.C/C内存分布 大家看看下面的代码 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";char* pChar3 "abcd";int…

本地快速部署一个简洁美观的个人Halo博客网站并发布公网远程访问

文章目录 前言1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤:1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 前言 本文主要介绍如何在Cen…

【Python日记】好丝滑的贪吃蛇

文章目录 原文:https://blog.c12th.cn/archives/39.htmlPython 贪吃蛇(pygame)前言部分代码完整代码 原文:https://blog.c12th.cn/archives/39.html Python 贪吃蛇(pygame) 前言 源代码参考B站: BV1cs411T7wW 效果展示 部分代码 框架 # 初始化 pygam…

基于微信小程序校园订餐的设计与开发+ssm(lw+演示+源码+运行)

摘 要 人民生活水平的提高就会造成生活节奏越来越快,很多人吃饭都采用点外卖的方式。现在点外卖的平台已有很多,大多都需要安装它们的APP才可以使用,并且没有针对校园。如果一味的使用外卖平台不仅会造成商家成本的增加,还不利于…

django应用JWT(JSON Web Token)实战

文章目录 一、什么是JWT二、为什么使用JWT三、在django项目中如何应用JWT1、安装djangorestframework-simplejwt库:2、在settings.py中配置JWT认证:3、在urls.py中配置JWT的获取和刷新路由: 四、JWT如何使用1、调用生成JWT的接口获取JWT2、客…

C++:类型转换(static_cast、reinterpret_cast、const_cast、dynamic_cast)、RTTI

C:类型转换(static_cast、reinterpret_cast、const_cast、dynamic_cast)、RTTI 一、C语言类型转换二、C新增强制类型转换2.1 新增类型转换:static_cast2.2 新增类型转换: reinterpret_cast2.3 新增类型转换&#xff1a…

新手上路:在Windows CPU上安装Anaconda和PyCharm

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一. 确认自己是CPU为什么选择CPU教程?GPU与CPU的区别如何判断自己是CPU 二. Anaconda 安装包 和 Pycharm 安装包步骤1:下载Anaconda步骤2&am…

【d46】【Java】【力扣】234.回文链表

思路 判断是否是回文,需要:一个指针指向头,一个指针指向尾,两个指针一边向中间靠拢,一边判断数值是否相同 对于单链表,不方便获得pre,如果将节点放进 数组/list ,数组/list可以直接…