《架构师之路:架构设计中的100个知识点》
19.脚本语言使用长连接的一种思路
脚本类语言,例如PHP,不能像C++/Java那样能搞服务常驻内存,不能搞长连接?
为什么脚本语言要搞长连接?
脚本类语言每次访问后端数据库,服务,缓存,都需要经历上述四个步骤:
1. 建立连接;
2. 发送数据;
3. 接受数据;
4. 销毁连接;
在吞吐量很高的情况下,TCP建立与断开连接的开销不能忽略了,有可能成为性能瓶颈。
像PHP可以用swoole来优化解决,但其仅限于PHP。脚本语言有没有通用的长连接优化方法呢?
那你可以搞一个本地服务local-proxy,PHP与本地服务利用UDS通讯,本地服务与缓存用TCP长连接通讯。这样脚本语言就可以避免每次访问缓存建立连接销毁连接。
什么是UDS?
UNIX Domain Socket,是一种进程间IPC通讯机制,它不需要经过网络协议栈,不需要打包拆包、不需要计算校验和等,它只是将应用层数据从一个进程拷贝到另一个进程。它可以用于同一台机器上两个没有亲缘关系的进程通讯,不但全双工,还保证消息不丢,不重,不错乱。
如上图所示,我们在PHP应用服务器上部署一个local-proxy:
1. PHP与local-proxy之间使用UDS通讯;
2. local-proxy与缓存之间用TCP长连接通讯。
local-proxy的实现要点是什么?
1. 没有任何业务逻辑,只转发请求;
2. 复用缓存协议,这样调用缓存的业务代码不需要大幅度修改。如果封装了缓存访问client,只要要升级client,将访问缓存升级为访问local-proxy,这样业务代码甚至都不用动。
你会发现,非常非常多基于server实现的缓存,数据库中间件,都是这两个思路。
知其然,知其所以然。
思路比结论更重要。
补充阅读材料:
《Swoole:PHP 协程框架》
https://www.swoole.com/
不多介绍了,硬生生为PHP续命的技术。
==全文完==
20年,系列1:
《流量从10万到10亿,遇见的80个架构问题》
以实践为主线,结合讲解架构知识点,几十个小时视频内容,已完结。
今年,系列3:
《架构设计中的100个知识点》
以架构知识点为主线,结合讲实践。讲解形式:短视频+图文+直播+星球社群,免费,欢迎感兴趣的童鞋关注。
第20集:分布式系统一致性为什么难做?
技术没啥人看了,坚持还有意义吗?
置顶标星,日更好文不错过。
点赞,转发,在看三连。感谢!