OpenParty "清雨榕香"

| 1 Comment
2010年8月的OpenParty "清雨榕香"活动创下了各个话题参与人数的新高,很多话题的会议室都密密地站满了人,在各个热门话题的驱使下,大家的热情依然不减,在一个下午的时间里体验了一个又一个知识分享的小高潮。关于活动话题的详情,请参见OpenParty网站上关于本次活动的链接,下面简要记叙下我参与的几个话题的相关信息。

首先是来自淘宝网的苏宁带来的"淘宝广告技术部开发流程和Scrum实践",淘宝的Scrum实践一直应用于广告竞价系统的开发,取得了一些成果。想必大家都想要细细了解一下Scrum在大公司内部的实际应用案例,这个话题提供了很多相关的信息,帮助大家更好地了解Scrum以及实践Scrum时会遇到的一些问题。我的记录基本上遵循了讲解时的Slide结构,有一些内容是从现场的讲解中了解到的,也补充了进去。

Sprint 刚开始时
  • 使用excel来管理,自动生成燃尽图
  • 流程:产品经理提出需求->Sprint->产生Backlog->进行开发及测试,最终到产品上线->Review
  • 只有产品、开发、测试几个角色,角色比较少
  • 受干扰因素少,Scrum流程比较精简
现在Scrum开发流程
  • 功能需求数目增加
  • 很多时候都是项目进行一半的时候才引入Scrum
  • 团队中角色数目的增长
复杂的Scrum逐渐开始
  • 经常有工作中遇到的种种问题而引发的中断,此时Scrum要如何进行配合(明确分工,通过流程进行配合)

淘宝的Scrum角色
  • 产品
  • 架构师
  • TL/PM/Scrum Master
  • 开发
  • 测试
  • PE
  • 运维工程师

角色的作用

  • 产品经理
    • 提出需求、提出产品文档,对项目进行验收
    • 需要注意的是,在淘宝,相对于一般的Scrum流程,对于文档的要求要更高一些。只有更高的文档要求,才能保证公司业务可以更从容地面对人员变动等情况。
  • 架构师
    • 分析需求对系统架构、功能上的变动
    • 出台系统调整方案
    • 系统总体设计
    • 掌握系统改造成本
  • TL/PM/Scrum Master
    • 组织Sprint
    • 追踪项目开发进度
    • 沟通协调
  • 测试
    • 需求提出之后,测试就会进来
    • 了解需求动机
    • 测试用例
    • 各种测试
    • TDD
  • 开发
    • 模块
    • 代码开发
    • 单元/内部集成测试
    • Bug修复
    • 上线手册(这部分是必须的)要交给运维来Review
  • 运维(产品运维)
    • 了解业务需求、系统瓶颈
    • 熟悉模块接口和数据接口
    • 故障应对措施
    • 流量增长模型
    • 实际上线操作
整体Scrum流程
  • 由产品经理和架构师来共同确定功能需求,完善比功能基本明确需求对于系统功能的变更和影响,产生未细化的Backlog
  • 然后将未细化的Backlog通过Sprint来产生细分的backlog,交由开发者进行开发
  • 开发人员在开发的过程中,需要和测试和运维一起进行协作来完成。在交由运维人员进行上线以前,运维人员必须从测试人员那里拿到上线许可。不经过测试人员认可的项目不能上线。   

目标
  • 一切不以上线为目的的开发都是耍流氓
团队配置
  • 开发测试比例 2:1
  • 尝试结队编程,在一段时间内实行,后来发现成本比较高,就放弃了。
计划会/需求沟通
  • 需求点罗列
  • 需求的实现思路
  • 任务分解
  • 每日晨会的三个经典问题
Sprint总结会议
  • 头脑风暴,集思广益
  • 成功
  • 不足
  • 改进方案
任务分解:WBS
  • 规定了上线时间,能否完成?
  • 需要落实到每个人,每个人的各个工时,算出总工时,然后再确定上线时间。
  • 而需求要做到能分解的就分解掉
  • 如果需求提出方不能满足所计算出的上线时间,那么就要进行研究讨论看看砍掉哪方面的需求以达到更短的上线时间。
  • 人日的计算方法;通常一个人的工作还要有分工,60%开发,40%运维;按照一个人每天6小时的工作来计算
Scrum策略及工具
  • 调整工位:一个项目的人员坐在一起,减少沟通的成本
还举了两个案例,基本上讲述了在项目进行过程中,没有在早期就注意到影响项目的一些风险,导致风险被拖后
而项目进行过程中的变数非常大,经常有意想不到的情况来打断项目开发的过程,解决问题的成本非常高
对于工程师来说,要尽力产生可复用的代码
要多考虑风险,尽早解决危机,一个Scrum能解决的问题,不要带到下一个Scrum

淘宝内部使用的Sprint工具
  • Excel
  • Sharepoint  + Project
  • XPlanner - (记录工程师实际的工作用时,最后自动生成burndown chart,但是最后由于工程师反映此项工作太耗时间,被搁置了)
  • Mindmap,现在主要使用mindmap来在一个巨大的脑图上记录各种信息。这个脑图非常细致,规定了各个人要进行的任务,任务的划分也非常细致,时间精确到小时

Sprint分解会
  • 开发人员自己领取任务。这部分淘宝的做法和Scrum的标准做法有些许不同。
  • Scrum模式本身的推崇由开发人员自己来规定并设计项目开发点,但是淘宝在实施上发现过于浪费时间了,于是就变成了由产品经理等需求提出人和架构师定出粗略项目,最后在开会前就定好要开发的功能点,只做任务分解
关于开发人员需要完成的上线文档的详述:
  • 其中包括文档信息,RPM包的版本信息,为测试部署的相关文档,包括上线操作、回滚操作的具体步骤
  • 上线手册应该手把手传达给运维人员如何进行操作,目标是做到无须询问开发人员就可以实现项目上线。所以淘宝对项目开发人员的文档水平要求都非常高
  • 这些上线的文档都要进行Review!
对于需求的要求:
  • 最好有最终的文字描述,用文字解释详细,并且有实例。

------

接下来是由豆瓣的工程师石头带来的"从豆瓣Pulse谈起 - HTML5 相关技术在实际项目或产品中的应用"话题

op20100828_douban_html5_1.jpgHTML5在视觉,交互等诸多领域,为Web带来了全新的体验

最大的问题:浏览器兼容性 - 应该有意识地去引导用户使用性能更高,功能更多的现代浏览器,

CSS3技术非常的绚丽,很多效果的实现已经完全不需要Flash了。石头在现场针对前端的一些实际应用都分别进行了详尽的举例,详情请见Slide和视频

Douban Pulse 这个产品中已经使用了一些CSS3的新特性,带来了很好的用户体验。

关于具体的信息,大家可以参考现场石头的Slide以及视频,更形象直观 http://app.beijing-open-party.org/topic/20

op20100828_douban_html5_2.jpg------

南极、禅院与现代社会

这是由有着丰富经历的廖大侠带来的精彩话题。我想很多朋友起先和我一样,可能是向往着精彩的景色和见闻来关注这个话题的。事实上最终这个话题带给大家的更多的是对于精神领域更深入的了解。在这个繁忙的社会,我们事实上很难抛开一切,安静地思考自己。而这个话题中带来的一些观点,恰恰从这个方面填补了我们的欠缺。

廖大侠简单谈到他个人的一些经历就已经足够让大家感到钦佩:本科在天文台做论文,研究生时跟随导师做火星研究,是国内专业研究火星的团队成员之一;寺庙进行禅修;曾也想成为一名吉他手;现在在从事数据挖掘相关的工作...... 这履历本身就已经是足够精彩的故事。随后故事进入正题,开始讲述随南极科考队进入南极的故事。

op20100828_antarctica_1.jpg一些关于南极的有趣故事:

  • 夏天是天堂,冬天是地狱
  • 企鹅坐浮冰旅行
  • 南极很干燥,号称比沙漠还要干燥
  • 南极的环境,是和火星最相似的环境
  • 极夜也不是一片黑暗:中午的时候虽然没有太阳,但天还是亮的,就像早晨还未出太阳时一样,而且夜晚的月亮也经常很亮
op20100828_antarctica_2.jpg
现场播放了南极实拍的企鹅视频,看到视频里漫山遍野,数不清数目的企鹅,自己感觉非常震撼。因为那种感觉来自于你需要以一个新的角色来看待你自己,在那样的大陆上,人类并不是主宰,相反,只是来到这里努力适应生存的地球的一份子而已。

在南极的严酷环境中,身边的社会结构有着全然不同的转换。一个小小的团队,就是在那里全部的社会构成。因为资源才是真正的稀缺品,钱变得没有任何意义。而小群体中的每个人都有着明确的分工和责任,是团体共同生活发展所不可或缺的一部分。我们从来不是一个社会的旁观者,在一个庞大的社会中可能并不容易清晰地意识到这一点,但是在那样一个小环境中,这种观点和意识变得无比重要。

op20100828_antarctica_3.jpg
在这样的社会生活中所感受到的

  • 永远不要抱怨
  • 服务意识、合作精神与专业技能一样重要,有时甚至更重要,一个人足以影响整个团队
  • 谁是最重要的人?生活中身边的人
  • 不要试图去改变不可改变的东西
  • 学会静心很重要
  • 切勿贪多务杂
  • 努力使自己的心达到空虚、明净污染、不扭曲变态的理想状态

柬埔寨背包记九:旅途的终章

| 1 Comment
我于09年9月27日-10月8日在柬埔寨独自背包旅行,其间的经历和收获数不胜数。相关的经历我曾在09年10月底在Beijing Open Party 上有过一次交流分享,现在把旅行途中以及后来的一些记录陆续发布到这里,请感兴趣的朋友关注这里的更新。除正文中的照片以外,还可以在我的Footbig以及我的豆瓣相册中欣赏因篇幅原因未能在文章中出现的照片上一次交流分享的slides可以在我的slideshare页面看到。

这么多天以来,首次早上没有什么计划,舒舒服服地起床,背上行囊,悠闲地在马德望城中散步。先找了一家当地的网吧来整理自己几近存满的存储卡。网吧的环境不错,价格和国内差不多,而毫无墙的顾虑则让我感叹不已。

继续在路上步行,在路过的小路边摊上吃了碗牛肉米线,又在一个亮丽的快餐店吃汉堡套餐、读在暹粒买到的《摩托日记》。阴沉沉的,雨下了好几次。尝试走了下大路旁泥泞的小路,结果走了几十米,发现鞋底上沾了几寸厚的泥,脚已经抬不动了...... 下午天气转好,欣赏遍布于马德望各个路口的佛像雕塑。

p1060044-1.jpg
第二天早上乘大巴返回金边,五个小时的路程中,天气变幻莫测,在倾盆大雨和阳光明媚间切换了好几次。途中还可以远眺到西南方的豆蔻山脉。车上则放着山寨到极点的柬式MV,以及高棉语版本的周星驰电影。

几近下午时分回到金边,费尽周折挑选了一家看起来还不错的GuestHouse,虽然比之前的住处略贵一点,但环境确实不错。收拾好行装后又开始了在金边的步行。

这次首先是前往之前没有去过的中央市场逛逛。这栋巨大的建筑被包围在数百个摊位之间,市场规模之大,很是壮观。进入中央市场的主体建筑,发现里面全部都是钟表摊位,营业员均是一口标准普通话:"老板,来挑几块瑞士名表......" 我就只好头也不回地出去了。

在周边的摊位给家人带几样小东西,在一位大娘的食摊前吃了一碗类似意面的小吃,跟大娘打听摊位,说了半天英语,大娘摇头表示听不懂。后来说价格时打了个手势双方赫然明白大家都是华人。大娘笑着说:"你说国语就好的啦,说国语我们都听的懂的!"

随后步行到了之前没来得及看的Wat Phnom,不过这座小山上的寺庙并没有什么特别的,先前遇到的司机说的也没错,这里聚集的闲散小青年还真是不少。

returnday_phnompenh.jpg
接着就是漫无目的地在市区里面逛,新奇地看着一个个路过的建筑:日本学校、潮州会馆...... 享受着在这个异国都市最后一晚的时光。晚上在一家NGO开办的公益商店呆了许久,了解到很多相关信息。感兴趣的朋友可以参见Aw'-Kun SHOP+HELP @ Phnom Penh, Cambodia这篇文章。

bonvoyage_1220.jpg
第二天早上,坐在街边的早点摊上,望着蓝蓝的天空下太阳逐渐把国家博物馆的砖墙映得越来越红,丝毫感觉不到长久旅程的疲惫,却是由衷地对这个自己已经熟识了的国度,有着一种深深的恋恋不舍。我只是一个抱着简单的念头来游玩的旅人,但这趟旅途带给我的,却远远超出了我的期望。旅途中的美丽、艰难,那些震撼与遗憾,已经在心中融成了一整幅精彩的画面,而这幅画之美,我将享用终生。



感谢各位读者长久以来的支持

要查看本系列更多文章,欢迎点击页面右侧的Cambodia标签。本系列文章可能会省略一些旅行中的细节内容,如果您也打算出游,并还想了解更多详细信息的话,欢迎在网站页面留言,我会很高兴帮助您。

OpenParty "荷风清韵"

| 2 Comments
本次OpenParty "荷风清韵"活动的话题展现出强烈的多元化色彩,涵盖了从软件助力天文学研究、社群活动、读书分享乃至笑来老师带来的时间管理话题,到类似Nginx脚本编程等前沿IT话题,难免让在场的朋友应接不暇。按照惯例将自己现场收听的三个话题做一下简单整理。

量天-软件工程如何助力天文宇宙学研究

由冬清带来的,介绍天文领域软件开发项目的介绍,让在场的各位科学爱好者大开眼界。

冬清所在的公司Gsegment作为地面应用软件开发团队,参与了目前世界上最大的空间望远镜赫歇尔卫星空间项目。 在工作中,也认识到现在我国的航天工程力量明显不如欧洲航天局/NASA等组织,所以Gsegment为团队订下了长远的目的和理想:致力于通过工程来促进科学,提高我国工程能力。

Herschel计划是Horizon 2000计划的4个Corner Stone的其中之一,包含卫星在内的整个计划从决策到交付历经10年,观测卫星于09年5月14日发射,可保障使用期3年。如果把成本均摊到使用期,相当于每天开销百万欧元。Herschel天文台是红外亚毫米波天文台,在这个波段可看到宇宙早期的情况,同时由于波长长,在大气内难以观察,才有对应的卫星观测项目。天文台的观测仪器囊括了光学观测、谱分析等多种功能,可以用来在外星球寻找水。软件中重要的部分,HCSS Hershel 通用科学系统,开发历时十年,三百万行代码,20名开发人员使用Java开发而成。天文信息需要大量分析,卫星信号首先进入科学中心,然后通过由科学家编写的系统化产品生成脚本(Pipeline),最终产生可供分析和研究的数据。

现场还讲解了很多天文学的概念和知识,遗憾的是限于自己的知识水平有限,无法向大家做更完善的讲述了。

同时Gsegment也在招聘技术人员,欢迎有Python或Java编程经验的,想要致力于尖端工程科研方向的朋友请与他们取得联系。


奇遇花园与社群活动:猴子屁股与社群多样性

由奇遇花园的老板詹膑带来的话题,这个话题恰恰不像他自谦的是"广告",而从社群的概念这个角度入手,给大家讲述了社群理念,并从中建立联系、组织和活动的一些基本原则。

茫茫人海中,每个人都是独一无二的。社群多样性有助于解决社会问题。想对社群研究有深入浅出的理解,詹老师推荐《人类动物园》这本书。为什么会有新社群?旧有的社群在瓦解:班级、单位等,新的社群正在通过崭新的渠道产生,同时由于种种原因,这种讨论在学术范畴所进行的可能逐步减小。而将社群活动的理念推广,并做出有价值的活动,无疑是推动社会进步的一种良好方式。

我个人认为这个话题为在各种社区努力的组织者、参与者从概念上了解社群氛围与活动作出了很大贡献。同时奇遇花园在8月份还迎来了为众多社区提供服务的店庆开放月,这种对社区的贡献值得赞扬,欢迎大家给予更多的关注。


Nginx 脚本编程

由淘宝的 agentzh 大侠带来的Nginx脚本编程话题,由于其角度的新颖和前沿性,成为了本次活动的一个重量级话题。

Agentzh从去年9月开始研究Nginx源码,其中Nginx中高性能的实现也为阅读带来了很多障碍。遇到困难的地方就使用抄写的手法,白天抄写,在晚上一个人冥想。在研究和学习期间得出这样一个结论:Nginx远不是http server,这个软件的野心要远远超过大多数人对它的理解。

冥想和研究的最初结果就是独自开发的Nginx Echo模块,在Nginx的配置文件中实现了echo, sleep, time等功能。目前是为Nginx开发模块的开发者通常都会参考的一个典型范例。(此项目的文档之详细及深入,实在值得绝大多数的中国开源软件开发者学习)

Nginx 的核心代码大约 10W 行,就其来说,已经是很紧凑的规模了,相比之下,Apache的核心代码大约有 30W 行。而Agentzh所在的团队针对Nginx所写的的扩展的规模,都已经有3W行了。

Apache的多线程模型中,每个线程I/O阻塞,使用多线程拼并发。Nginx不支持多线程,而是使用多个进程来对应CPU 核数,从而提升在多核CPU下的性能。

而为Nginx开发子模块时需要注意的关键问题也是实现非阻塞I/O。因为实现高性能的前提,就是在处理的各个流程部分实现I/O非阻塞,如果仅仅是Nginx本身实现了I/O非阻塞,而处理的子模块却无法实现,那么整个性能的优化就变得没有意义了。

前面抛砖引玉的部分结束,接着从echo模块开始,agentzh将自己开发的众多Nginx模块逐个进行了介绍,通过在nginx.conf文件中应用这些模块,实际上就基本构成了单独使用Nginx来进行高效率非阻塞I/O服务器端开发的前提。我在这里也凭借记录将这些模块在这里简单罗列一下,具体的详情和范例可以参见 agentzh 的幻灯片:Slide1, Slide2

if statement的实现  - (ngx_dev_kit, set-misc-nginx-module)模块

array的实现 - (array-var-nginx-module)模块

子请求,一个请求中执行其它请求,可以提高服务器的并发度,提高平均相应时间,但是注意同时也增大了服务器的压力。子请求的具体应用实例:前端通过多个子请求的方式来异步获得处理结果,然后Nginx可以把结果合并并展示(比如合并成为JSON 用于AJAX)。

用C重写的Non-blocking memcached 模块 - (memc-nginx-module),可以实现在nginx.conf中直接用非阻塞方式操作memcached

用error_page 这个命令来实现等同于程序语言中try/catch的语句

memcached 连接池 - (ngx_http_upsteram_keepalive)  来实现连接池

使用非阻塞方式来访问 MySQL - (drizzle-nginx-module, rds-json-nginx-module)

这里有个问题,就是通常使用的libmysql是I/O阻塞的,如果在这个应用场景中使用这个库则无法发挥Nginx的高效率。在这里使用了Drizzle模块中的driver可以实现非阻塞IO访问mysql, sqlite3

rds-json-nginx-module模块负责将数据库查询的结果以json格式提供输出

使用Nginx来操作memcache及MySQL所带来的一些性能优势:

  • 单机几千QPS常见,千兆网卡跑满!
  • (个别应用场景) MEMCACHED 不使用连接池 2W QPS,使用后14W QPS
  • Qunar网站上面的一个Ajax应用案例实测,单机7k-8k QPS
  • 比较Java+Tomcat平台与单纯使用Nginx来实现的相关性能对比 - Java: 50~60 QPS;  Nginx: 700~800 QPS

Nginx直接接受表单提交的信息 - (ngx_form_input模块)

Nginx非阻塞直接操作Postgre数据库 - (ng_postgre模块), 得益于libpq API对于非阻塞的实现

srcache模块 - (srcache-nginx-module) 用来对页面和数据结果进行缓存(和前面提到的memc模块有区别,这里的sr表示SubRequest)

在Nginx配置文件中嵌入Lua脚本 - (lua-nginx-module)  很快Nginx的Lua子模块中就可以使用非阻塞IO的方式来调用Nginx的子请求了

现场讲述的一个Nginx-Lua应用实例:单纯用Nginx来实现数据库集群中用户Hash的计算

所提到的应用方式已经在淘宝量子统计以及Qunar中实际应用。

(Jul 10, 2010 更新:细节修改,感谢 agentzh 及 vipcalio 的指正)

本次活动在技术上涉及的方面很多,限于个人知识水平的限制,记录如在某些方面有什么偏差和不足,欢迎大家指正。想要了解活动详情以及本次活动其它话题的朋友,可以在此查看"荷风清韵"活动的所有话题情况。同时也请关注OpenParty网站对于此次活动的总结。

Find recent content on the main index or look in the archives to find all content.

Recent Comments

  • CNBorn: 非常感谢 agentzh 及 vipcalio 的指正。原文中的两点问题已经修改 read more
  • vipcalio: 你的会后分享写得非常不错,不过关于agentzh演讲的部分有两个小错误 1是“而Agentzh所在的团队针对Nginx所写的的扩展的规模,都已经有30W行了”应该是3W行。 2是“srccache模块”应该为srcache模块(http://github.com/agentzh/srcache-nginx-module) read more
OpenID accepted here Learn more about OpenID