OpenResty完全开发指南:构建百万级别并发的Web应用
  • 推荐0
  • 收藏4
  • 浏览1.7K

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

罗剑锋 (作者)  张童 (责任编辑)

  • 书  号:978-7-121-34896-9
  • 出版日期:2018-09-01
  • 页  数:
  • 开  本:
  • 出版状态:上市销售
  • 维护人:孙学瑛
电子书 ¥39.00
购买电子书
纸质版 ¥69.00
OpenResty是一个基于Nginx的高性能Web平台,能够方便地搭建处理超高并发的动态Web应用、Web服务和动态网关。
与现有的其他开发语言/环境相比,OpenResty有着高性能、高灵活性、易于学习和扩展等许多优点,近年来得到了越来越多开发者的关注,也有了很多成功的应用范例,如Adobe、Dropbox、GitHub等知名公司都基于OpenResty构建了自己的后端业务应用。
OpenResty自带完善的帮助文档,开发社区也很活跃,但相关的学习资料——特别是中文资料较少。本书基于作者多年使用OpenResty的经验,系统地阐述了OpenResty相关的各方面知识和要点,帮助读者快速掌握这个高效易用的Web开发平台,进而实现HTTP/HTTPS/TCP/UDP等多种网络应用。
本书结构严谨、详略得当,具有较强的实用性,适合广大软件开发工程师、系统运维工程师、编程爱好者和计算机专业学生阅读参考。
畅销技术作家又一经验力作:蕴含OpenResty的方方面面,入门与提高OpenResty上选
罗剑锋(网名Chrono)
主要研究方向为C/C++、设计模式、高性能网络服务器开发
业余爱好是阅读、旅游、欣赏音乐和电影
随感
本书肇始于三年多前我的《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

读者评论

电子书版本

  • Epub

图书类别

相关图书

Knative最佳实践

Jacques Chester (作者) 赵吉壮 杨云锋 (译者)

本书主要围绕 Knative 进行展开,主要作者是 Knative 专家(社区作者)Jacques Chester ,先后从 Knative 构建、扩缩容、事件...

¥118.00

ATT&CK框架实践指南

过去,入侵检测能力的度量是个公认的行业难题,各个企业得安全负责人每年在入侵防护上都投入大量费用,但几乎没有人能回答CEO 的问题:“买了这么多产品,我们的入侵防...

¥148.00

云原生数据库:原理与实践

周恩昌 (作者)

本书详细剖析了作为核心基础软件系统的数据库在云计算时代的技术演进历程,从架构设计、实现机制和系统优化等多个角度阐述传统数据库技术是如何一步步发展到云原生形态的。...

¥99.00

SequoiaDB分布式数据库权威指南

黄达玮 (作者)

本书旨在介绍 SequoiaDB 巨杉数据库的基本概念、应用场景、企业级应用案例、数据库实例创建与管理方式、数据库集群管理的基本策略、以及性能调优和问题诊断。...

¥99.00

最强iOS和macOS安全宝典

Jonathan Levin (作者) 郑旻 (译者)

《最强iOS和macOS安全宝典》以苹果操作系统的安全为主题,主要面向苹果高级用户、系统管理员、安全研究人员和黑客。<br>本书主要分三个部分:第一部分重点介绍...

¥179.00

极限黑客攻防:CTF赛题揭秘

王新辉 天融信阿尔法实验室 张黎元 郭勇生 (作者)

CTF在网络安全领域特指网络安全技术人员之间进行技术竞技的一种比赛。CTF代替了以往黑客通过互相发起真实攻击进行技术比拼的方式,题目来自日常工作环境,并将其中的...

¥99.00