OpenResty--------企業級理論實踐篇

OpenResty背景

Nginx有不少的特性和好處,可是在Nginx上開發成了一個一直的難題,Nginx模塊須要用C開發,並且必須須要符合一系列複雜的規則,最重要的用C開發模塊必需要熟悉Nginx的源代碼,使得開發者對其望而生畏。
OpenResty(也稱爲ngx_openresty, 後面簡稱爲OR)是一個基於Nginx爲基礎核心,經過擴展第三方功能模塊(如比:MySQL, PostgreSQL,Memcached,Redis等等),使咱們能夠用lua(腳本語言)對Nginx核心和三方擴展模塊進行業務開發。linux

OpenResty優點

  • 核心nginx

    基於Nginx核心爲基礎,徹底運行於Nginx服務內部中。
    運行穩定,輕量級,內存佔用少。後端

  • 事件驅動模型和非阻塞I/O網絡

    利用 Nginx 自己的異步非阻塞的事件驅動進行I/O通訊,
    利用 Nginx 自己的高效的多路複用模型 (epoll/linux, kqueue/freebsd, eventport/solaris)
    注:不單單是和 HTTP 客戶端間的網絡通訊是非阻塞的,與MySQL、PostgreSQL、Memcached 以及 Redis 等衆多遠方後端之間的網絡通訊也是非阻塞的。併發

  • lua異步

    相對於nginx module (C)開發,lua自己具備語法簡單,弱類型,自帶GC(不用手動管理內存)等特性,大大減輕了開發上手難度。 ide

  • 性能

    快速構造出足以勝任 10K 乃至 1000K 以上單機併發鏈接的高性能 Web 應用系統。性能

OpenResty 原理

Nginx 採用的是 master-worker 模型,一個 master 進程管理多個 worker 進程,基本的事件處理都是放在 woker 中,master 負責一些全局初始化,以及對 worker 的管理。
在OpenResty中,每一個 woker 使用一個 LuaVM,當請求被分配到 woker 時,將在這個 LuaVM 裏建立一個 coroutine(協程),協程之間數據隔離。lua

OpenResty--------企業級理論實踐篇

相關文章
相關標籤/搜索