如何在三層架構中使用VLAN或VPC保護應用?
通過VPC實現網絡隔離能在安全性方面帶來很多好處,例如實現內部協作以及妥善存儲敏感信息。
在開發工作方面,網絡隔離還可用于實現多層Web應用程序的部署。通過對應用進行分層,我們可以將能夠以及不能訪問公共互聯網的應用劃分為不同的片段,例如通常可以通過這種方式將數據庫層與公共互聯網隔離,同時依然可以從上層拉取補丁和軟件更新,而不需要直接訪問公共互聯網。除了減小攻擊面,這種做法還有助于實現多區域部署。
延伸閱讀,了解Akamai cloud-computing
我們可以通過多種方式來運行多層應用,通常只需要依賴一些最基礎的形式即可獲得最大化的可擴展性、安全性以及可靠性。三層架構是一種最常見的設計形式,這種形式在云端環境中尤為常見。
三層應用程序通常由三個層組成,這些層往往位于不同服務器上,能夠分別以高度獨立的方式開發和維護。這三層分別是:
- 表示層:管理用戶和應用程序間通信的外部接口,通常由Web服務器組成,運行HTML和Web開發代碼。
- 應用程序層:一種自定義應用程序,提供了必要的業務邏輯,借此將應用程序“黏合”在一起。
- 數據層:數據庫系統,用于存儲和檢索應用程序中使用的數據。
這三層內容作為獨立的服務,需要通過基于網絡的API進行通信。出于安全和性能方面的考慮,應用程序層和數據層通常需要位于同一個本地網絡中,并且需要放置在同一個防火墻之后,但每一層的分離也使得我們可以將每個組件部署在不同硬件上,甚至部署到不同的地理位置。實際可以實現的靈活性主要取決于應用程序的具體需求。
下圖展示了現實世界中一個最基礎的三層Web應用程序。表示層的Web服務器在瀏覽器窗口中為用戶提供了交互界面;另一端的數據層則是一個數據庫,該數據庫可以是一個單獨的系統,或是在網絡中用一個單一實體所代表的集群。數據庫層方面流行的開源選項包括MySQL、MariaDB、PostgreSQL for SQL、MongoDB以及Cassandra for NoSQL等。
圖1:三層架構可將Web應用程序拆分為表示層、應用程序層和數據層
Web服務器和數據庫之間還有應用程序層,我們的大部分開發工作可能都是圍繞這里進行的。應用程序層包含供應用程序實現目標所需的自定義代碼和業務邏輯。在前端,Web服務器會將查詢發送給應用程序層,隨后應用程序層會響應Web服務器,并由Web服務器設置數據格式隨后展示給用戶。在后端,應用程序層將查詢數據庫,接收數據,隨后處理收到的數據,產生用戶需要的信息或結果。
作為一個非常簡單的例子,我們可以將數據庫想象成存儲了公司銷售記錄的記錄冊。用戶輸入請求,希望得到一段時間內某一特定商品在特定地點的平均日銷量。Web服務器會將請求發送給應用程序層,應用程序層構造數據庫查詢,接收原始數據,執行必要的計算,隨后將響應發送回Web服務器。
圖2:用戶向表示層請求一系列信息,應用程序層可將請求轉換為數據庫查詢
對于應用程序層來說,Apache Web服務器可能是最方便的表示層解決方案,而MongoDB可能是最方便的數據層解決方案。而應用程序層的自定義代碼通常會使用Python、PHP或Ruby等語言編寫。并且在一些現成的編程框架幫助下,我們可以更高效的開始編寫自己的代碼,例如Python開發可選擇Django,Ruby開發可選擇Rails,PHP開發可選擇Symfony。
理論上,應用程序層可以和表示層結合在一起,為此只需要向Web服務器提供直接查詢數據庫所需的必要代碼,但對于大多數復雜的業務邏輯來說,這種做法并不現實,并且也抵消了應用程序劃分所帶來的好處。
上文提到的“好處”中最重要的一點是:可以減小攻擊面從而提高安全性。如圖1所示,三層解決方案最大限度減少了必須放置在防火墻之外的應用程序組件。Web服務器可以通過安全的API進行通信,其他活動都發生在防火墻內部,更重要的是,都發生在私有地址空間中,因此無法通過互聯網訪問,這樣即可遏制包括SQL注入在內的很多隱患,畢竟SQL注入已經是最常見,也最具破壞性的漏洞。好在這些隱患通常可以通過對數據庫進行隔離和保護所有直接通信等方式加以遏制。
三層應用程序帶來的另一個好處是可靠性。當每一層都運行在單獨的服務器上,運行在不同的物理硬件,甚至在完全不同的數據中心內運行時,一層出現的故障就不太可能影響到其他層。這還有助于進一步提高可擴展性。因為這些獨立運行的組件也可以獨立進行擴展。舉例來說,如果數據庫訪問遇到性能瓶頸,即可向數據庫集群添加更多節點,這一過程對整體運行的影響也是最小的。
三層方法還有助于優化開發流程。連接各層的API以一種支持高效分工的方式將不同組件分開,Web開發者和管理員可以操作和管理Web服務器,數據庫開發者和管理員可以運行數據庫系統。在這兩者之間,精通應用程序層所用框架技術的專家可以只專注于應用程序代碼。例如在DevOps場景中,應用程序開發者可以用脫機的方式構建并測試新版應用程序代碼,并在保證對運行只產生最小影響的前提下輕松更改應用代碼。
如果你要著手開發Web應用程序,可以從一開始就考慮采用三層架構。在當今的容器和云環境中,我們可以很容易地將不同組件分離到不同系統中,而這樣做的好處也是很明顯的:輕松快速地構建出更可靠、更安全、可擴展性更高的應用程序。
這篇文章的內容感覺還行吧?有沒有想要立即在 Linode 平臺上親自嘗試一下?別忘了,現在注冊可以免費獲得價值 100 美元的使用額度,快點自己動手體驗本文介紹的功能和服務吧↓↓↓
出海云服務,選擇Akamai Linode!
歡迎關注Akamai,第一時間了解高可用的MySQL/MariaDB參考架構,以及豐富的應用程序示例。