当前位置: 首页 > news >正文

解锁 ElasticJob 云原生实践的难题

发生了什么

最近在逛 ElasticJob 官方社区时发现很多小伙伴都在头疼这个 ElasticJob 上云的问题,ElasticJob 本就号称分布式弹性任务调度框架,怎么在云原生环境就有了问题了呢,这就要从 Kubenertes 和 ElasticJob 的一些状态化说起。

有意思的状态

在了解两者特性之前我们可以先来看下什么是状态?

先来看百科的介绍:

“状态是人或事物表现出来的形态。是指现实(或虚拟)事物处于生成、生存、发展、消亡时期或各转化临界点时的形态或事物态势。”

如果指 人的形态:

  • 可以包括情绪、思想、行为和生理状态等方面,比如某某人最近的状态不好。

如果指 事物的形态:

  • 比如系统的温度、压力、体积、物态、物质的量、相、各种能量等等一定时,我们就说系统处于一个状态(state)。

状态这个词对开发者来说并不陌生,比如:

  • 前端 UI 组件的状态化存储。

  • 软件工程中的状态图。

  • 进程的运行状态。

  • 再到云原生 Kubernetes 中提及的无状态服务(Stateless Service)和普通有状态服务(Stateful Service)等等。

在 Kubernetes 中, 无状态 和 有状态 指的是应用在容器中运行时的数据持久化需求。

无状态应用

指的是应用在容器中运行时不会在容器中持久化存储数据,应用容器可以随意创建、销毁。对于无状态应用,请求转发给任何一个容器实例都可以正确运行。例如,web 应用就是一种无状态应用。

有状态应用

则指应用在容器中运行时需要稳定的持久化存储、稳定的网络标识、固定的 pod 启动和停止次序。这些应用需要在不同的节点之间保持数据同步,并且需要在节点故障时能够快速恢复。例如,数据库、缓存等都是有状态应用。

无状态下的容器

可以看到对于大部分 计算型 (业务型) ,非存储型的应用更推荐使用 无状态 的模式,这样就可以实现随意创建(扩容),销毁(缩容)操作了,既然大部分业务系统使用了这种无状态容器就意味着容器的网络,存储等总是在每一次的销毁,创建的发布周期中发生变更。简单的说就是容器的 IP 在每次发布时 总是会创建一个新的 IP。

容器 IP 是如何在每次创建时产生一个新的 IP 的,这个原理可以去研究下 Kubernetes 的虚拟 IP 的产生,这里重点说下这个 IP 变更带来的问题,在传统的物理机和虚拟机下部署的服务的 IP 往往是由运维统一管控分配的,也就是说同一个应用使用哪些 IP 相对固定往往不会出现大规模的变更,但是云原生环境下无状态容器快速频繁的扩缩容时哪个服务使用哪个 IP 往往并不会固定每一次变更总会有一个新的 IP 的使用。

每次 IP 变更是无状态的一种模式本身并没有什么问题,但是有问题的是目前现有的很多框架或者中间件由于产生很早,开发阶段时还未遇到或者考虑到这种 IP 频繁变更的场景,经常会借助 IP 进行了有状态处理,比如 Dubbo2 中的接口级服务配置,ShardingSphere-ElasticJob 的有状态 Server IP 节点等等,这种对 IP 做了有状态操作的框架或者中间件在云原生环境频繁变更 IP 的场景下很容易产生大量无意义的脏数据存储,对注册中心或者存储都带来了无意义的压力。

ElasticJob 中的有状态 IP

ShardingSphere-ElasticJob 是一个分布式任务调度框架,它由当当网基于 Quartz 二次开发,功能丰富强大,采用 Zookeeper 实现分布式协调,可实现任务高可用以及分片。ShardingSphere-ElasticJob 已于 2020 年 5 月 28 日成为 Apache ShardingSphere 的子项目。

具体如何使用可以查阅官网,相关原理也可以查阅《中间件源码》公众号中对 ShardingSphere-ElasticJob 分析的文章。

在 ShardingSphere-ElasticJob 中默认注册中心使用的是分布式协调中间件 Zookeeper,对 IP 的处理有两个位置:

  • instance 目录: 一个位置是位于注册中心 instance 目录下的临时节点,这个节点包含了 IP+进程信息,借助此目录下的节点可以有效的实现分片逻辑。节点存在意味着进程存在,节点不存在意味着进程不存在。

  • server 目录: 另外一个位置是位于注册中心 server 目录下的持久 IP 节点,这个 IP 节点是用来存储当前 IP 实例的状态的,比如当前实例是否处于禁用状态, 有问题的就是这个持久的,有状态的节点,在无状态的容器环境下随着容器发布次数增多这个 IP 节点也会越来越多,注册中心无意义的脏数据也会越来越多,对注册中心的压力也会呈线性增长,这就是社区用户遇到的头疼的问题。

解决方案

既然 ShardingSphere-ElasticJob 要上容器支持云原生环境下的无状态的业务,那我们就把 ShardingSphere-ElasticJob 有状态的 IP 变成无状态,比较优雅且彻底的方式就是废弃掉持久化 IP 这个有状态的功能让 ShardingSphere-ElasticJob 彻底变成无状态的定时调度,但是考虑到部署在物理机或者虚拟机环境下现存的分布式定时调度业务可能已经使用到了此状态功能,对于已经使用到此状态 IP 的节点暂不做处理直接跳过,针对已经下线的 IP 节点则直接删除即可。

感兴趣的小伙伴可以查看如下代码和 PR 进行测试试用,当然有问题也可以继续反馈。

相关 PR 如下所示(需复制打开):

https://github.com/apache/shardingsphere-elasticjob/pull/2251

文章转载自:宋小生的博客

原文链接:https://www.cnblogs.com/songxiaosheng/p/17860143.html

相关文章:

解锁 ElasticJob 云原生实践的难题

发生了什么 最近在逛 ElasticJob 官方社区时发现很多小伙伴都在头疼这个 ElasticJob 上云的问题,ElasticJob 本就号称分布式弹性任务调度框架,怎么在云原生环境就有了问题了呢,这就要从 Kubenertes 和 ElasticJob 的一些状态化说起。 有意思的…...

鸿蒙开发已成新趋势

随着华为鸿蒙操作系统的快速崭露头角,鸿蒙开发已然成为当前技术领域的热门新趋势。本文将深入探讨鸿蒙开发的重要性和独特优势,并详细介绍一些关键的鸿蒙开发技术和工具,以及它们对开发者个人和整个行业带来的深远影响。 首先,鸿蒙…...

万人拼团团购小程序源码系统+拼团设置+拼团管理 附带完整的搭建教程

随着互联网的快速发展,电子商务和社交电商的兴起,团购作为一种高效的营销策略和消费方式,受到了广大消费者的热烈欢迎。在此背景下,我们开发了一款基于微信小程序的万人拼团团购系统,旨在为用户提供一种更加便捷、高效…...

软信天成:速看!云端混合数据管理的最佳解决方案

智能时代,互联网、云计算和大数据的应用日益广泛,越来越多的企业将核心IT基础架构迁移至云上,以加速实现企业数字化转型,提高商业用户创新的可能性, 使 IT 变得更加灵活。 各个行业也正在进行从依赖本地系统到混合或云…...

GO 集成Prometheus

一、Prometheus介绍 Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便…...

ESP32-Web-Server 实战编程-通过网页控制设备的 GPIO

ESP32-Web-Server 实战编程-通过网页控制设备的 GPIO 概述 前述博客讲解了 Web 编程的基本知识,包括 HTML、CSS、JavaScript 三个部分,从这节开始,我们进入实战部分,在实际项目中进一步学习 ESP32-Web 编程。 GPIO &#xff08…...

Springboot 中 指定 AspectJ 的织入模式

在Spring Boot中,AspectJ的织入模式可以通过以下两种方式进行明确指定: 使用配置文件(application.properties或application.yml):在Spring Boot的配置文件中,可以添加以下属性来指定AspectJ的织入模式&am…...

【.NET全栈】.net的微软API接口与.NET框架源码

文章目录 0 前言1 微软官方.net接口学习2 .NET框架源码总结 0 前言 如果浏览器打不开链接,换一个浏览器打开。 我是 打不开微软的链接,使用: 可以打开!!! 1 微软官方.net接口学习 https://docs.microsoft…...

【深度学习】基于深度学习的超分辨率图像技术一览

超分辨率(Super-Resolution)即通过硬件或软件的方法提高原有图像的分辨率,图像超分辨率是计算机视觉和图像处理领域一个非常重要的研究问题,在医疗图像分析、生物特征识别、视频监控与安全等实际场景中有着广泛的应用。 SR取得了显著进步。一般可以将现有…...

Android12强制所有应用跟随gsensor旋转

前言 Android12系统中如果机器带gsensor,竖屏应用如果固定了竖屏,当机器旋转为横屏,竖屏应用是不会转到横屏显示的,还是竖屏显示。抖音这种app就是这样的。因为app里面manifest文件中通过android:screenOrientation固定住了竖屏显示。如果要让横屏的时候app也能够横屏显示,…...

C#常用运算符的优先级

前言 运算符在C#编程语言中扮演着重要的角色,用于执行各种计算和操作。了解运算符的优先级是编写高效和正确代码的关键。本文将深入探讨C#中38个常用运算符的优先级划分和理解,并提供详细的说明和示例,以帮助读者更好地理解运算符的使用。 目…...

鸿蒙4.0开发笔记之ArkTS语法的基础数据类型[DevEco Studio开发](七)

文章目录 一、基本数据类型的定义1、变量声明2、数字类型3、字符串类型4、布尔类型5、数组类型6、元组类型7、枚举类型8、联合类型(少用)9、未知Unkown类型10、未定义和空值类型 二、数据类型的使用1、组件内部声明变量不需要使用let关键字2、使用Divide…...

集成学习的两种常见策略:bagging VS. boosting

chatGPT回答,记在这里。 集成学习是一种通过组合多个弱学习器来构建一个更强大的学习器的方法。其中,bagging和boosting是两种常见的集成学习策略。 一、bagging & boosting 简介 Bagging(自助聚集法): Bagging…...

居家适老化设计第三十四条---卫生间之照明

居家适老化卫生间照明设计需要考虑以下几个方面:1. 光源选择:选择适合老年人眼睛的柔和光源,避免刺眼和眩光的发生。可以选择LED灯具,因为它们具有节能、寿命长和可调光的特点。2. 光线布置:在不同区域设置不同的光线&…...

如何使用Cloudreve将个人电脑打造为私有云盘并实现远程访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 云存储概念兴起后,现在市面上也已经有了很多公有云盘。但一段时间后…...

[SaaS] 淘宝AI淘淘秀

AIGC技术在淘淘秀场景的探索与实践关键词:图像类AI创新应用、用户轻松创作、内容分享、结合商家品牌。https://mp.weixin.qq.com/s/-3a3_nKeKGON-9-Prd7JKQ 1.生成模版 利用定制的prompt,生成一些比较好的素材图片案例。 最终的用的是通义万相。 2.仿…...

第二证券:机构密集调研消费电子、半导体产业链

据上海证券报记者核算,近一个月来,共有41家消费电子类公司和92家半导体公司(核算标准:申万职业2021,下同)发布出资者调研纪要。其间,有的公司款待了16个批次估计超200家安排,更有公司…...

app小程序定制的重点|软件定制开发|网站搭建

app小程序定制的重点|软件定制开发|网站搭建 App小程序定制开发是近年来快速发展的一项技术服务,随着移动互联网的普及和用户需求的不断升级,越来越多的企业和个人开始关注和需求定制化的小程序开发。那么,对于app小程序定制开发来说&#xf…...

11-28渗透

用nmap扫描靶机1进行主机发现 已知靶机1的主机在172.16.17.0/24下 扫描结果如下 根据扫描结果看开启的服务怀疑172.16.17.177是靶机1 浏览器访问172.16.17.177页面得到如下 我们知道织梦cms系统默认管理路径是dede,登陆管理后台可以通过地址172.16.17.177/dede/i…...

qt实现一个安卓测试小工具

qt实现一个安卓测试小工具 最终效果:目录结构源码gui.py 主要是按钮,文本控制代码main.py 主要是逻辑代码gui.spec 是打包使用的adb.ui 打包为exe 最终效果: 目录结构 上面2个是打包的生成的不用管 源码 gui.py 主要是按钮,文…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...