返回頂部
關(guān)閉軟件導(dǎo)航
位置:首頁(yè) > 資訊 > 其他>每個(gè)PHP版本都進(jìn)行統(tǒng)一之后就涉及到PHP代碼上線發(fā)布

  每個(gè)PHP版本都進(jìn)行統(tǒng)一之后,包括PHP文件進(jìn)行統(tǒng)一之后,就涉及到PHP代碼上線發(fā)布。不知道其他公司怎么做,我們把上線發(fā)布這一塊,交給每個(gè)項(xiàng)目負(fù)責(zé)程序開(kāi)發(fā)負(fù)責(zé)人去做,這塊就可以把系統(tǒng)工程師從代碼發(fā)布中解放出來(lái)。從上線發(fā)布版本,假如我們要發(fā)布一個(gè)1.0版本,這是2.1.46版本,可以進(jìn)行對(duì)應(yīng)起來(lái),如果我要發(fā)用戶中心2.1.46版本,就可以對(duì)應(yīng)21901,兩個(gè)版本之間和上個(gè)版本,假如2萬(wàn)版本之間有哪些修改,我們可以通過(guò)PHP獲取出來(lái)。通過(guò)系統(tǒng)發(fā)布的時(shí)候,我們就只能發(fā)布這個(gè)文件。

  于是我們開(kāi)發(fā)一個(gè)代碼發(fā)布后臺(tái),從上面兩個(gè)標(biāo)紅的地方可以看到,我們新增一個(gè)發(fā)布會(huì)新增一個(gè)版本號(hào),有主版本,次要版本。這樣的話對(duì)每個(gè)工程師會(huì)開(kāi)發(fā)一個(gè)版本,包括一個(gè)項(xiàng)目,可以有不同負(fù)責(zé)人去進(jìn)行商業(yè)發(fā)布,每個(gè)上線會(huì)提交相關(guān)信息。從右邊按紐可以看到,我們要啟動(dòng)哪個(gè)版本的時(shí)候,我們可以進(jìn)行版本發(fā)布,如果我們發(fā)現(xiàn)這個(gè)版本上線之后,如果有重大問(wèn)題,假如需要很長(zhǎng)時(shí)間解決,馬上回到上一個(gè)版本,通過(guò)每次版本發(fā)布內(nèi)容進(jìn)行版本控制,這樣整個(gè)版本發(fā)布一目了然。

  第三PHP與開(kāi)源產(chǎn)品、C/C++程序組合。利用PHP客戶端擴(kuò)展,通過(guò)TCP協(xié)議與C/C++開(kāi)源程序進(jìn)行通訊,例如與Sphinx而搜索等等。方式二,我們是開(kāi)發(fā)一些基于HTTP協(xié)議與C/C++開(kāi)源程序進(jìn)行通訊,例如與我們字形開(kāi)發(fā)的開(kāi)源簡(jiǎn)單消息隊(duì)列軟件,HTTPQS進(jìn)行通訊。PHP Web程序,Web程序要求每次請(qǐng)求都要非常快,處理速度需要在毫秒級(jí)解決。我們也遇到一些服務(wù),比如發(fā)手機(jī)短信,還有發(fā)送郵件也需要幾十秒時(shí)間,這讓用戶在前端頁(yè)面等待對(duì)用戶體驗(yàn)不好。

  還有上傳視頻,我們需要視頻格式轉(zhuǎn)換,以及我們進(jìn)行數(shù)據(jù)挖掘,需要記錄用戶的一些信息,記錄一些日志,這樣我們就需要異步處理。為了解決異步處理,我們也是分為兩種情況。一個(gè)是短耗時(shí)異步處理,耗1、2秒時(shí)間,記錄一些數(shù)字挖掘信息,這可能耗的時(shí)間比較短,這時(shí)候我們可以用PHP-FPM提供 fastcgi-finish-reques函數(shù)。從調(diào)入這個(gè)函數(shù)之后,下面執(zhí)行結(jié)果用戶不會(huì)去等待下面這個(gè)結(jié)果,這樣可以實(shí)現(xiàn)一些異步。

  fastcgi-finish-reques函數(shù)缺點(diǎn)。PHPFastCGI進(jìn)程數(shù)有限,正在處理異步操作的PHP-CGI進(jìn)程,無(wú)法處理新請(qǐng)求。如果并發(fā)訪問(wèn)量較大,php-cgi進(jìn)程數(shù)用滿,新訪問(wèn)請(qǐng)求,將沒(méi)有php-cgi額去處理。Nginx服務(wù)器會(huì)出現(xiàn),502 Bad操作采取隊(duì)列式進(jìn)行解決,包括開(kāi)源隊(duì)列。這樣的話,在我們產(chǎn)品應(yīng)用中,我們應(yīng)用到下面一些清我們發(fā)送短信,我們可以先入隊(duì)列,最后從隊(duì)列進(jìn)行郵件發(fā)送,像刷新前面頁(yè)面緩存,獲益做上面視頻頁(yè)面轉(zhuǎn)換都可以進(jìn)行異步方式解決。

  我們采用一個(gè)PHP負(fù)載均衡方式,從這個(gè)架構(gòu)圖是我們一個(gè)大概游戲官網(wǎng)架構(gòu)。可以看到有論壇,有普通一些PHP服務(wù),最前端我們用兩臺(tái)服務(wù)器去進(jìn)行均衡,下面比較大的業(yè)務(wù)像一些論壇,或者是游戲活動(dòng)PHPweb批量添加欄目,單獨(dú)畫(huà)一組PHP外部服務(wù)器。這樣通過(guò)負(fù)載均衡去分發(fā)到下面PHP進(jìn)行義務(wù)處理,從PHP到后端又會(huì)連接一些,剛才我們提到一些像分布式圖片處理,一些搜索引擎,像這些接口進(jìn)行操作。

  當(dāng)然我們?cè)陂_(kāi)發(fā)服務(wù),因?yàn)槲覀冇卸嗯_(tái)WEB服務(wù)器,我們?cè)赑HP開(kāi)發(fā)的時(shí)候也需要注意。以前單機(jī)程序?yàn)榱私鼇?lái)緩存,如果布置在多臺(tái)服務(wù)器,可能在這臺(tái)服務(wù)器生存了,在那臺(tái)服務(wù)器上沒(méi)有生存。另外每次訪問(wèn)會(huì)生成很多小文件,小文件會(huì)占用Linux大量瀏覽,有時(shí)候磁盤(pán)沒(méi)有完,但是沒(méi)有辦法新建文件了,因?yàn)榻撕芏嘈【彺嫖募瑢?dǎo)致整個(gè)應(yīng)用滿了。這樣對(duì)數(shù)據(jù)對(duì)象緩存我用APC、Memcached代替。

  還有HTML輸出網(wǎng)頁(yè)緩存,我們用前端Nginx負(fù)載均衡來(lái)做一個(gè)緩存。Nginx負(fù)載均衡現(xiàn)在也可以支持緩存,把動(dòng)態(tài)一些內(nèi)容訪問(wèn)到后端WEB服務(wù)器進(jìn)行緩存。如果是一些長(zhǎng)期頁(yè)面,像游戲官網(wǎng),像一些圖片不僅能改變。有一個(gè)優(yōu)點(diǎn),WEB服務(wù)器上,PHP文件能夠通過(guò)代碼發(fā)布系統(tǒng)統(tǒng)一管理,增,刪WEB服務(wù)器,非常快捷,清除緩存,能夠由系統(tǒng)工程師去統(tǒng)一管理。

  另外涉及到代碼防篡改,萬(wàn)一有客戶上傳木馬上去,也能夠在我們PHP程序中開(kāi)發(fā)一個(gè)預(yù)判斷進(jìn)行一個(gè)解決。因?yàn)槲覀働HP程序是通過(guò)代碼系統(tǒng)發(fā)布,能夠讓它執(zhí)行,如果不是通過(guò)我們代碼發(fā)布系統(tǒng)發(fā)布的程序,假如他在上面創(chuàng)建一個(gè)PHP文件,或者上傳一個(gè)PHP文件,這也是不經(jīng)過(guò)代碼發(fā)布系統(tǒng)生成,同時(shí)會(huì)發(fā)一個(gè)報(bào)警短信,報(bào)警文件給你相應(yīng)系統(tǒng)工程師進(jìn)行查看。多臺(tái)服務(wù)器有Session會(huì)話,有一些登錄操作。我們一個(gè)采用在負(fù)載均衡服務(wù)器上做IP哈希,不同用戶根據(jù)IP不同分布到不同服務(wù)器。另外在PHPWeb服務(wù)器上做Session共享,必不可少。

  下面是PHP在金山游戲運(yùn)營(yíng)系統(tǒng)Keyes中應(yīng)用。包括一個(gè)游戲,如何開(kāi)活,發(fā)廣播等這些信息需要通過(guò)一個(gè)平臺(tái)來(lái)解決。這是我們?cè)O(shè)計(jì)的一個(gè)架構(gòu),主要是分為界面,接口和支撐,三層架構(gòu)設(shè)計(jì)。從最早做三角是一個(gè)管理界面,現(xiàn)在很多項(xiàng)目也進(jìn)行一些IPI開(kāi)發(fā),肯定IPI是單獨(dú)一套,本站自己使用界面也是一套。但是我們會(huì)把它完全做成一個(gè)IPI,對(duì)數(shù)據(jù)一些功能操作全部分在IPI接口,管理界面只是實(shí)現(xiàn)管理界面的邏輯。我在這個(gè)運(yùn)營(yíng)管理系統(tǒng)當(dāng)中可以進(jìn)行查看,比如一些經(jīng)營(yíng)分析系統(tǒng),也需要獲取用戶在線信息,可以調(diào)取PHP進(jìn)行操作。

  在右邊這個(gè)部分是屬于游戲服務(wù)器,左邊是運(yùn)營(yíng)服務(wù)器,右邊是一些游戲服務(wù)器。游戲服務(wù)器上,涉及到每個(gè)游戲服務(wù)端架構(gòu)都不一樣,他也包括服務(wù)端架構(gòu)也是跨服務(wù)器的,像網(wǎng)端服務(wù)器。我們運(yùn)營(yíng)每一臺(tái)服務(wù)器上有一個(gè)守護(hù)進(jìn)程,我們采用Knose開(kāi)發(fā),我們通過(guò)一個(gè)加密協(xié)議進(jìn)行訪問(wèn)。我們通過(guò)多個(gè)游戲進(jìn)程進(jìn)行訪問(wèn),包括開(kāi)發(fā)一些指令PHPweb批量刪除關(guān)鍵詞,發(fā)送一些信號(hào),在和他游戲通信,有我們可以監(jiān)控進(jìn)程存在,這個(gè)進(jìn)程和通訊是否正常。

  可能有這樣一種情況,一個(gè)是游戲進(jìn)程存在,假如因?yàn)橛螒騼?nèi)部僵死了,這時(shí)候我們通過(guò)一個(gè)PHP心跳,游戲服務(wù)端進(jìn)程服務(wù),就認(rèn)為這個(gè)服務(wù)端進(jìn)程是存活的。從外部去管理游戲服務(wù)器,這一塊我們涉及到一個(gè)時(shí)間問(wèn)題。因?yàn)槲覀兺獠砍绦蛐枰獣r(shí)間非常快,我發(fā)布一個(gè)停滯指令,在游戲服務(wù)器需要從網(wǎng)端去建立用戶一些連接,還有保存一些用戶數(shù)據(jù),他完成整個(gè)過(guò)程才能把整個(gè)游戲服務(wù)端停掉,如果引入比較多,保證數(shù)據(jù)可能是幾十秒到1分鐘,從前端外部用戶去進(jìn)行介入會(huì)發(fā)現(xiàn)超時(shí)情況,外部需要做一個(gè)操作馬上能夠完成。這樣我們?nèi)ピO(shè)計(jì)接口的時(shí)候,我們從PHP管理界面,我們發(fā)起一個(gè)功能接口,這個(gè)功能接口就進(jìn)行轉(zhuǎn)發(fā),這個(gè)請(qǐng)求完成,去通知各個(gè)游戲進(jìn)程做一個(gè)評(píng)估操作,做完評(píng)估操作之后發(fā)起一個(gè)新的請(qǐng)求去回掉這邊PHP功能接口,這樣的話就變成一個(gè)異步過(guò)程。

  下面是一個(gè)數(shù)據(jù)交互過(guò)程,分為四項(xiàng)功能。一個(gè)是運(yùn)營(yíng)指令,涉及到修改經(jīng)驗(yàn)倍數(shù),踢人,發(fā)消息廣播,啟動(dòng)游戲,停止游戲、更新游戲程序,更新配置文件、并服。第二個(gè)是服務(wù)器監(jiān)控,包括CPU、磁盤(pán)、內(nèi)存、進(jìn)程數(shù)、系統(tǒng)負(fù)載、游戲服務(wù)端進(jìn)程是否存在。游戲心跳檢測(cè),Ping包檢測(cè),確定游戲是否正常運(yùn)行PHPweb批量更新文章,還有游戲在線人數(shù),查看游戲總在線人數(shù)。

  我們?cè)陂_(kāi)發(fā)這套平臺(tái)的時(shí)候遇到這種情況,一套程序需要不同游戲服務(wù)端架構(gòu)。現(xiàn)在我們還帶領(lǐng)別的公司一些游戲,帶領(lǐng)別的公司游戲服務(wù)端架構(gòu)不一樣,這樣的話我們?nèi)ピ鯓佑靡惶灼脚_(tái)去適應(yīng)每一個(gè)游戲工作室,或者游戲開(kāi)發(fā)公司架構(gòu)呢。前期我們肯定是考慮這樣一個(gè)方法,我們提供一個(gè)IPI接口,制定一個(gè)游戲,按照他們都要按照這個(gè)協(xié)議,按照這個(gè)IPI接口進(jìn)行接入。到實(shí)際進(jìn)行開(kāi)發(fā)的時(shí)候會(huì)發(fā)現(xiàn)遇到一些問(wèn)題,我們?cè)诟鞣N游戲需要接入運(yùn)營(yíng)系統(tǒng)的時(shí)候,這個(gè)游戲基本上已經(jīng)成型了,到綠色狀態(tài)。他們每個(gè)游戲可能需要進(jìn)行一些,他們也會(huì)利用一些框架進(jìn)行開(kāi)發(fā),包括GSP協(xié)議框架,他們已經(jīng)封裝好了,馬上可以按照我們這個(gè)協(xié)議去做。

  如果按照我們提供的接口來(lái)開(kāi)發(fā),可能從時(shí)間上,成本上都會(huì)存在一個(gè)問(wèn)題。這就是我們進(jìn)行一個(gè)舉例,我們?nèi)绻纱蟀蛙?chē)去接,有些人說(shuō)我喜歡自己開(kāi)車(chē)過(guò)來(lái),可能別的人喜歡騎摩托車(chē)過(guò)來(lái),這就代表這封裝一些框架,對(duì)協(xié)議的處理都不一樣。可能也有比較愿意接受這套方案的,這樣的話為了能夠讓每一個(gè)游戲研發(fā)公司都能夠去適應(yīng)我們這個(gè)平臺(tái)進(jìn)行快速接入,我們就需要對(duì)接口方案進(jìn)行改造。

  這就有點(diǎn)像我們開(kāi)車(chē)一樣,我們來(lái)派大巴車(chē)去接方案,我們改了一個(gè)更開(kāi)闊的方案PHPweb批量助手,我們和各個(gè)游戲進(jìn)行,你們只要使用PHP協(xié)議和我們通訊就可以了,我們?nèi)プ鲆粋€(gè)道路設(shè)計(jì)。我們修一條公路,你們想開(kāi)奧迪寶馬都可以,想騎摩托車(chē)過(guò)來(lái)也都可以,我們會(huì)制定一個(gè)協(xié)議事例,你想按照這套事例來(lái)都可以。這樣每個(gè)游戲需要遵循我們這個(gè)平臺(tái),但是這樣的話也需要一些約束,比如我要開(kāi)飛機(jī)過(guò)來(lái)肯定不行,雖然可以給他們更寬松的制約,但是也需要遵守一些規(guī)定,比如你開(kāi)車(chē)過(guò)來(lái)不能闖紅燈,需要遵守一些交通規(guī)則。我們會(huì)根據(jù)不同游戲,可以分為二進(jìn)制協(xié)議,因?yàn)榈脑捴贫ǘM(jìn)制協(xié)議,PHP是一個(gè)流媒體秀逸我們需要進(jìn)行分包,有些游戲在一個(gè)協(xié)議包中間某兩個(gè)字節(jié)表示游戲包長(zhǎng)度。我們通過(guò)配置文件,去設(shè)定對(duì)二進(jìn)制要求。

  最終每個(gè)協(xié)議不同,運(yùn)行系統(tǒng)需要解析出來(lái)這部分過(guò)程,放到左邊PHP功能結(jié)構(gòu)。PHP開(kāi)發(fā)非常迅速,我們同樣去解析他一個(gè)歇息也會(huì)非常迅速。他通過(guò)一個(gè) PHP流動(dòng)協(xié)議,我們?nèi)ミM(jìn)行一個(gè)轉(zhuǎn)化,轉(zhuǎn)化成一個(gè)IP請(qǐng)求,這樣PHP只要能夠?qū)λ螒騾f(xié)議進(jìn)行一個(gè)解析,這樣就可以輕松地完成。可能解析代碼非常簡(jiǎn)單,這塊從開(kāi)發(fā)層面來(lái)說(shuō)非常快了。我們?cè)?月份的介入三款游戲,同一時(shí)間同時(shí)介入,最后同一時(shí)期完成介入,這也是從結(jié)構(gòu)設(shè)計(jì)來(lái)設(shè)定的。

如果您覺(jué)得 每個(gè)PHP版本都進(jìn)行統(tǒng)一之后就涉及到PHP代碼上線發(fā)布 這篇文章對(duì)您有用,請(qǐng)分享給您的好友,謝謝
文章地址:http://www.meyanliao.com/article/other/mgPHPbbdjxtyzhjsjdPHPdmsxfb.html
解放雙手無(wú)盡可能,有問(wèn)題添加天線貓微信
主站蜘蛛池模板: 亚洲日韩精品A∨片无码加勒比| 一本加勒比HEZYO无码资源网| 亚洲精品无码久久久久牙蜜区| 无码免费午夜福利片在线| 日韩av无码中文字幕| 人妻少妇看A偷人无码精品视频| 亚洲精品无码成人片在线观看 | 亚欧免费无码aⅴ在线观看| 中文字幕久久精品无码| 国产成人无码精品久久久小说| 亚洲av无码不卡| 精品无人区无码乱码毛片国产| 人妻中文字系列无码专区| 亚洲av中文无码字幕色不卡| 国产精品无码久久综合| 在线无码午夜福利高潮视频| 无码八A片人妻少妇久久| 无码中文字幕日韩专区视频| 国产成人无码区免费A∨视频网站| 久久久久亚洲AV无码专区首JN | 国产精品va无码二区| 少妇伦子伦精品无码STYLES| 国产在线精品无码二区二区| 无码GOGO大胆啪啪艺术| 狠狠躁狠狠躁东京热无码专区| 国产精品亚洲一区二区无码| 亚洲精品天堂无码中文字幕| 久久午夜无码鲁丝片秋霞| 无码精品一区二区三区免费视频| 国产精品亚洲一区二区无码| 亚洲a∨无码精品色午夜| 精品久久亚洲中文无码| 亚洲中文久久精品无码1| 国产成人无码久久久精品一 | 精品无码国产自产拍在线观看| 亚洲一区爱区精品无码| 亚洲精品无码久久一线| 日本爆乳j罩杯无码视频| 人妻丰满?V无码久久不卡| 人妻无码久久精品| 亚洲熟妇无码八AV在线播放|