社区
教程
Wiki
注册
登录
创作新主题
社区所有版块导航
Python
python开源
Django
Python
DjangoApp
pycharm
DATA
docker
Elasticsearch
分享
问与答
闲聊
招聘
翻译
创业
分享发现
分享创造
求职
区块链
支付之战
aigc
aigc
chatgpt
WEB开发
linux
MongoDB
Redis
DATABASE
NGINX
其他Web框架
web工具
zookeeper
tornado
NoSql
Bootstrap
js
peewee
Git
bottle
IE
MQ
Jquery
机器学习
机器学习算法
Python88.com
反馈
公告
社区推广
产品
短视频
印度
印度
一周十大热门主题
2025 年程序员薪资水平排行前十的城市 1、北京 平均月薪:22,500元 年薪范围:35万-...
ST成了香饽饽,Python量化验证ST股涨停溢价表现|附策略代码
机器学习学术速递[10.31]
图像分类新挑战:从模型鲁棒性到AIGC检测的6大前沿开源数据集
Quant4.0,基于AgentScope开发 | 年化316%,回撤14%的超级轮动策略,附pyt...
如何用Python量化的方式找到处于底部横盘突破状态的牛股
对话可心柔创始人兼CEO陈科:以柔破局,20亿细分冠军的诞生 | TopDigital专访
ChatGPT 要做广告和电商了,AI 将重塑营销业
保姆级教程:从 GitHub 代码到 Vercel+Cloudflare 部署全流程(附域名配置)
《2025AIGC新手必备资料包》(1.2GB)
关注
Py学习
»
DATABASE
每秒几万次MySQL交互,搜狗纯异步MySQL客户端开源了!
架构师之路
• 5 年前 • 691 次点击
很多朋友问,如何学习RPC内核知识?
我的回答是,
直接看源码
。
今年看源码,之前推荐过一个框架《
单机40万QPS,搜狗WF框架,今年最值得学习的开源代码
》,随着源码阅读的越来越深入,发现了WF框架一个非常独特的地方:
高性能纯异步MySQL客户端
,非常有意思,今天和大家介绍一下自己的学习心得。
首先,什么是WF?
WF,是搜狗开源的C++服务器引擎框架。WF的设计目标是:
轻量级,高性能
。
搜狗几乎所有的C++后端服务,都基于这个框架,每天处理超过百亿的请求。它的性能超高
,单机每秒50W的QPS,特别是高并发压测的情况下,比nginx和brpc表现都要好。
什么是WF高性能纯异步MySQL客户端?
WF高性能纯异步MySQL客户端,既继承了WF的极简设计目标,无需依赖任何库,又继承了高性能设计目标,在合理的配置下,每秒能处理几万次MySQL请求。
除此之外,它能支持事务,支持存储过程,支持多语句多结果集,并在内核防止SQL注入,互联网业务绝大部分需求都能轻松应对。
画外音:支持事务的异步MySQL客户端,太爽了。
同时,作为WF原生自有协议的一部分,它与任务流,服务治理能特性完美融合,与http,redis,计算任务统一使用,并能够通过upstream轻松实现读写分离。
为什么搜狗WF异步MySQL客户端,能做到每秒几万次数据库交互?
如上图所示,传统的MySQL客户端,往往是同步阻塞式的,在向MySQL发送请求到MySQL回复响应的过程中,整个线程处于阻塞等待状态。
画外音,图示:
(1)粉色:本地CPU计算;
(2)蓝色:与MySQL通讯,请求与响应;
(3)白色:本地等待;
此时,
如果希望提高并发处理能力,往往要设置大量的工作线程
,而工作线程的切换,以及临界资源的锁争夺,性能会有较大的影响。
而作为异步MySQL客户端,向MySQL发送请求之后,线程就可以执行本地其他异步调用,或者发送下一个MySQL请求,无任何阻塞,
用很少的线程,就能拥有很高的并发处理能力
。
画外音:所有网络任务共享处理线程池。
体验完搜狗WF异步MySQL客户端,有什么感受?
首先,客户端使用起来非常简便。
如上图所示,简单的几行,就能够提交一个异步的MySQL任务。
画外音:
url参数,
mysql://uname:pwd@host:port/dbname
set_query,可以设置希望执行的SQL语句;
callback,异步返回结果的回调;
其次,能够支持的命令非常丰富。
增删改查、建库删库、建表删表、预处理、使用存储过程和使用事务的多种需求,都可以轻松满足。
画外音:目前不支持切换数据库,但可以通过db.table的方式进行跨库的操作。
还有,对结果集的处理极其友好。
在异步回调中,通过
task->get_resp()
能够拿到
MySQLResponse
:
(1)一个
MySQLResponse
里包含若干
ResultSet
;
(2)一个
ResultSet
包含若干
Row
;
(3)一个
Row
包含若干
Field
;
对使用者非常友好,能够很轻松的进行结果集处理,规避掉各种细节。
同时,对连接的封装非常灵活。
如果无需独占连接,传入url创建任务,调用方甚至无需关注“连接”的存在;对于需要独占连接的事务需求,可以先创建连接,再在连接上创建任务。
最后再强调一点,
WF在github上的文档和demo非常齐全
,
对于新手极其友好
。而且碰到代码中不明白的地方,可以直接联系开发小组,作者会直接和大家交流,避免二手消息。
画外音:找一段demo代码单步执行下来,协议设计与实现,底层网络通讯,IO线程,工作线程,任务队列,线程同步互斥机制,超时处理机制,异常处理机制等,能迅速掌握一套RPC内核原理与细节,基本上国内大部分公司的offer能手到擒来。
WF,是今年我看过最清爽的开源代码,非常适合了解通信内核,RPC内核,调度框架内核,强烈推荐给大家。
WF的高性能异步
MySQL-client
,也非常推荐大家使用,MySQL数据库老大难的性能瓶颈,说不定就解决了。
地址
:https://github.com/sogou/workflow
画外音:WF还有很多优秀的设计,等待大家去挖掘。
相关文章:
《
单机40万QPS,搜狗WF框架,今年最值得学习的开源代码
》
阅读原文
,
直达代码
。好的代码,一起分享。
Python社区是高质量的Python/Django开发社区
本文地址:
http://www.python88.com/topic/74918
登录后回复