MariaDB MaxScale 的用途与实现细节
MaxScale 主要用途
MariaDB MaxScale 是一个智能数据库代理(proxy),主要用于增强 MySQL/MariaDB 数据库的高可用性、可扩展性和安全性,同时简化应用程序与数据库基础设施之间的交互。它的核心功能包括:
-
负载均衡(Load Balancing):
- 将客户端的数据库请求分发到多个后端数据库服务器,优化资源利用率。
- 支持读写分离(read/write splitting),将写操作路由到主服务器(Master),读操作分发到从服务器(Slave)。
-
高可用性(High Availability):
- 监控数据库节点状态,自动检测故障并切换到健康的节点。
- 支持主从复制和 Galera 集群,确保在节点故障时服务不中断。
-
安全性增强:
- 提供数据掩码(masking)和防火墙功能,保护敏感数据。
- 支持 PAM(Pluggable Authentication Module)认证,增强用户访问控制。
-
查询路由与优化:
- 分析 SQL 查询,根据规则(如查询类型或目标表)将请求路由到合适的数据库节点。
- 支持查询缓存和重写,优化性能。
-
简化应用程序开发:
- 解耦应用程序与数据库拓扑结构,应用程序无需关心后端数据库的具体配置(如主从切换)。
-
其他功能:
- 支持二进制日志(binlog)服务器,减轻主服务器的复制压力。
- 提供数据流式传输和查询日志记录,便于监控和分析。
具体实现细节
MaxScale 的设计基于模块化架构,功能通过插件实现,具有高度的可扩展性和灵活性。以下是其核心组件和实现细节:
1. 模块化架构
MaxScale 的功能由以下几类模块组成:
- 协议模块(Protocol Modules):
- 处理客户端与后端数据库之间的通信,支持 MySQL 协议。
- 客户端协议模块(如
MySQLClient
)处理与应用程序的连接,后端协议模块(如MySQLBackend
)与数据库交互。
- 路由模块(Router Modules):
- 决定查询的路由目标,常见的路由器包括:
readwritesplit
:实现读写分离,写操作路由到主节点,读操作分发到从节点。readconnroute
:基于连接的负载均衡,适合 Galera 集群。schemarouter
:支持分片(sharding),将查询路由到正确的分片数据库。
- 决定查询的路由目标,常见的路由器包括:
- 监控模块(Monitor Modules):
- 监控后端数据库的状态,确保路由决策基于最新的集群状态。
mysqlmon
:监控主从复制环境,检测主从节点角色。galeramon
:监控 Galera 集群,跟踪节点同步状态。
- 监控后端数据库的状态,确保路由决策基于最新的集群状态。
- 过滤模块(Filter Modules):
- 在查询路由前后处理查询,例如:
- 数据掩码过滤器(masking filter):隐藏敏感字段。
- 查询重写过滤器(query rewrite filter):修改 SQL 查询。
- 日志过滤器:记录查询以便分析。
- 在查询路由前后处理查询,例如:
- 认证模块(Authenticator Modules):
- 支持 MySQL 原生认证、PAM 认证等,确保安全的用户验证。
2. 读写分离(readwritesplit)实现
-
工作原理:
- MaxScale 解析客户端发送的 SQL 查询,判断是读操作(如
SELECT
)还是写操作(如INSERT
、UPDATE
)。 - 写操作路由到主服务器,读操作分发到从服务器(支持权重配置,优先选择性能较好的节点)。
- 使用
mysqlmon
监控主从复制状态,确保主从数据一致性(考虑复制延迟)。
- MaxScale 解析客户端发送的 SQL 查询,判断是读操作(如
-
配置示例(
/etc/maxscale.cnf
):[maxscale] threads=4[ReadWriteSplit] type=service router=readwritesplit servers=server1,server2,server3 user=maxscale passwd=maxscale_pw max_slave_replication_lag=30[ReadWriteListener] type=listener service=ReadWriteSplit protocol=MySQLClient port=3306[server1] type=server address=192.168.1.101 port=3306 protocol=MySQLBackend[server2] type=server address=192.168.1.102 port=3306 protocol=MySQLBackend[server3] type=server address=192.168.1.103 port=3306 protocol=MySQLBackend[Monitor] type=monitor module=mysqlmon servers=server1,server2,server3 user=maxscale passwd=maxscale_pw
threads
:设置 MaxScale 处理客户端请求的线程数。max_slave_replication_lag
:从节点最大复制延迟(秒),超过此值的从节点不接收读请求。user
和passwd
:MaxScale 用于访问后端数据库的凭据,需在数据库中授予相应权限(如SELECT ON mysql.user
)。
-
关键参数:
max_slave_connections
:控制读请求可分发的从节点比例(如100%
表示所有从节点)。router_options
:自定义路由行为,如指定主从角色或优先级。
3. 高可用性实现
- 故障检测与切换:
- 监控模块定期检查后端服务器的健康状态(如
mysqlmon
检查主从角色,galeramon
检查 Galera 节点同步)。 - 若主服务器故障,MaxScale 可自动将写操作切换到新的主服务器(需配合外部工具如 MariaDB Replication Manager)。
- 监控模块定期检查后端服务器的健康状态(如
- Galera 集群支持:
- 使用
galeramon
监控 Galera 节点,确保只将请求路由到同步状态的节点。 - 支持
readconnroute
路由器,将请求均匀分发到集群中的健康节点。
- 使用
- 配置注意事项:
- 需配置
monitor_interval
(监控间隔,单位毫秒),平衡监控频率与性能开销。 - 确保 MaxScale 自身的冗余(如部署多个 MaxScale 实例并结合 Keepalived)以避免单点故障。
- 需配置
4. 安全性实现
- 数据掩码:
- 使用掩码过滤器(masking filter)隐藏敏感列(如信用卡号、手机号)。
- 示例配置:
[MaskingFilter] type=filter module=masking rules=/path/to/masking_rules.json
masking_rules.json
定义哪些表和列需要掩码,如:[{"table": "student","column": "mobile","mask": "****"} ]
- 数据库防火墙:
- 使用防火墙过滤器(database firewall filter)限制特定查询(如禁止
DROP TABLE
)。 - 配置示例:
[FirewallFilter] type=filter module=dbfwfilter rules=/path/to/firewall_rules
- 使用防火墙过滤器(database firewall filter)限制特定查询(如禁止
- PAM 认证:
- 支持基于 PAM 的认证,支持普通密码和双因子认证(2FA)。
- 配置示例:
[ReadWriteListener] type=listener service=ReadWriteSplit authenticator=PAMAuth pam_mode=password_2FA
- 需要在数据库中配置 PAM 插件,并确保 MaxScale 服务器的 PAM 配置正确。
5. 二进制日志服务器(Binlog Server)
- 用途:
- MaxScale 可作为二进制日志服务器,代理主服务器的 binlog 请求,减轻主服务器压力。
- 便于主从切换,客户端无需直接连接主服务器。
- 实现:
- 配置
binlogrouter
模块,指定 binlog 存储路径和主服务器信息。 - 示例配置:
[BinlogService] type=service router=binlogrouter server=server1 user=maxscale passwd=maxscale_pw binlogdir=/var/lib/maxscale/binlogs[BinlogListener] type=listener service=BinlogService protocol=MySQLClient port=3306
- 注意:不支持 MySQL GTID 复制,需手动清理 binlog 文件以避免磁盘溢出。
- 配置
6. 管理与监控
- 管理工具:
- 使用
maxctrl
命令行工具查看服务器状态、修改配置(如maxctrl list servers
)。 - 支持动态配置更新,无需重启 MaxScale。
- 使用
- 日志与诊断:
- 日志文件默认位于
/var/log/maxscale/maxscale.log
,记录错误、警告和查询路由信息。 - 启用
log_info=true
可获取详细日志,便于调试。
- 日志文件默认位于
7. 性能与局限性
- 性能优化:
- 调整
threads
参数以匹配 CPU 核心数,提升并发处理能力。 - 使用查询缓存过滤器(cache filter)减少后端数据库负载。
- 调整
- 已知局限性:
- 不支持 MySQL 旧式密码(pre-4.1)。
schemarouter
不支持跨数据库查询。- 多语句查询可能始终路由到主服务器,影响读写分离效率。
- 需确保主从复制延迟可控,否则可能导致数据不一致。
典型应用场景
- 读写分离:
- 在主从复制环境中,使用
readwritesplit
路由器将读请求分发到从服务器,写请求发送到主服务器。
- 在主从复制环境中,使用
- Galera 集群负载均衡:
- 使用
readconnroute
在 Galera 集群中实现连接级负载均衡。
- 使用
- 数据安全:
- 使用掩码和防火墙过滤器保护敏感数据,限制高危操作。
- 复杂路由:
- 结合过滤器和路由器,实现基于查询内容的动态路由(如将特定表的查询路由到专用节点)。
部署与注意事项
- 安装:
- 通过 MariaDB 官方仓库安装(如
yum install maxscale
或apt-get install maxscale
)。 - 推荐使用最新版本(如 MaxScale 24.02)以获得最新功能和修复。
- 通过 MariaDB 官方仓库安装(如
- 配置:
- 主配置文件为
/etc/maxscale.cnf
,支持模块化配置。 - 需在后端数据库创建 MaxScale 专用用户,授予必要权限(如
SELECT ON mysql.user
)。
- 主配置文件为
- 高可用性:
- 部署多个 MaxScale 实例,使用 Keepalived 或 HAProxy 实现 MaxScale 自身的冗余。
- 性能监控:
- 定期检查 MaxScale 日志和
maxctrl
输出,确保路由和监控正常。
- 定期检查 MaxScale 日志和
总结
MariaDB MaxScale 是一个功能强大的数据库代理工具,通过模块化架构实现负载均衡、高可用性和安全性增强。其核心在于灵活的路由机制(如读写分离、Galera 集群支持)和丰富的过滤功能(如数据掩码、防火墙)。实现细节依赖于协议、路由、监控和过滤模块的协同工作,配置简单但需注意复制延迟和模块兼容性。对于追求高性能和高可用性的 MySQL/MariaDB 环境,MaxScale 是一个值得考虑的解决方案。
相关文章:
MariaDB MaxScale 的用途与实现细节
MaxScale 主要用途 MariaDB MaxScale 是一个智能数据库代理(proxy),主要用于增强 MySQL/MariaDB 数据库的高可用性、可扩展性和安全性,同时简化应用程序与数据库基础设施之间的交互。它的核心功能包括: 负载均衡&…...
CTF--eval
一、原网页: 二、步骤: 1.代码分析: <?phpinclude "flag.php"; // 引入一个文件,该文件可能定义了一些变量(例如 $flag)$a $_REQUEST[hello]; // 从用户请求中获取参数 hello 的值&#x…...
Android学习总结之算法篇七(图和矩阵)
有向图的深度优先搜索(DFS)和广度优先搜索(BFS)的示例,以此来模拟遍历 GC Root 引用链这种有向图结构: 一、深度优先搜索(DFS) import java.util.*;public class GraphDFS {privat…...
vmcore分析锁问题实例(x86-64)
问题描述:系统出现panic,dmesg有如下打印: [122061.197311] task:irq/181-ice-enp state:D stack:0 pid:3134 ppid:2 flags:0x00004000 [122061.197315] Call Trace: [122061.197317] <TASK> [122061.197318] __schedule0…...
【vue3】vue3+express实现图片/pdf等资源文件的下载
文件资源的下载,是我们业务开发中常见的需求。作为前端开发,学习下如何自己使用node的express框架来实现资源的下载操作。 实现效果 代码实现 前端 1.封装的请求后端下载接口的方法,需求配置aixos的请求参数里面的返回数据类型为blob // 下载 export…...
【BUG】Redis RDB快照持久化及写操作禁止问题排查与解决
1 问题描述 在使用Redis 的过程中,遇到如下报错,错误信息是 “MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk...”,记录下问题排查过程。 2 问题排查与解决 该错误提示表明&#…...
【HD-RK3576-PI】定制用户升级固件
硬件:HD-RK3576-PI 软件:Linux6.1Ubuntu22.04 在进行 Rockchip 相关开发时,制作自定义的烧写固件是一项常见且重要的操作。这里主要介绍文件系统的修改以及打包成完整update包升级的过程。 一、修改文件系统镜像(Ubuntu环境操作&…...
【AI学习】李宏毅老师讲AI Agent摘要
在b站听了李宏毅2025最新的AI Agent教程,简单易懂,而且紧跟发展,有大量最新的研究进展。 教程中引用了大量论文,为了方便将来阅读相关论文,进一步深入理解,做了截屏纪录。 同时也做一下分享。 根据经验调整…...
狂神SQL学习笔记十:修改和删除数据表字段
1、修改与删除表 alter 修改表的名称: 增加表的字段: 修改表的字段(重命名,修改约束): 修改约束 重命名 删除表的字段 删除表...
OSPF综合实验
一、网络拓扑 二、实验要求 1,R5为ISP,其上只能配置IP地址;R4作为企业边界路由器; 2,整个0SPF环境IP基于172.16.0.8/16划分; 3,所有设备均可访问R5的环回; 4,减少LSA的更新量,加快收敛…...
2025 cs144 Lab Checkpoint 2 小白超详细版
文章目录 1 环形索引的实现1.1 wrap类wrapunwrap 2 实现tcp_receiver2.1 tcp_receiver的功能2.2 传输的报文格式TCPSenderMessageTCPReceiverMessage 2.3 如何实现函数receive()send() 1 环形索引的实现 范围是0~2^32-1 需要有SY…...
VMware虚拟机安装Ubuntu 22.04.2
一、我的虚拟机版本 二、浏览器搜索Ubuntu 三、下载Ubuntu桌面版 四、下这个 五、创建新的虚拟机 六、选择典型,然后下一步 七、选择稍后安装操作系统,然后下一步 八、选择Linux ,版本选择Ubuntu 64位 九、选择好安装位置 十、磁盘大小一般选20G就够用了…...
XSS漏洞及常见处理方案
文章背景: 在近期项目安全测试中,安全团队发现了一处潜在的 跨站脚本攻击(XSS)漏洞,该漏洞可能导致用户数据被篡改或会话劫持等安全风险。针对这一问题,项目组迅速响应,通过代码修复、输入过滤、…...
TCP标志位抓包
说明 TCP协议的Header信息,URG、ACK、PSH、RST、SYN、FIN这6个字段在14字节的位置,对应的是tcp[13],因为字节数是从[0]开始数的,14字节对应的就是tcp[13],因此在抓这几个标志位的数据包时就要明确范围在tcp[13] 示例1…...
C/C++条件判断
条件判断 if语句的三种形态 if(a<b){} 、 if(a<b){}else{} 、 if(a<b){}else if(a>b) else{} if语句的嵌套 嵌套的常见错误(配对错误),与前面最近的,而且还没有配对的if匹配 错误避免方法:严格使用 { }、先写&am…...
单位门户网站被攻击后的安全防护策略
政府网站安全现状与挑战 近年来,随着数字化进程的加速,政府门户网站已成为政务公开和服务公众的重要窗口。然而,网络安全形势却日益严峻。国家互联网应急中心的数据显示,政府网站已成为黑客攻击的重点目标,被篡改和被…...
# 工具记录
工具记录 键盘操作可视化工具openark64系统工具dufs-webui文件共享zotero文献查看cff explorerNoFencesfreeplane开源思维导图...
C/C++运算
C语言字符串的比较 #include <string.h> int strcmp( const char *str1, const char *str2 );例如: int ret; ret strcmp(str1, str2);返回值: str1 < str2时, 返回值< 0(有些编译器返回 -1) str1 > str2时…...
CloudWeGo 技术沙龙·深圳站回顾:云原生 × AI 时代的微服务架构与技术实践
2025 年 3 月 22 日,CloudWeGo “云原生 AI 时代的微服务架构与技术实践”主题沙龙在深圳圆满落幕。作为云原生与 AI 微服务融合领域的深度技术聚会,本次活动吸引了来自企业、开发者社区的百余位参与者,共同探讨如何通过开源技术应对智能时代…...
STM32移植文件系统FATFS——片外SPI FLASH
一、电路连接 主控芯片选型为:STM32F407ZGT6,SPI FLASH选型为:W25Q256JV。 采用了两片32MB的片外SPI FLASH,电路如图所示。 SPI FLASH与主控芯片的连接方式如表所示。 STM32F407GT6W25Q256JVPB3SPI1_SCKPB4SPI1_MISOPB5SPI1_MOSI…...
华为HG8546M光猫宽带密码破解
首先进光猫管理界面 将password改成text就可以看到加密后的密码了 复制密码到下面代码里 import hashlibdef sha256(todo):return hashlib.sha256(str(todo).encode()).hexdigest()def md5(todo):return hashlib.md5(str(todo).encode()).hexdigest()def find_secret(secret,…...
驱动-兼容不同设备-container_of
驱动兼容不同类型设备 在 Linux 驱动开发中,container_of 宏常被用来实现一个驱动兼容多种不同设备的架构。这种设计模式在 Linux 内核中非常常见,特别 是在设备驱动模型中。linux内核的主要开发语言是C,但是现在内核的框架使用了非常多的面向…...
UE5 检测球形范围的所有Actor
和Untiiy不同,不需要复杂的调用 首选确保角色添加了Sphere Collision 然后直接把sphere拖入蓝图,调用GetOverlappingActors来获取碰撞范围内的所有Actor...
AI大模型学习十:Ubuntu 22.04.5 调整根目录大小,解决根目录磁盘不够问题
一、说明 由于默认安装时导致home和根目录大小一样,导致根目录不够,所以我们调整下 二、调整 # 确认/home和/是否为独立逻辑卷,并属于同一卷组(VG) rootnode1:~# lsblk NAME MAJ:MIN RM SIZE…...
在ros2上使用opencv显示一张图片
1.先将图片放到桌面上 2.打开终端ctrlaltT,查看自己是否已安装opencv 3.创建工作环境 4.进入工作目录并创建ROS2包添加OpenCV依赖项 5.进入/home/kong/opencv_ws/opencv_use/src目录创建.cpp文件并编辑 6.代码如下 my_opencv.cpp #include <cstdio> #include…...
训练神经网络的原理(前向传播、反向传播、优化、迭代)
训练神经网络的原理 通过前向传播计算预测值和损失,利用反向传播计算梯度,然后通过优化算法更新参数,最终使模型在给定任务上表现更好。 核心:通过计算损失函数(通常是模型预测与真实值之间的差距)对模型参…...
每日一题(小白)暴力娱乐篇30
顺时针旋转,从上图中不难看出行列进行了变换。因为这是一道暴力可以解决的问题,我们直接尝试使用行列转换看能不能得到想要的结果。 public static void main(String[] args) {Scanner scan new Scanner(System.in);int nscan.nextInt();int mscan.next…...
【HTTPS】免费SSL证书配置Let‘s Encrypt自动续期
【HTTPS】免费SSL证书配置Lets Encrypt自动续期 1. 安装Certbot1.1 snapd1.2 certbot2. 申请泛域名证书使用 DNS 验证申请泛域名证书3.配置nginx申请的 SSL 证书文件所在目录nginx配置证书示例查看证书信息和剩余时间4.自动续期手动自动5.不同服务器使用1. 安装Certbot 1.1 sn…...
企业应如何防范 AI 驱动的网络安全威胁?
互联网技术和 AI 科技为世界开启了一个新的发展篇章。同时,网络攻击也呈现出愈发强势的发展势头:高级持续性威胁 (APT:Advanced Persistent Threat)组织采用新的战术、技术和程序 (TTP)、AI 驱动下攻击数量和速度的提高…...
决策树简介
【理解】决策树例子 决策树算法是一种监督学习算法,英文是Decision tree。 决策树思想的来源非常朴素,试想每个人的大脑都有类似于if-else这样的逻辑判断,这其中的if表示的是条件,if之后的else就是一种选择或决策。程序设计中的…...
ScrollView(滚动视图)详解和按钮点击事件
文章目录 **ScrollView(滚动视图)详解****1. 核心特性****2. 基本用法****XML 示例:简单滚动布局** **3. 水平滚动:HorizontalScrollView****4. 高级用法****(1) 嵌套滚动控件****(2) 动态添加内容****(3) 监听滚动事件** **5. 注…...
2025年3月,再上中科院1区TOP,“等级熵+状态识别、故障诊断”
引言 2025年3月,研究者在国际机械领域顶级期刊《Mechanical Systems and Signal Processing》(JCR 1区,中科院1区 Top,IF:7.9)上以“Rating entropy and its multivariate version”为题发表科学研究成果。…...
根据pdf文档生成问答并进行评估
目标是根据pdf文档生成问答,并进行评估。 首先,安装依赖 pip install PyPDF2 pandas tqdm openai -q 具体过程如下: 1、将pdf放在opeai_blog_pdfs目录下,引用依赖 2、上传pdf文件,创建向量库 3、单个提问的向量检索…...
计算机网络 - 四次挥手相关问题
通过一些问题来讨论 TCP 的四次挥手断开连接 说一下四次挥手的过程?为什么需要四次呢?time-wait干嘛的,close-wait干嘛的,在哪一个阶段?状态CLOSE_WAIT在什么时候转换成下一个状态呢?为什么 TIME-WAIT 状态…...
SLAM | 两组时间戳不同但同时开始的imu如何对齐
场景: 两个手机在支架上,同时开始采集数据 需求: 对齐两个数据集的imu数据 做到A图片 B imu 做法: 取出来两组imu数据到excel表中,画图 A组 B组: x轴 : 所有imu的时间戳减去第一个时间…...
code review时线程池的使用
一、多线程的作用 多个任务并行执行可以提升效率异步,让与主业务无关的逻辑异步执行,不阻塞主业务 二、问题描述 insertSelective()方法是一个并发度比较高的业务,主要是插入task到任务表里,新建task,并且insertSele…...
物流网络暗战升级DHL新布局将如何影响eBay卖家库存分布策略?
物流网络暗战升级:DHL新布局将如何影响eBay卖家库存分布策略? 跨境电商发展迅猛,卖家对物流的依赖程度不言而喻。尤其是平台型卖家,例如在eBay上经营多站点的卖家,物流成本和时效几乎直接决定了利润空间与客户满意度。…...
JAMA Netw. Open:机器学习解码大脑:精准预测PTSD症状新突破
创伤后应激障碍(PTSD)是一种常见的心理健康状况,它可以在人们经历或目睹创伤性事件(如战争、严重事故、自然灾害、暴力攻击等)后发展。PTSD的症状可能包括 flashbacks(闪回)、噩梦、严重的焦虑、…...
域控制器升级的先决条件验证失败,证书服务器已安装
出现“证书服务器已安装”导致域控制器升级失败时,核心解决方法是卸载已安装的证书服务。具体操作如下: 卸载证书服务 以管理员身份打开PowerShell,执行命令: Remove-WindowsFeature -Name AD-Certificate该命令会移除A…...
Node.js入门
Node.js入门 html,css,js 30年了 nodejs环境 09年出现 15年 nodejs为我们解决了2个方面的问题: 【锦上添花】让我们前端工程师拥有了后端开发能力(开接口,访问数据库) - 大公司BFF(50)【✔️】前端工程…...
使用CubeMX新建EXTI外部中断工程——不使用回调函数
具体的使用CubeMX新建工程的步骤看这里:STM32CubeMX学习笔记(3)——EXTI(外部中断)接口使用_cubemx exti-CSDN博客 之前一直都是在看野火的视频没有亲手使用CubeMX生成工程,而且野火给的例程代码框架和自动生成的框架也不一样&…...
Verilog的整数除法
1、可变系数除法实现----利用除法的本质 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2025/04/15 13:45:39 // Design Name: // Module Name: divide_1 // Project Name: // Target Devices: // Tool Versions: // Description: // // Depe…...
win32汇编环境,网络编程入门之十九
;win32汇编环境,网络编程入门之十九 ;在这一编程里,我们学习一下如何使用gethostbyname函数,也顺便学一下如何将C定义的函数在WIN32汇编环境中使用 ;先看一下官方解释:从主机数据库中检索与主机名对应的主机信息。 ;它的原理是从你的电脑DNS中…...
Java学习手册:Java线程安全与同步机制
在Java并发编程中,线程安全和同步机制是确保程序正确性和数据一致性的关键。当多个线程同时访问共享资源时,如果不加以控制,可能会导致数据不一致、竞态条件等问题。本文将深入探讨Java中的线程安全问题以及解决这些问题的同步机制。 线程安…...
在生信分析中,从生物学数据库中下载的序列存放在哪里?要不要建立一个小型数据库,或者存放在Gitee上?
李升伟 整理 在Galaxy平台中使用时,从NCBI等生物学数据库下载的DNA序列的存储位置和管理方式需要根据具体的工作流程和需求进行调整。以下是详细的分步说明和建议: 一、Galaxy中DNA序列的默认存储位置 在Galaxy的“历史记录”(History&…...
Python异步编程入门:Async/Await实战详解
引言 在当今高并发的应用场景下,传统的同步编程模式逐渐暴露出性能瓶颈。Python通过asyncio模块和async/await语法为开发者提供了原生的异步编程支持。本文将手把手带你理解异步编程的核心概念,并通过实际代码案例演示如何用异步爬虫提升10倍效率&#…...
cmd 终端输出乱码问题 |Visual Studio 控制台输出中文乱码解决
在网上下载,或者移植别人的代码到自己的电脑,使用VS运行后,控制台输出中文可能出现乱码。这是因为源代码的编码格式和控制台的编码格式不一致。 文章目录 查看源代码文件编码格式查看输出控制台编码格式修改编码格式修改终端代码页 补充总结 …...
【算法】椭圆曲线签名(ECDSA)
🤔什么是椭圆曲线签名(ECDSA)? 椭圆曲线签名算法(Elliptic Curve Digital Signature Algorithm,简称 ECDSA)是一种基于 椭圆曲线密码学 的数字签名算法。它主要用于加密货币(如 Bit…...
Linux下使用MTK的SP_Flash_tool刷机工具
MTK的SP_Flash_tool刷机工具安装流程如下: 1、解压SP_Flash_Tool_Linux_v5.1336.00.100_Customer.zip unzip SP_Flash_Tool_exe_Linux_64Bit_v5.1520.00.100.zip 2、首先安装 libusb-dev 这个包: sudo apt-get install libusb-dev 3、安装成功之后…...
FRP内网穿透代理两个web页面(多端口内网穿透)
内网机器代理两个web页面出来 下载frp 选择0.51.2版本下载,高版本测试为成功 frp下载地址 部署frp server端(公网部署) #上传到opt rootsdgs-server07:/opt# ll frp_0.51.2_linux_amd64.tar.gz -rw-r--r-- 1 root root 11981480 Apr 15 1…...