OpenResty从入门到开发一个网关服务(使用etcd作为注册中心)
原文连接:https://blog.fengjx.com/openresty/gateway
简介
OpenResty(也称为 ngx_openresty)是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。
通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员可以使用 Lua 编程语言对 Nginx 核心以及现有的各种 Nginx C 模块进行脚本编程,构建出可以处理一万以上并发请求的极端高性能的 Web 应用。
ngx_openresty 目前有两大应用目标:
- 通用目的的 web 应用服务器。在这个目标下,现有的 web 应用技术都可以算是和 OpenResty 或多或少有些类似,比如 Nodejs, PHP 等等。ngx_openresty 的性能(包括内存使用和 CPU 效率)算是最大的卖点之一。
- Nginx 的脚本扩展编程,用于构建灵活的 Web 应用网关和 Web 应用防火墙。有些类似的是 NetScaler。其优势在于 Lua 编程带来的巨大灵活性。
引用自:OpenResty最佳实践
入门教程
目前已经有大佬写了很完整的教程,没有必要重复造轮子了,我觉得这两个是最好的。更多openresty相关资料可以看这里https://blog.fengjx.com/awesome/#lua--openresty
网关服务开发
整体架构
服务启动时,将自己的节点信息注册到etcd,包括:服务名称、ip、端口
网关服务从etcd监听服务节点信息变更,保存到缓存中,从客户端请求的url中提取服务名称,通过服务名称查找节点信息,将请求转发到后端服务
> 关于etcd的使用,这里不再阐述
url规范
- 对外api前缀:
/open/api/service_name/**
,后端服务路由:/open/api/**
- 对内api前缀:
/inner/api/service_name/**
,后端服务路由:/**
例如/open/api/user/fav
会转发到user服务的/open/api/fav
接口;/inner/api/user/info
会转发到user服务的/info
接口。通过url规范我们就能很轻易的做api鉴权,而不需要将对外api和对内api部署成2个服务(当然也要考虑实际情况,是否符合实际项目要求)。
源码解析
github: https://github.com/fengjx/resty-gateway
-
init_by_lua_file "lua/init.lua"
初始化项目配置
-
init_worker_by_lua_file "lua/init_worker.lua"
初始化服务发现组件,监听服务节点变更信息
-
rewrite_by_lua_file 'lua/rewrite.lua'
- 生成requestId,方便链路跟踪和问题排查
- 解析请求服务名称
- 重写后端请求url,去掉服务名
-
access_by_lua_file 'lua/gateway.lua'
通过服务发现组件查询服务节点信息
-
balancer_by_lua_file 'lua/server_rr.lua'
通过查询到的节点信息,轮训其中一个节点,将请求转发到后端服务
-
user.conf
模拟用户服务
-
auth.conf
模拟认证服务
运行测试
安装openresty: http://openresty.org/cn/installation.html
启动服务
git clone https://github.com/fengjx/resty-gateway.git cd resty-gateway # -g 'daemon off;是在前台运行,如果想后台运行可以去掉 openresty -p `pwd` -c conf/nginx.conf -g 'daemon off;'
向etcd注册节点信息,当然实际情况是在服务启动的时候自动注册的,这里为了测试,手动模拟的服务注册过程
# 注册user服务 etcdctl put /micros/service/user/127.0.0.1:1024 1 etcdctl put /micros/service/user/127.0.0.1:1025 1 # 注册auth服务 etcdctl put /micros/service/auth/127.0.0.1:1026 1 etcdctl put /micros/service/auth/127.0.0.1:1027 1
发送http请求
# 测试auth服务 curl http://localhost:10000/open/api/auth/login curl http://localhost:10000/inner/api/auth/has-login # 测试user服务 curl http://localhost:10000/inner/api/user/fav curl http://localhost:10000/inner/api/user/info
todo
- [x] 服务发现,动态路由
- [x] 自动生成requestId,方便链路跟踪
- [ ] 动态ip防火墙
- [ ] 限流器
- [ ] 用户登录认证
- [ ] 接口协议加解密

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
[日志服务][数据加工]e_anchor函数与e_regex函数的使用总结
e_anchor提取方式是基于字符串下标进行提取的,其优点具有方便、快捷、效率高等特点。但是缺点也很明显灵活性不够强,通用性比较差,适用于前后缀标识比较明显,规律性比较强的字符串提取。 正则提取方式众所周知是通过正则表达式对字符串提取的,优点是灵活性、逻辑性和功能性非常强,基本上很多字符串提取问题都能使用此方式解决,并且可以迅速地用极简单的方式达到字符串的复杂控制。但是缺点也是不言而喻的,与e_anchor提取模式相比性能会差一些,并且对与刚接触的人来说,比较晦涩难懂。从而导致学习成本高、上手难度大、不适合新手快速解决自身遇到的问题等。 本文将通过具体实例,向大家讲述使用e_anchor和正则的适用场景 解析自定义日志文本 e_anchor函数适合解决一些单个,或者多个规律性比较强,有明显前缀标识的文本字符串,比如遇到以下类型日志: # 日志1: __source__: 1.1.16.15 __tag__:__client_ip__: 12.1.75.140 __tag__:__receive_time__: 1563443076 content: Aug 2 04:06:08: ho...
- 下一篇
阿里云突发性能t6实例5%-40%CPU性能基线详解
阿里云突发性能t6实例是限制CPU性能的实例,突发性能t6实例性能基线从5%、10%、20%、30%到40%性能基线,服务器教程网分享突发性能t6实例的5%-40%性能基线以及各个实例规格的CPU性能详解: 什么是CPU性能基线? 阿里云突发性能t6实例使用的是处理器.5 GHz主频的最新一代Intel ® Xeon ® 服务器级别Cascade Lake处理器,睿频3.2 GHz,CPU性能基线是突发性能t5实例和t6实例特有的,突发性能实例是限制CPU性能的实例,突发性能实例适用于CPU利用率较低的应用。服务器教程网来详细说下什么是CPU新能基线: 每台t6实例都具有CPU性能基线和CPU积分,当一台突发性能实例以基准性能运行时实例获得和消耗的CPU积分相等的,当CPU的使用率超过性能基线,就需要消耗CPU积分来超过基准性能。(关于CPU积分详细说明参考:CPU积分变化示例) 突发性能实例打开无性能约束模式后可以突破CPU积分限制,参考:突发性能实例切换性能模式 突发性能实例规格不同,CPU性能基线也不同,如下表所示: 实例规格 vCPU 内存(GiB) 平均基准CPU计算性能 C...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS关闭SELinux安全模块
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16