openresty适配华为云
OpenResty 简介
OpenResty 是一个基于 Nginx 的高性能 Web 平台,集成了 LuaJIT 和大量 Lua 模块,专为动态 Web 应用程序、微服务、API 网关和高并发环境设计。它允许在 Nginx 中嵌入 Lua 脚本,从而提供了灵活的编程能力,可以轻松实现自定义业务逻辑,如动态路由、缓存、认证和负载均衡。
OpenResty 的特点
1. 高性能:继承了 Nginx 的高性能、高并发特点,适合高流量场景。
2. 灵活的 Lua 扩展:通过 LuaJIT 提供快速的动态脚本执行,支持 Lua 脚本编写业务逻辑。
3. 丰富的模块支持:集成了大量开箱即用的 Lua 库和 Nginx 模块,如 Redis、MySQL、HTTP 库等。
4. 异步非阻塞架构:利用 Nginx 事件驱动模型,支持高并发处理而不阻塞。
5. 动态重载:无需重启服务即可动态更新配置或业务逻辑。
OpenResty 的主要用途
1. Web 应用服务器:处理动态内容和静态资源请求。
2. API 网关:用于代理、路由、聚合、认证等功能。
3. 负载均衡器:支持灵活的负载均衡策略,包括轮询、权重和健康检查。
4. 缓存服务器:支持基于内存或分布式缓存,减少后端服务器压力。
5. 微服务网关:作为微服务架构的入口,实现服务注册、路由和限流等功能。
6. 静态资源服务器:快速、高效地提供静态资源,如图片、CSS、JavaScript 等。
OpenResty 的架构
OpenResty 的核心由以下几部分组成:
1. Nginx 核心:负责处理 HTTP 请求、反向代理、负载均衡等。
2. LuaJIT:高性能的 Lua 解释器,提供了极高的执行效率。
3. Lua 模块:如 ngx_lua 模块,提供对 Nginx 各种功能的 Lua 接口。
4. 第三方库集成:内置 Redis、MySQL、Memcached、CJSON 等流行库的支持。
启动 OpenResty:
sudo openresty
测试:
1. 访问 /hello:
curl http://localhost:8080/hello
输出:
Hello, OpenResty!
2. 访问 /time:
curl http://localhost:8080/time
输出示例:
Current Time: 2024-12-05 14:30:00
OpenResty 的优缺点
优点
• 高性能:结合 Nginx 和 LuaJIT,适用于高并发场景。
• 扩展性强:通过 Lua 可快速编写自定义逻辑,灵活处理各种需求。
• 内置支持多种第三方库:如 Redis、MySQL 等,便于集成外部服务。
• 配置热重载:可在不重启服务的情况下动态加载 Lua 代码。
缺点
• 学习曲线:需要掌握 Lua 编程语言,对 Nginx 配置也需要深入了解。
• 生态圈较小:相比于其他 Web 框架,社区生态相对较小。
• 调试工具有限:Lua 代码的调试支持不如 Java、Python 等主流语言。
使用场景
1. 高并发 API 服务:如电商平台、社交应用的 API 网关。
2. 动态路由和请求处理:按需动态修改请求路由、参数或响应内容。
3. 内容分发网络(CDN):缓存静态资源并减少后端负载。
4. 数据聚合:将多个后端服务的结果聚合为一个 API 响应。
总结
OpenResty 是一个功能强大、扩展性极高的 Web 平台,适用于需要高性能和灵活处理逻辑的场景。它通过将 Lua 脚本与 Nginx 的高效处理结合,实现了动态、轻量级的 Web 服务,是微服务、API 网关和高并发应用的理想选择。
步骤1:fork 仓库
本次任务是看Openresty在欧拉os上是否适配。需要在欧拉os上部署一个Openresty和一个微服务demo,并且Openresty进行负载均衡
fork demo的仓库,demo中有基于servicecomb实现的完整的微服务脚实例,仓库信息如下:
https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiDemoJava/overview
步骤2:本地编译并运行
主要步骤:
- 执行mvn clean install -DskipTests
过程比较顺利。
步骤3:适配思路
通过Openresty进行转发到两个业务网关,在由业务网关,转发到后台server。整体逻辑比较简单
步骤3:安装Openresty过程的问题
问题1:无法获取下载的repo
解决:在github上找到release包,源码安装
问题2:
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
ERROR: failed to run command: sh ./configure --prefix=/usr/local/openresty/nginx \...
解决:
sudo dnf install pcre pcre-devel
问题3:
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.
解决:
sudo dnf install openssl openssl-devel
步骤4:安装Openresty
1. 下载release包并解压
2. 进入解压后的文件夹,执行./configure
3. 执行make
4. 执行make install
步骤5:修改demo
添加一个接口,能够在不同实例上返回不同的值。
@RestSchema(schemaId = "PropertyEndpoint", schemaInterface = PropertyService.class)
public class PropertyEndpoint implements PropertyService {
@Autowired
private Environment environment;
@Override
public String getProperty() {
return environment.getProperty("property");
}
}
步骤6:购买华为云Gaussdb和ECS,上云测试
购买华为云Gaussdb,并且购买公网IP,不然无法访问。配置如下:
产品名称 |
产品类型 |
数据库引擎版本 |
性能规格 |
实例类型 |
部署形态 |
备注 |
云数据库 GaussDB |
基础版 |
8.201 |
独享型1:4 |
集中式 |
1主2备 |
推荐 |
产品名称 | CPU架构 | 实例类型 | 公共镜像 | 镜像版本 | 备注 |
---|---|---|---|---|---|
弹性云服务器 | 鲲鹏计算 | 鲲鹏通用计算增强型 | Huawei Cloud EulerOS | Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB) | 推荐 |
步骤7:部署并访问
结果如下:
- 点赞
- 收藏
- 关注作者
评论(0)