Lua在Nginx中的应用

2020-02-23 315浏览

  • 1.   Application of Lua in Nginx   Lua 在 Nginx 中的应用   ☺agentzh@gmail.com☺ 章亦春 (agentzh)     2015.04
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.   ☺ No "callback hell". ☺ 100% nonblocking IO   没有“回调地狱”。 100% 非阻塞I/O.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.   ☺ openresty.org
  • 14.   ☺ qa.openresty.org   OpenResty 测试集群
  • 15.
  • 16.      /ipthr­ t10­ lnxx66'nxeh g_u  $.dsace r­ 7 a'iu 8_4 g_conxla   eursa es  ahns  Rqie tlat5mcie.   ukt1 lnxla(6 i)  bce :t­g_u 24mn   ukt2 w­g_u wnxlatvnxeh hnxeh 17mn  bce :tvnxlat­g_u r­g_cot­g_co(6 i)   ukt3 r­g_u hnxlatnxlat­g_cot­g_co(6 i)  bce :tvnxlat­g_u ­g_u vnxeh rnxeh 12mn   ukt4 vnxlat­g_cot­g_u h­g_cotnxeh 15mn  bce :t­g_u lnxeh onxlatvnxeh ­g_co(4 i)   ukt5 h­g_u rnxlatvnxeh wnxeh onxeh 9 i)  bce :tvnxlat­g_u w­g_cot­g_cot­g_co(0mn   .  ..
  • 17.
  • 18.   ☺ Lua SSL ☺ Lua CDN ☺ Lua WAF (Lua Web 防火墙)
  • 19.   ☺ Light threads   轻量级线程
  • 20.
  • 21.     oa hedA r   lcltra_,er=       g.hedsanfn1      nxtra.pw(uc)     ­tra_ ep unn snhoosy  ­ hedAkesrnigaycrnul   ­i h akrudo h urn  ­ ntebcgon ftecret   ­"ih hed.  ­ lgttra"
  • 22.     oa k e1 e2=  lclo,rs,rs          g.hedwi(hedA hedB        nxtra.attra_,tra_)
  • 23.     oa k r  g.hedkl(hedA  lclo,er=nxtra.iltra_)
  • 24.   ☺ lua­resty­websocket   WebSocket 服务器和客户端
  • 25.     oa evr=rqie"et.esce.evr  lclsre  eur rsywboktsre"     oa b r  evrnw  lclw,er=sre:e{     ieu  00 ­ nmlieod    tmot=50, ­i ilscns     a_ala_e  53,    mxpyodln=655     }     oa aa y,er=w:evfae)  lcldt,tp r  brc_rm(     oa ye,er=w:edtx(Hlowrd)  lclbts r  bsn_et"el ol"
  • 26.   ☺ full­duplex cosockets   全双工的基于协程的套接字
  • 27.   ☺ SSL/TLS cosocket
  • 28.     oa ok=nxsce.c(  lclsc  g.okttp)   oa k r  okcnet"w.lufaecm,  lclo,er=sc:onc(wwcodlr.o"                 43                 4)     k r  oksladhk(  o,er=sc:shnsae     as, ­dsbeSLssin    fle ­ ial S eso     wwcodlr.o" ­ N ae    "w.lufaecm, ­SInm     re ­vrf vrtig    tu ­ eiyeeyhn     )
  • 29.   ☺ ssl_certificate_by_lua     纯 Lua 动态服务 SSL 证书和私钥
  • 30.
  • 31.     s_etfct_yla'  slcriiaeb_u      oa s  eur nxsl    lclsl=rqie"g.s"     oa etcan rvky=m_oddt(    lclcr_hi,pi_e  yla_aa)     setslstdrcr(etcan)    asr(s.e_e_etcr_hi)     setslstdrpi_e(rvky)    asr(s.e_e_rvkypi_e)   ;  '
  • 32.
  • 33.   ☺ ssl_balancer_by_lua   纯 Lua 编写 Nginx 全动态负载均衡器
  • 34.     ptem{  usra      evr0000    sre ...;     aacrb_u     blne_yla'       oa aacr=rqie"g.aacr      lclblne  eur nxblne"       oa ot ot=m_odbcedad(      lclhs,pr  yla_akn_dr)       setblne.e_u_erhs,pr)      asr(aacrstcrpe(ot ot)     ;    '     }
  • 35.   ☺ nginx­systemtap­toolkit   基于 Systemtap 的 Nginx 工具箱
  • 36.
  • 37.   ☺ stapxx (stap++)   Systemtap 加上一点宏魔法……
  • 38.
  • 39.   ☺ How CPU time is spent inside LuaJIT   CPU 时间在 LuaJIT 内部是如何分布的
  • 40.      jv­ttssx­ 51­agtm=0  $l­msae.x x52 ­r ie6   tr rcn 51(urlclnixwfsi/gn­a)  Sattaig52 /s/oa/gn­a/bnnixwf   laewi o 0scns.  Pes atfr6 eod..     bevd10 u­unn ape n goe 9urltdsmls  Osre 23Larnigsmlsadinrd4 neae ape.   opld 4 79smls  Cmie:6%(7 ape)    oe(yitrrtdLa:1%(7 ape)  CCd b nepee u) 4 12smls   nepee:1%(5 ape)  Itrrtd 3 18smls   abg olco cmie) %(8smls  GraeCletr(opld:3 4 ape)   abg olco ntcmie) %(2smls  GraeCletr(o opld:3 4 ape)   rc xtn:0 4smls  Taeeiig %( ape)
  • 41. ☺ When an nginx worker's CPU is too high...   当 nginx worker 进程的 CPU 太高时……
  • 42.
  • 43.      suigoenixwre rcs a h i 94.  #asmn n gn okrpoeshstepd167    g­p.x x167  $nxrssx­ 94   ANN:Taigpoes167  WRIG rcn rcs 94.   i tlCt n.  HtCr­ oed   17994]30rqsc  [36353 0 e/e   17994]25rqsc  [36354 3 e/e   17994]25rqsc  [36355 3 e/e   17994]16rqsc  [36356 6 e/e   17994]28rqsc  [36357 3 e/e   17994]24rqsc  [36358 3 e/e   C  ^
  • 44.      /apeb p167­ 0­  .t  $.sml­t­ 94 t2 u>ab   ANN:Taig167(otnixsi/gn)i srsaeol..  WRIG rcn 94 /p/gn/bnnix nue­pc ny.   ANN:Tm' p utignw.(tmytk  hl)  WRIG iesu.Qitn o..i a aeawie
  • 45.      sn rna rg' lm rp ol:  #uigBednGegsfaegahtos    tcclas­tpp .t>act  $sakolpesa.lab  .b    lmgahp .b  .v  $faerp.lact>asg
  • 46.
  • 47.      suigtenixwre rcs i s167  #asmn h gn okrpoespdi 94:    jlasak.x ­r ie2 ­kpbdas­ 94  .t  $l­u­tcssx­agtm=0­si­avr x167>ab   tr rcn 94 /p/gn/bnnix  Sattaig167(otnixsi/gn)   laewi o 0scns  Pes atfr2 eod
  • 48.      sn rna rg' lm rp ol:  #uigBednGegsfaegahtos    tcclas­tpp .t>act  $sakolpesa.lab  .b    lmgahp .b  .v  $faerp.lact>asg
  • 49.
  • 50.   ☺ When an nginx worker's CPU is low and the throughput is low...   当 nginx worker 进程的 CPU 很低, 同时吞吐量上不去的时候……
  • 51.
  • 52.   ☺ off­CPU flame graphs from the sample­bt­off­cpu tool
  • 53.
  • 54.
  • 55.
  • 56.   ☺ nginx­gdb­utils   基于GDB 的Nginx 工具箱
  • 57.
  • 58.     gb b  (d)lt   :g_tplasce_c_eev  Cnxht_u_okttprcie   ..lbrsymslla11  @./i/et/yq.u:9   ..lbrsymslla50  @./i/et/yq.u:3   otn_yla1  cnetb_u:0
  • 59.     gb b ul  (d)ltfl   :g_tplasce_c_eev  Cnxht_u_okttprcie   ..lbrsymslla11  @./i/et/yq.u:9     oa sl"    lcl"ef:       al 04f8a)      tbe(x0118     oa sc"    lcl"ok:       al 04f8b)      tbe(x0110   ..lbrsymslla50  @./i/et/yq.u:3     oa sl"    lcl"ef:       al 04f84)      tbe(x0118     oa ot"    lcl"ps:       al 04f85)      tbe(x0110   .  ..
  • 60.     gb g  (d)lc   h urn eoysz alctdb C:886 ye  Tecretmmr ie(loae yG) 990bts
  • 61.     gb gsa  (d)lctt   57 t    ojcs a=96 v  1 i=8 u=716  112sr    bet:mx25,ag=5,mn1,sm792   97uvl   bet:mx2,ag=2,mn2,sm268   8 pa   ojcs a=4 v  4 i=4 u=38   14tra   bet:mx14,ag=12,mn58 u=674   0 hed  ojcs a=68 v  62 i=2,sm188   41poo   bet:mx267,ag=23,mn7,sm939   3 rt   ojcs a=224 v  24 i=8 u=616   92fn    bet:mx14 v  0 i=0 u=80   5 uc   ojcs a=4,ag=3,mn2,sm290   46tae   bet:mx240 v  87 i=6,sm880   4 rc   ojcs a=30,ag=15,mn10 u=264   95caa   bet:mx41,ag=1,mn1,sm556  26 dt   ojcs a=12 v  7 i=2 u=17   86 a    ojcs a=40,ag=27 i=2 u=935  191tb    bet:mx268 v  0,mn3,sm3426    9uaa   bet:mx169,ag=333 i=2 u=582     dt   ojcs a=705 v  91,mn3,sm332
  • 62.   ☺  Any questions? ☺   欢迎提问
  • 63. A