自习周报: 深入 Nginx 和 Openresty

2017-09-10 22:38:20 oilbeater 我的观点

负载均衡器是个很奇妙的东西,从云平台的角度来讲它是一个外部流量进入服务器的入口,应该是和计算、网络、存储一样的通用组件,对性能和稳定性有很高的要求;而对于业务来讲,它又是业务直接和外部交流的接入点可能又会有很多定制化的需求,对可二次开发以及动态变化又有着强烈的需求。这些看似矛盾的要求需要在负载均衡器这一层做到统一,一些方案的做法是再次分层,一层硬件或者专用软件的负载均衡只负责简单流量转发,专注于性能,高可用以及稳定性,像 F5 和 LVS 这样,另外有一层应用级的网关,提供丰富的功能,可编程以及不断变化的能力,像 AWS 的 API Gateway,Spring Cloud 里的 Zuul 以及更靠近应用层很多应用专属的 API gateway。如果你尝试做这两层结合的一个统一解决方案产品,那么 Nginx 大概是现在唯一的选择,而 Openresty 的出现有将这个工作的难度进一步降低了。


这周会介绍一下我最近看到比较好的相关资料,希望对大家有帮助,老规矩公众号里回复『 周报4 』获取自习资料。


1. Openresty 最佳实践

像学 Openresty 官方文档肯定是少不了要过一遍的,但是官方文档的问题在于都是零散的点不太成体系,而且一些绕坑的方法和使用技巧都隐藏的很深,不仔细多看几遍很容易被忽略。这个电子书是一个 360 员工维护的,有点像师兄笔记的风格介绍了很多关键点,可以少走好多弯路,在真正开发 Openresty 的正式产品前记得也要像临考一样先过一遍。


2. Nginx 从入门到精通

这是个淘宝 Tengine 写的面向 Nginx 开发者的一个教程。尽管 Openresty 提供了及其强大的功能,但是有些变量或者结构 Nginx 没有暴露出来就无能为力了,碰到这种情况要么把这部分逻辑改到 Nginx 源码里,要么想办法把这些结构暴露出来,再用 lua 去调用,不管哪种方法都需要对 Nginx 源码进行改动。直接看源码肯定改不了,还是需要有些架构和数据结构的知识才能上手。尽管这个文档对应的源码版本有点老,但是大架子都没变而且讲的也很细致,要动 Nginx 源码的话推荐看一下。


3. 动态 HTTPS 证书生成

上面两个都偏理论一些,最后一个是有代码的实战。一般情况下 Nginx 配置 HTTPS 证书都是在配置文件里做的,如果更新的话需要重新生成配置文件并进行 reload。但是 reload 在大流量的情况下会产生性能波动,而且如我最开始所说负载均衡器要有动态变化的能力。当然做到最极端的情况是给每个请求都使用不同的证书,这篇文章就介绍了通过 Openresty 来改造 Nginx 使得每个请求都可以使用动态生成的一个证书,同时不用对 Nginx 进行 reload 的方法。作为一个比较正式的 Openresty 样例还是蛮合适的。


关注公众号里回复『 周报4 』获取自习资料。


下周再见!