《用OpenResty搭建高性能服务端》是OpenResty系列课程中的入门课程,主讲人:温铭老师。课程分为10个章节,侧重于OpenResty的基本概念和主要特点的介绍,包括它的指令、nginx_lua API、缓存、如何连接数据库、执行阶段等,并通过几个实际的操作和代码片段,告诉大家学习中如何搭建开发、测试环境,如何调试、查找和解决问题。
视频播放地址:https://study.163.com/course/introduction.htm?courseId=1520005
课程目录一览:
个人评价:评分满分。内容由浅入深,思路清晰,内容组织有序,容易上手,为初学者打开了一扇学习的大门。非常不错的分享。学完后需再配合 《OpenResty最佳实践》 + 进行系统学习。
下面是学习笔记,内容主要是以老师的讲解为主,加上部分自己补充或理解的内容。
本文环境:
$ uname -a Linux ba2f3eedf7df 4.4.111-boot2docker #1 SMP Thu Jan 11 16:25:31 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux $ cat /etc/redhat-release CentOS release 6.8 (Final) $ /usr/local/openresty/bin/openresty -v nginx version: openresty/1.13.6.2 $ /usr/local/openresty/luajit/bin/luajit -v LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall. OpenResty 简介OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty 基于Nginx开发,可以简单认为是 Nginx + lua-nginx-module的组合版。
官网:https://openresty.org/cn/
官方文档:
高性能服务端两个重要要素:需要支持缓存,语言层面要支持异步非堵塞。
缓存速度上,内存 > SSD > 机械磁盘;本机 > 网络 ; 进程内 > 进程间 。异步非阻塞指的是事件驱动方式(事件完成后再通知)。
OpenResty 包含的技术:
Nginx:不仅仅是负载均衡+反向代理等功能,Nginx c module开发成本高。
LuaJIT:OpenResty用的是 LuaJIT,LuaJIT 是主打性能的Lua。
OpenResty 本质上是将 LuaJIT 的虚拟机嵌入到 Nginx的worker中,所以效率特别高,在性能上,OpenResty 接近或超过 Nginx c module:
OpenResty已经颠覆了高性能服务端的开发模式。
OpenResty与市面上其他语言对比:
node.js:第一门将异步非阻塞特性放入自己语言中的,前端同学可以快速切入。但是 node.js 用回调(callback)实现异步非阻塞,代码写起来比较麻烦。
Python:3.4之后加入了异步的支持,比如异步io和aiohttp;3.5引入了协程。缺点是版本跨度大,因为很多人还是使用2.7。
Golang:最近几年非常火。缺点:代码写法上需要使用go关键字;线上热调试不方便(SystemTap 提供了有限的支持)。
Hello World OpenResty安装以 CentOS 为例:
mkdir /opt && cd /opt # download openresty wget https://openresty.org/download/openresty-1.13.6.2.tar.gz tar zxvf openresty-1.13.6.2.tar.gz cd openresty-1.13.6.2 # configure ./configure --prefix=http://www.likecs.com/usr/local/openresty -j4 make -j4 && make install其中 源码包可以到 https://openresty.org/cn/download.html 该页面获取。
-j4表示使用4核。configure那一步还可以指定各种参数:
使用 ./configure --help 查看更多的选项。
其它系统环境上安装可以参考 https://openresty.org/cn/installation.html 。
其实安装 OpenResty 和安装 Nginx 是类似的,因为 OpenResty 是基于 Nginx 开发的。
如果已经安装了 Nginx,又想使用 OpenResty 的功能,可以参考 《Nginx编译安装Lua》:https://www.cnblogs.com/52fhy/p/10164553.html 一文安装lua-nginx-module模块即可。
第一个程序修改 /usr/local/openresty/nginx/conf/nginx.conf:
worker_processes 1; error_log logs/error.log; events { worker_connections 1024; } http { server { listen 8080; location /hello { default_type text/html; content_by_lua ' ngx.say("<p>hello, world</p>") '; } } }把默认的80端口改为8080,新增/hello部分。
其中content_by_lua便是 OpenResty 提供的指令,在官方文档可以搜索到:
现在我们启动OpenResty:
/usr/local/openresty/nginx/sbin/nginx启动成功后,查看效果:
curl :8080/hello <p>hello, world</p>说明成功运行了。