OpenParty "荷风清韵"

本次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对于非阻

Posted 2010.06.30
Category: Event

Comments