gitbook/OpenResty从入门到实战/docs/96516.md
2022-09-03 22:05:03 +08:00

60 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 开篇词 | OpenResty为你打开高性能开发的大门
你好我是温铭OpenResty 软件基金会主席,曾任某开源商业公司合伙人,前 360 开源技术委员会委员,在互联网安全公司工作了 10 年,负责开发过云查杀、反钓鱼和企业安全产品。接下来的几个月,我会带着你系统地学习一下 OpenResty。
## 为什么学习 OpenResty
为什么学习 OpenResty这是开篇的第一个问题。我们正身处技术日新月异的时代经常听到周围的工程师开玩笑说学不动了。人的精力有限选择学习某个技术都会有机会成本。最好的选择是从你工作中涉及到的部分出发学以致用。
对于服务端工程师来说,如果你的工作中涉及到 NGINX、高性能、高并发、动态控制、性能测试和分析等那么不管开发语言和平台是什么这门 OpenResty 课程都会让你有所裨益。如果你之前没有接触过 OpenResty我确信它会给你打开另外一个服务端世界的大门。
OpenResty 是一个兼具开发效率和性能的服务端开发平台,**虽然它基于 NGINX 实现,但其适用范围,早已远远超出反向代理和负载均衡**。
它的核心是基于 NGINX 的一个 C 模块lua-nginx-module该模块将 LuaJIT 嵌入到 NGINX 服务器中,并对外提供一套完整的 Lua API透明地支持非阻塞 I/O提供了轻量级线程、定时器等高级抽象。同时围绕这个模块OpenResty 构建了一套完备的测试框架、调试技术以及由 Lua 实现的周边功能库。
你可以用 Lua 语言来进行字符串和数值运算、查询数据库、发送 HTTP 请求、执行定时任务、调用外部命令等,还可以用 FFI 的方式调用外部 C 函数。这基本上可以满足服务端开发需要的所有功能。
掌握好了 OpenResty你就可以同时拥有脚本语言的开发效率和迭代速度以及 NGINX C 模块的高并发和高性能优势。
## 我与OpenResty的渊源
说了这么多OpenResty的特点我又是怎样与它结缘的呢其实我是在 2012 年开始接触OpenResty的那会儿我正在为一个新的系统做技术选型作为一个 Python 的忠实粉丝,我不喜欢 NGINX C 模块的艰涩,却希望得到它的高性能,鱼与熊掌想兼得。该怎么办呢?
经过一番搜寻后,我发现了 Python 社区“大妈” ZQ 的一篇介绍 OpenResty 的文章可以说是如获至宝。不过兴奋只持续了很短的时间因为之后的我就像是无头苍蝇一样开始在黑暗中摸索着缓慢前行。踩了数不清的坑后我才真正拿下了OpenResty。
和很多工程师不同的是,我喜欢写文章,在大学期间就一直维护着自己的技术博客。有一天晚上加班时,我发现身边一位工程师在用 GitHub 记录 ELK 的使用心得,并发布到了 GitBook 上。原来 GitHub 还可以开源书籍,而不只是代码!
我一下子就被点燃了当晚就列出了《OpenResty 最佳实践》的目录,并开始“鼓动”周围的工程师加入。我们从未宣传过这个开源项目,但它慢慢变成了 OpenResty 入门者的最佳伙伴。
不过,在加入 OpenResty Inc. 后,我才逐渐发现,能写出正确的 OpenResty 代码并避免常见的坑,和写出高性能、优质的 OpenResty 代码之间,还相差了十万八千里。**而跨越这个巨大鸿沟的法宝零件,散落在 OpenResty 开源项目的源码、文档、issue、PR、幻灯片、邮件列表中需要你把它们串联成真正的法宝——一个完整的学习体系和知识图谱**。
那如何才能体系化学习OpenResty呢在 OpenResty 的技术交流群里面,很多工程师都曾经有过这样的困惑。
事实上OpenResty 的学习资料还比较少,官方只有 API 文档,并没有提供入门和进阶的文档,而网上能找到的资料也不够系统。可以说,绝大部分的 OpenResty 使用者都是在摸着石头过河,过程很痛苦。
因此,我与极客时间合作了这个专栏,目的很明确,就是让你轻松快速地入门,并给你描绘出 OpenResty 的全貌帮你建立知识体系带你真正掌握OpenResty这款开发利器。
## 学习这个专栏需要什么基础?
OpenResty 是在 NGINX 和 LuaJIT 的基础上搭建的,所以我们肯定需要 NGINX 和 LuaJIT 的基础知识。
但你只需要很少的 NGINX 知识,就足够开始 OpenResty 之旅了。少到什么程度呢?涉及到的 NGINX 知识,我只用一节课就介绍完了。即使你完全没有接触过 NGINX也可以跟着课程的节奏逐步学习 OpenResty。
要知道OpenResty 并不等同于 NGINXOpenResty 这个项目的目的之一,就是让你感知不到 NGINX 的存在。
而从编程语言来看Lua 是一种很容易理解的语言,你只要能够看懂它的代码,就可以完成本专栏的学习,并不需要能够独立写出复杂的 Lua 代码。同样的我也会花少数几节课的时间带你入门Lua达到OpenResty 的使用水准。
## 从实战中来,到实战中去
实践出真知,这句话用在互联网技术的学习上很恰当。
和理论偏多的书籍不同,专栏的形式本身更偏重于实战。专栏中出现的不少代码,都源自开源 OpenResty 的测试案例,以及实际的开源项目。引用这些实际案例,就是希望你在入门之初,就能接触到最优秀的代码,了解到最真实的使用场景。
同时,我还会在专栏文章中,穿插多个视频课程。视频课的内容,都取自真实开源项目的功能点和 PR。通过视频你会亲眼看到刚刚学到的知识是如何在实际中使用的。
专栏最后的实战部分,则是我们的真实“战场”。我会带你一起,用 OpenResty 从零搭建一个微服务 API 网关。根据我们在社区中的统计,接近一半的 OpenResty 使用者,都把 OpenResty 用在 API 网关的开发上Kong 和 orange 则是 OpenResty 领域中最流行的两个开源网关项目。你想自己从头搭建一个更简单、更高性能的 API 网关吗?一起来吧。
从实际的开源项目中学习,再到实际的开源项目中去实战,将实战融入完整的知识体系,这便是我的教学理念,希望你喜欢这种方式。
万尺高楼平地起,接下来,我会和你一起来逐步掌握 OpenRestyEnjoy