听说,php是世界上最好的语言?
画外音:phper说,不服能够点赞来辩。php
若是站点架构知足如下几点:前端
此时,经过短链接访问RPC服务、mc、redis会出现什么问题呢?web
典型的web架构如上:
(1) 最前端是APP或者web页面;
(2) 服务器上层是web-server进行接入;
(3) php调用后端,完成业务逻辑,拼接页面;
(4) 最后端是服务、缓存、数据库;redis
php做为脚本语言,不像C++/Java那样进程常驻,因此它链接后端的服务都是使用短链接。
画外音:有朋友说,能够用C写扩展?数据库
上图是一种典型场景,站点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应用和后端服务每每是部署在不一样的机器上的,此时可否利用它来进行优化呢?架构
优化后的简易架构图如上:
(1) 在php应用服务器上部署一个local-proxy;
(2) php与local-proxy之间使用UNIX Domain Socket来通信;
(3) local-proxy与后端服务进行TCP长链接通信;
这样就大大提高了通信效率,免除了每次请求都要进行的创建与关闭tcp短链接的开销。
local-proxy很是注重通用性设计,由于php有RPC、mc、redis等多种后端:
架构师之路-分享可落地的技术文章
相关推荐:《Google FileSystem架构启示》《Google MapReduce到底解决什么问题?》《Google BigTable到底解决什么问题?》