Nginx -- 《深入理解Nginx》作者-陶辉 访谈摘要

Nginx – 《深入理解Nginx》作者-陶辉 访谈摘要

仅当需要并发处理万级别或以上的TCP连接时,才应当考虑Nginx

  • 不要重复开发轮子,尤其Nginx轮子的开发难度还不低
  • Nginx.conf里可以玩的花样很多(这由每一个Nginx模块决定,如ngx_lua这样的模块还可以在里面插入lua语法)
  • Nginx进程里是拒绝任何阻塞操作的,这是因为模块都运行在IO核心处理线程中的。任何一个边缘化的模块都可能因为自己小小的阻塞调用毁掉Nginx的高性能。
  • debug级别的error.log日志非常详尽,仅有它就可以定位出很多你的模块bug,别忘了使用它必须在编译时加入–with-debug

    Nginx建议

  • 首先,从最外面看Nginx是什么样的,了解进程模型、配置文件语法、基本功能等

  • 其次,从尝试编写最简单的http模块入手,渐渐地使用到Nginx Http框架的一些高级特性,了解Nginx的内存池、各数据结构的用法等;

  • 再次,系统的了解Nginx框架,包括它如何启动、如何停止、如何升级、如何重载配置,多进程间如何负载均衡,http连接的建立、URL与包头的收取、解析、选用哪些http模块处理请求、如何向客户端回响应等

  • 了解异步事件框架,理解松耦合设计与web请求的处理方式

高性能服务器设计经验

  • 单组件的性能提升上,算法最重要:特别是越前沿的技术、场景,通用算法的功效距离期望值就越远
  • 能够并行处理的绝对不要串行化,谨慎加锁,提高吞吐量
  • 操作系统、设备、TCP协议、内存池、缓存
  • 协程是一个很好的方向,通过创建协程栈来伪造线程开发环境提升开发效率,通过改变底层阻塞API的实现来提升吞吐量、运行效率
  • 分布式系统的ACP是一个权衡问题,适当的牺牲一致性是常见解决方案
  • 开发大型系统时组件间的高内聚松耦合很重要
  • 分布式数据库的事务

    Ngnix的不足

  • 以nginx.conf中的配置来定义web请求的动态处理流程,但只能处理大众化的需求
  • nginx模块的开发门槛还挺高,需要开发者对于服务器的非阻塞调用、事件模型有较深的理解
  • 开发者不能使用简单的堆分配对象,而要使用nginx_slab管理内存
  • 目前nginx最应该完善的应当是二次开发的易用性–能够更方便、快速的开发出高性能的nginx模块

    Ngnix的未来

  • 服务器资源的效率在企业成本上将占据越发重要的地位,Apache的市场份额被Nginx取代的趋势是不会变的

摘自

http://taohui.org.cn/csdn_interview.html

Contents
  1. 1. Nginx – 《深入理解Nginx》作者-陶辉 访谈摘要
    1. 1.1. 仅当需要并发处理万级别或以上的TCP连接时,才应当考虑Nginx
    2. 1.2. Nginx建议
    3. 1.3. 高性能服务器设计经验
    4. 1.4. Ngnix的不足
    5. 1.5. Ngnix的未来
  2. 2. 摘自