谁说 PHP 不能搞长连接?

栏目: PHP · 发布时间: 5年前

内容简介:据说,php是世界上最好的语言?画外音:phper说,不服可以点赞来辩。如果站点架构满足以下几点:

据说,php是世界上最好的语言?

画外音:phper说,不服可以点赞来辩。

如果站点架构满足以下几点:

  • 使用 php 这类脚本语言开发

  • 需要连接后端服务,例如RPC服务、memcache、 redis

  • 流量非常大

此时,通过短连接访问RPC服务、mc、redis会出现什么问题呢?

谁说 PHP 不能搞长连接?

典型的web架构如上:
(1) 最前端是APP或者web页面;
(2) 服务器上层是web-server进行接入;
(3) php调用后端,完成业务逻辑,拼接页面;
(4) 最后端是服务、缓存、数据库;

php作为脚本语言,不像C++/Java那样进程常驻,所以它连接后端的服务都是使用短连接。

画外音:有朋友说,可以用C写扩展?

谁说 PHP 不能搞长连接?

上图是一种典型场景,站点php部署在机器A上,缓存memcache部署在机器B上,之间通过短连接通信,过程为:
(1) php建立tcp短连接;
(2) 按照memcache协议发送数据;
(3) 接收memcache返回的数据;
(4) php关闭tcp短连接;

在流量小时,上述过程没有任何问题,当网站流量非常大的情况下,短连接可能会成为性能瓶颈, 有什么优化办法吗?

画外音:建立连接,销毁连接很耗时。

话锋一转, 什么是 UNIX Domain Socket

UNIX Domain Socket 是一种IPC机制,它 不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答 等,只是将应用层数据从一个进程拷贝到另一个进程。

画外音:IPC, Inter-Process Communication , 进程间通信。

它可以用于 同一台主机 上两个没有亲缘关系的进程,并且是全双工的,提供可靠消息传递(消息不丢失、不重复、不错乱)的IPC机制。

画外音:亲缘关系是指,父子进程或者兄弟进程这种“特殊的”进程关系。

可以看到, UNIX Domain Socket 的效率会远高于tcp短连接,但它只能用于同一台主机间的进程通讯,而 php应用和后端服务往往是部署在不同的机器上的 ,此时能否利用它来进行优化呢?

谁说 PHP 不能搞长连接?

优化后的简易架构图如上:

(1) 在php应用服务器上部署一个local-proxy;

(2) php与local-proxy之间使用 UNIX Domain Socket 来通讯;

(3) local-proxy与后端服务进行TCP长连接通讯;

这样就大大提升了通讯效率,免除了每次请求都要进行的建立与关闭tcp短连接的开销。

实现local-proxy有什么要注意的?

local-proxy非常注重 通用性 设计,因为php有RPC、mc、redis等多种后端:

  • 协议设计:local-proxy本身没有任何业务逻辑,只负责请求转发,上游发送过来redis协议,透传给后端的redis

画外音:这样,上游客户端不需要进行任何代码修改。

  • 通讯方式 :如上文所述,local-proxy与上游使用 UNIX Domain Socket 进行通讯,与下游使用tcp长连接进行通信

  • 高效框架:这种方案是为了解决tcp短连接的效率损耗,这样对local-proxy的效率要求就非常高,可以选用成熟高效的 网络框架 和tcp长连 接连接池 技术来实现

画外音:例如libevent。

  • 请求映射:需要将上游发过来的请求与发往下游的请求一一映射起来,这样才能正确的对应上请求包与响应包

思考过程比结论重要 ,希望对你有启示。

谁说 PHP 不能搞长连接?

架构师之路-分享 可落地 的技术文章

相关推荐:

Google FileSystem架构启示

Google MapReduce到底解决什么问题?

Google BigTable到底解决什么问题?


以上所述就是小编给大家介绍的《谁说 PHP 不能搞长连接?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Dreamweaver基础教程

Dreamweaver基础教程

李振华、季小武、季小武、李振华 / 清华大学 / 2005-6 / 23.00元

本书通过实例的方式介绍了Macromedia公司的Dreamweaver MX 2004的使用方法和技巧。 全书由14章组成,第1章和第2章介绍了软件的应用领域、知识结构、界面组成等;第3章到第12章是本书的重点部分,通过实例制作介绍了站点的建立,表格、文本及样式的创建,链接、图像、行为的使用,层、表单、框架的创建和使用以及动画、多媒体的制作等主要知识点;第13章和第14章介绍了插件技......一起来看看 《Dreamweaver基础教程》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具