趙立群
摘要:隨著Web技術(shù)的發(fā)展,Web程序運(yùn)行架構(gòu)與設(shè)計(jì)技術(shù)越來(lái)越多的呈現(xiàn)在開發(fā)者面前。本文探討了中小企業(yè)Web應(yīng)用程序的運(yùn)行架構(gòu),研究分析了中小企業(yè)應(yīng)用程序的設(shè)計(jì)模式。
關(guān)鍵詞:WEB網(wǎng)站;設(shè)計(jì)模式;運(yùn)行架構(gòu)
中圖分類號(hào):TP311.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2020)03-0123-02
0 引言
Web應(yīng)用程序是一種經(jīng)由Internet或Intranet、以Web方式提供服務(wù)的程序。它是典型的瀏覽器/服務(wù)器架構(gòu)的產(chǎn)物。采用Internet標(biāo)準(zhǔn)的通信協(xié)議HTTP作為兩者通信的標(biāo)準(zhǔn)。為服務(wù)開發(fā)商提供規(guī)范和簡(jiǎn)化的開發(fā)模式,由于用統(tǒng)一的HTML語(yǔ)言作為客戶端程序的編碼,通過(guò)瀏覽器和Internet網(wǎng)的便捷性,可以在任何地方進(jìn)行數(shù)據(jù)訪問(wèn)。在現(xiàn)實(shí)的應(yīng)用中,我們通過(guò)瀏覽器將事務(wù)邏輯暴露給用戶,用戶通過(guò)瀏覽器將事務(wù)邏輯激活并將初始參數(shù)等信息傳遞給服務(wù)器,運(yùn)行存儲(chǔ)于之中的事務(wù)處理程序,處理規(guī)定的事務(wù)邏輯。這要通過(guò)運(yùn)行相應(yīng)的Web應(yīng)用服務(wù)程序和數(shù)據(jù)庫(kù)服務(wù)程序來(lái)完成,服務(wù)器對(duì)數(shù)據(jù)進(jìn)行處理后,將處理的結(jié)果生成網(wǎng)頁(yè),傳給瀏覽器,以實(shí)現(xiàn)對(duì)處理結(jié)果的顯示。這樣系統(tǒng)客戶端被大大的簡(jiǎn)化,用一個(gè)瀏覽器就可以應(yīng)對(duì)于所有Web應(yīng)用程序,降低了客戶端計(jì)算機(jī)的配置成本。
1 中小企業(yè)Web應(yīng)用程序的運(yùn)行架構(gòu)
1.1 通信協(xié)議
瀏覽器/服務(wù)器架構(gòu)的核心是HTTP,它有兩種報(bào)文形式:請(qǐng)求/響應(yīng)。請(qǐng)求報(bào)文包括方法、資源路徑、協(xié)議的版本、頭部的可選信息和報(bào)文體;響應(yīng)報(bào)文包括協(xié)議的版本號(hào)、狀態(tài)碼、頭部信息和獲取資源的內(nèi)容等。隨著Web Service技術(shù)的出現(xiàn),產(chǎn)生了SOAP、WSDL、UDDI協(xié)議。WSDL用來(lái)描述如何訪問(wèn)具體的接口,UDDI用來(lái)管理,分發(fā),查詢Web Service當(dāng)用戶通過(guò)UDDI找到你的WSDL描述文檔后,就可以通過(guò)SOAP調(diào)用已建立Web服務(wù)中的一個(gè)或多個(gè)操作。SOAP支持不同的底層接口,如HTTP(S)或者SMTP。
1.2 主要服務(wù)軟件
主要的Web服務(wù)器支撐軟件常見(jiàn)的有Apache、IIS、Nginx。Apache使用范圍廣,支持多平臺(tái),Nginx支持反向代理,IIS是微軟支持Web服務(wù)器軟件通過(guò)添加組件可以支持多種服務(wù)。但它們只能將一個(gè)固定的內(nèi)容返回到客戶端,不論何人、何時(shí)都一樣。
Web logic、Tomcat、Jetty是常見(jiàn)的應(yīng)用服務(wù)器,它們通過(guò)瀏覽器把服務(wù)的業(yè)務(wù)暴露給用戶,當(dāng)用戶提出請(qǐng)求時(shí),在服務(wù)器端為用戶運(yùn)行業(yè)務(wù)處理程序,完成業(yè)務(wù)邏輯處理。Web Sphere是IBM的基于Java的應(yīng)用環(huán)境,建立、部署和管理Internet和Intranet Web應(yīng)用服務(wù)器軟件,使用較少。Tomcat也是基于java應(yīng)用服務(wù)器。它只是一個(gè)Servlet容器,可以獨(dú)立運(yùn)行。它的特別之處在常常與Apache整合起來(lái)使用,能夠處理JSP,被廣泛使用。Jetty采用最優(yōu)的開源Java Web引擎,將Java社區(qū)中使用量最大,用戶數(shù)最多。Jetty通過(guò)使用APR和Tomcat本地技術(shù)的混合模型來(lái)解決問(wèn)題。混合技術(shù)模型從最新的操作系統(tǒng)技術(shù)里提供了最好的線程和事件處理。其性能參數(shù)匹配甚至超越了本地Apache HTTP服務(wù)器或者IIS。Jetty能夠提供數(shù)據(jù)庫(kù)連接池服務(wù),不僅支持JSP等Java技術(shù),還支持其他Web技術(shù)如PHP、.NET等。
在數(shù)據(jù)管理上,中小企業(yè)網(wǎng)站主要使用關(guān)系型數(shù)據(jù)庫(kù)技術(shù),它是對(duì)數(shù)據(jù)進(jìn)行高效管理主要工具,并且為外提應(yīng)用提供訪問(wèn)接口,為Web應(yīng)用創(chuàng)造良好的開發(fā)環(huán)境。近來(lái)也有使用非關(guān)系型數(shù)據(jù)庫(kù)的趨勢(shì)。主要的數(shù)據(jù)庫(kù)管理軟件為Mysql和MS-SQL Server。兩款產(chǎn)品性能差不多,MS-sql server主要用在微軟的為主的技術(shù)體系中,在市場(chǎng)中有一定的占有率。Mysql作為熱門的數(shù)據(jù)庫(kù)管理系統(tǒng),在市場(chǎng)中有廣泛的使用,它對(duì)Windows和linux平臺(tái)有很好的支持。尤其是和php程序設(shè)計(jì)語(yǔ)言結(jié)合,產(chǎn)生了好多開發(fā)環(huán)境。在客戶終端的瀏覽器上,微軟、谷歌、蘋果產(chǎn)品市場(chǎng)占有率很高。瀏覽器的內(nèi)核主要有Trident、Gecko、WebKit、Presto。主要任務(wù)是對(duì)HTML語(yǔ)言進(jìn)行解釋與渲染,生成用戶的瀏覽界面。
1.3 運(yùn)行架構(gòu)
(1)數(shù)據(jù)訪問(wèn)量有限的架構(gòu)。網(wǎng)站的初期,我們往往會(huì)在單機(jī)上跑我們所有的程序。但隨著訪問(wèn)量逐步上升,服務(wù)器的負(fù)載慢慢提高,網(wǎng)站的壓力逐步顯現(xiàn)。假如我們代碼層面已難以優(yōu)化,在不提高單臺(tái)機(jī)器的性能的情況下,可以將服務(wù)細(xì)化,將后臺(tái)服務(wù)分成業(yè)務(wù)服務(wù)和數(shù)據(jù)庫(kù)服務(wù),分別由不同的計(jì)算機(jī)完成。這樣不僅可以有效地提高系統(tǒng)的負(fù)載能力,而且性價(jià)比也很高,還提高了容災(zāi)能力,如圖1所示。
(2)數(shù)據(jù)訪問(wèn)量較大的架構(gòu)。隨著訪問(wèn)量繼續(xù)增加,上圖所示的架構(gòu)也即將無(wú)法滿足客戶的需求了。這時(shí)可以把應(yīng)用服務(wù)器從一臺(tái)變成多臺(tái),將他們組成一個(gè)服務(wù)器集群,通過(guò)負(fù)載均衡技術(shù)把用戶的請(qǐng)求分散到不同的服務(wù)器中,從而提高負(fù)載能力。而對(duì)于日益增加數(shù)據(jù)庫(kù)的訪問(wèn)需求,我們可以通過(guò)SAN、NAS和加大緩存與讀寫分離等技術(shù)來(lái)解決,如圖2所示。
2 中小企業(yè)應(yīng)用程序的設(shè)計(jì)模式
設(shè)計(jì)模式是軟件開發(fā)人員在軟件開發(fā)過(guò)程中面臨的一般問(wèn)題的解決方案。它是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過(guò)分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)??蚣苁且环N相對(duì)固定的設(shè)計(jì)模式是可重用、半完成的應(yīng)用程序,使用框架可以生成專門定制的應(yīng)用程序。
2.1 基于“WEB頁(yè)面/文件”設(shè)計(jì)模式
這種設(shè)計(jì)模式下,當(dāng)客戶端通過(guò)HTTP協(xié)議,將網(wǎng)頁(yè)上暴露的商業(yè)邏輯提交至服務(wù)器時(shí),URL直接指向某個(gè)文件,然后由該文件來(lái)處理請(qǐng)求,同時(shí)將輸入?yún)?shù)提交給它,運(yùn)行結(jié)束返回響應(yīng)結(jié)果。在實(shí)踐中,我們把不同的業(yè)務(wù)處理程序放在不同的文件夾的文件中,使之與URL對(duì)應(yīng)。當(dāng)HTTP把請(qǐng)求提交至服務(wù)器時(shí),URL為:http://www.sjsyd.com/news/reader.php?id=1234.可以想象,在站點(diǎn)根目錄的news目錄下放置一個(gè)reader.php文件,同時(shí)提交給文件的id值為1234。這種設(shè)計(jì)模式在ASP、PHP處理簡(jiǎn)單業(yè)務(wù)時(shí)常見(jiàn)。