社区
教程
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
反馈
公告
社区推广
产品
短视频
印度
印度
一周十大热门主题
写给不会代码的你:20分钟上手 Python + AI
本周github最火的开源项目是这个!!!
GPT-4「荣升」AI顶会同行评审专家?斯坦福最新研究:ICLR/NeurIPS等竟有16.9%评审...
GitHub(微博搜索)-20240324-1
Stability AI CEO宣布辞职;消息称OpenAI将与好莱坞电影公司会面并推荐Sora丨A...
GitHub(微博搜索)-20240327-1
最新消息,抖音禁止投放AIGC内容生产相关工具类软件,包括不限于-20240323180002
GitHub(微博搜索)-20240325-1
2024 年 3 月编程语言排行榜,Python 与其他语言之间的差距从未如此之大!
GitHub推出全新AI功能,可自动修复代码漏洞
关注
Py学习
»
DATABASE
每秒几万次MySQL交互,搜狗纯异步MySQL客户端开源了!
架构师之路
• 3 年前 • 334 次点击
很多朋友问,如何学习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
334 次点击
登录后回复