首页 文章 精选 留言 我的

精选列表

搜索[工具库],共10000篇文章
优秀的个人博客,低调大师

从零开始编写一个类nginx工具, 主动式健康检查源码实现

wmproxy wmproxy将用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,后续将实现websocket代理, 内外网穿透等, 会将实现过程分享出来, 感兴趣的可以一起造个轮子法 项目地址 gite: https://gitee.com/tickbh/wmproxy github: https://github.com/tickbh/wmproxy 为什么我们需要主动 主动可以让我们掌握好系统的稳定性,假设我们有一条连接不可达,连接超时的判定是5秒,需要检测失败3次才认定为失败,那么此时从我们开始检测,到判定失败需要耗时15秒。 如果此时我们是个高并发的系统,每秒的QPS是1000,我们有三个地址判定,那么此时我们有1/3的失败概率。那么在15秒内,我们会收到15000个请求,会造成5000个请求失败,如果是重要的数据,我们会丢失很多重要数据。 如果此时客户端拥有重试机制,那么客户端在失败的时候会发起重试,而且系统可能会反复的分配到那台不可达的系统,将会造成短时间内请求数激增,可能引发系统的雪崩。 所以此时我们主动知道目标端的系统稳定性极其重要。 网络访问示意图 以下是没有主动健康检查 如果出错的时候,一个请求的平均时长可能会达到(1.4s + 5s) / 2 = (3.2s),比正常访问多了(3.2 - 1.4) = 1.8s,节点的宕机会对系统的稳定性产生较大的影响 以下是主动健康检查,它保证了访问后端服务器组均是正常的状态 服务器2出错的时候,主动检查已经检查出服务器2不可用,负载均衡的时候选择已经把服务器2摘除,所以系统的平均耗时1.4s,系统依然保持稳定 健康检查的种类 在目前的系统中有以下两分类: HTTP 请求特定的方法及路径,判断返回是否得到预期的status或者body TCP 仅只能测试连通性,如果能连接表示正常,会出现能连接但无服务的情况 健康检查的准备 我们需要从配置中读出所有的需要健康检查的类型,即需要去重,把同一个指向的地址过滤掉 配置有可能被重新加载,所以我们需要预留发送配置的方式(或者后续类似nginx用新开进程的方式则不需要),此处做一个预留。 如何去重 像这种简单级别的去重通常用HashSet复杂度为O(1)或者用简单的Vec复杂度为O(n),以SocketAddr的为键值,判断是否有重复的数据。 如何保证不影响主线程 把健康请求的方法移到异步函数,用tokio::spawn中处理,在健康检查的情况下保证不影响其它数据处理 如果同时处理多个地址的健康检查 每一次健康检查都会在一个异步函数中执行,在我们调用完请求后,我们会对当前该异步进行tokio::time::sleep以让出当前CPU。 如何按指定间隔时间请求 因为每一次健康请求都是在异步函数中,我们不确认之前的异步是否完成,所以我们在每次请求前都记录last_request,我们在请求前调用HealthCheck::check_can_request判断当前是否可以发送请求来保证间隔时间内不多次请求造成服务器的压力。 超时连接判定处理 利用tokio::time::timeout和future做组合,等超时的时候直接按错误处理 部分实现源码 主要源码定义在check/active.rs中,主要的定义两个类 /// 单项健康检查 #[derive(Debug, Clone)] pub struct OneHealth { /// 主动检查地址 pub addr: SocketAddr, /// 主动检查方法, 有http/https/tcp等 pub method: String, /// 每次检查间隔 pub interval: Duration, /// 最后一次记录时间 pub last_record: Instant, } /// 主动式健康检查 pub struct ActiveHealth { /// 所有的健康列表 pub healths: Vec<OneHealth>, /// 接收健康列表,当配置变更时重新载入 pub receiver: Receiver<Vec<OneHealth>>, } 我们在配置的时候获取所有需要主动检查的数据 /// 获取所有待健康检查的列表 pub fn get_health_check(&self) -> Vec<OneHealth> { let mut result = vec![]; let mut already: HashSet<SocketAddr> = HashSet::new(); if let Some(proxy) = &self.proxy { // ... } if let Some(http) = &self.http { // ... } result } 主要的检查源码,所有的最终信息都落在HealthCheck中的静态变量里: pub async fn do_check(&self) -> ProxyResult<()> { // 防止短时间内健康检查的连接过多, 做一定的超时处理, 或者等上一条消息处理完毕 if !HealthCheck::check_can_request(&self.addr, self.interval) { return Ok(()) } if self.method.eq_ignore_ascii_case("http") { match tokio::time::timeout(self.interval + Duration::from_secs(1), self.connect_http()).await { Ok(r) => match r { Ok(r) => { if r.status().is_server_error() { log::trace!("主动健康检查:HTTP:{}, 返回失败:{}", self.addr, r.status()); HealthCheck::add_fall_down(self.addr); } else { HealthCheck::add_rise_up(self.addr); } } Err(e) => { log::trace!("主动健康检查:HTTP:{}, 发生错误:{:?}", self.addr, e); HealthCheck::add_fall_down(self.addr); } }, Err(e) => { log::trace!("主动健康检查:HTTP:{}, 发生超时:{:?}", self.addr, e); HealthCheck::add_fall_down(self.addr); }, } } else { match tokio::time::timeout(Duration::from_secs(3), self.connect_http()).await { Ok(r) => { match r { Ok(_) => { HealthCheck::add_rise_up(self.addr); } Err(e) => { log::trace!("主动健康检查:TCP:{}, 发生错误:{:?}", self.addr, e); HealthCheck::add_fall_down(self.addr); } } } Err(e) => { log::trace!("主动健康检查:TCP:{}, 发生超时:{:?}", self.addr, e); HealthCheck::add_fall_down(self.addr); } } } Ok(()) } 结语 主动检查可以及时的更早的发现系统中不稳定的因素,是系统稳定性的基石,也可以通过更早的发现因素来通知运维介入,我们的目的是使系统更稳定,更健壮,处理延时更少。 点击 <font color=green>[关注]</font>,<font color=green>[在看]</font>,<font color=green>[点赞]</font> 是对作者最大的支持

优秀的个人博客,低调大师

这应该是目前市面上最好用的一款安卓兼容工具了!

KMRE 平行界面版本一经发布,许多小伙伴纷纷表示 “用心了”、“很好用”。与此同时,自发布以来,对于大家提出的建议和需求,我们也进行了优化和升级。此次上线的 KMRE 新版本中,新增了 4 大功能,并对窗口界面布局作出了优化调整,同时也修复了许多大家反馈的问题。 那本次上线的版本会给大家带来什么新的体验呢?让我们一起往下看吧~ 新增功能和优化调整 1.支持 5.10、5.11、5.13、5.14 内核 自 KMRE 平行界面版本发布以来,我们收到很多小伙伴反馈更新内核后不能使用 KMRE 的问题,于是优麒麟研发小哥哥火速对新内核作出适配,升级了内核的小伙伴们快去试试吧!(下个版本会支持 5.15 内核哦~) 2.支持微信摇一摇 大家快来一起摇一摇吧~ 3.录屏功能全新改版 看了改版后的效果,大家有没有感觉录屏功能使用起来更加便捷呢? 4.KMRE 环境开机自启动可配置、同时运行应用个数可调节 5.窗口界面布局优化调整 布局优化调整后,置顶和截图作为常用功能可以更快地被找到了! 问题修复 当然,除了以上新增功能,优麒麟研发小哥哥也修复了许多问题,下面列举 5 个比较常见的问题,大家如果在旧版本使用期间遇到过此类问题,升级后就可以放心使用啦~ 解决在部分使用场景中出现 QQ 音乐、微信、贝乐虎儿歌闪退的问题 解决两个应用最小化时,从开始菜单点击第二个应用,会将第一个应用还原的问题 解决微信@某人后异常切换为大写的问题、概率性无法收发文件/图片 解决三个应用最小化时,从开始菜单点击已开启的应用,显示 CPU 无法支持更多应用的问题 解决 apk 安装器安装的应用角标显示不正常的问题 更新方法 1、终端输入命令升级 打开终端,输入以下命令进行升级: sudo apt update sudo apt install --only-upgrade kmre 2、软件更新器一键更新 在开始菜单栏找到软件更新器,一键更新,等待完成即可。 以上就是我们本次 KMRE 更新内容介绍啦!详细更新日志可前往论坛进行查看。

优秀的个人博客,低调大师

雷蛇被曝0day,你的鼠标和键盘可能成为黑客工具

雷蛇(Razer)是一家游戏设备制造公司,其鼠标和键盘在国内,尤其是在国内游戏玩家中享有盛誉。 当把Razer设备插入Windows 10或Windows 11时,操作系统将自动下载并开始在电脑上安装Razer Synapse软件。Razer Synapse是一种允许用户配置他们的硬件设备、设置宏,或映射按钮的软件。并且,Razer声称在全球有超过1亿的用户使用该软件。 然而,安全研究员jonhat在该软件的安装中发现了一个0day漏洞。该漏洞是一个本地权限升级(LPE)的漏洞,这意味着攻击者需要有一个Razer设备,以及对电脑的物理访问。但这同样表示该漏洞很容易被利用,攻击者只需花20美元购买一个Razer鼠标,并将其插入Windows 10就可以成为获取系统权限。 系统权限是Windows中的最高用户权限,允许在操作系统上执行任何命令。从理论上说,如果一个用户在Windows中获得了系统权限,他就可以完全控制系统,安装任何他们想要的东西,包括恶意软件。 漏洞复现过程 BleepingComputer 通过现有的Razer鼠标,对该漏洞成功进行了复现,他们确认了在插入鼠标后,大约两分钟就可在Windows 10中获取系统权限。 为了复现该漏洞,首先在一台Windows 10电脑上创建了一个临时的 "测试 "用户,具有标准的、非管理员的权限,如下图所示。 在Windows 10中没有管理权限的测试用户 把Razer设备插入Windows 10,操作系统自动下载并安装了驱动程序和Razer Synapse软件。 由于RazerInstaller.exe可执行文件是通过一个以系统权限运行的Windows进程启动的,因此Razer安装程序也获得了系统权限,如下图所示。 RazerInstaller.exe以系统权限运行 当Razer Synapse软件被安装时,安装向导允许用户指定想安装的文件夹。而选择安装文件夹的操作是出现漏洞的源头。 当文件夹的位置被改变时,会出现一个 “选择文件夹”的对话框。当按下Shift键并右键单击该对话框,将被提示打开“在此打开PowerShell窗口”。 Razer Synapse的安装提示 由于这个PowerShell提示是由一个具有系统权限的进程启动的,因此该PowerShell提示也将拥有相同的权限。 一旦打开PowerShell提示并输入 “whoami ”命令,就会显示控制台具有系统权限,允许发布任何想要的命令。 具有系统权限的PowerShell提示 CERT/CC的漏洞分析师Will Dormann表示,类似的漏洞很可能会在其他通过Windows即插即用程序安装的软件中被发现。 雷蛇将修复该漏洞 该0day漏洞在Twitter上得到广泛关注之后,雷蛇已经联系了安全研究员,并且马上会发布修复方案。 此外,雷蛇还表示尽管该漏洞已经被公开披露,但是发现者jonhat仍将获得漏洞赏金。 参考:bleepingcomputer

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册