课程咨询 :13623629309

太原PHP培训 > 达内新闻 > php使用tcp长连接的一种优化思路
  • php使用tcp长连接的一种优化思路

    发布:51CTO      来源:51CTO      时间:2016-10-13

  • php使用tcp长连接的一种优化思路

    作为php开发人员,太原php培训班与你一起成长,带给你很多的福利与知识。

      一、面向人群

    如果站点架构满足以下几点,那么本文的优化方案会非常适合:

    1)使用php等脚本语言作为开发语言

    2)需要连接后端服务,例如RPC服务、memcacheredis

    3)流量非常大

    二、解决的问题

    常见的web架构如上:

    1)最前端是APP或者web页面

    2)服务器上层是web-server进行接入

    3)php脚本语言调用后端数据,完成业务逻辑,拼接页面

    4)最后端是服务、缓存、数据库

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

    一种典型场景,站点php部署在机器A上,缓存memcache部署在机器B上,之间通过短连接通信,过程为:

    1)php建立tcp短连接

    2)按照memcache协议发送数据

    3)接收memcache返回的数据

    4)php关闭tcp短连接

    在站点流量小时,上述过程没有任何问题,当站点流量非常大,QPS很高的情况下,phpmemcachetcp建立+关闭tcp短连接的开销便不能忽略了,有可能成为性能的瓶颈,如何进行优化是本文即将讨论的核心。

    三、UNIX Domain Socket介绍

    话锋一转,先一起来看看UNIX Domain Socket技术。

    UNIX Domain Socket是一种进程间IPC通讯机制,它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。它可以用于同一台主机上两个没有亲缘关系的进程,并且是全双工的,提供可靠消息传递(消息不丢失、不重复、不错乱)IPC机制。

    四、优化方案

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

    优化后的简易架构图如上,在php应用服务器上部署一个local-proxyphplocal-proxy之间使用UNIX Domain Socket来通讯,而local-proxy与后端服务进行TCP长连接通讯,这样就大大提升了通讯效率,免除了每次请求都要进行的建立+关闭tcp短连接的开销。

    五、local-proxy要点

    要实现上述优化方案,local-proxy是实现要点,在实现local-proxy时,有这么几点需要注意

    1)协议设计:local-proxy本身没有任何业务逻辑,只负责请求转发,上游发送过来memcache协议,透传给后端的memcache,这样的话,上游客户端不需要进行任何代码的修改

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

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

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

    好了,今天就给大家讲这么多吧,喜欢我的内容可以关注或者分享(微信公众平台:tytedu)选择太原达内培训,不再孤军奋战,轻轻松松做IT高薪白领。太原达内培训带领有明确目标的学子迈向成功之路!

上一篇:php两种include加载文件方式效率比较

下一篇:PHP7.0.0格式化字符串漏洞与EIP劫持分析

最新开班日期  |  更多

php高级开发名企定制班(剩2个名额)

php高级开发名企定制班(剩2个名额)

开班日期:12-29

php高级开发周末班(剩5个名额)

php高级开发周末班(剩5个名额)

开班日期:12-29

php高级开发免费试听(剩5个名额)

php高级开发免费试听(剩5个名额)

开班日期:12-29

更多高级开发工程师精品班

更多高级开发工程师精品班

开班日期:12-29

  • 地址:山西省太原市小店区学府街长治路高新国际A座24层
  • 课程培训电话:13623629309     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56

    在线客服系统