PHP-做聚合层,电商网站架构图概览

17年Q4年商城重构接入SOA,18年5月上线流量切换完成,旺季PC端Q4日均pv3000万;双11当天,销售额一千万美金,峰值日pv统计1亿(凌晨期间,PC端流量最大,实时回源qps3000左右),系统稳定运行;

在双11前期,经过多次调优,单台Web应用服务器,核心业务诸如登陆、加车、订单可以承载tps300~500左右,商详800~1000左右(压测结果),响应时间基本都在正常范围内,但同时服务器的负载也很高(Laravel框架太重,这也是一直的诟病,不过胜在开发效率和结构清晰,同时这也是我一直在寻求与Go语言结合作为Web服务高并发业务替代的架构方向)

基于PHP做Web服务开发,像电商这类读多写少的业务,在高并发请求面前,需要结合业务特征对数据实时性的要求与缓存层级结构,充分利用好CDN、Nginx代理缓存、Redis这类缓存系统的作用,降低对应用架构的冲击,与此同时,也需要注意缓存不一致的问题,在使用缓存和设计缓存架构时候,需要提前考虑缓存的更新策略以及生存期限,以及对应的清除策略,防止高峰时间流量涌入应用系统导致服务宕机;

系统压测期间,利用strace进程分析等工具,发现诸如机房方面的DNS限制、Predis的哨兵返回可用IP的选择引起的连接负载不均衡的问题,结合之前的大促优化清单,逐一落实解决后,整体效能提升了3~5倍左右。

团队基于职能划分,网站研发仅负责服务聚合以及数据处理这块,php充当中间层角色;

架构方面,选择php做基础服务的聚合层,进行相关业务的数据处理;

商城的架构概览:

laravel商城架构概览

后续:目前个人已投入大量精力在基于Go为中心的微服务方面发力,虽然Java系列诸如Spring的微服务体系已成熟,但作为Go语言以及Google的fans,我相信后续基于Go来作为微服务的解决方案的企业会越来越多,尤其是那些新型的技术企业。

Go,Just do it!