专访阿里陶辉:大规模分布式系统、高性能服务器设计经验分享

您所在的位置:网站首页 nginx模块开发阻塞调用 专访阿里陶辉:大规模分布式系统、高性能服务器设计经验分享

专访阿里陶辉:大规模分布式系统、高性能服务器设计经验分享

#专访阿里陶辉:大规模分布式系统、高性能服务器设计经验分享 | 来源: 网络整理| 查看: 265

http://www.csdn.net/article/2014-06-27/2820432

摘要:先后就职于在国内知名的互联网公司,目前在阿里云弹性计算部门做架构设计与核心模块代码的编写,主要负责云服务器管理系统和存储系统的优化。陶辉就大规模分布式系统、高性能服务器设计分享了自己的看法。

关注陶辉很长时间,初次对陶辉的了解还是在我们CSDN的博客上,从2007年开始写博客,一直到现在,如果不是对技术的追求和热爱,以及热爱分享的精神,我想不是很多人能坚持下来,拥有多年大型互联网公司的从业经验,对Linux下的高性能服务器开发、大规模分布式系统的设计有着丰富经验,对企业的Nginx\开发Nginx模块也有着独到的理解。 Nginx是一个高性能的 HTTP 和反向代理服务器, Nginx 是由俄罗斯人 Igor Sysoev 为 Rambler.ru 开发的,其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。在谈到Nginx未来会取代Apache时,陶辉表示云与端的时代,端越来越多,云的性能就会越来越重要,服务器资源的效率在企业成本上将占据越发重要的地位,从这个角度来说,Apache的市场份额被Nginx取代的趋势是不会变的。这次,笔者有幸联系到陶辉,他就大型软件的开发,云计算等分享了自己的经验心得。陶辉毕业于西安交通大学计算机科学与技术专业,先后工作于华为、腾讯、思科、阿里巴巴等公司。对linux下的高性能服务器开发、大规模分布式系统的设计有着丰富经验。著有《深入理解Nginx:模块开发与架构解析》一书。

目前从事的工作

CSDN:给大家介绍一下您及目前从事的工作?陶辉:我目前在阿里云 弹性计算部门做架构设计与核心模块代码的编写,主要负责云服务器管理系统和存储系统的优化。大家在阿里云上购买的ECS服务器就是弹性计算部门的产品。

写Nginx书籍的缘由

CSDN:是什么缘由促使您写了一本关于Nginx的书籍?陶辉:大约2010年在思科工作时需要开发一个云文档系统,当时选用了Nginx作为web容器开发一个有较高性能诉求的文件上传下载服务。

可是发现很难从网上找到系统的资料可以指导Nginx模块的开发,对于Nginx的设计思路也是一头雾水,只好看它的源代码来倒推作者的初衷与模块设计思路。那个过程对于已有多年服务器开发经验的我来说也是痛苦的,于是就开始陆续写了一些Nginx模块开发的文章分享到CSDN上,希望能够帮助其他开发者快速解决问题。这时机械工业出版社的编辑lisa看到这些文章找到了我,希望我能写一本系统的、从开发者角度介绍Nginx的书。这本书诞生的缘由就在这里。

开发Nginx模块的注意事项

CSDN:目前国内知名的互联网公司很多都在使用Nginx,您觉得企业在使用Nginx\开发Nginx模块的过程中需要注意什么?陶辉:仅当需要并发处理万级别或以上的TCP连接时,才应当考虑Nginx。当官方Nginx无法满足项目需求,在开发你的个性化模块之前,先看一看大量的Nginx第三方模块里,有没有能够解决问题的Nginx模块,不要重复开发轮子,尤其Nginx轮子的开发难度还不低。Nginx.conf里可以玩的花样很多(这由每一个Nginx模块决定,如ngx_lua这样的模块还可以在里面插入lua语法),或许一段几十行的配置就能完成复杂的功能。

如果确实没有满足需求的模块,那么,再看看能不能通过类似subrequest这样的机制将问题分解为多个子问题,其中多数子问题可以由现成的模块完成,或者通过proxy机制来与其他现成的组件通过tcp协议交互完成。组合这些子问题来构成解是个好习惯。

若真有必要编写Nginx模块,先要确保它只是解决一个非常纯粹、简单的子问题,不要耦合太多的需求。Nginx进程里是拒绝任何阻塞操作的,这是因为模块都运行在IO核心处理线程中的。任何一个边缘化的模块都可能因为自己小小的阻塞调用毁掉Nginx的高性能。所以,慎重的考虑模块中的每一个调用,确认它们不会导致进程进入sleep状态,确认它们不会在那里空转占用系统资源。好好使用Nginx定时器事件、共享内存,往往能解掉上述问题。

写模块时,使用好Nginx的变量机制,让自己的模块插上http框架的翅膀,根据框架解析出的变量来做灵活的处理。甚至,提供一些新的变量作为底层模块而给上层模块使用。使用好nginx.conf,通过灵活的配置来提供丰富的功能。

debug级别的error.log日志非常详尽,仅有它就可以定位出很多你的模块bug,别忘了使用它必须在编译时加入–with-debug。最后,如果模块可能对其他人有帮助,那么,分享它吧。

对正在学习Nginx同学的建议

CSDN:对于正在学习Nginx的同学有什么建议?对开源软件的学习有没有什么分享的?陶辉:其实《深入理解Nginx》这本书的目录,就是我推荐的学习路径。

首先,从最外面看Nginx是什么样的,了解进程模型、配置文件语法、基本功能等。 其次,从尝试编写最简单的http模块入手,渐渐地使用到Nginx Http框架的一些高级特性,了解Nginx的内存池、各数据结构的用法等; 再次,系统的了解Nginx框架,包括它如何启动、如何停止、如何升级、如何重载配置,多进程间如何负载均衡,http连接的建立、URL与包头的收取、解析、选用哪些http模块处理请求、如何向客户端回响应等。

这样学习Nginx,大家就可以清晰得了解异步事件框架,理解松耦合设计与web请求的处理方式。 学习其他开源软件也可以仿照这一过程。

分布式系统设计建议

CSDN:我知道你在思科、腾讯等企业工作过,关于大规模分布式系统、高性能服务器设计上有没有什么经验、心得和大家分享一下?陶辉:使用高级语言、中间件来开发较大型软件时,一定先有一个评估标准:这样玩性能不是问题。这里的潜台词是把性能当做了基础货币。例如,使用Python代替C进行程序开发所牺牲的性能C1,与其带来的其他好处C2相比,必须C1



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3