企点嵌入式PHP的探索实践 熊月 PHPCON2018

2020-02-27 370浏览

  • 1.数字化全渠道 客户沟通互动平台 腾讯企点(SCRM,社交化客户关系管理平台)基于腾讯的社交、大数据 和AI能力,助力企业更好地连接和理解客户,通过个性化的触达、沟通、 互动,全面升级客户体验,最终提升企业营销、销售、运营和服务的绩效。
  • 2.嵌入式PHP探索实践
  • 3.熊月 8年web后台开发经验。 腾讯企点开放平台技术负责人。 曾任职于中国平安,负责整个平安集团客服核心系统搭建。
  • 4.PHP是世界上最好的语言吗 ???
  • 5.CONTENTS ONE 嵌入式PHP •  PHP后台开发的高性能发展过程 •  何为嵌入式PHP THREE 方案:SPP+PHP •  SPP和PHP结合的难点,如何解决 •  最终线上运营效果如何 TWO 业务场景 •  老的业务框架的痛点 •  为什么要有嵌入式PHP的尝试 FOUR 未来畅想 •  嵌入式PHP未来究竟如何发展
  • 6.01 嵌入式PHP •  PHP后台开发的高性能发展过程 •  何为嵌入式PHP
  • 7.PHP后台开发高性能之路 LAMP ? Swoole Swoole + 协程 PHP-fpm fastcgi
  • 8.嵌入式PHP cgi embed fpm SAPI Apache2 hander cli
  • 9.02 业务场景 •  老的业务框架的痛点 •  为什么要有嵌入式PHP的尝试
  • 10.初代框架
  • 11.初代框架痛点 Generator协程开发不友好 Swoole低版本不够稳定 PHP实现调度性能差 扩展无法使用协程
  • 12.03 方案:SPP+PHP •  SPP和PHP结合的难点,如何解决 •  最终线上运营效果如何
  • 13.为什么选择嵌入式PHP 高性能 SPP 性能是痛点 PHP 嵌入式PHP
  • 14.SPP框架
  • 15.如何将SPP协程和Zend结合 SPP Zend
  • 16.ZTS实现原理 1.  新建了两个线程,且尚未分配全局资源
  • 17.ZTS实现原理 2.  分配第一个资源
  • 18.ZTS实现原理 3.  分配第二个资源
  • 19.Zend改造 1.  打开Zend内核 ZTS 开关 2.  线程私有变量 -> 全局数组元素 #ifdef ZTS 3.  增加资源入口切换API # define EG(v) ZEND_TSRMG(executor_globals_id, zend_executor_globals *, v) #else # define EG(v) (executor_globals.v) extern ZEND_API zend_executor_globals executor_globals; #/T*SeRTnhMdrifeLSad_ClAoCcaHl Es_tEoXraTgEeRN*/() sTtSaRtiMc _pAthPrIevaodid_ktesyr_mt _tslsw_kitecyh;co(THREAD_T CurCoID) ##{ ddeeffinineeTtSsrRmM_Gtl_sS_sTeAtT(wICh(iadt,)ptythpree,aedle_mseetsnpt)e(cTiSfiRcM(tlGs__kBeUy,L(Kv_oSiTdA*T)(IwCh(iadt,)t)ype)->element) ##gd_dCeeuffirninCeeoTItDSsrR=mM_CGtul_srB_CgUoeLItDK()_;pStThArTeIaCd(_idg,ettysppee)c(i(ftiycp(tels)_(k*e((yv)oid ***) TSRMLS_CACHE))[TSRM_UNSHUFFLE_RSRC_ID(id)]) #TSdReMfinLeS_TCSARCMHLES__UCPADCAHTEE_(E)X; TERN() extern TSRM_TLS void *TSRMLS_CACHE; #} define TSRMLS_CACHE_DEFINE() TSRM_TLS void *TSRMLS_CACHE __attribute__((visibility("default"))) = NULL; #define TSRMLS_CACHE_UPDATE() TSRMLS_CACHE = tsrm_get_ls_cache() #v//od#iedif*iZngEe_NaTDpSRT_DLMSEL[B1SU0_C0G0A0C0H] E=_{ts0rm}; _ls_cache ##ddeeffinineeTtSsrRmM_LtlSs__CseAtC(wHhEa_Ut)gPD_aApTTEL(S) [TgS_RCMurLCSo_ICDA]C=H(Evo=idt*s)r(mw_hgaett)_ls_cache() T#//S#dReeMlfsin_eAePtIsrvmoi_dtls*_tsgremt(_)gge_at_plsT_LcSa[cgh_eC(uvroCido)ID] {//#define TSRMLS_CACHE_UPDATE() if (!TSRMLS_CACHE) TSRMLS_CACHE = tsrm_get_ls_cache() r/e/#tuernndtifsrm_tls_get(); }#define TSRMLS_CACHE _tsrm_ls_cache
  • 20.PHP执行流调度器 SPP SAPI Compilation Lexer Parser Emitter Tsrm 全局资源 table OpCode Lexer Parser Emitter SPP_API Extention Execution Zend VM Zend GC Zend MM
  • 21.扩展也可以依赖SPP的API开发
  • 22.SPP+PHP整体架构
  • 23.SPP+PHP性能 •  压测机器 4*CPU 2099 MHz /8G /4*worker •  一次后端请求/三次后端请求/五层类嵌套调用后一次后端请求 •  压测工具1000个连接 (指定速率匀速向目标服务器发送请求,不依赖服务端的返回) •  压测机ping被压测机延时0.1ms左右 •  SPPversion:'>version: