国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

API網(wǎng)關(guān)選型:我用OpenResty!

網(wǎng)絡(luò) 通信技術(shù) 開發(fā)工具
今天跟大家聊一下關(guān)于網(wǎng)關(guān)選型的話題,為什么我最后選擇了 OpenResty?

今天跟大家聊一下關(guān)于網(wǎng)關(guān)選型的話題,為什么我最后選擇了 OpenResty?

[[436285]]

圖片來自 包圖網(wǎng)

互聯(lián)網(wǎng)公司,不論體量大小如何,其內(nèi)部的技術(shù)架構(gòu)基本都是相似的,體現(xiàn)在以下幾個(gè)方面:

  • 數(shù)據(jù)量過大,如何定制化存儲
  • 訪問量高了,如何集群化部署,流量負(fù)載均衡
  • 響應(yīng)速度慢了,如何提高處理速度,引入多級緩存
  • 如果機(jī)器多了,如何保證某臺服務(wù)器突然抽風(fēng),不影響業(yè)務(wù)集群的服務(wù)穩(wěn)定性

麻雀雖小五臟俱全,今天要講的網(wǎng)關(guān),就是其中的關(guān)鍵一環(huán),不論公司規(guī)模大小如何,基本都要有這個(gè)系統(tǒng)。那么網(wǎng)關(guān)是干什么用的?

什么是網(wǎng)關(guān)

網(wǎng)關(guān)是連接客戶端與服務(wù)端的中間橋梁,將很多通用地、非業(yè)務(wù)邏輯抽離,前置到網(wǎng)關(guān)系統(tǒng),減少了很多重復(fù)性開發(fā)工作,是整個(gè)網(wǎng)站的唯一流量入口。

為了提高系統(tǒng)的擴(kuò)展性,網(wǎng)關(guān)通常采用組件式架構(gòu),高內(nèi)聚低耦合。

常用的組件功能:

  • 黑名單攔截
  • 日志
  • 參數(shù)校驗(yàn)
  • 鑒權(quán)
  • 限流
  • 負(fù)載均衡
  • 路由轉(zhuǎn)發(fā)
  • 監(jiān)控
  • 灰度分流
  • 多協(xié)議支持
  • 熔斷、降級、重試、數(shù)據(jù)聚合等

系統(tǒng)設(shè)計(jì)上一般采用責(zé)任鏈設(shè)計(jì)模式,定義好抽象接口,每個(gè)組件實(shí)現(xiàn)自己的專屬功能,職責(zé)單一。

并且根據(jù)不同的業(yè)務(wù)請求 API,添加、刪除一些節(jié)點(diǎn),動態(tài)構(gòu)建新的節(jié)點(diǎn)鏈,從而滿足多樣化的業(yè)務(wù)需求。

網(wǎng)關(guān)選型

目前比較常見的網(wǎng)關(guān)如下:

  • Tomcat/Jetty+NIO+Servlet3
  • Nginx
  • Spring WebFlux
  • Soul
  • Spring cloud Gateway
  • Zuul
  • OpenResty
  • Kong
  • Netty 自建

各個(gè)框架的資料網(wǎng)上基本都有,考慮到篇幅限制,這里就不展開分析每個(gè)框架的優(yōu)缺點(diǎn)。

我們計(jì)劃選型 OpenResty,主要有以下幾個(gè)原因:

  • 能實(shí)現(xiàn)跨網(wǎng)絡(luò)的 gRPC 請求轉(zhuǎn)發(fā),底層采用 HTTP/2 協(xié)議。
  • 支持 SSL/TLS 證書加密,通訊安全。
  • 性能方面,支持較高的并發(fā)請求。
  • 性能開銷低,延遲少。

翻牌 OpenResty

下圖是 Netcraft 最新統(tǒng)計(jì)的 2021年10月 Web 服務(wù)器排行榜:

Netcraft 是一家總部位于英國巴斯始于 1995 年的互聯(lián)網(wǎng)服務(wù)公司。該公司官網(wǎng)每月發(fā)布的調(diào)研數(shù)據(jù)報(bào)告:Web Server Survey 系列,已成為當(dāng)今人們了解全球網(wǎng)站的服務(wù)器市場份額。

OpenResty 現(xiàn)在全球排名第三,由于將 Nginx 擴(kuò)展成動態(tài)服務(wù)器,發(fā)展勢頭很猛。

我們常用的 12306 的余票查詢功能,京東的商品詳情頁,這些高流量的背后,其實(shí)都是 OpenResty 在提供服務(wù)。

OpenResty 最擅長的是部署在流量入口處,處理各種高并發(fā)流量。接下來,我們來深入了解下這個(gè)框架。

OpenResty 誕生起因

Nginx 采用 master-worker 進(jìn)程模型,分工明確,職責(zé)單一,也是其具備高性能的原因之一。

①master 進(jìn)程

管理進(jìn)程,處理指令如:-s reload、-s stop,通過進(jìn)程間通信,將管理指令發(fā)送給 worker 進(jìn)程,從而實(shí)現(xiàn)對 worker 進(jìn)程的控制。

②worker 進(jìn)程

工作進(jìn)程,不斷接收客戶端的連接請求,處理請求。數(shù)量通常設(shè)置為與 CPU 核數(shù)一致,Nginx 也會將每個(gè)進(jìn)程與每個(gè) CPU 進(jìn)行綁定,充分利用其多核特性。

多個(gè) worker 進(jìn)程會競爭一個(gè)共享鎖,只有搶到鎖的進(jìn)程才能處理客戶端的請求。

如果請求是 accept 事件,則會將其添加到 accept 隊(duì)列中;如果是 read 或者 write 事件,則會將其添加到 read-write 隊(duì)列。

可能有人問,OpenResty 為什么要基于 Nginx 框架?

[[436287]]

主要還是看重了 Nginx 的高并發(fā)能力,反向代理服務(wù)器通常流量很大,本身不涉及復(fù)雜計(jì)算,屬于 I/O 密集型服務(wù)。

Nginx 采用基于 epoll 機(jī)制的事件驅(qū)動,異步非阻塞,大大提高并發(fā)處理能力。

但是 Nginx 采用 C 語言開發(fā),二次開發(fā)門檻較高。市場應(yīng)用廣泛,更多是基于 nginx.conf 預(yù)留配置參數(shù),如:反向代理、負(fù)載均衡、靜態(tài) web 服務(wù)器等。

如果想讓 Nginx 訪問 MySQL ,定制化開發(fā)一些業(yè)務(wù)邏輯,難度很高。

OpenResty 通過嫁接方式,將 Nginx 和 Lua 腳本相結(jié)合,既保留 Nginx 高并發(fā)優(yōu)勢,也擁有腳本語言的開發(fā)效率,也大大降低了開發(fā)門檻。

Lua 是最快的、動態(tài)腳本語言,接近 C 語言運(yùn)行速度。LuaJIT 將一些常用的 lua 函數(shù)和工具庫預(yù)編譯并緩存,下次調(diào)用時(shí)直接使用緩存的字節(jié)碼,速度很快。

另外,Lua 支持協(xié)程,這個(gè)很重要。協(xié)程是用戶態(tài)的操作,上下文切換不用涉及內(nèi)核態(tài),系統(tǒng)資源開銷小;另外協(xié)程占用內(nèi)存很小,初始 2KB。

OpenResty 核心架構(gòu)

OpenResty 是一個(gè)基于 Nginx 的 Web 平臺,內(nèi)部嵌入 LuaJIT 虛擬機(jī)運(yùn)行 Lua 腳本。使用 Lua 編程語言對 Nginx 核心以及各種 Nginx C 模塊進(jìn)行腳本編程。

如上圖:

  • 每接到一個(gè)客戶端請求,通過搶占鎖,由一個(gè) worker 進(jìn)程來跟進(jìn)處理。
  • worker 內(nèi)部會創(chuàng)建一個(gè) lua 協(xié)程,綁定請求,也就是說一個(gè)請求對應(yīng)一個(gè) lua 協(xié)程。
  • lua 協(xié)程將請求通過網(wǎng)絡(luò)發(fā)出,并添加一個(gè) event 事件到 nginx。然后,當(dāng)前協(xié)程就處于 yield,讓出 CPU 控制權(quán)。
  • 當(dāng)服務(wù)端響應(yīng)數(shù)據(jù)后,網(wǎng)絡(luò)流程會創(chuàng)建一個(gè)新的 event 事件,將之前的協(xié)程喚醒,將結(jié)果返回。

注意:不同的 lua 協(xié)程之間數(shù)據(jù)隔離,從而保證了不同的客戶端請求不會相互影響。另外,一個(gè) worker 中同一時(shí)刻,只會有一個(gè)協(xié)程在運(yùn)行。

cosocket 將 Lua 協(xié)程 + Nginx 事件通知兩個(gè)重要特性組合。cosocket 是 OpenResty 世界中技術(shù)、實(shí)用價(jià)值最高部分。

讓我們可以用非常低廉的成本,優(yōu)雅的姿勢,比傳統(tǒng) socket 編程效率高好幾倍的方式進(jìn)行網(wǎng)絡(luò)編程。無論資源占用、執(zhí)行效率、并發(fā)能力都非常出色。

為了方便開發(fā),OpenResty 將一個(gè) HTTP 請求劃分為 11 個(gè)階段,每個(gè)階段有自己的專屬職責(zé)。

函數(shù)功能說明:

  • set_by_lua,用于設(shè)置變量。
  • rewrite_by_lua,用于轉(zhuǎn)發(fā)、重定向等。
  • access_by_lua,用于準(zhǔn)入、權(quán)限等。
  • content_by_lua,用于生成返回內(nèi)容。
  • balancer_by_lua,負(fù)載均衡,路由轉(zhuǎn)發(fā)。
  • header_filter_by_lua,用于響應(yīng)頭過濾處理。
  • body_filter_by_lua,用于響應(yīng)體過濾處理。
  • log_by_lua,日志記錄。

OpenResty 提供了大量的 Lua API 接口,用于操作 Nginx 。只要熟悉 lua 語法,同時(shí)對 Nginx 的運(yùn)行流程有較清楚理解,那么就可以輕松的在 Nginx 上做二次開發(fā)。

無論是作為應(yīng)用網(wǎng)關(guān),還是高性能的 web 應(yīng)用,支持連接各種豐富的后端存儲,如:MySQL、Redis、Memcache、PostgreSQL 等,周邊生態(tài)非常豐富。

  1. https://github.com/openresty/lua-nginx-module/#accessbylua 

注意:OpenResty 的 API 有使用范圍限制,每個(gè) API 都有與之對應(yīng)的使用階段列表,如果你超范圍使用就會報(bào)錯(cuò)。

①部署安裝

本文以 CentOS 系統(tǒng)中為例。

添加 openresty 倉庫,這樣以后可以通過 yum updata 命令安裝或更新我們的軟件包:

  1. yum install yum-utils -y 
  2.  
  3. yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo 

安裝軟件:

  1. yum install openresty -y 

安裝命令行工具 resty:

  1. yum install openresty-resty -y 

②項(xiàng)目實(shí)戰(zhàn)

修改 nginx.conf 配置文件:

  1. worker_processes  auto; 
  2. worker_rlimit_nofile 1000000; 
  3. events { 
  4.     use epoll; 
  5.     worker_connections  150000; 
  6.  
  7. http { 
  8.     include       mime.types; 
  9.     default_type  application/octet-stream; 
  10.  
  11.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' 
  12.                       '$status $content_length $body_bytes_sent "$http_referer" ' 
  13.                       '"$http_user_agent" "$http_x_forwarded_for" "$upstream_response_time" "$request_time"'
  14.  
  15.     access_log  logs/access.log  main; 
  16.  
  17.     server { 
  18.         listen 8080; 
  19.         location / { 
  20.             access_by_lua_block { 
  21.                 local headers = ngx.req.get_headers(0) 
  22.                 local trace_id= headers["X-Trace-Id"
  23.                 ngx.log(ngx.ERR, trace_id) 
  24.             } 
  25.             #  ngx.say("<p>hello !</p>"
  26.             proxy_pass http://168.12.8.10:8080; 
  27.         } 
  28.     } 
  29.  
  30.     server { 
  31.         listen 8082; 
  32.         location / { 
  33.             default_type text/html; 
  34.             content_by_lua_block { 
  35.                 ngx.say("<p>Hello Openresty!</p>"
  36.             } 
  37.         } 
  38.     } 

nginx.conf 內(nèi)部分為三層嵌套:

  • 最外層的 http,表示處理 HTTP 協(xié)議。
  • http 內(nèi)部 的 server 監(jiān)聽端口,會啟動一個(gè) LuaJIT 虛擬機(jī),執(zhí)行l(wèi)ua代碼
  • 同一個(gè)端口內(nèi)部,區(qū)分不同的業(yè)務(wù)功能,采用 location 配置,通過不同的 path 路徑,處理不同的業(yè)務(wù)邏輯。

添加環(huán)境變量:

  1. echo "export PATH=$PATH:/usr/local/openresty/nginx/sbin" >> /etc/profile 
  2.  
  3. source /etc/profile 

啟動 openresty,啟動命令和 nginx 一致:

  1. nginx -c /usr/local/openresty/nginx/conf/nginx.conf 

訪問 Web 服務(wù):

  1. curl http://localhost:8082/ 

如果正常,瀏覽器頁面會輸出 Hello Openresty!

如果 nginx.conf 配置項(xiàng)做了修改,我們可以重新啟動:

  1. nginx -s reload 

作者:Tom哥

編輯:陶家龍

來源:轉(zhuǎn)載自公眾號微觀技術(shù)(ID:weiguanjishu)

 

責(zé)任編輯:武曉燕 來源: 微觀技術(shù)
相關(guān)推薦

2019-09-24 08:44:09

OpenrestyAPI網(wǎng)關(guān)

2024-09-03 13:59:37

2022-05-10 08:02:05

API網(wǎng)關(guān)系統(tǒng)

2022-08-22 08:40:42

API網(wǎng)關(guān)開發(fā)

2020-05-14 08:59:28

API網(wǎng)關(guān)性能

2023-09-07 10:56:36

2020-07-07 07:54:01

API網(wǎng)關(guān)微服務(wù)

2015-05-08 17:24:41

APIAPI網(wǎng)關(guān)Kong

2023-06-26 18:13:56

開源API

2021-06-16 07:05:02

gRPC 網(wǎng)關(guān)HTTP

2021-07-26 08:12:31

開源API網(wǎng)關(guān)

2021-09-03 13:48:07

API網(wǎng)關(guān)網(wǎng)絡(luò)

2019-07-02 14:17:18

API網(wǎng)關(guān)網(wǎng)關(guān)流量

2022-03-11 08:31:50

API網(wǎng)關(guān)微服務(wù)

2019-04-17 09:53:11

物聯(lián)網(wǎng)網(wǎng)關(guān)物聯(lián)網(wǎng)IOT

2022-03-14 10:12:22

架構(gòu)網(wǎng)關(guān)技術(shù)

2022-01-07 07:49:07

Apache APISKubernetesAPISIX

2019-06-03 10:14:07

API網(wǎng)關(guān)微服務(wù)

2020-12-04 09:11:50

CTOAPI網(wǎng)關(guān)

2019-09-04 08:54:48

API網(wǎng)關(guān)Nginx
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

亚洲精品无码久久久久久| 高清欧美日韩| 成人综合婷婷国产精品久久免费| 日韩av免费在线观看| 久久国际精品| 亚洲性猛交xxxxwww| 色老头在线观看| 日韩欧美中文第一页| 久草.com| 怡红院av一区二区三区| 嫩草av久久伊人妇女超级a| 国模大尺度一区二区三区| 视频二区一区| 蜜桃91丨九色丨蝌蚪91桃色| 色综合电影网| 日本美女视频一区二区| 日韩在线三级| 久久99在线观看| 日本成人性视频| 国产成人亚洲综合色影视| 日韩国产成人无码av毛片| 国产老妇另类xxxxx| 800av在线免费观看| 国产91精品精华液一区二区三区| 99视频精品全部免费看| 不卡av在线网| av五月天在线| 亚洲另类一区二区| 爽爽免费视频| 精品久久久久久亚洲精品| 污污软件在线观看| 色噜噜夜夜夜综合网| 午夜在线免费观看视频| 欧美成人官网二区| 悠悠资源网亚洲青| 欧美成人免费大片| 亚洲人挤奶视频| 91视频在线免费观看| 亚洲国产黄色| 久久av喷吹av高潮av| 久久这里都是精品| 欧美xx网站| 欧美亚一区二区| 色yeye免费人成网站在线观看| 亚洲精品第一页| 99精品视频在线免费播放| 久久久久五月天| 一区二区三区国产精华| 日韩精品久久一区| 国产精品资源在线| 先锋成人影院| 欧美日韩另类一区| 欧美日韩精品免费观看视完整| 国产69精品久久久久9999| 欧美一区影院| 日本天堂免费a| 国产精品美女视频| 牛牛热在线视频| 亚洲热线99精品视频| 久久精品福利| 精品国产乱码久久久久久蜜柚 | 亚洲激情另类| 热久久最新地址| 亚洲精品中文字幕在线观看| 日本三级在线播放完整版| 99re在线视频免费观看| 日韩一区二区三区免费观看| 久久久久观看| 日韩精品久久一区二区| 尤物在线观看一区| 青青视频在线观| 欧美无砖砖区免费| 中文字幕高清不卡| 国语对白做受xxxxx在线中国| 亚洲国产中文字幕| 97人人爽人人澡人人精品| 韩剧1988免费观看全集| 欧美日韩三区| 能看的毛片网站| 欧美久久高跟鞋激| 99这里只有精品视频| 精品福利影视| www.视频一区| 日韩一级大片| 亚洲少妇第一页| 国产激情视频在线观看| 中国丰满人妻videoshd| 日韩精品中文字幕在线一区| 国产乱码字幕精品高清av| 人妻精品无码一区二区三区| 欧美日韩性在线观看| 久久久久久av无码免费网站下载| 亚洲精品国产第一综合99久久| 污片在线免费观看| 国产精品第一第二| 99久久国产免费看| 日本不卡不卡| 欧日韩不卡在线视频| 国产成人av一区二区三区在线 | 欧美精品少妇一区二区三区| 精品国产18久久久久久洗澡| 亚洲图色在线| 欧美午夜不卡在线观看免费| 先锋影音国产精品| 亚洲精品蜜桃久久久久久| 免费看男男www网站入口在线| 欧美电影影音先锋| 久久精品国内一区二区三区水蜜桃| 中文字幕亚洲在| 欧美尤物美女在线| 久久精品国产精品国产精品污| 久久精品人人做| 日韩大片欧美大片| 国产一区二区三区四区五区加勒比 | 性日韩欧美在线视频| 国产精品亚洲一区二区三区妖精 | www.成人av.com| 亚洲一区二区综合| 欧美影院天天5g天天爽| 免费看日本毛片| 在线看福利67194| 盗摄精品av一区二区三区| 国模私拍视频在线播放| 日本视频一区二区在线观看| 欧美性感一区二区三区| 欧美电影《睫毛膏》| 九七影院97影院理论片免费| 九色成人免费视频| 91丨porny丨首页| 黄色欧美视频| 男人操女人免费软件| 中文在线不卡视频| 国产精品99久久不卡二区| av免费不卡国产观看| 做爰高潮hd色即是空| 欧美本精品男人aⅴ天堂| 丝袜亚洲另类欧美| 午夜小视频福利在线观看| 亚洲精品一区二区三区樱花| 亚洲的天堂在线中文字幕| 久久91精品久久久久久秒播| 英国三级经典在线观看| 97超碰免费观看| 日韩在线视频免费观看| 久久夜色精品国产噜噜av| 日韩中文字幕无砖| 91国内精品在线视频| 国产日本欧美一区二区三区在线 | 免费大片在线观看| 欧美成人全部免费| 日韩成人动漫| 椎名由奈jux491在线播放| 亚洲免费视频观看| 久久久久久久久99精品| 婷婷综合一区| 麻豆影视在线| 亚洲精品永久www嫩草| 中文字幕精品久久久久| 国产午夜精品久久久久久免费视| 欧美激情99| 国产综合在线观看| 久久免费看毛片| 欧美激情欧美激情| 岛国av在线不卡| 免费成人在线观看| 国产中文欧美日韩在线| 992tv在线| 天堂√在线观看一区二区| 国产中文字幕在线看| 久久久久久久激情| 久久精品视频va| 91精品国产色综合久久不卡98| 成人资源av| 国产在线视频欧美一区二区三区| 欧美精品亚洲精品| 国产曰批免费观看久久久| 久久国产电影| 久久av一区| 91高清视频免费看| 亚洲欧美一区二区三区四区| 欧美与欧洲交xxxx免费观看| 操bbb操bbb| 三级中文字幕在线观看| 好吊视频一区二区三区四区| 午夜日韩激情| 久久精品男人天堂av| 久久精品欧美视频| 日本不卡一区| 在线黄色国产视频| 久久午夜影院| 亚洲欧美激情插 | 91精品福利视频| 久久久亚洲国产| 亚洲色欲久久久综合网东京热| 久久精品蜜桃| 波多野结衣视频一区二区| 久久精品国产亚洲5555| 色94色欧美sute亚洲线路一ni| 亚洲免费一级电影| 国产精品v日韩精品v在线观看|