當(dāng)前位置:首頁(yè) >  站長(zhǎng) >  網(wǎng)站運(yùn)營(yíng) >  正文

漫談社區(qū)PHP業(yè)務(wù)開發(fā) 提高效率縮短開發(fā)周期

 2012-07-26 16:54  來(lái)源: 百度搜索研發(fā)部官方博客   我來(lái)投稿 撤稿糾錯(cuò)

  域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過(guò)

在當(dāng)前這個(gè)互聯(lián)網(wǎng)業(yè)務(wù)飛速發(fā)展時(shí)期,新的產(chǎn)品如雨后春筍般涌出,老產(chǎn)品線新業(yè)務(wù)也在不斷突破和嘗試。這就對(duì)快速開發(fā)迭代提出了更高的要求。

一、基礎(chǔ)運(yùn)行環(huán)境

針對(duì)新產(chǎn)品的開發(fā),必須能夠快速搭建一套LAMP架構(gòu)。那么無(wú)外乎選擇一個(gè)webserver,選擇一個(gè)php版本,選擇一個(gè)mysql版本,再選擇一個(gè)PHP開發(fā)框架和選擇一些php通用擴(kuò)展和基礎(chǔ)庫(kù)等。這個(gè)過(guò)程讀者可能覺(jué)得已經(jīng)很快了,能不能更快?

選擇的過(guò)程要求研發(fā)同學(xué)對(duì)相關(guān)技術(shù)方向有一定的積累,權(quán)衡利弊和優(yōu)先點(diǎn),又是一番調(diào)研和學(xué)習(xí)。如果有一鍵安裝程序,提供自動(dòng)化安裝webserver,php,mysql,以及攜帶高性能靈活的php開發(fā)框架,并提供標(biāo)準(zhǔn)化、安全、常用的配置文件,可以大大縮短產(chǎn)品線LAMP系統(tǒng)調(diào)研的成本,縮短工作周期。

 

一鍵安裝四步驟:(1)下載;(2)少量配置;(3)make install;(4)start;(當(dāng)然有end啦,簡(jiǎn)單的運(yùn)維工具),運(yùn)行環(huán)境OK。

二、業(yè)務(wù)開發(fā)框架

社區(qū)產(chǎn)品線各自為政,封閉得開發(fā)各自的業(yè)務(wù)邏輯。而事實(shí)上,各個(gè)產(chǎn)品線之間存在很多通用業(yè)務(wù)邏輯處理,如session驗(yàn)證、權(quán)限判斷、參數(shù)驗(yàn)證、日志打印等。不同產(chǎn)品線,所有請(qǐng)求都需要做這些處理,能不能不重復(fù)開發(fā)?無(wú)線業(yè)務(wù)開發(fā)和PC上的業(yè)務(wù)邏輯有很多的不同,但不同產(chǎn)品線之間也有很多通用性。能不能不重復(fù)開發(fā)?

產(chǎn)品線在內(nèi)部通常對(duì)這些通用邏輯的處理做了一定的抽象,設(shè)計(jì)為ActionChain的形式或者通過(guò)基類的方案??蚣軐⒏鼜氐祝簩⑦@些所有請(qǐng)求都要處理的通用邏輯以業(yè)務(wù)邏輯框架的形式提供,研發(fā)同學(xué)只需要關(guān)注用戶請(qǐng)求專有的邏輯處理。

一個(gè)用戶請(qǐng)求的處理邏輯如下圖:藍(lán)色部分是控制器框架處理流程,綠色部分和控制器框架相結(jié)合,處理所有請(qǐng)求通用的業(yè)務(wù)邏輯。而真正需要研發(fā)同學(xué)關(guān)注和開發(fā)的該用戶請(qǐng)求專有的業(yè)務(wù)處理,即黃色部分(當(dāng)然一個(gè)不僅僅是一個(gè)Action腳本,一個(gè)請(qǐng)求的處理會(huì)橫向做mvc分層,這塊后續(xù)會(huì)有涉及。)

 

業(yè)務(wù)邏輯框架繼承在一鍵安裝程序中提供,簡(jiǎn)簡(jiǎn)單單就可以獲得。

原生的PHP業(yè)務(wù)和模板耦合很深,沒(méi)有做任何的分層設(shè)計(jì),其結(jié)果是代碼的復(fù)用性差。這樣的原始的PHP系統(tǒng)現(xiàn)在已幾乎消亡。PHP開發(fā)框架統(tǒng)一處理路由、渲染、AutoLoad,通用業(yè)務(wù)邏輯的抽象和基礎(chǔ)庫(kù)的抽象,專有業(yè)務(wù)MVC分層,已大大加快了產(chǎn)品線業(yè)務(wù)邏輯的開發(fā)。如下圖所示:

 

從上而下,分別是接入層(高性能webserver),PHP開發(fā)框架(路由、自動(dòng)加載、視圖引擎等),應(yīng)用和基礎(chǔ)庫(kù),存儲(chǔ)引擎。

三、通用服務(wù)

社區(qū)產(chǎn)品線存在很多共同的需求,如日志處理、配置文件的處理、字符串處理、數(shù)據(jù)庫(kù)交互、網(wǎng)絡(luò)交互等。這些算法和工具封裝成phplib給產(chǎn)品線使用已比較成熟。

社區(qū)類產(chǎn)品線的業(yè)務(wù)功能存在很多的通用性,諸如評(píng)論功能、Tag功能、好友功能、圖冊(cè)、任務(wù)系統(tǒng)等,在眾多社區(qū)產(chǎn)品線都有類似的新功能新需求,各自設(shè)計(jì)開發(fā)?

這些需求在各產(chǎn)品線的UI上有個(gè)性化需求,但是后端實(shí)現(xiàn)方案大同小異,具有一定的通用性。功能服務(wù)化,提供API接口給不同產(chǎn)品線使用,產(chǎn)品線只需要關(guān)注展現(xiàn)邏輯和私有數(shù)據(jù)的處理邏輯即可,且服務(wù)統(tǒng)一運(yùn)維,降低產(chǎn)品下的系統(tǒng)復(fù)雜度。

四、垂直拆分子系統(tǒng)

那么隨著我們業(yè)務(wù)的拓展,單個(gè)應(yīng)用內(nèi)部的ui和module的數(shù)量越來(lái)越多,Action和Logic(對(duì)應(yīng)MVC中的M層,內(nèi)部可以再進(jìn)一步做分層處理,此次不詳述)的交互,logic和logic之間的交互變得越來(lái)越復(fù)雜。開發(fā)同學(xué)需要了解整個(gè)應(yīng)用的邏輯,某個(gè)logic的升級(jí),需要排查整個(gè)應(yīng)用下是否存在其他ui或logic的反向依賴。在快速開發(fā)的要求下,開發(fā)同學(xué)對(duì)logic之間的相互耦合關(guān)系的梳理不清楚,勢(shì)必引發(fā)越來(lái)越多的問(wèn)題,影響項(xiàng)目質(zhì)量,難以開始開發(fā)。

單一系統(tǒng)的問(wèn)題暴露越來(lái)越多,就到了系統(tǒng)拆分的時(shí)候了。如何拆?按業(yè)務(wù)邏輯垂直拆分。將功能獨(dú)立的業(yè)務(wù)邏輯剝離出來(lái),做成獨(dú)立的子系統(tǒng)。這個(gè)時(shí)候還需要考慮業(yè)務(wù)的通用性,是否可以服務(wù)化?應(yīng)用已有相同需求的通用服務(wù)?此時(shí)通用業(yè)務(wù)邏輯封裝成通用服務(wù)或使用了通用服務(wù),旁路的業(yè)務(wù)邏輯獨(dú)立成子系統(tǒng),如此一來(lái)就將原先單一龐大的系統(tǒng)做了大量減負(fù)。完成此階段的重構(gòu)后,系統(tǒng)加入變成如下:

 

單一系統(tǒng)被拆分成多個(gè)APP(APP內(nèi)部仍然有橫向的MVC分層),并復(fù)用大量的通用服務(wù)。如此一來(lái)研發(fā)團(tuán)隊(duì)在人員分工并行開發(fā)上都得到了極大提高。

五、跨系統(tǒng)調(diào)用框架

然而真實(shí)的現(xiàn)狀,在拆分后的子系統(tǒng)之間并不能完全消除依賴。為了解決多個(gè)子系統(tǒng)之間數(shù)據(jù)依賴的關(guān)系,需要一套統(tǒng)一的解決方案:API框架。子系統(tǒng)成為獨(dú)立的應(yīng)用(APP),APP之間存在相互的數(shù)據(jù)依賴,這些依賴以API的形式對(duì)外提供。如下圖:

 

當(dāng)APP1依賴APP2或APP3的數(shù)據(jù)后,APP2和APP3會(huì)將一部分?jǐn)?shù)據(jù)接口以API的形式提供,數(shù)據(jù)做統(tǒng)一的打包,通過(guò)標(biāo)準(zhǔn)規(guī)范的URL提供產(chǎn)品線內(nèi)部其他APP調(diào)用。這種形式非常類似于一個(gè)產(chǎn)品對(duì)外開放API(對(duì)第三方開放API,我們稱為openAPI,遵守統(tǒng)一的協(xié)議,并經(jīng)過(guò)必要的權(quán)限驗(yàn)證),而解決內(nèi)部子系統(tǒng)之間數(shù)據(jù)依賴的API接口可以進(jìn)一步簡(jiǎn)化。

APP提供的API解決提供接口描述(輸入、輸出),處理API的URL,Logic的轉(zhuǎn)發(fā)實(shí)現(xiàn)。API_LIB統(tǒng)一來(lái)管理所有的API接口,并提供統(tǒng)一的API_Server::call接口供調(diào)用。完全對(duì)上屏蔽內(nèi)部的轉(zhuǎn)發(fā)和實(shí)現(xiàn)細(xì)節(jié)。通常產(chǎn)品線內(nèi)部為了達(dá)到運(yùn)維的簡(jiǎn)化和統(tǒng)一,所有的子系統(tǒng)是同機(jī)部署的,API接口的會(huì)帶來(lái)額外的網(wǎng)絡(luò)消耗,以及增大qps。在此部署前提下,API_Server的實(shí)現(xiàn)方式可以通過(guò)HTTP調(diào)用或優(yōu)化為直接PHPRequire方式實(shí)現(xiàn)。優(yōu)勢(shì):

(1)框架統(tǒng)一,接口收斂,業(yè)務(wù)解耦;

(2)性能提升,易用性高,擴(kuò)展性高;

六、UI拆分模型

此時(shí)獨(dú)立出來(lái)的子系統(tǒng)可以專注做其業(yè)務(wù)邏輯了,核心的系統(tǒng)也得到減負(fù)。但是核心系統(tǒng)的升級(jí)更新頻率是最高的,業(yè)務(wù)邏輯也最復(fù)雜。到了一定時(shí)期,核心系統(tǒng)又變得臃腫,難以維護(hù)。此時(shí)可以通過(guò)一些設(shè)計(jì)模式來(lái)降低程序的可擴(kuò)展性和可維護(hù)性。但即便是如此,還是有一定的學(xué)習(xí)成本,在一個(gè)App內(nèi)部,開發(fā)同學(xué)或多或少需要關(guān)注其他模塊的代碼,逐漸發(fā)展為升級(jí)一點(diǎn)就需要排查很多點(diǎn)。這時(shí)候又到了進(jìn)一步減負(fù)的時(shí)候。如果減負(fù)?分為兩部:

第一步:異步模型

頁(yè)面渲染分為兩個(gè)階段:主題頁(yè)面數(shù)據(jù)和其他非主題頁(yè)面數(shù)據(jù)。根據(jù)頁(yè)面的不同部分由不同的數(shù)據(jù)源提供數(shù)據(jù)。按此邏輯將app進(jìn)一步做垂直拆分。

 

PHPService是由PHPmodule+一層很薄的UI,返回格式化數(shù)據(jù)。

第二步:同步模型

Module做拆分,不同業(yè)務(wù)邏輯拆分為不同的Module,區(qū)分為多個(gè)數(shù)據(jù)源,分別提供不同數(shù)據(jù)內(nèi)容,由統(tǒng)一的UI調(diào)度不同的數(shù)據(jù)源后,統(tǒng)一進(jìn)行渲染頁(yè)面返回響應(yīng)。

 

如此持續(xù)減負(fù)后,產(chǎn)品線內(nèi)部的子系統(tǒng)和模塊將越來(lái)越多,需要維持部署和運(yùn)維的統(tǒng)一。對(duì)團(tuán)隊(duì)成員的分工很細(xì),業(yè)務(wù)理解很專注和深入,合作、并行的效率也會(huì)更高,從而使整個(gè)開發(fā)周期縮短。

七、 小結(jié)

隨著業(yè)務(wù)邏輯的不端壯大,每個(gè)子系統(tǒng)或模塊的業(yè)務(wù)功能如果過(guò)于臃腫就需要不斷做減分,以保持在可控的規(guī)模內(nèi)。如此隨著產(chǎn)品的發(fā)展,產(chǎn)品線內(nèi)部的子系統(tǒng)和模塊將越來(lái)越多,需要維持部署和運(yùn)維的統(tǒng)一,保持簡(jiǎn)單。對(duì)團(tuán)隊(duì)成員的分工更細(xì),業(yè)務(wù)理解保持專注和深入,合作、并行的效率也會(huì)更高,從而使整個(gè)開發(fā)周期縮短。

申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

相關(guān)文章

  • PHP5停更,中企動(dòng)力為你保駕護(hù)航

    這兩天你們都心慌慌,為什么?因?yàn)槭忻嫔系腜HP5將于年底停止更新,六成用戶將面臨安全風(fēng)險(xiǎn)。筆者我只能說(shuō),這次絕對(duì)穩(wěn)了!因?yàn)檫@些語(yǔ)言跟我們沒(méi)關(guān)系,詳細(xì)了解下中企的技術(shù)實(shí)力!

  • PHP開發(fā)者的Linux學(xué)習(xí)之路

    談起一個(gè)高效動(dòng)態(tài)網(wǎng)站的構(gòu)建,那就不得不提到LAMP,即Linux操作系統(tǒng)、Apache網(wǎng)絡(luò)服務(wù)器、Mysql數(shù)據(jù)庫(kù)、Perl、PHP或Python編程語(yǔ)言等開源產(chǎn)品所組成的網(wǎng)站架構(gòu)框架,其最大的優(yōu)勢(shì)是開放性強(qiáng),安全性高,且成本低廉。因此,LAMP成為了國(guó)際流行的網(wǎng)站構(gòu)建方案。而作為一名php開發(fā)人員

    標(biāo)簽:
    php開發(fā)工具
  • PHP二次開發(fā)discuz3.2最新體驗(yàn)

    康盛官方于6月4號(hào)發(fā)布了discuz3.2的正式版,因?yàn)檫@兩天一直忙于一個(gè)項(xiàng)目,一直沒(méi)來(lái)的及體驗(yàn),現(xiàn)在抽時(shí)間總算是裝上了,也體驗(yàn)一把。根據(jù)官方說(shuō)明:Discuz!X3.2在繼承和完善Discuz!X3.1的基礎(chǔ)上,針對(duì)社區(qū)移動(dòng)端進(jìn)行了新的嘗試。推出微信登錄、微社區(qū)等功能。安全穩(wěn)定的程序?yàn)檎鹃L(zhǎng)提供更加

  • 如何從網(wǎng)站開發(fā)角度提高php安全漏洞的防范

    目前PHP因其功能強(qiáng)大、入門簡(jiǎn)單、代碼執(zhí)行效率高等優(yōu)點(diǎn),成為了Web應(yīng)用開發(fā)的流行語(yǔ)言。由于使用廣泛,所以利用PHP安全漏洞對(duì)Web網(wǎng)站進(jìn)行的攻擊也越來(lái)越多,這給Web應(yīng)用的安全帶來(lái)了嚴(yán)重威脅。對(duì)網(wǎng)站的安全負(fù)有直接責(zé)任的主要有兩類人員:一類是網(wǎng)站開發(fā)人員;一類是網(wǎng)站管理人員。本文筆者就從網(wǎng)站開發(fā)的角

    標(biāo)簽:
    php開發(fā)工具
  • 使用CakePHP框架開發(fā)網(wǎng)站

    現(xiàn)如今成熟的PHP開發(fā)框架有很多種,YII,zendframwork,國(guó)內(nèi)輕量型框架Thinkphp,還有開發(fā)效率很高的CakePHP。公司可以根據(jù)自己的需求選擇合適的開發(fā)框架,在這里,小編以自己公司使用的開發(fā)框架CakePHP作為重點(diǎn)介紹,闡述它的優(yōu)點(diǎn)。CakePHP的簡(jiǎn)要介紹:PHP框架已被

    標(biāo)簽:
    php開發(fā)工具

熱門排行

信息推薦