題目:從基本作起--利用三層式架構提升網路服務的品質

  走在台灣各處的老街區,常常會看到這樣的景觀:道路曲折、人車爭道、電線杆林立、雜亂的電線掠過天際;再來看看台北的信義計畫區:棋盤狀的街道、暢通無阻的行人動線、乾淨的天際線,同樣的清爽街景也可以在各地的重劃區看到。這樣不同的兩種都市景觀,決定性的關鍵就在事先規畫好的基礎建設。規畫良好的基礎建設,會事先考慮使用者的需求,並保持一定的彈性,以期能隨著需 求動態調整。重劃區事先規畫好的基礎建設走在需求之前,在人進駐後,就能夠維持乾淨清爽的市容;反觀老街區的形成歷史,因為人先群聚再逐漸往外擴散,人到哪�婺臙N到哪�堙B房子到哪�媢q線杆就到哪�堙A永遠來不及作規畫的結果,就是需求走在建設之前,市街只有愈來愈雜亂,除了「砍掉重練」,永無清淨市容可言。

  台灣各產業的電腦機房設施也與上述狀況類似,常常需求一來就立刻裝上新的軟體、架上新的伺服器、接上新的防火牆,根本來不及考慮以後的擴充性、相容性,當業務量日漸增加時,疊床架屋的機房設備,只能處在堪用狀態,甚至變成經營績效無法提升的原因。

  在web時代的今日,企業體無論對內、對外的網路工作負載均大幅增加,資訊服務的需求也日新月異,舊日電腦機房「需求先於建設」的思維必須全面扭轉,更新成「在需求發生前先建立基本架構」,先在資料中心建立一個可以動態成長的網路基本架構,才能快速因應web時代的各式網路需求。這種網路架構當然必須是一個快速、穩定、可以動態成長的架構,在硬體部分必須考慮網路工作負載平衡及網路設備的容錯、備援;在軟體方面,應用程式是否能依照三層式架構的原則撰寫,則是理想網路基本架構的重要基礎。若能在三層式架構下,配合上理想的網路硬體架構,將讓應用程式如虎添翼、網路服務品質大幅提升。本文的目的是讓讀者瞭解如何利用三層式軟體架構及理想的網路硬體架構來全面提升網路服務的品質。

  若從使用電腦的歷史沿革來看,資訊系統提供服務的方式逐漸改變。剛開始電腦化的時候,所有服務傾向於由一台主機直接完成。例如圖書館查詢書籍目錄的資訊系統,就裝在一台主機上面,需要查書的人,必須到那台主機前面,用鍵盤、螢幕和主機溝通來查閱書籍資料。有了網路之後,客戶-伺服器架構(client-server,或說兩層式架構、主從式架構)出現了,這種架構可以讓使用者透過網路從遠端拿到服務。通常在客戶端的主機上,會需要裝置客戶端軟體,執行這個軟體就可以從伺服器端的資料庫讀取或寫入資料。兩層式架構有些缺點,一是所有的營運邏輯(business logic)都放在客戶端軟體上,伺服器端通常只放資料庫。這種架構只要從客戶端軟體發動就可直接至資料庫存取資料,若有人模擬原客戶端軟體的動作,即可惡意操作資料庫,因此安全性不佳。二是這樣的設計使得客戶端和伺服器端的網路流量需求很高,在內部網路使用勉強可行,但當跨Internet使用時(例如分公司的員工連回總公司)頻寬的需求量太大。

  為了改善兩層式架構的缺點,出現了三層式架構,將兩層式架構中客戶端軟體從資料庫存取資料的動作拉回伺服器端來做,再加上一個介面讓客戶端用來操作伺服器提供的服務,現在這個介面通常web化,使用者用瀏覽器連上伺服器端的網頁伺服器來取得服務。三層式架構的三層是哪三層呢?一是展示層(presentation),或說使用者介面層,通常由網頁伺服器擔任。第二層是營運邏輯層(business logic),或說應用層、AP層,負責從資料庫取出資料,整合後傳遞給網頁伺服器供使用者使用;或是接收使用者輸入的資料,整合後寫進資料庫。第三層是資料層(data),通常是SQL、Oracle、MySQL這類的資料庫。

  從軟體設計的角度來看,軟體模組化愈徹底愈好。模組介面定義愈明確、模組之間關係愈簡單,模組化就愈徹底。這樣的軟體開發時容易分工,且每個模組可以分別測試、除蟲,比較有效率。前述的三層式架構有定義清楚的「模組化」,這三層分別負責什麼事定義得很清楚。使用者介面層一方面和使用者溝通,一方面去存取AP層,不會直接去存取資料庫。AP層則是一邊和使用者介面層溝通,另一邊和資料層溝通,不會直接和使用者溝通。資料層更簡單,只和AP層溝通。綜上所述,從軟體設計的角度來看,三層式架構是較有效率的架構。此外,所有軟體最終都要跑在硬體上才能發揮效力,三層式架構讓軟體更容易和硬體配合以增加網路系統的服務品質,若有所謂的理想網路架構,乾淨俐落的三層式軟體架構是其基礎。

  到底理想的網路基本架構應該符合哪些要求?在這�媯妒抶桮萓^答這個問題。網路提供服務時,一要考慮「速度」也就是反應是否迅速、二要確定「可靠」、三是方便「維修」、四看是否容易「擴充」、五要有容許更動的「彈性」。商用網路服務的良窳對企業經營影響甚巨,若是網路服務效能差速度慢,甚至服務時常當機、資料莫名消失,一定會損失慘重,所以理想的網路基本架構一定要迅速、可靠。理想的網路基本架構,也必須讓機器可以部份下線,在不影響服務的前提下方便維修。網路需求日新月異,理想的網路基本架構必須具有「彈性」,能在不大幅更動既有架構的前提下容許作部分修改。而當公司業務量增加時,網路提供的服務是否能隨之「擴充」也是理想網路基本架構必須考慮的重點。這樣的理想網路服務必須有適當的三層式軟體架構搭配上合適的硬體架構,才能夠完美達成。

  三層式架構對應到硬體上的原則很簡單:每一層都使用一組多台伺服器來作服務就對了。但若要達到上述理想基本架構的五個要求,就必須將伺服器負載平衡與容錯、備援的功能考慮進去。圖1是一個較理想的網路基本架構範例。

  在此範例中使用者介面層運用多台伺服器,並由LB1(兩台HA模式)提供此層的伺服器負載平衡與容錯功能。AP層亦有多台伺服器,由LB2(兩台HA模式)提供AP層的負載平衡與容錯功能。資料庫方面,則按照資料屬性的不同分成多組,例如人事資料一組、產品資料一組、客戶管理資料一組等等。

  使用者介面層及AP層的多台伺服器搭配伺服器負載平衡設備,可以在連線忙碌時合理分配工作負載,有效利用伺服器容量,加快伺服器反應速度。伺服器負載平衡設備容錯的功能亦可避開伺服器單機故障的困擾,如此伺服器的服務就不會中斷。每組資料庫都應該設置完善的資料備份機制,甚至可以選用資料庫廠商提供的備援或是cluster機制,更提升可靠度。這個範例同時使用多台伺服器服務客戶端,網路服務「速度」自然提升,再加上伺服器負載平衡器的容錯功能及資料庫的備援機制,整體網路服務的「可靠度」大增。此外這個架構在有「維修」需求時,隨時可以把機器一台一台下線維修,服務不需停頓。因為應用程式已經依照三層式架構的想法設計,任一層的內部修改,都可以盡量不影響其他層,如此維持了軟體修改的彈性。這樣的架構也可以在業務量增加的時候隨時在任一層增加伺服器,擴充十分方便。

  這種快速、可靠、方便維修、具有修改的彈性並且容易擴充的網路基本架構,能讓網路整體服務品質提升。最棒的是,這會是一個能夠伴隨著企業一起成長的網路架構。

  筆者在工作上經常遇到有伺服器負載平衡與容錯需求的客戶。例如某500大製造業的內部網路,在員工登入時,將五台伺服器IP全部列出,由員工自行選擇登入哪台伺服器。有趣的是,大多數的員工都選擇登入前二台,造成後面三台伺服器的閒置及前二台的忙碌工作負載,於是客戶希望能有自動的伺服器工作負載平衡設備,以期能有效利用全部的伺服器。而某行動通訊服務平台業者,則因業務量持續擴充需要增加新的伺服器,因此需要借助伺服器負載平衡設備整合新舊二台伺服器的服務容量,並維持服務不中斷。其實這二個客戶在建設資料中心的網路基本架構時,若能先將伺服器負載平衡設備置入,所有問題皆可迎刃而解,因為伺服器負載平衡設備具有自動分配工作負載及容錯的功能,也可以讓新增伺服器與負載平衡設備直接連結上線。

  幸運的是上述二個客戶的軟體架構都已是三層式架構,只要修正網路硬體設備即可滿足需求;可惜的是,許多有同樣需求的客戶,往往因為軟體設計時未將應用程式好好分層,將所有的功能簡單的放在同一台伺服器,以至有擴充、備援需求時,面臨無法解決的困境。更遺憾的是這樣的不分層架構會減低網路應用程式的效能及可靠性。其實若能在一開始就將應用程式作三層式架構的設計,即可輕鬆擁有理想的網路服務。

  其實三層式架構的軟體設計與實作並不困難,只要考慮兩個大原則即可:一、資料要放在可被共享的地方,例如就放在資料庫裡或是共用的網路磁碟上。二、要使用可以跨不同AP主機運作的同步機制。

  若能在網路應用程式開發的初期,即依照三層式架構的原則設計軟體,並搭配具有伺服器負載平衡功能的硬體架構,就可以輕鬆獲得可靠且快速的網路服務,更棒的是,這個從基本作起的理想網路架構可以輕鬆的維修、擴充,並在使用需求改變時,擁有修改服務的彈性。這個動態成長的網路基本架構,可以一一滿足企業不同階段的需求。

 
     
版權所有盒子軟體股份有限公司