作为互联网分类信息领域的“轻量级”公司,百姓网的访问速度和开发交付速度一直为业内人士所称道。在4月份的北京QCon上,百姓网的技术总监潘晓良为大家分享了百姓网在速度优化方面的经验,半年后,在杭州QCon上,来自百姓网的几名技术人员为大家带来了新的分享:百姓网是如何做到“每天上线一次”的快速交付的。
百姓网技术团队一共有12名技术人员,10月22日杭州QCon当天到场了6位。其中负责开发的赵君和负责运维的潘捷为大家带来了这次分享。赵君和潘捷,正好是一个dev+ops的组合。
半年前,潘晓良介绍称百姓网的每月PV达到10亿的流量,而赵君和潘捷称,目前,这个数字已经是半年前的两倍:每月20亿流量。而支持如此大规模流量的,正是百姓网的交付速度。
像百姓网这样12人的轻量级团队非常适合DevOps的交付模式,每天上线给百姓网带来的好处包括:开发效率的提高,PM不再追问什么时候能上线;恐怖的大错误变少(大项目切小);对互联网的高速变化的完全适应。
那么百姓网是如何做到每日上线,在此过程中又是如何保证网站稳定的呢?
用户测试驱动开发
赵君介绍说,要做到以天为周期的交付,第一是提高开发效率。其中有几个关键点:统一开发和运维环境;大项目拆解;保持良好的团队沟通;以及用户测试驱动开发。
百姓网统一开发运维环境的方法是,配置与线上环境一模一样的本地调试服务器,开发人员本地写代码自动同步到本地服务器上。这样做还有一个好处,在上线之前,整个公司相关人员就可以访问服务器,开发过程对PM是透明的,对公司所有人都是透明的,便于大家及时发现问题并反馈。
其次,为了保证每天交付,就需要把大项目拆解成一个一个的小项目。百姓网采用SVN无分支的方面,大家都在主干里面做开发,代码提交之后,立刻见效,尽量在开发的过程中把问题暴露出来,而不是等到上线是才发现
第三点也是最重要的一点:保持良好的团队沟通。针对这一点,百姓网做了一个小小的物理上的改变:就是让PM和开发人员坐在一起。“我们所有产品经理和技术开发人员坐在一起。很多错误自然的变少。”
最后,赵君总结道:“我们是用户测试驱动开发。我们没有专门的测试。其中用户的概念,包括了PM,公司其他人和所有网站用户”。
性能与速度的平衡
大项目拆解,每天上线,这种工作方式不可避免的带来一些关于稳定性的隐患,包括:线上错误;hotfix出错;逻辑错误;性能隐患等。
据潘捷介绍,百姓网针对这几种隐患都找到了相应的解决方法。
首先,关于线上错误的解决。他们选择在早晨用户量比较少的时候上线新功能,这样万一出错对用户的影响会比较小,而且此时技术人员头脑比较清醒,人员到位也比较齐,方便大家一起解决问题。同时,对于发现的错误,他们采用邮件的方式通知所有人,不仅能做到互相提醒、尽快定位错误,而且有助于其他人员防患于未然。
针对hotfix出错,他们采用具避免这类低级错误,将php -1 xxx.php语句嵌到线上文件里,帮助避免了线上修改的语法错误。
逻辑错误则采用二八法则应对:80%的用户,依赖网站20%的核心功能。使用“Curl http://www.baixing.com ”检测主要的功能页面,如果返回的http200,就可以运行。
开发速度快,代码质量肯定是下降的,对此造成的性能隐患,百姓网采用在线纪录DB,search慢查询的方法解决。潘捷介绍说,各种方法其实都不是绝对的,但是在速度和性能之间,你要找到一种平衡。重要的功能及时牺牲速度也要保证,但是一般性的功能,就可以快速交付。
用户测试驱动开发保证开发效率、自动化的方式保证网站稳定、尽可能用机器代替人的工作,这就是百姓网能做到“每天上线”的秘诀。当天的主持人、百度网高级架构师乔梁最后总结道,百度网的这种工作方式,正是某位国际技术专家所提到的“无政府主义编程,即所有人为所有事负责。”
互联网世界高速发展,企业面临的各种竞争越来越激烈,快速应变能力成为企业的一项基本要求,百姓网的快速交付案例,也许可以给从事开发运维的团队一些启示。