推荐一门有意思的课程:OpenResty 从入门到实战
对服务端工程师来说,如果你的工作中涉及 Nginx、高性能、高并发、动态控制、性能测试、分析等,那么,不论你使用什么开发语言和平台,OpenResty 都是不可多得的高性能开发利器。
但我发现,有不少人没接触过 OpenResty,是时候打开服务端新世界的大门了。
作为一个兼具开发效率和性能的服务端开发平台,OpenResty 并不像其他开发语言一样从零开始搭建,而是基于成熟的开源组件—— Nginx 和 LuaJIT。
其核心是基于 Nginx 的一个 C 模块(lua-nginx-module),这个模块将 LuaJIT 嵌入到 Nginx 服务器中,并对外提供一套完整的 Lua API,透明地支持非阻塞 I/O,提供了轻量级线程、定时器等高级抽象。
围绕这个模块,OpenResty 构建了一套完备的测试框架、调试技术和由 Lua 实现的周边功能库。
你可以用 Lua 进行字符串和数值运算、查询数据库、发送 HTTP 请求、执行定时任务、调用外部命令等,还可以用 FFI 的方式调用外部 C 函数。
这基本上满足了服务端开发所需要的全部功能,所以,OpenResty 的适用范围早已超出了反向代理和负载均衡。
这就意味着,掌握了 OpenResty,就能同时拥有脚本语言的开发效率和迭代速度,以及 Nginx C 模块的高并发和高性能优势。
通过丰富的 lua-resty 库,OpenResty 逐渐摆脱了 Nginx 的影子,形成了自己的生态体系,在 API 网关、软 WAF 等领域被广泛使用。
据我了解,OpenResty 现在是已经是全球排名第五的 Web 服务器了,我们常用的 12306 的余票查询功能、京东的商品详情页,这些高流量的背后,都是 OpenResty 在默默地提供服务。
说到这里,特别想为你推荐一个人——温铭。
他是 OpenResty 软件基金会主席,《OpenResty 最佳实践》作者,前 360 开源技术委员会委员。
他在互联网安全公司有 10 多年的工作经验,之前一直从事高性能服务端的开发和架构,负责开发过云查杀、反钓鱼和企业安全产品。
后来得知,温铭也是为一个新系统做技术选型时偶然了解到 OpenResty 的,那时他还是个 Pythoner,不喜欢 Nginx C 模块的艰涩,还想享受它的高性能。
鱼与熊掌都想兼得, 怎么办呢?OpenResty 满足了他的需求。
但是,目前市面上的 OpenResty 学习资料非常少,官方只提供了 API 文档,并没有入门和进阶的文档,网上找的资料也不够系统。
可以说,大部分的 OpenResty 使用者都是摸着石头过河,过程相当痛苦(他自己就是其中之一)。
所以,他在极客时间开了个课专门讲 OpenResty,目的很明确:帮你快速入门,建立 OpenResty 完整知识体系,进而真正掌握这款开发利器。
像他自己说的那样:写出正确的 OpenResty 代码和写出高性能的优质 OpenResty 代码之间,相差十万八千里。
而跨越这个巨大鸿沟的零件,就散落在 OpenResty 开源项目的源码、文档、issue、PR、幻灯片、邮件列表中,需要你把它们串联起来,形成一个完整的学习路径和知识图谱。
提前要了几篇专栏的文章,结合目录,我大致梳理了一下,如果用一句话概括这个专栏,我觉得是:“从实战中来,到实战中去”:
专栏中的不少代码,都取自开源 OpenResty 的测试案例和实际的开源项目,让你在入门之初,就了解真实的使用场景。
文章中还穿插了多个视频,内容都取自真实开源项目的功能点和 PR。通过视频,可以更加直观地看到,刚学到的知识点是怎样在实际中应用的。
最后的实战部分,看着也挺带劲,哥们会带你用 OpenResty 从零搭建一个微服务 API 网关,如果你想独立搭建一个更简单、更高性能的 API 网关,这部分内容可别错过。
从实际的开源项目中学习,再到实际的开源项目中去实战,将实战融入完整的知识体系,这逻辑没毛病,要是学完没有收获,直接来找我。
另外,我看哥们还挺走心,专门列了几个学习 OpenResty 的重点,会在专栏里着重讲解那种,有好几个特别「戳」我,这回跟着好好补补课:
同步非阻塞的编程模式
不同阶段的作用
LuaJIT 和 Lua 的不同之处
OpenResty API 和周边库
协程和 cosocket
单元测试框架和性能测试工具
火焰图和周边工具链
性能优化
关于学习这个课需要什么基础,直接引用温铭原话,他比我总结得好:
OpenResty 是在 Nginx 和 LuaJIT 的基础上搭建的,所以 Nginx 和 LuaJIT 的基础知识还是需要的。
但你只要了解很少的 Nginx 知识,就可以学习 OpenResty 了。
少到什么程度呢?涉及到的 Nginx 的知识,我只用一节课就介绍完了。所以,即使你从没接触过 Nginx 也没关系。
要知道,OpenResty 并不等同于 Nginx,OpenResty 这个项目存在的目的之一,就是让你感知不到 Nginx 的存在。
从编程语言的角度看,Lua 是一种很容易理解的语言,你只要能看懂它的代码,并不需要独立写出复杂的 Lua 代码,就可以完成专栏的学习了,我会用少数几节课带你入门 Lua,达到 OpenResty 的使用水准。
哥们写的有点长,我总结就一句:
放心学,学得会,能用着。