热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

淘宝清无专访:Nginx服务器与lua脚本语言

说到Web服务器,也许你第一时间会想到Apache,也许你会想到Nginx。虽然说Apache依然是Web服务器的老大,但是在全球前1000大Web服务器当中,22.4%使用NGINX。这些服务器包括诸如Facebook、Hulu和WordPress之类的网络巨头使用的服务器。在今年刚刚结束的OReill
说到Web服务器,也许你第一时间会想到Apache,也许你会想到Nginx。虽然说Apache依然是Web服务器的老大,但是在全球前1000大Web服务器当中,22.4%使用NGINX。这些服务器包括诸如Facebook、Hulu和WordPress之类的网络巨头使用的服务器。在今年刚刚结束的O'Reilly Velocity China 2011会议上,51CTO编辑有幸采访到了目前就职淘宝的王晓哲。在《淘宝网Nginx定制开发实战》的主题演讲上,王晓哲与朱照远为大家分享淘宝网是怎么通过定制开发Nginx服务器内核以及开发有效的模块达到亚洲最大电子商务网站的经验。

 

王晓哲:花名清无 一淘-数据平台与产品部技术专家。任职于数据平台部-量子恒道组,负责量子统计整体技术架构搭建。对海量数据处理、高性能高可用的Web服务相关技术有浓厚兴趣。

张浩:您从什么时候开始接触Nginx的?您是否接触过其他的服务器,比如Apache或者IIS?

清无:我是2008年开始接触Nginx的,当时在雅虎中国做开放平台的相关开发,非常看中Web服务器的大并发服务能力,对Apache2Event模型、lighttpd和Nginx进行调研比较后,才选择了性能更为优异的Nginx进行开发和使用。除了IIS以外,Linux平台上生产级的开源Web服务器我基本上都接触过,如apache/lighttpd/Nginx/cherokee等。

张浩:您在最初在Nginx上工作时使用的是什么语言?在您的分享中非常看好Lua语言,您又是从何时开始接触Lua语言的?

清无:最初在应用程序侧使用的是PHP,但在开放平台的实际业务中对PHP的并发能力很不满,就一直在考虑如何提升业务侧在这方面的表现。2009年进入淘宝后量子统计也有类似的诉求,经过多方比较选择了将Lua解释器嵌入Nginx的方案,也是从那时开始接触Lua语言。

张浩:其实很多开发者对Lua语言的了解来自《愤怒的小鸟》这款经典游戏,作为在服务器端工作的人,您认为Lua语言作为Web服务器中的胶水语言与在移动应用开发中有哪些不同?既然我们对Lua语言的了解是从《愤怒的小鸟开始》那么您有没有进行过相关开发呢?

清无:从基本结构来说,移动应用中以UI事件为主体的事件循环同Web服务器中以I/O事件为主体的事件循环有惊人的相似之处,差别无非是前者所处理的事件大部分由用户操作所产生,而后者处理的事件则大部分由外设(主要是网卡)产生。移动应用中使用的Lua开发框架通常还是标准的“填空”模式,即开发人员要站在系统事件循环的视角上,显式将业务逻辑切分为多块,用Lua脚本去编写若干回调函数分别实现各块,再由事件循环在合适的时机去调用它们完成相关操作。而ngx_lua通过协程封装I/O操作之后,让开发人员可以站在业务逻辑的视角上以自然的线性逻辑书写代码,由底层的ngx_lua将其隐式转换为多块回调的形式运行。
除此之外我觉得二者差别不大,移动平台上硬件机能差、Web服务器上并发处理请求多,二者都需要开发人员对运行性能和资源占用保持很高的敏感性。
虽然我个人正在使用Lua语言,但说到移动应用的开发我个人只是尝试过一些iOS上的Lua开发框架,没有实际发布过应用。

张浩:相比PHP,Lua语言在整个架构上的优势在哪里?换句话说是Lua语言哪些地方吸引了您?

清无:Lua的紧凑、快速和内建协程支持是最吸引我的地方,前2点是实现高并发服务的基础,后1点则保证了我们可以将回调式异步操作转变为隐式异步操作,在保证并发服务能力的同时极大地降低了业务逻辑实现成本。

张浩:现在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扩展困难的问题。

张浩:在本期的Velocity上的一个主要基调就是为用户最舒适的体验,那么作为架构师来讲在进行架构设计的时候需要注意哪些方面的细节?

清无:作为技术架构师,快速、稳定是架构设计时追求的2个终极目标,也是为用户创造舒适体验的基本前提。设计是一个权衡的过程,没有最好的设计,只有最合适的设计,在设计的过程中大致上需要注意四个方面:
尽量减少数据通路上的不必要环节,多一个环节就多一分出错可能
同时关注运行效率和开发效率,视具体场景有所侧重
正视而非掩盖系统异常,要对依赖系统故障时的自动处理机制有较周全的考虑
尽量将系统组件的内部运行状态以监控接口形式暴露出来,让运维工作白盒化
把握好以上要点基本上就可以设计出符合业务需求的系统架构。

张浩:您从参加工作到现在最大的感触是什么?您对基层的运维开发人员在职业规划上又有哪些建议呢?

清无:“聚焦”才是硬道理。人的总精力有限,投入的方向多,摊到各个方向上的精力就少,更难出成绩。如果想在技术领域有所作为,就要善于从日常工作中发现问题并思考解决方案,及时总结经验,多花时间学习基础理论,在熟悉了所在领域的基本状况后,可以选择一个方向重点投入精力进行研究积累,只要时间投入够多,总能独树一帜。

推荐阅读
  • 构建LNMP架构平台
    LNMP架构的组成:Linux、Nginx、MySQL、PHP关于NginxNginx与apache的作用一样,都是为了搭建网站服务器,由俄罗斯人lgorsysoev开发,其特点是 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • OAuth2.0指南
    引言OAuth2.0是一种应用之间彼此访问数据的开源授权协议。比如,一个游戏应用可以访问Facebook的用户数据,或者一个基于地理的应用可以访问Foursquare的用户数据等。 ... [详细]
  • 为元宇宙提供动力的 5 项重要技术
    元宇宙是你肯定听说过的东西。在过去的一年里,每个人都在谈论它。这是技术领域的下一件大事。Bloomberg情报高级行业分析师马修·坎特曼(MatthewKanterman)的分析显 ... [详细]
author-avatar
Cyndi丶先生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有