OpenResty搭建高性能服务端(一)

简介: OpenResty搭建高性能服务端(一)

Socket编程



Linux Socket编程领域为了处理大量连接请求场景,需要使用非阻塞I/O和复用,select、poll、epoll是Linux API提供的I/O复用方式,自从Linux2.6中加入了epoll之后,高性能服务器领域得到广泛的应用,Nignx就是使用epoll来实现I/O复用支持高并发。


对于“高性能”服务端而言,我们所关注的并不是语言的性能,而是缓存和语言支持异步非阻塞。


缓存


针对缓存要明白通信速度的快慢顺序


  • 内存>SSD>机械磁盘
  • 本机>网络
  • 进程内 > 进程间


缓存系统的目标是希望在进程内的命中率是最高的,那么此时缓存系统整体的效率也是最高的。


异步非阻塞


希望访问数据库、访问网络,访问一些比较慢的IO设备时,不要在等待上耗费大量时间。而是使用事件驱动的方式,当系统完成某项任务后再来通知我们。这样就可以将服务器CPU的空闲资源,用来服务客户端连接。


OpenResty



OpenResty是基于Ngnix和Lua的高性能web平台,内部集成精良的LUa库、第三方模块、依赖项。用于方便搭建能够处理高并发、扩展性极高的动态web应用、web服务、动态网关。可以使用Lua脚本调用Ngnix支持的C以及Lua模块,快速构建10K~1000K单机并发连接的高性能web应用系统。OpenResty的目标是让web服务直接运行在Nginx服务内部,利用Ngnix的非阻塞IO模型,对HTTP客户端请求和后端DB进行一致的高性能响应。


OpenResty的出现可以说是颠覆了高性能服务端的开发模式。OpenResty实际上是Nginx+LuaJIT的完美组合。


image.png


OpenResty工作方式


由于Nginx采用的是master-worker模型,也就是一个master主进程管理多个worker进程,基本的事件处理都是放在worker中,master仅负责一些全剧初始化,以及对worker的管理。在OpenResty中,每个worker使用一个LuaVM,每个请求被分配到worker时,将在这个LuaVM中创建一个coroutine协程。协程之间数据隔离,每个协程具有独立的全局变量_G。


Lua中的协程和多线程下的线程类似,都有自己的堆栈、局部变量、指令指针...,但是和其他协程程序共享全局变量等信息。线程和协程主要不同在于:多处理器的情况下,概念上来说多线程是同时运行多个线程,而协程是通过代码来完成协程的切换,任何时刻只有一个协程程序在运行。并且这个在运行的协程只有明确被要求挂起时才会被挂起。


根据实际测试,OpenResty性能接近于Nginx 性能之王c module,甚至超过。


OpenResty 架构


  • 负载均衡


LVS+HAProxy将流量转发给核心Nginx1和Nginx2,即实现了流量的负载均衡。


image.png


负载均衡


  • 单机闭环


所有想要的数据都能从本服务器直接获取,大多数时候无需通过网络或去其他服务器获取。


image.png


单机闭环


  • 分布式闭环


单机闭环会遇到2个主要问题


  1. 数据不一致

  例如没有主从架构导致不同服务器数据不一致


  1. 遇到存储瓶颈

  磁盘或内存遇到天花板


解决数据不一致比较好的办法是采用主从或分布式集中存储,而遇到存储瓶颈就需要进行按业务键进行分片,将数据分散到多台服务器。


image.png


分布式闭环


  • 接入网关


接入网关又叫接入层,即接收流量的入口,在入口处做如下事情:


image.png



接入网关


目录
相关文章
|
5月前
|
JSON 安全 API
实战指南:使用PHP构建高性能API接口服务端
构建RESTful API的简要指南:使用PHP和Laravel,先安装Laravel并配置数据库,接着在`api.php`中定义资源路由,创建`PostController`处理CRUD操作,定义`Post`模型与数据库交互。使用Postman测试API功能,如创建文章。别忘了关注安全性、错误处理和性能优化。
144 2
|
6月前
|
缓存 负载均衡 安全
深入探索Nginx高性能Web服务器配置与优化
【5月更文挑战第7天】本文深入探讨了Nginx的配置与优化,重点介绍了基础配置参数如`worker_processes`、`worker_connections`和`keepalive_timeout`,以及优化策略,包括使用epoll事件驱动模型、开启gzip压缩、启用缓存、负载均衡和安全配置。此外,还提到了性能调优工具,如ab、nginx-stats和nmon,以助于提升Nginx的性能和稳定性。
|
Unix 应用服务中间件 nginx
一个高性能的web服务是如何搭建的?
一个高性能的web服务是如何搭建的?
|
网络协议 安全 应用服务中间件
高性能网关基石——OpenResty
OpenResty 一个基于 Nginx 的高性能 Web 平台,能够方便地搭建处理超高并发的动态 Web 应用、 Web 服务和动态网关。例如有名的 Kong 网关和国产新秀 ApiSIX 网关都是基于 OpenResty 来进行打造的。 OpenResty 通过实现 ngx_lua 和 stream_lua 等 Nginx 模块,把 Lua/LuaJIT 完美地整合进了 Nginx,从而让我们能够在 Nginx 内部里嵌入 Lua 脚本,用 Lua 语言来实现复杂的 HTTP/TCP/UDP 业务逻辑,同时依然保持着高度的并发服务能力。
562 0
|
Ubuntu 应用服务中间件 nginx
OpenResty - 高性能应用服务器框架
OpenResty - 高性能应用服务器框架
|
Ubuntu 网络协议 应用服务中间件
OpenResty搭建高性能服务端(二)
OpenResty搭建高性能服务端(二)
375 0
|
tengine 负载均衡 算法
QPS 提升60%,揭秘阿里巴巴轻量级开源 Web 服务器 Tengine 负载均衡算法
本文作者: 王发康(花名:毅松),GitHub ID @wangfakang ,Tengine 开源项目 maintainer,阿里巴巴技术专家,负责阿里巴巴 WEB 统一接入层的开发及维护。
508 0
QPS 提升60%,揭秘阿里巴巴轻量级开源 Web 服务器 Tengine 负载均衡算法
|
缓存 JSON 负载均衡
Nginx+Redis 搭建高性能缓存利器
OpenResty是一个基于 Nginx与 Lua的高性能 Web平台,其内部集成了大量精良的 Lua库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态Web 应用、Web 服务和动态网关。
406 0
下一篇
无影云桌面