![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenResty
文章平均质量分 94
极客挖掘机
一个来自十八线城乡结合部破写代码的,平时喜欢读读书、写写代码,从2019年开始运营有自己的个人公众号:极客挖掘机,想交流的朋友可以来公众号找我聊天。
展开
-
高并发 Nginx+Lua OpenResty系列(1)——环境搭建
OpenResty是一款基于Nginx的高性能负载均衡服务器容器,简单来说是Nginx+Lua。结合了Lua语言来对Nginx进行扩展,使得在Nginx上具有web容器功能。OpenResty运行环境搭建首先是在CentOS 7.6上的安装过程:cd /opt安装编译所需要的环境:yum install readline-devel pcre-devel openssl-devel g...原创 2019-06-30 13:02:25 · 1100 阅读 · 0 评论 -
高并发 Nginx+Lua OpenResty系列(11)——流量复制/AB测试/协程
流量复制在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线。这其实就需要进行流量复制,把流量复制到其他服务器上,一种方式是使用如tcpcopy引流;另外我们还可以使用nginx的HttpLuaModule模块中的ngx.location.capture_multi进行并发执...原创 2019-06-30 13:23:04 · 856 阅读 · 0 评论 -
高并发 Nginx+Lua OpenResty系列(10)——商品详情页
本章以京东商品详情页为例,京东商品详情页虽然仅是单个页面,但是其数据聚合源是非常多的,除了一些实时性要求比较高的如价格、库存、服务支持等通过AJAX异步加载加载之外,其他的数据都是在后端做数据聚合然后拼装网页模板的。如图所示,商品页主要包括商品基本信息(基本信息、图片列表、颜色/尺码关系、扩展属性、规格参数、包装清单、售后保障等)、商品介绍、其他信息(分类、品牌、店铺【第三方卖家】、店内分类...原创 2019-06-30 13:21:48 · 590 阅读 · 0 评论 -
高并发 Nginx+Lua OpenResty系列(9)——HTTP服务
此处我说的HTTP服务主要指如访问京东网站时我们看到的热门搜索、用户登录、实时价格、实时库存、服务支持、广告语等这种非Web页面,而是在Web页面中异步加载的相关数据。这些服务有个特点即访问量巨大、逻辑比较单一;但是如实时库存逻辑其实是非常复杂的。在京东这些服务每天有几亿十几亿的访问量,比如实时库存服务曾经在没有任何IP限流、DDos防御的情况被刷到600多万/分钟的访问量,而且能轻松应对。支撑如...原创 2019-06-30 13:19:28 · 499 阅读 · 0 评论 -
高并发 Nginx+Lua OpenResty系列(8)——Lua模版渲染
模版渲染动态web网页开发是Web开发中一个常见的场景,比如像京东商品详情页,其页面逻辑是非常复杂的,需要使用模板技术来实现。而Lua中也有许多模板引擎,如目前京东在使用的lua-resty-template,可以渲染很复杂的页面,借助LuaJIT其性能也是可以接受的。如果学习过JavaEE中的servlet和JSP的话,应该知道JSP模板最终会被翻译成Servlet来执行;而lua-res...原创 2019-06-30 13:16:00 · 384 阅读 · 0 评论 -
高并发 Nginx+Lua OpenResty系列(7)——Lua开发库json
JSON库在进行数据传输时JSON格式目前应用广泛,因此从Lua对象与JSON字符串之间相互转换是一个非常常见的功能;目前Lua也有几个JSON库,如:cjson、dkjson。其中cjson的语法严格(比如unicode \u0020\u7eaf),要求符合规范否则会解析失败(如\u002),而dkjson相对宽松,当然也可以通过修改cjson的源码来完成一些特殊要求。而在使用dkjson时也...原创 2019-06-30 13:14:26 · 443 阅读 · 0 评论 -
高并发 Nginx+Lua OpenResty系列(6)——Lua开发库Mysql
Mysql客户端lua-resty-mysql是为基于cosocket API的ngx_lua提供的Lua Mysql客户端,通过它可以完成Mysql的操作。默认安装OpenResty时已经自带了该模块,使用文档可参考https://github.com/openresty/lua-resty-mysql。1. 编辑mysql/test_mysql.lualocal function clo...原创 2019-06-30 13:13:19 · 541 阅读 · 0 评论 -
高并发 Nginx+Lua OpenResty系列(5)——Lua开发库Redis
Redis客户端lua-resty-redis是为基于cosocket API的ngx_lua提供的Lua redis客户端,通过它可以完成Redis的操作。默认安装OpenResty时已经自带了该模块,使用文档可参考https://github.com/openresty/lua-resty-redis。基本操作1. 创建redis/test_redis_baisc.lualocal f...原创 2019-06-30 13:12:02 · 454 阅读 · 0 评论 -
高并发 Nginx+Lua OpenResty系列(4)——Lua 模块开发
在实际开发中,不可能把所有代码写到一个大而全的lua文件中,需要进行分模块开发;而且模块化是高性能Lua应用的关键。使用require第一次导入模块后,所有Nginx 进程全局共享模块的数据和代码,每个Worker进程需要时会得到此模块的一个副本(Copy-On-Write),即模块可以认为是每Worker进程共享而不是每Nginx Server共享;另外注意之前我们使用init_by_lua中初...原创 2019-06-30 13:10:44 · 387 阅读 · 0 评论 -
高并发 Nginx+Lua OpenResty系列(3)——模块指令
Nginx Lua 模块指令Nginx共11个处理阶段,而相应的处理阶段是可以做插入式处理,即可插拔式架构;另外指令可以在http、server、server if、location、location if几个范围进行配置:指令所处处理阶段使用范围解释init_by_luainit_by_lua_fileloading-confighttpnginx Master...原创 2019-06-30 13:08:54 · 588 阅读 · 1 评论 -
高并发 Nginx+Lua OpenResty系列(2)——Nginx Lua API
Nginx Lua API和一般的Web Server类似,我们需要接收请求、处理并输出响应。而对于请求我们需要获取如请求参数、请求头、Body体等信息;而对于处理就是调用相应的Lua代码即可;输出响应需要进行响应状态码、响应头和响应内容体的输出。因此我们从如上几个点出发即可。接收请求1. openResty.conf配置文件server { listen 80; ...原创 2019-06-30 13:07:06 · 567 阅读 · 0 评论 -
高并发 Nginx+Lua OpenResty系列教程汇总篇
高并发 Nginx+Lua OpenResty系列教程汇总篇《高并发 Nginx+Lua OpenResty系列(1)——环境搭建》《高并发 Nginx+Lua OpenResty系列(2)——Nginx Lua API》《高并发 Nginx+Lua OpenResty系列(3)——模块指令》《高并发 Nginx+Lua OpenResty系列(4)——Lua 模块开发》《高并发 Ngi...原创 2019-07-10 19:36:43 · 1021 阅读 · 0 评论