人们常说,做事最好能站在巨人的肩膀上,事实上很多突破性的科技发明都离不开巨人的肩膀,技术也是如此。Linux 的诞生和普及得益于 Unix,macOS 则基于早期的 System 系统和 NextStep 的整合,Android 和 iOS 又分别站在了 Linux 和 macOS 的肩膀上。莫不如是。
标题里提到的 OR 就是国内著名开源项目 OpenResty 的简称,OR 是站在了 Nginx 这个巨人的肩上,并取得了巨大成功。说是国产开源项目的典范也不为过,比肩著名前端项目 Vue。
OpenResty 到底解决了什么问题? 我们先捋一下 Nginx 的历史,再看下 OpenResty 治了什么病。
对于从来没有自己搭过网站的同学,建议到 Youtube 上去看一个哈弗的关于 web development 的公开课,David Malan 讲的,非常好,我自己以前也写过一篇构建个人网站的文章,也可以找来读读。了解了做一个网站的基本常识,就能理解为什么 Nginx 这么火了。Nginx 解决了网站搭建中一些基础问题,比如同步,性能,内存管理等。而且它提供了一个 reverse proxy 服务器,一个 load balancer 和 HTTP cache。
与 Nginx 并存的开源 Web Server 很多,比如 Apache HTTP Server,Lighttpd,Cherokee,HTTP Explorer,HTTP File Server 等等。在 Nginx 出来之前,HTTP Server 才是王者,结果 Nginx 基于异步事件驱动的模块化设计理念让 Nginx 大放异彩,它在高负载的情况下可以提供更可预测的性能,而高并发和高负载则是近二十年来互联网的永恒主题。于是,后浪推前浪,Nginx 成为了 Web Server 新贵。
不过 Nginx 也有自己的局限性。一个问题就是,如何方便有效的把基于特定应用需要的配置写到 Nginx 申明式配置文件里,比如配置一个 Redis client driver。于是大家开始写各种基于 Nginx 的模块,或者根据业务需要围绕着 Nginx 写越来越多的边缘代码来满足不同的需求。如何管理和维护这些模块与代码,并且保证模块依然是静态链接的,这件事耗费了工程师们大量时间,并且代码维护起来也变的很复杂。
有问题就会有解决方案,于是 OpenResty 出现了,它的创始人是著名程序员章亦春。作为一个兼具开发效率和性能的服务端开发平台,OpenResty 并不像其他开发语言一样从零搭建,而是基于成熟的开源组件—— Nginx 和 LuaJIT。嗯,俩肩膀。
OR 的核心是基于 Nginx 的一个 C 模块(lua-nginx-module),将 LuaJIT 嵌入到 Nginx 服务器中,并对外提供一套完整的 LuaAPI,透明地支持非阻塞 I/O,提供了轻量级线程、定时器等高级抽象。
围绕这个模块,OpenResty 构建了一套完备的测试框架、调试技术和由 Lua 实现的周边功能库,彻底突破了 Nginx 的局限性。
你可以用 Lua 语言进行字符串和数值运算、查询数据库、发送 HTTP 请求、执行定时任务、调用外部命令等,还可以用 FFI 的方式调用外部 C 函数。
这基本上满足了服务端开发所需要的全部功能。OpenResty 的适用范围早已超出了反向代理和负载均衡。
这就意味着,掌握了 OpenResty,就能同时拥有脚本语言的开发效率和迭代速度,以及Nginx C 模块的高并发和高性能优势。
通过丰富的 lua-resty 库,OpenResty 已逐渐摆脱 Nginx 的影子,形成了自己的生态体系,在 API 网关、高并发场景、软 WAF 等领域被广泛使用。
那么有没有类似的技术呢?你可以自己检索一下,可以肯定的说,几乎找不到任何一个可以匹敌 OR 的工具。可能有些框架从某个侧面解决了某个特定的问题,但是没有一个是像 OpenResty 这样,解决的如此彻底。
OpenResty 通过汇聚各种设计精良的 Nginx 模块,从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 C10K 乃至 C1000K 以上单机并发连接的高性能 Web 应用系统。
快到飞起。
我在锤科任职的时候,大量的底层服务都采用了 OpenResty 技术,目前极客邦也是如此。如何把 OR 更好的推给中国的开发者呢?我们邀请了温铭来极客时间开设了专栏「OpenRest 从入门到实战」,补足这个技术板块。
温铭是 OpenResty 软件基金会主席,《OpenResty 最佳实践》作者,前 360 开源技术委员会委员,资深的 OpenResty 开发者。他和我们的教研团队如何组织这门课程呢?
实践出真知,在专栏中,温铭将秉承“从实战中来,到实战中去”的原则讲解。专栏中的不少代码,都取自开源 OpenResty 的测试案例和实际的开源项目。目的是让你在入门之初,就接触最优秀的代码,了解真实的使用场景。
同时,温铭还会在专栏文章中穿插多个视频课程,内容都取自真实开源项目的功能点和 PR。通过视频,你会更加直观地看到,刚学到的知识点是如何在实际中应用的。
专栏最后的实战部分,是练习者的真实「战场」:温铭会带你一起,用 OpenResty 从零搭建一个微服务 API 网关。
这个专栏内容翔实充足,包含图文、音频和视频制作,综合考虑定价是 129 元。不过优惠期我们还是采用了更低的价格 68 元,期待更多人加入到 OpenResty 的学习中来,丰富和壮大这个社区。
期待你的加入,不要错过优惠期哦