http://os.51cto.com/art/201112/307610.htmapache
说到Web服务器,也许你第一时间会想到Apache,也许你会想到Nginx。虽说Apache依然是Web服务器的老大,可是在全球前 1000大Web服务器当中,22.4%使用NGINX。这些服务器包括诸如Facebook、Hulu和WordPress之类的网络巨头使用的服务 器。在今年刚刚结束的O'Reilly Velocity China 2011会议上,51CTO编辑有幸采访到了目前就任淘宝的王晓哲。在《淘宝网Nginx定制开发实战》的主题演讲上,王晓哲与朱照远为你们分享淘宝网是 怎么经过定制开发Nginx服务器内核以及开发有效的模块达到亚洲最大电子商务网站的经验。服务器
王晓哲:花名清无 一淘-数据平台与产品部技术专家。任职于数据平台部-量子恒道组,负责量子统计总体技术架构搭建。对海量数据处理、高性能高可用的Web服务相关技术有浓厚兴趣。网络
51CTO张浩:您从何时开始接触Nginx的?您是否接触过其余的服务器,好比Apache或者IIS?架构
清无:我是2008年开始接触Nginx的,当时在雅虎中国作开放平台的相关开发,很是看中Web服务器的大并 发服务能力,对Apache2Event模型、lighttpd和Nginx进行调研比较后,才选择了性能更为优异的Nginx进行开发和使用。除了 IIS之外,Linux平台上生产级的开源Web服务器我基本上都接触过,如apache/lighttpd/Nginx/cherokee等。并发
51CTO张浩:您在最初在Nginx上工做时使用的是什么语言?在您的分享中很是看好Lua语言,您又是从什么时候开始接触Lua语言的?框架
清无:最初在应用程序侧使用的是PHP,但在开放平台的实际业务中对PHP的并发能力很不满,就一直在考虑如何提高业务侧在这方面的表现。2009年进入淘宝后量子统计也有相似的诉求,通过多方比较选择了将Lua解释器嵌入Nginx的方案,也是从那时开始接触Lua语言。运维
51CTO张浩:其实不少开发者对Lua语言的了解来自《愤怒的小鸟》这款经典游戏,做为在服务器端工做的人,您认为Lua语言做为Web服务器中的胶水语言与在移动应用开发中有哪些不一样?既然咱们对Lua语言的了解是从《愤怒的小鸟开始》那么您有没有进行过相关开发呢?异步
清无:从基本结构来讲,移动应用中以UI事件为主体的事件循环同Web服务器中以I/O事件为主体的事件循环有 惊人的类似之处,差异无非是前者所处理的事件大部分由用户操做所产生,然后者处理的事件则大部分由外设(主要是网卡)产生。移动应用中使用的Lua开发框 架一般仍是标准的“填空”模式,即开发人员要站在系统事件循环的视角上,显式将业务逻辑切分为多块,用Lua脚本去编写若干回调函数分别实现各块,再由事 件循环在合适的时机去调用它们完成相关操做。而ngx_lua经过协程封装I/O操做以后,让开发人员能够站在业务逻辑的视角上以天然的线性逻辑书写代 码,由底层的ngx_lua将其隐式转换为多块回调的形式运行。函数
除此以外我以为两者差异不大,移动平台上硬件机能差、Web服务器上并发处理请求多,两者都须要开发人员对运行性能和资源占用保持很高的敏感性。高并发
虽然我我的正在使用Lua语言,但说到移动应用的开发我我的只是尝试过一些iOS上的Lua开发框架,没有实际发布过应用。
51CTO张浩:相比PHP,Lua语言在整个架构上的优点在哪里?换句话说是Lua语言哪些地方吸引了您?
清无:Lua的紧凑、快速和内建协程支持是最吸引个人地方,前2点是实现高并发服务的基础,后1点则保证了咱们能够将回调式异步操做转变为隐式异步操做,在保证并发服务能力的同时极大地下降了业务逻辑实现成本。
51CTO张浩:如今Nginx的增加很是迅速,有数据表示在世界上1000台服务器中有22.4%使用 Nginx。这些服务器包括诸如Facebook、Hulu和WordPress之类的网络巨头使用的服务器。您以为Nginx与Apache相比优点在 哪里?好比在压力承载与开发维护上?
清无:在Apache漫长的发展过程当中,开发团队和社区产出了至关丰富的扩展模块,这些模块是Apache流行 的重要缘由。遗憾的是它们如今也是阻挠Apache转型的最大障碍,能够说是成也模块、败也模块。由于Web服务器的扩展模块总会深度嵌入请求处理过程的 各个层面,服务模型一旦肯定,为了保证扩展模块兼容性,就没法再作大的修改。Apache从一开始选择的是多进程服务模型(Prefork),同时得益于 设计明晰的内部处理流程,使得此模型下模块很是容易开发;随着互联网的迅猛发展,Apache开发团队也意识到了多进程模型的并发服务瓶颈并着手改进,先 后开发出了Worker(thread)服务模型和Event(Leader-Follower)服务模型。但不管哪一个模型,都是为了最大程度地兼容原有 扩展模块而设计,保留了阻塞式请求处理流程,这就至关于本身为并发服务能力设置了一层天花板。
相比Apache,Nginx就没有这些历史包袱,有机会从头作正确的事,它借鉴了Apache中良好的内部流程设计,同时摒弃了阻碍性能进一步提高的阻塞式请求处理方案,加上Igor本人对开发高性能程序方面有丰富经验,就造就了Nginx这样一个后起之秀。
在内核上同Apache相比,Nginx更为精巧,单机并发处理能力要强不少,但缺点是难以开发复杂的扩展模块和深度定制代码,这是选择非阻塞 I/O复用服务模型的缺点。咱们但愿后续能经过增强ngx_lua对Nginx核心的控制能力来完全解决Nginx扩展困难的问题。
51CTO张浩:在本期的Velocity上的一个主要基调就是为用户最温馨的体验,那么做为架构师来说在进行架构设计的时候须要注意哪些方面的细节?
清无:做为技术架构师,快速、稳定是架构设计时追求的2个终极目标,也是为用户创造温馨体验的基本前提。设计是一个权衡的过程,没有最好的设计,只有最合适的设计,在设计的过程当中大体上须要注意四个方面:
把握好以上要点基本上就能够设计出符合业务需求的系统架构。
51CTO张浩:您从参加工做到如今最大的感触是什么?您对基层的运维开发人员在职业规划上又有哪些建议呢?
清无:“聚焦”才是硬道理。人的总精力有限,投入的方向多,摊到各个方向上的精力就少,更难出成绩。若是想在技 术领域有所做为,就要善于从平常工做中发现问题并思考解决方案,及时总结经验,多花时间学习基础理论,在熟悉了所在领域的基本情况后,能够选择一个方向重 点投入精力进行研究积累,只要时间投入够多,总能独树一帜。