猜你喜欢
OpenResty完全开发指南:构建百万级别并发的Web应用

OpenResty完全开发指南:构建百万级别并发的Web应用

书籍作者:罗剑锋 ISBN:9787121348969
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:7243
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

OpenResty 是一个基于Nginx 的高性能Web 平台,能够方便地搭建处理超高并发的动态Web 应用、Web 服务和动态网关。

与现有的其他开发语言/环境相比,OpenResty 有着高性能、高灵活性、易于学习和扩展等许多优点,近年来得到了越来越多开发者的关注,也有了很多成功的应用范例,如Adobe、Dropbox、GitHub 等知名公司都基于OpenResty 构建了自己的后端业务应用。

OpenResty 自带完善的帮助文档,开发社区也很活跃,但相关的学习资料——特别是中文资料较少。《OpenResty完全开发指南:构建百万级别并发的Web应用》基于作者多年使用OpenResty 的经验,系统地阐述了OpenResty 相关的各方面知识和要点,帮助读者快速掌握这个高效易用的Web 开发平台,进而实现HTTP/HTTPS/TCP/UDP 等多种网络应用。

《OpenResty完全开发指南:构建百万级别并发的Web应用》结构严谨、详略得当,具有较强的实用性,适合广大软件开发工程师、系统运维工程师、编程爱好者和计算机专业学生阅读参考。

作者简介

罗剑锋(网名Chrono),96年就读于东北财经大学 1997年开始接触C/C++ 1998年参加计算机软件专业技术资格和水平考试,获高级程序员资质 2003年毕业于北京理工大学,获计算机专业硕士学位主要研究方向为C/C++、设计模式、高性能网络服务器开发业余爱好是阅读、旅游、欣赏音乐和电影。

编辑推荐
适读人群 :追求高性能的Web应用研发工程师 微服务、API网关、Web应用防火墙的研发工程师 通用的HTTP/TCP/UDP应用服务研发工程师 基于OpenResty/Nginx深度定制的研发工程师 工作在Linux系统上的的运维、测试工程师 计算机编程爱好者

本书由一线技术专家基于自己的工作经验精心撰写而成,主要包括OpenResty的组成、运行平台、工作语言、内部运行机制、功能接口、各种服务的配置和开发方式。

本书作者技术功底强,写作水平高,写作的图书不唯市场论,不唯风头论,只写自己一线工作经验,对于自己的技术书籍出版也从来都是一丝不苟,一心只为大家奉献优质、实用且实战的优秀技术图书!


前言
随感
  本书肇始于三年多前我的《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园区
目录

第0章 导读 1

0.1 关于本书 1

0.2 读者对象 1

0.3 读者要求 3

0.4 运行环境 3

0.5 本书的结构 3

0.6 如何阅读本书 5

0.7 本书的源码 5

第1章 总论 7

1.1 简介 7

1.2 历史 8

1.3 组成 9

1.4 版本 11

1.5 安装 12

1.5.1 直接安装 12

1.5.2 源码安装 13

1.5.3 定制安装 13

1.6 目录结构 14

1.7 启停服务 15

1.8 组件管理工具 15

1.9 命令行工具 16

1.10 参考手册 18

1.11 性能对比 18

1.12 应用架构 21

1.13 总结 22

第2章 Nginx平台 23

2.1 简介 23

2.2 进程模型 24

2.3 配置文件 25

2.4 变量 26

2.5 HTTP服务 27

2.5.1 server配置 28

2.5.2 location配置 28

2.6 TCP/UDP服务 29

2.7 反向代理 29

2.7.1 上游集群 30

2.7.2 代理转发 31

2.8 运行日志 31

2.8.1 访问日志 32

2.8.2 错误日志 32

2.9 总结 32

第3章 Lua语言 35

3.1 简介 35

3.2 注释 36

3.3 数据类型 36

3.4 字符串 37

3.5 变量 38

3.6 运算 39

3.6.1 算术运算 39

3.6.2 关系运算 39

3.6.3 逻辑运算 40

3.6.4 字符串运算 40

3.6.5 注意事项 41

3.7 控制语句 41

3.7.1 语句块 41

3.7.2 赋值语句 41

3.7.3 分支语句 42

3.7.4 循环语句 43

3.8 函数 44

3.8.1 定义函数 44

3.8.2 参数和返回值 45

3.9 表 46

3.9.1 定义表 46

3.9.2 操作表 46

3.9.3 范围循环 47

3.9.4 作为函数的参数 48

3.10 模块 48

3.11 面向对象 49

3.11.1 基本特性 49

3.11.2 原型模式 50

3.11.3 self参数 51

3.12 标准库 51

3.12.1 base库 52

3.12.2 package库 52

3.12.3 string库 53

3.12.4 table库 54

3.12.5 math库 55

3.12.6 io库 56

3.12.7 os库 57

3.12.8 debug库 57

3.12.9 使用技巧 57

3.13 高级特性 58

3.13.1 闭包 58

3.13.2 保护调用 58

3.13.3 可变参数 59

3.14 总结 59

第4章 LuaJIT环境 61

4.1 简介 61

4.2 goto语句 62

4.3 jit库 62

4.4 table库 63

4.5 bit库 63

4.6 ffi库 65

4.7 编译为字节码 67

4.8 编译为机器码 68

4.9 总结 68

第5章 开发概述 71

5.1 应用示例 71

5.1.1 编码实现 71

5.1.2 测试验证 73

5.2 运行命令 74

5.3 目录结构 75

5.4 配置指令 76

5.5 运行机制 77

5.5.1 处理阶段 77

5.5.2 执行程序 79

5.5.3 定时任务 81

5.5.4 流程图 81

5.6 功能接口 83

5.7 核心库 83

5.8 应用开发流程 84

5.9 总结 85

第6章 基础功能 87

6.1 系统信息 87

6.2 运行日志 88

6.3 时间日期 89

6.3.1 当前时间 90

6.3.2 时间戳 90

6.3.3 格式化时间戳 90

6.3.4 更新时间 91

6.3.5 睡眠 91

6.4 数据编码 92

6.4.1 Base64 92

6.4.2 JSON 92

6.4.3 MessagePack 94

6.5 正则表达式 95

6.5.1 配置指令 95

6.5.2 匹配选项 96

6.5.3 匹配 96

6.5.4 查找 98

6.5.5 替换 99

6.5.6 切分 100

6.6 高速缓存 101

6.6.1 创建缓存 101

6.6.2 使用缓存 102

6.7 总结 103

第7章 HTTP服务 105

7.1 简介 105

7.2 配置指令 106

7.3 常量 107

7.3.1 状态码 107

7.3.2 请求方法 108

7.4 变量 108

7.4.1 读变量 108

7.4.2 写变量 109

7.5 基本信息 110

7.5.1 请求来源 110

7.5.2 起始时间 110

7.5.3 请求头 110

7.5.4 暂存数据 111

7.6 请求行 111

7.6.1 版本 112

7.6.2 方法 112

7.6.3 地址 112

7.6.4 参数 113

7.7 请求头 114

7.7.1 读取数据 114

7.7.2 改写数据 115

7.8 请求体 115

7.8.1 丢弃数据 115

7.8.2 读取数据 115

7.8.3 改写数据 116

7.9 响应头 117

7.9.1 改写数据 117

7.9.2 发送数据 118

7.9.3 过滤数据 118

7.10 响应体 118

7.10.1 发送数据 118

7.10.2 过滤数据 119

7.11 手动收发数据 120

7.12 流程控制 121

7.12.1 重定向请求 121

7.12.2 终止请求 121

7.13 检测断连 122

7.14 综合示例 123

7.15 总结 126

第8章 访问后端 127

8.1 简介 127

8.2 子请求 128

8.2.1 接口说明 128

8.2.2 应用示例 129

8.2.3 使用建议 130

8.3 协程套接字 131

8.3.1 配置指令 131

8.3.2 创建对象 132

8.3.3 超时设置 133

8.3.4 建立连接 133

8.3.5 复用连接 134

8.3.6 关闭连接 134

8.3.7 发送数据 135

8.3.8 接收数据 135

8.3.9 应用示例 136

8.4 DNS客户端 137

8.4.1 创建对象 138

8.4.2 查询地址 138

8.4.3 缓存地址 139

8.5 HTTP客户端 140

8.5.1 创建对象 140

8.5.2 发送请求 140

8.6 WebSocket客户端 142

8.6.1 创建对象 142

8.6.2 建立连接 143

8.6.3 关闭连接 143

8.6.4 复用连接 143

8.6.5 发送数据 144

8.6.6 接收数据 144

8.7 Redis客户端 145

8.7.1 创建对象 145

8.7.2 建立连接 145

8.7.3 关闭连接 146

8.7.4 复用连接 146

8.7.5 执行命令 146

8.7.6 管道 147

8.7.7 脚本 148

8.8 MySQL客户端 148

8.8.1 创建对象 149

8.8.2 建立连接 149

8.8.3 服务器版本号 150

8.8.4 关闭连接 150

8.8.5 复用连接 150

8.8.6 简单查询 150

8.8.7 高级查询 152

8.8.8 防止SQL注入 152

8.9 总结 153

第9章 反向代理 155

9.1 简介 155

9.2 上游集群 156

9.2.1 静态服务器信息 157

9.2.2 动态服务器信息 158

9.2.3 服务器下线 159

9.2.4 当前上游集群 159

9.3 负载均衡 160

9.3.1 使用方式 160

9.3.2 功能接口 161

9.4 总结 162

第10章 高级功能 163

10.1 共享内存 163

10.1.1 配置指令 163

10.1.2 写操作 164

10.1.3 读操作 165

10.1.4 删除操作 166

10.1.5 计数操作 166

10.1.6 队列操作 166

10.1.7 过期操作 167

10.1.8 其他操作 168

10.2 定时器 168

10.2.1 配置指令 168

10.2.2 单次任务 169

10.2.3 周期任务 170

10.3 进程管理 171

10.3.1 进程类型 171

10.3.2 工作进程 172

10.3.3 监控进程 173

10.3.4 特权进程 173

10.4 轻量级线程 174

10.4.1 启动线程 175

10.4.2 等待线程 175

10.4.3 挂起线程 176

10.4.4 停止线程 177

10.4.5 信号量 178

10.5 总结 179

第11章 HTTPS服务 181

11.1 简介 181

11.1.1 密码学 181

11.1.2 网络协议 182

11.2 服务配置 184

11.3 应用开发 185

11.4 基本信息 185

11.4.1 协议版本号 185

11.4.2 主机名 186

11.4.3 地址 186

11.5 加载证书 187

11.5.1 清除证书 187

11.5.2 设置证书 187

11.5.3 设置私钥 188

11.5.4 测试验证 189

11.6 查验证书 189

11.6.1 发送查询 189

11.6.2 通知客户端 191

11.7 会话复用 191

11.7.1 Session ID 191

11.7.2 Session Tickets 193

11.8 总结 193

第12章 HTTP2服务 195

12.1 简介 195

12.2 服务配置 196

12.3 应用开发 197

12.4 测试验证 197

12.5 总结 198

第13章 Websocket服务 199

13.1 简介 199

13.2 服务配置 200

13.3 应用开发 200

13.4 总结 202

第14章 TCP/UDP服务 203

14.1 简介 203

14.2 配置指令 204

14.3 运行机制 205

14.3.1 处理阶段 205

14.3.2 执行程序 206

14.3.3 流程图 206

14.4 功能接口 208

14.5 应用示例 208

14.6 总结 210

第15章 结束语 211

附录A 推荐书目 215

附录B 定制OpenResty 217