OpenResty完全开发指南:构建百万级别并发的Web应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

前言

随感

本书肇始于三年多前我的《Nginx模块开发指南》一书。最初是以书末的附录形式出现,只有短短的几页,粗略地介绍了OpenResty的核心组件ngx_lua。连我自己也没有想到,几年后的今天它竟然“脱胎换骨”,进化成了一本颇具规模的正式图书。

写作本书还是有感于目前国内技术书刊市场的现状。

十几二十几年前只有少数资深专家掌握核心技术,通过著书立说的方式来分享知识,普惠大众。但随着互联网的高速发展,知识的获取方式变得越来越简单了,任何人都可以在网上轻松地查找到所需的资料,也可以在网上很容易地发表文章。书——曾经被誉为“进步的阶梯”“精神的食粮”——已经不是那么重要了。

另一方面,互联网的普及也降低了书的严肃性和出版门槛。个人“恶意推测”,也许是为了“图省事”或者“赚快钱”,有相当多的人只是把若干博客文章集合在一起,再加以少量修改就“攒”成了一本书。这种“乱炖”“杂烩”形式的书籍拼凑的痕迹十分明显,缺乏内在的逻辑和连贯性,不过凭借着网络上积累的“人气”也能够获得不错的销量,但在我看来实在是对读者的不尊重和不负责。

一个极端的例子是前段时间偶然遇到的名为《□□开发实战》的书,其粗制滥造程度简直是“超乎想象”,“不料,也不信竟会凶残到这地步”原文出自鲁迅《记念刘和珍君》。——几乎90%的内容都是原封不动地拷贝网络上现成的材料,再有就是直接复制数十页全无注释的杂乱代码,通篇看下来可能只有前言是“原创”,着实是“钦佩”该书作者厚颜无耻的“功力”。

单纯地感慨“世风日下”“人心不古”是没有用的,我所能做的,就是尽自己“微茫”的努力,写出一些无愧于己于人的文字。

关于OpenResty

有这样一种说法:“Nginx是网络世界里的操作系统,而OpenResty则是Nginx上的Web服务器”。

Nginx在Web Server业内的领军地位早已经得到了公认,是高性能服务器的杰出代表。它采用C语言开发,能够跨平台运行,把性能挖掘优化技术发挥到了极致。正因为如此,Nginx也很自然地成为了一个超越原生操作系统的开发平台,程序员可以完全无视底层系统之间的差异,在Nginx的框架里调用丰富的数据结构和功能接口,开发出高性能高可移植的各种应用程序。通常来说Nginx适合运行单线程的I/O密集型应用,但实际上它也可以使用多线程技术运行CPU密集型应用。

但基于Nginx开发主要使用的语言是C/C++,开发难度高周期长,虽然没有达到“望而生畏”的程度但亦不远矣。好在OpenResty应运而生,在Nginx里嵌入了LuaJIT环境和Lua语言,就如同给裸系统添加了一个高效易用的Shell,瞬间就让Nginx开发的难度直线下降,降低到了普通的心智模型可以理解掌握的水平。

早期OpenResty对于自身的定位主要还是HTTP Server(其实也是受到Nginx的限制),可以利用“胶水语言”Lua来操纵Nginx,灵活定制业务逻辑,方便快捷地搭建出超高并发的各种Web服务,从而节约时间和人力成本。多年来的实践证明,这方面它的确工作得非常出色。

近两年OpenResty的发展开始加速,支持了TCP/UDP协议,扩充了众多的专用库、应用框架以及外围工具,逐渐形成了一个比较独立自洽的生态体系。虽然Nginx仍然是核心,但看得出OpenResty有淡化自身“Nginx Bundle”色彩的趋势,力图成为一个更伟大的存在。

随着软件基金会和商业公司的成立,OpenResty获得了前所未有的成长动力。“路远,正未有穷期”,在此借本书送上诚挚的祝福与期待。

致谢

首先要感谢Nginx的作者Igor Sysoev和OpenResty的作者agentzh,正是因为他们多年来持续无私的奉献,我们才能够拥有如此强大易用的Web Server。

接下来我要感谢父母多年来的养育之恩,感谢妻子和两个可爱的女儿(“点心”组合)在生活中的陪伴,愿你们能够永远幸福快乐。

我也要感谢读者选择本书,希望读者能从中汲取有用的知识,让OpenResty成为工作中的得力助手。

您的朋友 罗剑锋

2018年7月18日 于 北京798园区