免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

利用nginx+lua+memcache實(shí)現(xiàn)灰度發(fā)布

一、灰度發(fā)布原理說明

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供利川網(wǎng)站建設(shè)、利川做網(wǎng)站、利川網(wǎng)站設(shè)計(jì)、利川網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、利川企業(yè)網(wǎng)站模板建站服務(wù),10余年利川做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

灰度發(fā)布在百度百科中解釋:

灰度發(fā)布是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式。AB test就是一種灰度發(fā)布方式,讓一部分用戶繼續(xù)用A,一部分用戶開始用B,如果用戶對B沒有什么反對意見,那么逐步擴(kuò)大范圍,把所有用戶都遷移到B上面 來。灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時(shí)候就可以發(fā)現(xiàn)、調(diào)整問題,以保證其影響度。

這里的用于WEB系統(tǒng)新代碼的測試發(fā)布,讓一部分(IP)用戶訪問新版本,一部分用戶仍然訪問正常版本,其原理如圖:

執(zhí)行過程:

1、 當(dāng)用戶請求到達(dá)前端代理服務(wù)Nginx,內(nèi)嵌的lua模塊解析Nginx配置文件中的lua腳本代碼;

2、 Lua變量獲得客戶端IP地址,去查詢memcached緩存內(nèi)是否有該鍵值,如果有返回值執(zhí)行@client_test,否則執(zhí)行@client。

3、 Location @client_test把請求轉(zhuǎn)發(fā)給部署了new版代碼的服務(wù)器,location @client把請求轉(zhuǎn)發(fā)給部署了normal版代碼的服務(wù)器,服務(wù)器返回結(jié)果。整個(gè)過程完成。

下面把安裝配置過程詳細(xì)說明。

二、安裝配置過程詳解

1、安裝nginx

安裝依賴包

yum-yinstallgccgcc-c++autoconflibjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devellibxml2libxml2-develzlibzlib-develglibcglibc-develglib2glib2-develbzip2bzip2-develncursesncurses-develcurlcurl-devele2fsprogse2fsprogs-develkrb5krb5-devellibidnlibidn-developensslopenssl-developenldapopenldap-develnss_ldapopenldap-clientsopenldap-serversmakepcre-develyum-yinstallgdgd2gd-develgd2-devellualua-develyum–yinstallmemcached

下載lua模塊、lua-memcache操作庫文件和nginx包

wgethttps://github.com/simpl/ngx_devel_kit/archive/v0.2.18.tar.gzwgethttps://github.com/chaoslawful/lua-nginx-module/archive/v0.8.5.tar.gzwgethttps://github.com/agentzh/lua-resty-memcached/archive/v0.11.tar.gzwgethttp://nginx.org/download/nginx-1.4.2.tar.gztarxvfnginx-1.4.2.tar.gz cdnginx-1.4.2/./configure--prefix=/soft/nginx/--with-http_gzip_static_module--add-module=/root/ngx_devel_kit-0.2.18/--add-module=/root/lua-nginx-module-0.8.5/makemakeinstall

拷貝lua的memcached操作庫文件

tarxvfv0.11.tar.gzcp-rlua-resty-memcached-0.11/lib/resty//usr/lib64/lua/5.1/

配置nginx

#vim/soft/nginx/conf/nginx.conf worker_processes1; events{ worker_connections1024; } http{ includemime.types; default_typeapplication/octet-stream; sendfileon; keepalive_timeout65; proxy_next_upstreamerrortimeout; proxy_redirectoff; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$http_x_forwarded_for; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; client_max_body_size100m; client_body_buffer_size256k; proxy_connect_timeout180; proxy_send_timeout180; proxy_read_timeout180; proxy_buffer_size8k; proxy_buffers864k; proxy_busy_buffers_size128k; proxy_temp_file_write_size128k; upstreamclient{ server192.168.200.29:80; } upstreamclient_test{ server192.168.200.29:81; } server{ listen80; server_namelocalhost; location/{ content_by_lua\' clientIP=ngx.req.get_headers()["X-Real-IP"]ifclientIP==nilthen clientIP=ngx.req.get_headers()["x_forwarded_for"] endifclientIP==nilthen clientIP=ngx.var.remote_addr end localmemcached=require"resty.memcached" localmemc,err=memcached:new()ifnotmemcthen ngx.say("failedtoinstantiatememc:",err) return end localok,err=memc:connect("127.0.0.1",11211)ifnotokthen ngx.say("failedtoconnect:",err) return end localres,flags,err=memc:get(clientIP)iferrthen ngx.say("failedtogetclientIP",err) return endifres=="1"then ngx.exec("@client_test") return end ngx.exec("@client") \'; } location@client{ proxy_passhttp://client; } location@client_test{ proxy_passhttp://client_test; } location/hello{ default_type\'text/plain\'; content_by_lua\'ngx.say("hello,lua")\'; } location=/50x.html{ roothtml; } } }

檢測配置文件。

#/soft/nginx/sbin/nginx-t nginx:theconfigurationfile/soft/nginx/conf/nginx.confsyntaxisok nginx:configurationfile/soft/nginx/conf/nginx.conftestissuccessful

啟動nginx

/soft/nginx/sbin/nginx

啟動memcached服務(wù)

memcached-unobody-m1024-c2048-p11211–d

三、測試驗(yàn)證

測試lua模塊是否運(yùn)行正常

訪問http://測試服務(wù)器ip地址/hello。如果顯示:hello,lua 表示安裝成功。

在另一臺測試機(jī)(這里是192.168.200.29)設(shè)置兩個(gè)虛擬主機(jī),一個(gè)用80端口是執(zhí)行正常代碼,一個(gè)是81端口執(zhí)行灰度測試代碼。

在memcached中以你的客戶機(jī)IP地址為key,value值為1。這里我的IP是192.168.68.211.

telnetlocalhost11211Trying::1... Connectedtolocalhost. Escapecharacteris\'^]\'. set192.168.68.2110011STORED get192.168.68.211VALUE192.168.68.211911END quit

注意:

set后第一個(gè)值為key值。

192.168.68.211這是key值是需要灰度測試的IP地址;

0 表示一個(gè)跟該key有關(guān)的自定義數(shù)據(jù);

3600 表示該key值的有效時(shí)間;

1 表示key所對應(yīng)的value值的字節(jié)數(shù)。

下面訪問Nginx,效果符合預(yù)期,我的IP已經(jīng)在memcached中存儲值,所以請求轉(zhuǎn)發(fā)給執(zhí)行灰度測試代碼的主機(jī)。

從memcached刪除我的主機(jī)IP值。

再次請求Nginx,請求轉(zhuǎn)發(fā)給執(zhí)行正常代碼內(nèi)容的主機(jī)。

整個(gè)配置并不復(fù)雜,整個(gè)判斷過程對服務(wù)的影響非常小。如果需要使用這個(gè)系統(tǒng)最好自己看看lua腳本。

分享標(biāo)題:利用nginx+lua+memcache實(shí)現(xiàn)灰度發(fā)布
分享URL:http://m.newbst.com/article0/cppsio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈用戶體驗(yàn)商城網(wǎng)站網(wǎng)站維護(hù)面包屑導(dǎo)航品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)