[高可用的 PHP] 专访瓜子二手车纪鹏程:流量密集型服务的 PHP 实践心得

1,244 阅读9分钟

小编语


本文为 PHP 全球开发者大会专访系列,本期采访嘉宾是 PHP 大会讲师——瓜子二手车高级技术总监纪鹏程。在即将到来的 PHP 大会上,他将和大家分享瓜子后端技术架构的变迁。


由 DevLink 主办的 PHP全球开发者大会 将于 2017年6月10日~11日 在北京亚洲大酒店举行,本次大会特约讲师——纪鹏程将为大家献上精彩的主题演讲,题目为:《瓜子后端技术架构的变迁》。


主题简介:

介绍瓜子如何从最初的原始状态,如何逐步进化到现在的准服务化现状,中间所碰到的问题,以及我们解决的方案和一些经验总结,最后讲一下我们对瓜子整体架构的规划。


购票地址详见文章末尾【阅读原文】链接

想知道更多大会精彩内容,长按下面的二维码,查看议题列表。


以下为采访内容,提问者:DevLink,受访者:纪鹏程。


1 纪鹏程老师您好,能否简单介绍一下自己?


07 年从中科院软件所毕业后,去了百度的贴吧项目组,做后端系统的设计和开发工作,当时后端的模块主要用 C/C++ 开发,后期一些系统也逐步转为 PHP,先后主要负责了贴吧资源区项目和i贴吧项目;11 年加入赶集,最开始负责的是赶集交友项目,后面又先后负责瓜子社区、二手物品交易频道和二手车交易频道的开发工作,一直是一半技术一半管理;14 年 9 月内部开始孵化赶集好车的项目,也就是瓜子二手车的前身,我负责整体技术团队的搭建和培养,随后就伴随着这个项目一直走来。

 

技术上,早期主要侧重点是存储和基于 C/C++ 语言体系的架构,后面随着时间的变化,兴趣点开始变得广泛,后端、前端、移动端以及机器学习都有涉及,不过受精力所限,都很难做到精通。

 

2 我们知道,您曾经在百度、赶集工作过,现在在瓜子二手车负责技术方面的工作,我们发现,您接触到的所有业务基本都是流量密集型的产品。这是您刻意选择的技术方向,还是出于偶然呢?


也不算刻意吧,毕业的时候最想去的还是 google,不过当时没去成,所以去百度就变成了另外一个选择,很幸运当时去的贴吧是百度仅次于大搜的最大流量的产品,大搜那时方向已经分的比较细了,而当时贴吧还基本就分前后端,所以每个人要去 cover 的面就非常广,贴吧这么巨大流量的背后就要求大家把性能做到极致,任何一处性能设计不合理在每天几亿 PV 面前都会迅速暴露,现在回过头来看,贴吧的四年给我打下了一个比较扎实的基础,对此我还是挺心存感激的。

 

从百度到赶集,一是觉得分类信息是当时的一个很有意思的方向,很贴近我们的日常生活,比较接地气,另外一点,是觉得贴吧也过了它最高速成长的阶段,后期更多偏重的是一些细节的加强。和贴吧一比,赶集的流量相对就要小一些了,但是和贴吧这种在当时不用考虑变现压力,只需要负责吸引流量的产品一比,赶集的业务就要复杂很多,技术和产品不单单要为用户服务,还需要为内部的销售、以及商家服务,要实现多赢、共赢的局面,还要兼顾流量、广告变现这些事情。如果把贴吧的工作比喻成修炼易筋经这样一门内功的话,那在赶集就是十八般兵器,样样要精通,因此同样也会对知识的广度提出要求,逼着我去接触更广阔的领域和知识。

 

从赶集到瓜子二手车,作为项目孵化最早期的参与者,属于很自然的过度,在瓜子二手车,除了升级之前的技术架构外,我们更加重视算法、大数据、机器学习这些技术对业务、产品的提升,未来的世界,不再拼的是业务、产品,更多的是拼对数据的应用能力。

 

3 有很多开发者朋友认为,PHP 适合早期原型阶段的开发,而流量上来之后,最好用 Java、Go 这样的编程语言来面对大流量、大并发的情况,您是怎样看待这个观点的?


首先,我想说的是没有最好的语言,只有最合适的语言场景。PHP 的优势是简单易上手、不常驻内存,因此也就不用考虑内存泄漏、资源释放这类问题,初创公司在起始阶段,要快速的满足业务和产品需求,快速搭建原型,所以这时候,PHP 就是最适合的语言,但确实随着大并发、大流量的需求逐渐变多,PHP 不能常驻内存以及解释性语言的特点就会在响应这类需求时逐渐变得有点捉襟见肘,但这并不意味着PHP没有用武之地,PHP 的简单性正是编写复杂业务逻辑的绝佳语言,因此,用 C/C++、go、Java 去写一些逻辑变动小、性能要求高的模块,而用 PHP 去完成偏前端复杂逻辑的模块和页面就是一个很好的配置组合。

 

最近几年,随着 PHP7、JIT 实践以及 swoole 异步编程框架的不断完善,PHP 在性能上也变的不断强大,相信不远的将来越来越多的高性能模块也会逐步转到 PHP 上。

 

4 在可用性保障方面,您觉得 PHP 有哪些优势和不足?


PHP 的针对每次请求的进程模型其实对系统的可用性和稳定性是有好处的,每次请求结束即释放资源可以简化系统的逻辑,不需要考虑内存泄漏、也不用复杂的 GC 机制;但是,恰恰也正是因为这点,PHP 不能常驻内存以及同步机制,也给性能设置了一些上限,如果请求响应很慢,当所有的进程都在处理请求时,那么也就不能再有其他的请求,服务也就变得不可用,这也是平时很多站点出现 502 的主要原因,因此需要将处理慢的地方抽取出来,要么变成异步实现,通过队列这样的方式来达到,要么用性能更高的语言来实现。

 

总体说来,保证系统的可用性,重点还是在架构层,是一个复杂的系统工程,包括容量规划、单点消除、服务分级和降级、熔断机制、系统监控以及性能监控等等,只有这样,才能使得系统具备高可用性。


5 作为一名技术负责人,在用人和技术团队的管理方面,有没有可以与大家分享的?


用人方面,其实我只看重一点,就是这个人是不是具备足够的学习意识和学习方法,我们所处的这个行业,每天都在发生巨大的变化,要想跟紧这个时代,唯有不断的学习,不断的更新自己的知识。

 

在管理方面,我也是积极推进学习型组织的建立,在内部推动大家积极主动学习、分享。同时,适当放权,让优秀的同学能够有机会施展拳脚,获得更快的成长。


6 对 PHP 开发者有什么要说话的么?

第一,  不要过度依赖框架,虽然框架能够极大的简化我们的劳动,但是框架毕竟只是工具,不应该成为束缚我们手脚的囚笼,我们应该要学习框架背后的思想,要深入理解为什么框架要这么做?体现了哪些设计模式?如果我来做,能不能做的更好?


第二,  练好扎实的基本功,语言都是万变不离其宗,但是扎实的算法、数据结构、操作系统和网络知识才是我们技术持续发展的根基。最近几年面试深有感触,一些出身名校的科班学生,写了几年业务逻辑后,再让写一些基本的算法,哪怕是简单如二分查找、排序、字符串处理这类,离开 PHP 函数都不能很好的写出来,这有点属实不该;


第三,  对语言不要过度排他性,每种语言都有自己的特点和使用场景,所以有时间不妨多了解学习其他的的语言,只有这样,才能在任何一种场景下都能找到最适合的语言和架构;


第四,  遵从规范,PHP 社区也在不断丰富 PSR 的标准规则,从编码规范、自动加载方式到消息格式、缓存机制等,不断从过去的风格转向规范有助于语言的推广以及跟外界更好的合作,这也是将来的趋势;


第五,  用数据驱动、技术驱动的思想去指导自己的工作;


第六,  开始关注机器学习、大数据,随着智能时代的逐渐到来,这些技术将来必然会变成互联网人才的基本技能,与其到时费劲去学,不如现在就开始去了解。


本篇文章仅代表嘉宾个人观点




2017 PHP 全球开发者大会,将于 6.10-11 在北京亚洲大酒店举办,是面向 PHP 开发者及技术管理者举办的线下技术交流活动。


继前年的“ PHP7 初探”、去年的“高性能的 PHP ”主题后,第三届 PHP 全球开发者大会的活动主题是“高可用的 PHP ”,本次活动,我们将在 PHP7 这个日趋成熟的 PHP 版本之上,与大家探讨 PHP 开发和运维中的高可用性挑战。



大会的详细信息请见:http://php2017.devlink.cn/

点击【阅读原文】 可直接查看大会详情