PHP使用local-proxy的一种思路! | 架构师之路(19)

《架构师之路:架构设计中的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续命的技术。返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()