Web 應(yīng)用程序架構(gòu):最新指南
當(dāng)用戶登錄到臺(tái)式機(jī)/筆記本電腦或移動(dòng)設(shè)備,打開瀏覽器并鍵入網(wǎng)站名稱時(shí),瀏覽器會(huì)顯示所需信息,用戶會(huì)在網(wǎng)站上執(zhí)行操作。你有沒有想過計(jì)算機(jī)如何檢索這些信息以及在后臺(tái)發(fā)生了什么?它是一種底層 Web 應(yīng)用程序架構(gòu),使此過程成為可能。在本文中,您將了解什么是 Web 應(yīng)用程序架構(gòu)、Web 應(yīng)用程序架構(gòu)圖的外觀以及如何為 Web 應(yīng)用程序設(shè)計(jì)正確的架構(gòu)。
Web 應(yīng)用程序架構(gòu)概述
Web 應(yīng)用程序架構(gòu)展示了包含所有軟件組件(例如數(shù)據(jù)庫、應(yīng)用程序和中間件)以及它們?nèi)绾蜗嗷ソ换サ牟季?。它定義了數(shù)據(jù)如何通過 HTTP 傳遞,并確保客戶端服務(wù)器和后端服務(wù)器能夠理解。此外,它還確保所有用戶請(qǐng)求中都存在有效數(shù)據(jù)。它創(chuàng)建和管理記錄,同時(shí)提供基于權(quán)限的訪問和身份驗(yàn)證。選擇正確的設(shè)計(jì)決定了您公司的發(fā)展、可靠性和互操作性以及未來的 IT 需求。因此,了解構(gòu)成 Web 應(yīng)用程序架構(gòu)的組件非常重要。
Web 應(yīng)用程序架構(gòu)組件
通常,基于 Web 的應(yīng)用程序架構(gòu)包括三個(gè)核心組件:
1) Web 瀏覽器:瀏覽器或客戶端組件或前端組件是與用戶交互、接收輸入并管理表示邏輯同時(shí)控制用戶與應(yīng)用程序交互的關(guān)鍵組件。如果需要,也會(huì)驗(yàn)證用戶輸入。
2) Web 服務(wù)器: Web 服務(wù)器也稱為后端組件或服務(wù)器端組件,通過將請(qǐng)求路由到正確的組件并管理整個(gè)應(yīng)用程序操作來處理業(yè)務(wù)邏輯和處理用戶請(qǐng)求。它可以運(yùn)行和監(jiān)督來自各種客戶端的請(qǐng)求。
3)數(shù)據(jù)庫服務(wù)器:數(shù)據(jù)庫服務(wù)器為應(yīng)用程序提供所需的數(shù)據(jù)。它處理與數(shù)據(jù)相關(guān)的任務(wù)。在多層架構(gòu)中,數(shù)據(jù)庫服務(wù)器可以在存儲(chǔ)過程的幫助下管理業(yè)務(wù)邏輯。
什么是三層架構(gòu)?
在傳統(tǒng)的 2 層架構(gòu)中,有兩個(gè)組件,即客戶端系統(tǒng)或用戶界面和通常是數(shù)據(jù)庫服務(wù)器的后端系統(tǒng)。這里的業(yè)務(wù)邏輯被合并到用戶界面或數(shù)據(jù)庫服務(wù)器中。2 層架構(gòu)的缺點(diǎn)是隨著用戶數(shù)量的增加,性能會(huì)下降。此外,數(shù)據(jù)庫與用戶設(shè)備的直接交互也引發(fā)了一些安全問題。鐵路預(yù)訂系統(tǒng)和內(nèi)容管理系統(tǒng)是通常使用此架構(gòu)構(gòu)建的幾個(gè)應(yīng)用程序。
當(dāng)談到 3 層架構(gòu)時(shí),有三層:
- 表現(xiàn)層/客戶層
- 應(yīng)用層/業(yè)務(wù)層
- 數(shù)據(jù)層
在此模型中,中間服務(wù)器接收客戶端請(qǐng)求并通過與應(yīng)用業(yè)務(wù)邏輯的從屬服務(wù)器協(xié)調(diào)來處理它們。客戶端和數(shù)據(jù)庫之間的通信由中間應(yīng)用層管理,從而使客戶端能夠訪問來自不同 DBMS 解決方案的數(shù)據(jù)。
3 層架構(gòu)更安全,因?yàn)榭蛻舳瞬恢苯釉L問數(shù)據(jù)。在多臺(tái)機(jī)器上部署應(yīng)用程序服務(wù)器的能力提供了更高的可伸縮性、更好的性能和更好的重用性。您可以通過獨(dú)立縮放每個(gè)項(xiàng)目來水平縮放它。您可以將核心業(yè)務(wù)從數(shù)據(jù)庫服務(wù)器中抽象出來,高效地進(jìn)行負(fù)載均衡。當(dāng)所有數(shù)據(jù)都通過應(yīng)用程序服務(wù)器時(shí),數(shù)據(jù)完整性得到改善,應(yīng)用程序服務(wù)器決定數(shù)據(jù)應(yīng)該如何訪問以及由誰訪問。因此,管理層的變更既簡(jiǎn)單又具有成本效益??蛻舳藢涌梢允鞘菘蛻舳耍@意味著硬件成本會(huì)降低。這種模塊化模型允許您修改單個(gè)層而不影響其余組件。
現(xiàn)代 Web 應(yīng)用程序架構(gòu)的層次
構(gòu)建分層的現(xiàn)代 Web 應(yīng)用程序架構(gòu)可幫助您識(shí)別應(yīng)用程序每個(gè)組件的角色,并輕松地對(duì)相應(yīng)層進(jìn)行更改,而不會(huì)影響整個(gè)應(yīng)用程序。它使您能夠輕松地編寫、調(diào)試、管理和重用代碼。
Web 應(yīng)用架構(gòu)的三層:
- 表現(xiàn)層/客戶層
- 應(yīng)用層/業(yè)務(wù)邏輯層
- 數(shù)據(jù)層
這是一個(gè)額外的網(wǎng)絡(luò)應(yīng)用程序?qū)哟谓Y(jié)構(gòu)圖,供您參考:
應(yīng)用層:Web 服務(wù)器
什么是網(wǎng)絡(luò)服務(wù)器?簡(jiǎn)而言之,網(wǎng)絡(luò)服務(wù)器運(yùn)行一個(gè)或多個(gè)網(wǎng)站或網(wǎng)絡(luò)應(yīng)用程序。Web 服務(wù)器使用超文本傳輸協(xié)議 (HTTP) 以及其他協(xié)議來通過瀏覽器偵聽用戶請(qǐng)求。它通過應(yīng)用業(yè)務(wù)邏輯并將請(qǐng)求的內(nèi)容交付給最終用戶來處理它們。
Web 服務(wù)器可以是硬件設(shè)備或軟件程序。
- 硬件 Web 服務(wù)器:連接到 Internet 的計(jì)算機(jī)設(shè)備,包含 Web 服務(wù)器軟件和 Web 應(yīng)用程序組件,例如圖像、HTML 文檔、JS 文件和 CSS 樣式表。
- 軟件 Web 服務(wù)器:這是理解 URL 和 HTTP 協(xié)議的軟件。用戶可以通過域名訪問它來接收請(qǐng)求的內(nèi)容。
靜態(tài) Web 服務(wù)器將內(nèi)容按原樣交付給瀏覽器,而動(dòng)態(tài) Web 服務(wù)器會(huì)在將數(shù)據(jù)交付給瀏覽器之前更新數(shù)據(jù)。
Apache 是 Apache Software Foundation 推出的一種流行的開源 Web 服務(wù)器。它由 Robert McCool 于 1995 年使用 C 和 XML 開發(fā)。Apache 基于進(jìn)程驅(qū)動(dòng)模型,其中每個(gè)請(qǐng)求都會(huì)導(dǎo)致創(chuàng)建一個(gè)新線程。Apache 的模塊化設(shè)計(jì)使您可以輕松擴(kuò)展單個(gè)資源。使用最少的配置,您甚至可以管理大量流量。它適用于 MacOS、Windows 和 Linux 環(huán)境。但是,Linux 是 Apache 最喜歡的環(huán)境。
雖然它使用文件系統(tǒng)來處理靜態(tài)內(nèi)容,但動(dòng)態(tài)內(nèi)容是在服務(wù)器內(nèi)處理的。使用 .htaccess 文件,您可以對(duì)服務(wù)器設(shè)置執(zhí)行其他配置。安全性很好。它通過 IRC、Stack Overflow 和郵件列表提供支持。
NGINX 是另一種流行的 Web 服務(wù)器,通常發(fā)音為“Engine X”。NGINX 由 Igor Sysoev 于 2004 年開發(fā),迅速流行起來。它在事件驅(qū)動(dòng)模型上運(yùn)行,其中數(shù)千個(gè)請(qǐng)求在單個(gè)線程中處理,以最少的資源提供更多。它使用 PHP 提供靜態(tài)資源,提供靜態(tài)內(nèi)容的速度比 Apache 快 2.5 倍。動(dòng)態(tài)內(nèi)容通過外部進(jìn)程提供。在解釋請(qǐng)求時(shí),Apache 傳遞文件系統(tǒng)位置,而 NGINX 傳遞 URI。此功能將 NGINX 功能擴(kuò)展為負(fù)載平衡器、HTTP 緩存和代理服務(wù)器。
雖然它支持基于 Unix 的操作系統(tǒng),但 Windows 兼容性有限。您不能進(jìn)行其他配置。較小的代碼庫提供更好的安全性。不支持動(dòng)態(tài)模塊。除了郵件列表和 IRC,論壇也可用。
NGINX 比 Apache 有優(yōu)勢(shì),因?yàn)樗瓤梢杂米?Web 服務(wù)器,也可以用作代理服務(wù)器。在單個(gè)線程中處理數(shù)千個(gè)請(qǐng)求的事件驅(qū)動(dòng)方法可提供更高的性能、速度和成本效益。
表示層:客戶端組件(前端)
Web 應(yīng)用程序體系結(jié)構(gòu)的客戶端組件使用戶能夠通過瀏覽器與服務(wù)器和后端服務(wù)進(jìn)行交互。代碼駐留在瀏覽器中,接收請(qǐng)求并向用戶顯示所需信息。這就是 UI/UX 設(shè)計(jì)、儀表板、通知、配置設(shè)置、布局和交互元素發(fā)揮作用的地方。
以下是一些最常用的前端技術(shù):
HTML
HTML 或超文本標(biāo)記語言是一種流行的標(biāo)準(zhǔn)標(biāo)記語言,它使開發(fā)人員能夠使用一系列頁面元素來構(gòu)建網(wǎng)頁內(nèi)容。由 Tim Berners-Lee 開發(fā)并于 1993 年發(fā)布的 HTML 迅速發(fā)展并成為全球標(biāo)準(zhǔn)標(biāo)記語言。
CSS
CSS 或?qū)盈B樣式表是一種流行的樣式表語言,它使開發(fā)人員能夠?yàn)槭褂脴?biāo)記語言開發(fā)的網(wǎng)站分離網(wǎng)站內(nèi)容和布局。使用 CSS,您可以為元素定義樣式并多次重復(fù)使用它們。同樣,您可以在多個(gè)站點(diǎn)上應(yīng)用一種樣式。它簡(jiǎn)單易學(xué)。您可以為單個(gè)元素、整個(gè)網(wǎng)頁或整個(gè)網(wǎng)站應(yīng)用樣式。它也是設(shè)備友好的。
瀏覽器兼容性和安全性是引起關(guān)注的兩個(gè)方面。同樣,不同版本的 CSS 也會(huì)造成混淆。建議開發(fā)人員在對(duì)設(shè)計(jì)進(jìn)行任何更改之前檢查兼容性。
JavaScript
JavaScript 或 JS 是最流行的客戶端編程語言,近來超過 90% 的網(wǎng)站都在使用它。它由 Netscape 的 Brendan Eich 于 1995 年設(shè)計(jì)。JavaScript 使用簡(jiǎn)單易學(xué)的語法。該語言非常流行,以至于每個(gè)瀏覽器都帶有一個(gè) JS 引擎來在設(shè)備上運(yùn)行 JavaScript 代碼??梢院苋菀椎卦谌魏尉W(wǎng)頁上插入 JS 代碼,這使得它具有高度的互操作性。它允許您創(chuàng)建豐富的界面以提供更好的 UI/UX 體驗(yàn)。作為客戶端,JS 也減少了服務(wù)器負(fù)載。
但是,開發(fā)人員應(yīng)該注意安全性,因?yàn)榇a是在客戶端執(zhí)行的,有時(shí)可能會(huì)被黑客利用。
React
React 是近年來流行的開源 JavaScript。它由 Facebook 的 Jordan Walke 于 2013 年開發(fā)。React 的優(yōu)勢(shì)包括使開發(fā)人員能夠以最少的代碼和工作量輕松創(chuàng)建高質(zhì)量的動(dòng)態(tài) Web 應(yīng)用程序。
ReactJS 易于學(xué)習(xí)和使用。有大量的文檔和大量方便的工具可供開發(fā)人員使用。代碼是可重用的。ReactJS 使用虛擬 DOM,這意味著相關(guān)元素會(huì)在發(fā)生更改時(shí)更新,而不是重寫整個(gè) DOM 樹。它提高了效率并優(yōu)化了內(nèi)存使用。ReactJS 使用單向數(shù)據(jù)流,這意味著對(duì)“子”元素所做的更改不會(huì)影響“父”元素。該代碼易于測(cè)試且對(duì) SEO 友好。
不利的一面是,ReactJS 開發(fā)環(huán)境是高度動(dòng)態(tài)的,這意味著開發(fā)人員應(yīng)該主動(dòng)監(jiān)控變化并快速適應(yīng)新技能以利用 React。此外,React 技術(shù)正在迅速發(fā)展,但是文檔無法跟上這個(gè)步伐。一個(gè)值得關(guān)注的關(guān)鍵領(lǐng)域是 ReactJS 專注于 UI 部分,您需要依賴其他庫來實(shí)現(xiàn)客戶端功能。
Vue.js
Vue.js 是 Evan You 于 2014 年編寫的開源 JavaScript 框架。該框架使開發(fā)人員能夠輕松地為 Web、桌面和移動(dòng)設(shè)備構(gòu)建 UI 界面。Vue.js 附帶了滿足基本編程需求的便捷工具。該工具對(duì)于下載和安裝來說是輕量級(jí)的。它易于學(xué)習(xí)和使用。它使用虛擬 DOM,因此當(dāng)用戶與元素交互時(shí),瀏覽器不必渲染整個(gè)頁面,只需渲染元素。速度和性能都不錯(cuò)。它使用雙向數(shù)據(jù)綁定模型,使您可以更有效地跟蹤數(shù)據(jù)和更新相關(guān)組件。這些組件是可重復(fù)使用的。它可以輕松地與現(xiàn)有應(yīng)用程序集成。該文檔簡(jiǎn)明扼要且結(jié)構(gòu)合理。社區(qū)支持很好。
雖然社區(qū)支持很好,但 Vue.js 主要由阿里巴巴和小米等中國(guó)公司采用。因此,論壇和討論通常以中文進(jìn)行,這給說英語的人造成了語言障礙。該工具包適合基本項(xiàng)目,但對(duì)大型項(xiàng)目的支持有限。它提供的靈活性也會(huì)對(duì)大型項(xiàng)目造成質(zhì)量問題。GitLab、阿里巴巴和 Adobe 是一些使用 Vue.js 的熱門公司。
Angular.js
Angular 是 Google 于 2016 年開發(fā)的開源 Web 應(yīng)用程序框架。它完全重寫了 Angular.js 框架。截至目前,它是市場(chǎng)上最受歡迎的前端開發(fā)框架之一。
NGModules 是 Angular 的構(gòu)建塊,提供開發(fā)應(yīng)用程序的所有功能,例如組件、模塊、模板、指令、服務(wù)和依賴注入、路由等。它可以幫助開發(fā)人員快速構(gòu)建原型。它使用純 HTML 模板。由于依賴注入架構(gòu)風(fēng)格,測(cè)試快速而簡(jiǎn)單。
Angular 使用雙向數(shù)據(jù)綁定,這使得 DOM 操作變得簡(jiǎn)單快捷。CPU 性能增強(qiáng)功能使其成為大型應(yīng)用程序的理想選擇。它帶有各種開箱即用的插件和工具。Angular 來自 IT 巨頭谷歌,享有充滿活力的社區(qū)支持。受歡迎程度和市場(chǎng)價(jià)值意味著您會(huì)在市場(chǎng)上找到高技能的 Angular 專業(yè)人員。
然而,分層結(jié)構(gòu)有時(shí)會(huì)使調(diào)試成為一項(xiàng)挑戰(zhàn)??刂品崔D(zhuǎn)、依賴查找和依賴注入等概念需要陡峭的學(xué)習(xí)曲線。你需要在機(jī)器上安裝 JavaScript 才能運(yùn)行 Angular。雖然雙向數(shù)據(jù)綁定是一項(xiàng)很棒的功能,但它可能會(huì)導(dǎo)致較舊和遺留設(shè)備的性能下降。將遺留基礎(chǔ)設(shè)施與 Angular 集成也是一個(gè)問題。
如果你想從這些前端開發(fā)工具中挑選出最好的,強(qiáng)烈推薦 React 和 Vue.js。React 是一個(gè)輕量級(jí)的工具,具有最好的開發(fā)者功能,使您能夠快速構(gòu)建高質(zhì)量的軟件。
Vue.js 是一種面向視圖的產(chǎn)品,輕量級(jí)、易于使用,并帶有一組強(qiáng)大的開發(fā)人員工具。要開始使用,您只需要簡(jiǎn)單地加載界面并添加 JavaScript。
應(yīng)用層:服務(wù)器端組件(后端)
服務(wù)器端組件是 Web 應(yīng)用程序體系結(jié)構(gòu)的關(guān)鍵組件,它接收用戶請(qǐng)求、執(zhí)行業(yè)務(wù)邏輯并將所需數(shù)據(jù)傳送到前端系統(tǒng)。它包含服務(wù)器、數(shù)據(jù)庫、Web 服務(wù)等。
以下是一些最常用的服務(wù)器端技術(shù):
Node.js
Node.js 是由 Ryan Dahl 開發(fā)的開源跨平臺(tái)運(yùn)行時(shí)環(huán)境。它基于 Google Chrome V8 Engine 構(gòu)建,用于運(yùn)行網(wǎng)絡(luò)和服務(wù)器端應(yīng)用程序,并于 2009 年發(fā)布。開發(fā)人員使用 JavaScript 構(gòu)建 node.js 應(yīng)用程序,并使用 Windows、macOS 和 Linux 平臺(tái)在 node.js 運(yùn)行時(shí)運(yùn)行它們。
Node.js 非常受歡迎,因?yàn)樗峁┝素S富的 JavaScript 模塊庫,使開發(fā)人員能夠快速構(gòu)建高質(zhì)量的應(yīng)用程序。Node.js 不緩沖數(shù)據(jù)并超快地執(zhí)行代碼。它是事件驅(qū)動(dòng)和異步的,在單個(gè)線程上運(yùn)行,同時(shí)具有高度可擴(kuò)展性。Node.js 最適合數(shù)據(jù)流、數(shù)據(jù)密集型、I/O 綁定和基于 JSON-API 的應(yīng)用程序。Paypal、Uber、eBay 和 GoDaddy 都是由 Node.js 提供支持的一些流行應(yīng)用程序。它不適合 CPU 密集型應(yīng)用程序。
Java
Java 是有史以來最流行和最有效的編程語言之一。Java 由 James Gosling 于 1995 年編寫,是一種面向?qū)ο蠛突陬惖木幊陶Z言,使開發(fā)人員能夠使用 Java 虛擬機(jī) (JVM) 環(huán)境編寫代碼并在任何平臺(tái)上運(yùn)行它。這意味著您不需要在目標(biāo)機(jī)器上安裝 Java。該語言易于學(xué)習(xí)、編碼、編譯和調(diào)試。由于與平臺(tái)無關(guān),Java 程序的構(gòu)建和運(yùn)行具有成本效益。利用 OOPS 概念,您可以在其他程序中重用對(duì)象。由于它不適用于顯式指針,因此避免了未經(jīng)授權(quán)的內(nèi)存訪問。它支持多線程、可移植性、自動(dòng)垃圾收集、分布式網(wǎng)絡(luò)等。
不利的一面是,Java 需要大量的內(nèi)存空間。由于 JVM 抽象,程序運(yùn)行速度也較慢。也沒有備份。UX/UI 沒有吸引力。然而,對(duì)于使用 Java 開發(fā) Web 應(yīng)用程序架構(gòu)的服務(wù)器端組件,利大于弊。
Python
Python 是由 Guido Van Rossum 編寫并于 1991 年發(fā)布的一種開源高級(jí)編程語言。如今,它是一種快速發(fā)展且流行的編程語言,并且是用 Java 構(gòu)建 Web 應(yīng)用程序架構(gòu)的有力替代方案。它易于學(xué)習(xí)和開發(fā),并且功能豐富。這種動(dòng)態(tài)類型語言非常靈活,適用于小型和大型 Web 應(yīng)用程序項(xiàng)目以及移動(dòng)應(yīng)用程序、視頻游戲、AI 編程等各種領(lǐng)域。它允許您用更少的代碼做更多的事情,這意味著您可以快速構(gòu)建和測(cè)試原型,從而提高生產(chǎn)率。Python 提供了一個(gè)廣泛的庫,其中包含幾乎所有類型程序的代碼。憑借其充滿活力的社區(qū),支持始終可用。
但是,與現(xiàn)代語言相比,Python 速度較慢。線程問題是另一個(gè)問題。Python 不適用于移動(dòng)應(yīng)用程序。谷歌、Spotify、Instagram 和 Facebook 是一些使用 Python 的流行 IT 巨頭。
PHP Laravel
PHP Laravel 是一個(gè) PHP 框架,可幫助開發(fā)人員輕松構(gòu)建自定義 Web 應(yīng)用程序。它是一個(gè)開源框架,在其他 PHP 框架中非常流行。PHP Laravel 是一個(gè)基于 MVC(模型、視圖和控制器)的框架。
Laravel 語法優(yōu)雅且富有表現(xiàn)力。憑借豐富的內(nèi)置功能和結(jié)構(gòu),開發(fā)人員可以輕松編寫代碼并更快地部署應(yīng)用程序。它提高了性能和速度。文檔很好。PHP Laravel 的一個(gè)重要優(yōu)勢(shì)是它的自動(dòng)化測(cè)試功能,可以幫助您在初始階段測(cè)試和調(diào)試錯(cuò)誤。自動(dòng)任務(wù)和計(jì)劃也可用。對(duì)象關(guān)系映射支持很優(yōu)雅。PHP Laravel 提供提供安全性的跨站點(diǎn)請(qǐng)求偽造令牌。它具有可擴(kuò)展性和成本效益。
但是,產(chǎn)品升級(jí)有時(shí)會(huì)產(chǎn)生問題。Laravel Composer 可以改進(jìn)。由于它是一個(gè)相對(duì)較新的產(chǎn)品,因此社區(qū)支持不是很好。PHP Laravel 最適合中小型組織。
Go
Go編程語言來自于IT巨頭谷歌,這賦予了它相當(dāng)?shù)膶?shí)力。它由 Robert Griesemer、Ken Thompson 和 Rob Pike 于 2009 年編寫。Go 也稱為 Golang。它類似于 C 語言,易于學(xué)習(xí)和構(gòu)建。由于沒有虛擬運(yùn)行時(shí),Go 代碼編譯速度更快,生成的二進(jìn)制文件也更小。它使用靜態(tài)類型和接口類型。標(biāo)準(zhǔn)庫提供一系列內(nèi)置函數(shù)以及測(cè)試支持。垃圾收集可用。與其他語言相比,并發(fā)編程很容易。
不利的一面是,庫支持不足。在某些情況下,社區(qū)支持并不受歡迎。隱式接口可能難以管理。沒有泛型,代碼的重用并不容易。
.NET
.NET 是由 Microsoft 開發(fā)并于 2001 年發(fā)布的用于桌面和 Web 應(yīng)用程序的軟件開發(fā)框架。來自IT巨頭微軟,。NET 迅速流行起來,用于開發(fā)各種軟件產(chǎn)品。
.NET 具有三種風(fēng)格:
- .NET Framework:它是第一個(gè)特定于 Windows 平臺(tái)的產(chǎn)品。
- .NET Core:.NET Core 于 2016 年作為跨平臺(tái)解決方案發(fā)布,以適應(yīng) macOS 和 Linux 平臺(tái)。
- Xamarin: Xamarin 并非由微軟開發(fā),而是在 2016 年被該公司收購(gòu)。Xamarin 擴(kuò)展了 .NET 平臺(tái)以支持原生移動(dòng)應(yīng)用程序開發(fā)。
.NET Standard 是用于 .NET Framework、.NET Core 和 Xamarin 實(shí)現(xiàn)的單個(gè)基類庫。
.NET 是一種面向?qū)ο缶幊?(OOP) 模型,使用模塊化結(jié)構(gòu),使開發(fā)人員能夠?qū)⒋a分解成更小的部分,并使用 CI/CD 管道無縫構(gòu)建和管理軟件產(chǎn)品。它提供了一個(gè)強(qiáng)大而簡(jiǎn)單的緩存系統(tǒng),可以提高速度和性能。ASP.NET 中的自動(dòng)監(jiān)控是一個(gè)額外的優(yōu)勢(shì)。Visual Studio IDE 是一個(gè)單一的 IDE,可幫助開發(fā)人員從單個(gè)窗格監(jiān)視和管理整個(gè)開發(fā)操作。由于與語言和平臺(tái)無關(guān),它允許您使用各種開發(fā)環(huán)境。代碼的部署和管理是靈活和容易的。.NET 帶有廣泛的文檔和社區(qū)支持。
但是,對(duì)象關(guān)系支持是有限的。內(nèi)存泄漏是一個(gè)在編寫應(yīng)用程序時(shí)需要特別注意的問題。嚴(yán)重依賴 Microsoft 會(huì)導(dǎo)致供應(yīng)商鎖定和更高的許可成本。.NET 最適合需要高可擴(kuò)展性和跨平臺(tái)解決方案的企業(yè)產(chǎn)品。
Ruby
Ruby 是日本的 Yukihiro Matsumoto 于 1995 年開發(fā)的一種流行的編程語言。時(shí)間效率是 Ruby 的最大優(yōu)勢(shì)之一。結(jié)合 Rails 框架,它允許開發(fā)人員快速構(gòu)建和部署應(yīng)用程序。該工具提供了一個(gè)廣泛的庫和有用的工具。它具有內(nèi)置安全性,可降低與 SQL 注入、跨站點(diǎn)腳本軟件 (XSS) 和跨站點(diǎn)請(qǐng)求偽造 (CSRF) 相關(guān)的風(fēng)險(xiǎn)。Ruby 有一個(gè)支持性的社區(qū)和良好的文檔。
雖然開發(fā)人員可以快速構(gòu)建應(yīng)用程序,但應(yīng)用程序的速度是一個(gè)問題。也就是說,這個(gè)問題主要影響大型應(yīng)用程序。中小型組織在這個(gè)領(lǐng)域沒有任何問題。
Ruby 不如 Java 或 Python 流行。出于這個(gè)原因,要為這個(gè)細(xì)分市場(chǎng)找到優(yōu)質(zhì)的專業(yè)人士并不容易。Airbnb、GitHub、Bloomberg 和 Etsy 是一些使用 Ruby 的熱門公司。
在服務(wù)端開發(fā)工具中,Node.js 和 Python 是比較推薦的。Node.js 是一種易于學(xué)習(xí)、輕量級(jí)、對(duì)開發(fā)人員友好、高度可伸縮和可擴(kuò)展的跨平臺(tái)解決方案。Python 使用簡(jiǎn)單的語法,專注于自然語言,使編寫和執(zhí)行代碼變得更容易、更快。社區(qū)也非常支持。
應(yīng)用層:應(yīng)用程序編程接口(API)
應(yīng)用程序編程接口 (API) 不是一種技術(shù),它是一種概念,使開發(fā)人員能夠訪問軟件的某些數(shù)據(jù)和功能。簡(jiǎn)單地說,它是一個(gè)讓應(yīng)用程序相互通信的調(diào)解器。它包含構(gòu)建應(yīng)用程序所需的協(xié)議、工具和子例程定義。
例如,當(dāng)您登錄某個(gè)應(yīng)用程序時(shí),該應(yīng)用程序會(huì)調(diào)用 API 來檢索您的帳戶詳細(xì)信息和憑據(jù)。應(yīng)用程序?qū)⒙?lián)系相應(yīng)的服務(wù)器以接收此信息并將此數(shù)據(jù)返回給用戶應(yīng)用程序。Web API 是通過 HTTP 協(xié)議在 Web 上可用的 API。它可以使用 .NET 和 Java 等技術(shù)構(gòu)建。
使用 API,開發(fā)人員不必從頭開始創(chuàng)建所有內(nèi)容,而是使用作為 API 公開的現(xiàn)有功能來提高生產(chǎn)力并加快上市速度。通過減少開發(fā)工作量,API 顯著降低了開發(fā)成本。它還改善了整個(gè)生態(tài)系統(tǒng)的協(xié)作和連接,同時(shí)增強(qiáng)了客戶體驗(yàn)。
有不同類型的 API:
RESTful API:輕量級(jí) JSON 格式的具象狀態(tài)傳輸 API。它具有高度可擴(kuò)展性、可靠性并提供快速性能,使其成為最受歡迎的 API。
- SOAP:簡(jiǎn)單對(duì)象訪問協(xié)議使用 XML 進(jìn)行數(shù)據(jù)傳輸。它需要更多帶寬和高級(jí)安全性。
- XML-RPC : Extensible Markup Language – Remote Procedure Calls 使用特定的 XML 格式進(jìn)行數(shù)據(jù)傳輸。
- JSON-RPC:使用JSON格式進(jìn)行數(shù)據(jù)傳輸。
應(yīng)用層:服務(wù)器實(shí)例/云實(shí)例
服務(wù)器或云實(shí)例是 Web 應(yīng)用程序架構(gòu)的重要組成部分。云實(shí)例是使用公共或私有云構(gòu)建、交付和托管并可通過 Internet 訪問的虛擬服務(wù)器實(shí)例。它用作物理服務(wù)器,可以在多個(gè)設(shè)備之間無縫移動(dòng)或在單個(gè)服務(wù)器上部署多個(gè)實(shí)例。因此,它具有高度動(dòng)態(tài)性、可擴(kuò)展性和成本效益。您可以在應(yīng)用程序不停機(jī)的情況下自動(dòng)更換服務(wù)器。使用云實(shí)例,您可以在任何環(huán)境中輕松部署和管理 Web 應(yīng)用程序。
數(shù)據(jù)層:數(shù)據(jù)庫
數(shù)據(jù)庫是 Web 應(yīng)用程序的關(guān)鍵組件,用于存儲(chǔ)和管理 Web 應(yīng)用程序的信息。使用函數(shù),您可以根據(jù)用戶請(qǐng)求搜索、過濾和排序信息,并將所需信息呈現(xiàn)給最終用戶。它們?cè)试S基于角色的訪問以維護(hù)數(shù)據(jù)完整性。
在為您的 Web 應(yīng)用架構(gòu)選擇數(shù)據(jù)庫時(shí),大小、速度、可擴(kuò)展性和結(jié)構(gòu)是需要您考慮的四個(gè)方面。對(duì)于結(jié)構(gòu)化數(shù)據(jù),基于 SQL 的數(shù)據(jù)庫是一個(gè)不錯(cuò)的選擇。它們適合以數(shù)據(jù)完整性為關(guān)鍵要求的金融應(yīng)用程序。
要處理非結(jié)構(gòu)化數(shù)據(jù),NoSQL 是一個(gè)不錯(cuò)的選擇。它適合傳入數(shù)據(jù)的性質(zhì)不可預(yù)測(cè)的應(yīng)用程序。Key Value 數(shù)據(jù)庫將每個(gè)值與一個(gè)鍵相關(guān)聯(lián),適用于存儲(chǔ)用戶配置文件、評(píng)論、博客評(píng)論等的數(shù)據(jù)庫。對(duì)于分析,寬列數(shù)據(jù)庫是一個(gè)不錯(cuò)的選擇。
先進(jìn)且可擴(kuò)展的 Web 應(yīng)用程序架構(gòu)
Web 應(yīng)用程序架構(gòu)正在不斷發(fā)展。因此,組織應(yīng)該主動(dòng)監(jiān)控這些變化并相應(yīng)地重新調(diào)整架構(gòu)。以下是一些需要檢查的趨勢(shì):
緩存系統(tǒng)
緩存系統(tǒng)是一種本地?cái)?shù)據(jù)存儲(chǔ),有助于快速訪問應(yīng)用程序服務(wù)器的數(shù)據(jù),而不是每次都聯(lián)系數(shù)據(jù)庫。在傳統(tǒng)設(shè)置中,數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中。當(dāng)用戶發(fā)出請(qǐng)求時(shí),應(yīng)用程序服務(wù)器會(huì)從數(shù)據(jù)庫中請(qǐng)求該數(shù)據(jù)并將其呈現(xiàn)給用戶。當(dāng)再次請(qǐng)求相同的數(shù)據(jù)時(shí),服務(wù)器又要進(jìn)行相同的處理,重復(fù)且耗時(shí)。通過將此信息存儲(chǔ)在臨時(shí)緩存中,應(yīng)用程序可以快速向用戶呈現(xiàn)數(shù)據(jù)。
緩存系統(tǒng)可以設(shè)計(jì)成四種模型:
- 應(yīng)用程序服務(wù)器緩存:與應(yīng)用程序服務(wù)器一起的內(nèi)存中緩存(對(duì)于具有單個(gè)節(jié)點(diǎn)的應(yīng)用程序)
- 全局緩存:所有節(jié)點(diǎn)都訪問一個(gè)緩存空間。
- 分布式緩存:緩存分布在節(jié)點(diǎn)之間,其中使用一致的哈希函數(shù)將請(qǐng)求路由到所需的數(shù)據(jù)。
- 內(nèi)容分發(fā)網(wǎng)絡(luò) (CDN):用于分發(fā)大量靜態(tài)數(shù)據(jù)。
緩存工具
Redis 和 Memcached 是兩個(gè)最流行的緩存系統(tǒng),它們具有相似的特性。然而,Redis 提供了一套豐富的工具,使其適用于執(zhí)行各種任務(wù)。另一方面,Memcached 簡(jiǎn)單易用。
AWS 的緩存系統(tǒng)稱為 AWS ElastiCache。此 Web 服務(wù)使管理員能夠擴(kuò)展和管理云中的內(nèi)存數(shù)據(jù)存儲(chǔ)服務(wù)。AWS 還提供了一個(gè)完全托管的與 Redis 兼容的內(nèi)存數(shù)據(jù)存儲(chǔ),稱為 Amazon ElastiCache for Redis,以及一個(gè)完全托管的與 Memcached 兼容的內(nèi)存數(shù)據(jù)存儲(chǔ)服務(wù),稱為 Amazon ElastiCache for Memcached。
云存儲(chǔ)(亞馬遜 S3)
在 Web 應(yīng)用程序架構(gòu)中,云存儲(chǔ)是一個(gè)顯而易見的需求。云存儲(chǔ)是將數(shù)據(jù)存儲(chǔ)在云中并通過 Internet 訪問它。云服務(wù)提供商以按使用付費(fèi)的訂閱模式提供存儲(chǔ)基礎(chǔ)設(shè)施。
由于 AWS 是最受歡迎的云服務(wù)提供商,Amazon S3 是全球 Web 應(yīng)用程序架構(gòu) AWS 環(huán)境中廣泛使用的云存儲(chǔ)解決方案。Amazon Simple Storage Service (S3) 是一種云存儲(chǔ)服務(wù),靈活、經(jīng)濟(jì)、耐用、安全,并提供高可用性和高可擴(kuò)展性。
在 AWS 中,云存儲(chǔ)單元稱為存儲(chǔ)對(duì)象的“桶”。Bucket創(chuàng)建后,部署在用戶指定的地域。部署完成并將對(duì)象添加到存儲(chǔ)桶后,用戶可以選擇存儲(chǔ)類類型以及版本控制、生命周期策略、存儲(chǔ)桶策略等功能。AWS 負(fù)責(zé)一組對(duì)象的生命周期管理,包括 IAM 策略和數(shù)據(jù)保護(hù)。
Azure 云存儲(chǔ)是 Microsoft Azure 提供的另一種流行的云存儲(chǔ)服務(wù)。Azure 存儲(chǔ)的最大優(yōu)點(diǎn)是 99.95% 的正常運(yùn)行時(shí)間和高安全性的高可用性。每月每GB 0.18美元的價(jià)格,非常劃算。Azure 附帶一整套管理訪問和開發(fā)人員工具,可幫助組織無縫協(xié)調(diào)整個(gè)業(yè)務(wù)運(yùn)營(yíng)。
Google Cloud Storage 是 Google 提供的一種云存儲(chǔ)產(chǎn)品,價(jià)格為每月每 GB 0.02 美元。它在多個(gè)地區(qū)可用,具有高耐用性并可輕松與其他 Google 服務(wù)集成。該工具附帶了很好的文檔。
CDN(云端)
內(nèi)容分發(fā)網(wǎng)絡(luò) (CDN) 是安裝在不同地理位置的服務(wù)器網(wǎng)絡(luò),可以更快更好地向用戶分發(fā)內(nèi)容。用戶的請(qǐng)求沒有聯(lián)系中央服務(wù)器,而是被路由到存儲(chǔ)內(nèi)容緩存版本的 CDN 服務(wù)器。因此,站點(diǎn)速度和性能提高,數(shù)據(jù)包丟失減少。服務(wù)器負(fù)載降低。它還可以實(shí)現(xiàn)受眾細(xì)分和高級(jí)網(wǎng)絡(luò)安全。
CloudFront 是一種流行的 Web 應(yīng)用程序架構(gòu) aws CDN 服務(wù)。它充當(dāng)分布式緩存,以提供更高的速度、更低的延遲和更好的客戶體驗(yàn)??紤]到 AWS 的全球存在,CloudFront 為用戶提供了更廣泛的地理位置。CloudFront 與其他 AWS 服務(wù)(如 Amazon EC2、AWS Lambda、Amazon CloudWatch、Amazon S3 等)很好地集成,使您的工作更加輕松。它靈活、易于設(shè)置并提供高可擴(kuò)展性。它還具有彈性服務(wù)和分析功能。您也可以控制對(duì)內(nèi)容的訪問。
Azure CDN 是來自 Microsoft Azure 云平臺(tái)的流行內(nèi)容交付網(wǎng)絡(luò),易于配置和使用,并提供低延遲。
Google 的內(nèi)容分發(fā)網(wǎng)絡(luò)稱為 Cloud CDN。它利用全球分布的邊緣服務(wù)器在使用位置緩存內(nèi)容,以高速交付內(nèi)容。
CloudFlare 是另一種流行的 CDN 服務(wù)。雖然 CloudFlare 主要提供強(qiáng)大的 DNS 服務(wù),而不是傳統(tǒng)的內(nèi)容交付網(wǎng)絡(luò),但它充當(dāng)反向代理,通過其全球數(shù)據(jù)中心網(wǎng)絡(luò)路由流量。
負(fù)載均衡器
顧名思義,負(fù)載均衡器是一種服務(wù),它通過根據(jù)可用性或預(yù)定義的策略將流量分布在不同的服務(wù)器上來平衡流量負(fù)載。當(dāng)負(fù)載均衡器收到用戶請(qǐng)求時(shí),它會(huì)根據(jù)可用性和可伸縮性檢索服務(wù)器的健康狀況,并將請(qǐng)求路由到最佳服務(wù)器。負(fù)載平衡器可以是硬件組件或軟件程序。
負(fù)載均衡可以通過兩種方式完成:
1) TCP/IP level Load Balancing : 基于DNS的負(fù)載均衡
2) App-level Load Balancing : 基于應(yīng)用負(fù)載的負(fù)載均衡
負(fù)載均衡器工具
AWS 中最初的彈性負(fù)載均衡器是AWS Classic Load Balancer。它工作在 TCP 層(第 4 層)和應(yīng)用層(第 7 層)。但是,它僅在每個(gè)實(shí)例的一個(gè)端口上轉(zhuǎn)發(fā)流量。
另一個(gè)很棒的 LB 是AWS Application Load Balancer ,它在應(yīng)用程序?qū)?(HTTP) 工作,可以在每個(gè)實(shí)例的多個(gè)端口上轉(zhuǎn)發(fā)流量。它還提供多個(gè)域名。
多個(gè)服務(wù)器
在傳統(tǒng)的網(wǎng)絡(luò)架構(gòu)中,您會(huì)看到一個(gè)網(wǎng)絡(luò)服務(wù)器和一個(gè)數(shù)據(jù)庫。Web 服務(wù)器偵聽客戶端請(qǐng)求并聯(lián)系數(shù)據(jù)庫以提供所需信息或處理業(yè)務(wù)邏輯。當(dāng)并發(fā)用戶增加時(shí),Web 服務(wù)器將耗盡資源。盡管升級(jí)服務(wù)器配置有一段時(shí)間的幫助,但它提供的功能有限,同時(shí)也會(huì)導(dǎo)致單點(diǎn)故障。部署多臺(tái)服務(wù)器是創(chuàng)建高度可擴(kuò)展的 Web 架構(gòu)的不錯(cuò)選擇。
在設(shè)計(jì)多服務(wù)器架構(gòu)時(shí),組織可以將多個(gè)操作系統(tǒng)部署服務(wù)器連接到單個(gè)數(shù)據(jù)庫或多個(gè)數(shù)據(jù)庫。但是,重要的是用適當(dāng)?shù)膬?nèi)容復(fù)制它們??梢栽谥付〞r(shí)間安排復(fù)制。
消息隊(duì)列
消息隊(duì)列是一個(gè)緩沖區(qū),它異步存儲(chǔ)消息并促進(jìn) Web 應(yīng)用程序中不同服務(wù)之間的通信。在當(dāng)今的微服務(wù)環(huán)境中,軟件是在更小的、模塊化的、獨(dú)立的構(gòu)建塊中開發(fā)的,這些構(gòu)建塊使用 RESTful API 相互通信。這些塊之間的通信使用消息隊(duì)列進(jìn)行協(xié)調(diào)。軟件組件連接到這些消息隊(duì)列的末端以發(fā)送和接收消息并處理它們。消息隊(duì)列提供細(xì)粒度的可伸縮性,簡(jiǎn)化解耦過程,并提高可靠性和性能。
Amazon Simple Queue Service (SQS) 是 Amazon 提供的完全托管的發(fā)布/訂閱 (pub/sub) 消息隊(duì)列服務(wù)。使用 AWS SQS 提供的 Web 服務(wù) API,用戶可以通過任何編程語言訪問消息。消息是異步處理的,這意味著消息在隊(duì)列中等待,應(yīng)用程序可以稍后訪問它們。
Amazon SQS 使用兩種類型的隊(duì)列:
- 先進(jìn)先出 (FIFO):消息字符串按照發(fā)送的相同順序進(jìn)行處理。它對(duì)于過程順序至關(guān)重要的操作很有用。
- 標(biāo)準(zhǔn)隊(duì)列:消息字符串保持不變,但順序可能會(huì)改變。它對(duì)于將消息分發(fā)到各個(gè)節(jié)點(diǎn)的任務(wù)很有用。
AWS SQS 支持每秒 300 條消息。每條消息都可以定制。您可以將消息保留 1 分鐘到 14 天的較長(zhǎng)時(shí)間。解耦應(yīng)用程序組件的能力有助于實(shí)現(xiàn)高性能。它消除了管理開銷,同時(shí)保持?jǐn)?shù)據(jù)敏感。與其他 AWS 產(chǎn)品的兼容性可幫助您輕松地將其與現(xiàn)有基礎(chǔ)設(shè)施集成。
Web 應(yīng)用架構(gòu)圖
在這里,您將能夠借助 Web 應(yīng)用程序架構(gòu)圖從頭到尾分析流程。重要的是要考慮將對(duì)流程采取行動(dòng)的元素和資源,例如 API、云存儲(chǔ)、技術(shù)和數(shù)據(jù)庫。
Web 應(yīng)用程序架構(gòu)的類型
Web 應(yīng)用程序的體系結(jié)構(gòu)可以根據(jù)軟件開發(fā)和部署模式分為不同的類別。
單體架構(gòu)
單體架構(gòu)是一種傳統(tǒng)的軟件開發(fā)模型——也稱為 Web 開發(fā)架構(gòu)——其中整個(gè)軟件開發(fā)為通過傳統(tǒng)瀑布模型的單個(gè)代碼。這意味著所有組件都是相互依賴和互連的,并且每個(gè)組件都需要運(yùn)行應(yīng)用程序。要更改或更新特定功能,您需要更改要重寫和編譯的整個(gè)代碼。
由于單體架構(gòu)將整個(gè)代碼視為一個(gè)程序,因此構(gòu)建新項(xiàng)目、應(yīng)用框架、腳本、模板和測(cè)試變得簡(jiǎn)單易行。部署也很容易。但是,隨著代碼越來越大,管理或更新變得困難;即使是很小的變化,您也需要經(jīng)歷 Web 開發(fā)架構(gòu)的整個(gè)過程。由于每個(gè)元素都是相互依賴的,因此擴(kuò)展應(yīng)用程序并不容易。此外,它不可靠,因?yàn)閱吸c(diǎn)故障可能會(huì)導(dǎo)致應(yīng)用程序崩潰。
當(dāng)您想要構(gòu)建輕量級(jí)應(yīng)用程序并且預(yù)算緊張時(shí),單體架構(gòu)將達(dá)到目的。但是,當(dāng)您的開發(fā)團(tuán)隊(duì)在一個(gè)位置工作而不是遠(yuǎn)程分散時(shí),使用整體模型是有意義的。
微服務(wù)架構(gòu)
微服務(wù)架構(gòu)解決了單體環(huán)境中遇到的幾個(gè)挑戰(zhàn)。在微服務(wù)架構(gòu)中,代碼被開發(fā)為通過 RESTful API 進(jìn)行通信的松散耦合的獨(dú)立服務(wù)。每個(gè)微服務(wù)都包含自己的數(shù)據(jù)庫并運(yùn)行特定的業(yè)務(wù)邏輯,這意味著您可以輕松開發(fā)和部署獨(dú)立的服務(wù)。
由于它是松耦合的,微服務(wù)架構(gòu)提供了更新/修改和擴(kuò)展獨(dú)立服務(wù)的靈活性。開發(fā)變得簡(jiǎn)單高效,持續(xù)交付成為可能。開發(fā)人員可以快速適應(yīng)創(chuàng)新。對(duì)于高度可擴(kuò)展和復(fù)雜的應(yīng)用程序,微服務(wù)是一個(gè)不錯(cuò)的選擇。
但是,使用運(yùn)行時(shí)實(shí)例部署多個(gè)服務(wù)是一項(xiàng)挑戰(zhàn)。當(dāng)服務(wù)數(shù)量增加時(shí),管理它們的復(fù)雜性也會(huì)增加。此外,微服務(wù)應(yīng)用程序共享分區(qū)數(shù)據(jù)庫。這意味著您應(yīng)該確保受事務(wù)影響的多個(gè)數(shù)據(jù)庫之間的一致性。
集裝箱
容器技術(shù)是部署微服務(wù)的最佳選擇。容器是對(duì)可以在物理機(jī)或虛擬機(jī)上運(yùn)行的應(yīng)用程序的輕量級(jí)運(yùn)行環(huán)境的封裝。因此,應(yīng)用程序在從開發(fā)人員設(shè)備到生產(chǎn)環(huán)境的一致環(huán)境中運(yùn)行。通過在操作系統(tǒng)級(jí)別抽象執(zhí)行,容器化允許您在單個(gè)操作系統(tǒng)實(shí)例中運(yùn)行多個(gè)容器。在減少開銷和處理能力的同時(shí),它也提高了效率。
容器化使開發(fā)人員能夠在單個(gè) VM 環(huán)境中添加多個(gè)應(yīng)用程序組件,而不是將代碼隔離到不同的 VM 中,從而獲得更多的應(yīng)用程序處理能力。憑借其輕量級(jí)的特性,容器運(yùn)行得更快。它們靈活、可靠,最適合基于策略的微服務(wù)環(huán)境。
Docker 是最流行的容器化技術(shù),它為容器化技術(shù)提供了一個(gè)全面的生態(tài)系統(tǒng)。它提供更高的性能、易于使用的技術(shù)和龐大的社區(qū)支持。
無服務(wù)器架構(gòu)
無服務(wù)器架構(gòu)是開發(fā)軟件應(yīng)用程序的模型。在此結(jié)構(gòu)中,底層基礎(chǔ)設(shè)施的供應(yīng)由基礎(chǔ)設(shè)施服務(wù)提供商管理。這意味著您只需為使用中的基礎(chǔ)架構(gòu)付費(fèi),而不是為空閑 CPU 時(shí)間或未使用的空間付費(fèi)。無服務(wù)器計(jì)算降低了成本,因?yàn)橘Y源僅在應(yīng)用程序執(zhí)行時(shí)使用。縮放任務(wù)由云提供商處理。此外,后端代碼得到簡(jiǎn)化。它減少了開發(fā)工作和成本,并縮短了上市時(shí)間。
多媒體處理、直播、聊天機(jī)器人 CI 管道、物聯(lián)網(wǎng)傳感器消息等是無服務(wù)器計(jì)算的一些用例。
在微服務(wù)架構(gòu)中,您可以使用 AWS Lambda、API Gateway 和 API Step Functions 執(zhí)行無服務(wù)器計(jì)算。
AWS 拉姆達(dá)
AWS Lambda 是亞馬遜提供的無服務(wù)器計(jì)算服務(wù)。Lambda 于 2014 年推出,為使用 Python、C#、Java、Node.js 等語言編寫的函數(shù)提供執(zhí)行環(huán)境。它會(huì)根據(jù)流量要求自動(dòng)配置和刪除服務(wù)器。您不必上傳整個(gè)應(yīng)用程序,只需上傳所需的功能,然后觸發(fā)它運(yùn)行服務(wù)。Lambda 提供易于執(zhí)行、改進(jìn)的應(yīng)用程序彈性和具有成本效益的解決方案。不利的一面是,無法控制環(huán)境。
API網(wǎng)關(guān)
API 網(wǎng)關(guān)是一種 API 管理工具,可讓您創(chuàng)建、發(fā)布、保護(hù)和管理 HTTP、WebSocket 和 REST API。作為反向代理,API 網(wǎng)關(guān)接收各種 API 調(diào)用,執(zhí)行服務(wù)聚合以完成這些調(diào)用并傳遞結(jié)果。API 網(wǎng)關(guān)可幫助您保護(hù) API、在 API 上運(yùn)行分析工具、連接計(jì)費(fèi)服務(wù)或管理舊的和已刪除的 API 等。在無服務(wù)器環(huán)境中,資源是根據(jù) API 調(diào)用來配置的。API 網(wǎng)關(guān)可幫助您部署和管理無服務(wù)器功能。
AWS 步驟功能
AWS Step Functions 是一種 AWS 可視化工作流工具,使開發(fā)人員能夠?qū)⒘鞒谭纸鉃橐幌盗胁襟E。借助這種低代碼服務(wù),IT 流程自動(dòng)化、構(gòu)建分布式應(yīng)用程序和機(jī)器學(xué)習(xí)管道變得很容易。您可以快速構(gòu)建和部署可靠且高度可擴(kuò)展的應(yīng)用程序,并使用更少的集成代碼管理有狀態(tài)和容錯(cuò)的工作流。
Web 應(yīng)用程序架構(gòu)最佳實(shí)踐
以下是設(shè)計(jì)出色的 Web 應(yīng)用程序架構(gòu)時(shí)應(yīng)遵循的一些最佳實(shí)踐。
可擴(kuò)展的網(wǎng)絡(luò)服務(wù)器
無論并發(fā)用戶數(shù)量、位置和時(shí)間如何,可擴(kuò)展的 Web 服務(wù)器對(duì)于提供一致的應(yīng)用程序性能至關(guān)重要。存在三種類型的縮放選項(xiàng),即水平縮放、垂直縮放和對(duì)角縮放。垂直縮放是關(guān)于升級(jí)/降級(jí)設(shè)備配置,而水平縮放是關(guān)于增加/減少設(shè)備數(shù)量。對(duì)角縮放是關(guān)于結(jié)合兩種模型。建議選擇水平擴(kuò)展模型,因?yàn)槟粫?huì)受到配置或服務(wù)器數(shù)量的限制。此外,您可以在適用的情況下混合垂直縮放。
使用彈性基礎(chǔ)架構(gòu)適應(yīng)云
隨著混合云和多云環(huán)境越來越流行,適應(yīng)云并主動(dòng)配置資源是交付高性能 Web 應(yīng)用程序的關(guān)鍵。彈性基礎(chǔ)架構(gòu)帶有預(yù)配置的網(wǎng)絡(luò)系統(tǒng)、VM 服務(wù)器、存儲(chǔ)和計(jì)算資源,允許使用自助服務(wù)門戶輕松管理環(huán)境。它提供了快速適應(yīng)不斷變化的市場(chǎng)需求和客戶期望的靈活性。
不可變的基礎(chǔ)設(shè)施
簡(jiǎn)而言之,不可變的基礎(chǔ)架構(gòu)是一旦部署就無法更改的東西。它使管理員能夠使用代碼自動(dòng)配置資源。當(dāng)要更新或修改服務(wù)器時(shí),它們會(huì)自動(dòng)被更新的服務(wù)器替換。
配置漂移是可變基礎(chǔ)架構(gòu)中的一大挑戰(zhàn)。在復(fù)制生產(chǎn)環(huán)境的同時(shí)擴(kuò)展和調(diào)試問題增加了這一挑戰(zhàn)。不可變基礎(chǔ)架構(gòu)使用經(jīng)過驗(yàn)證和版本控制的映像為每個(gè)部署配置新服務(wù)器。因此,服務(wù)器的先前狀態(tài)不是問題。您可以在部署之前測(cè)試服務(wù)器。它消除了配置漂移并允許水平擴(kuò)展,同時(shí)通過一致的暫存環(huán)境提供簡(jiǎn)單的回滾和恢復(fù)。
微服務(wù)和無服務(wù)器方法
微服務(wù)和無服務(wù)器計(jì)算對(duì)于 Web 應(yīng)用程序開發(fā)都至關(guān)重要。然而,不同之處在于微服務(wù)架構(gòu)提供了具有高可擴(kuò)展性的長(zhǎng)期解決方案,而無服務(wù)器計(jì)算提供了代碼效率。無服務(wù)器功能僅在觸發(fā)時(shí)運(yùn)行。
通過結(jié)合這兩種模型,您可以獲得兩全其美的優(yōu)勢(shì)。您可以使用 AWS Step Functions 分配觸發(fā)器以將多個(gè)函數(shù)組合到一個(gè)服務(wù)中并為它們分配觸發(fā)器。借助事件觸發(fā)的微服務(wù),您可以構(gòu)建組合系統(tǒng)以獲得代碼效率、長(zhǎng)期穩(wěn)定性、成本效益和可擴(kuò)展性。
多租戶架構(gòu)
- Web 應(yīng)用程序現(xiàn)在作為 SaaS 應(yīng)用程序交付。部署 SaaS 應(yīng)用程序有兩種模型:?jiǎn)巫鈶襞c多租戶架構(gòu)。
- 單租戶架構(gòu):為包含基礎(chǔ)設(shè)施、軟件和硬件生態(tài)系統(tǒng)的每個(gè)組織創(chuàng)建一個(gè)獨(dú)立的環(huán)境。
- 多租戶架構(gòu):具有完全集中服務(wù)和邏輯隔離的單一云環(huán)境由多個(gè)組織共享。
對(duì)于 Web 應(yīng)用程序,使用多租戶架構(gòu)具有多種優(yōu)勢(shì)。組織可以為所有用戶管理一個(gè)代碼庫,減少開銷和代碼沖突問題。它還通過規(guī)模經(jīng)濟(jì)降低了服務(wù)器基礎(chǔ)設(shè)施成本。在減少開發(fā)工作的同時(shí),它還縮短了上市時(shí)間。
Python/Node.js + React + AWS 是構(gòu)建 SaaS Web 應(yīng)用程序的新趨勢(shì)。
使用 HIPAA、PCI 和 SOC2 準(zhǔn)則保護(hù)架構(gòu)
構(gòu)建安全架構(gòu)是任何組織的最低要求。應(yīng)用安全協(xié)議和策略不僅可以保護(hù)您的數(shù)據(jù)和環(huán)境,還可以幫助您輕松管理審計(jì)任務(wù)并遵守政府法規(guī)。
- HIPAA:健康保險(xiǎn)流通與責(zé)任法案 (HIPAA) 是健康組織必須遵守的一項(xiàng)重要要求。它有助于減少醫(yī)療保健欺詐,同時(shí)保護(hù)私人健康信息。
- PCI DSS:支付卡行業(yè)數(shù)據(jù)安全標(biāo)準(zhǔn) (PCI DSS) 為處理客戶敏感財(cái)務(wù)數(shù)據(jù)的金融機(jī)構(gòu)定義了一套程序和政策。
- SOC 2:SOC 2 審計(jì)程序是確保您的數(shù)據(jù)由云服務(wù)提供商安全管理的一個(gè)關(guān)鍵方面。雖然組織不必遵守 SOC 2 指南,但最好遵循它們以保護(hù)客戶數(shù)據(jù)。SOC 2 準(zhǔn)則定義了客戶數(shù)據(jù)管理所基于的五項(xiàng)信任服務(wù)原則。
- 可用性
- 安全
- 加工完整性
- 保密
- 隱私
在 DevOps CI/CD 環(huán)境中自動(dòng)化代碼部署
部署自動(dòng)化是關(guān)于輕松地自動(dòng)化測(cè)試和生產(chǎn)環(huán)境之間的代碼移動(dòng)過程。它使開發(fā)人員能夠快速、頻繁地將代碼部署到生產(chǎn)中,而無需人工干預(yù)。AWS 以 AWS CodeDeploy 的形式提供完全托管的部署服務(wù)。它使您能夠自動(dòng)將代碼部署到各種環(huán)境,例如 AWS Lambda、AWS Fargate、Amazon EC2 或本地。
部署自動(dòng)化是 DevOps 持續(xù)集成/持續(xù)部署管道的一部分。它由三個(gè)重要階段組成:構(gòu)建、測(cè)試和部署。編寫代碼時(shí),它會(huì)自動(dòng)進(jìn)行測(cè)試并添加到中央存儲(chǔ)庫中。這些更改經(jīng)過驗(yàn)證并添加到應(yīng)用程序中。自動(dòng)化測(cè)試在不同級(jí)別運(yùn)行各種測(cè)試,以確保代碼沒有錯(cuò)誤。然后代碼會(huì)自動(dòng)部署到生產(chǎn)環(huán)境中。
使用基礎(chǔ)架構(gòu)即代碼工具構(gòu)建您的 Web 架構(gòu)
基礎(chǔ)設(shè)施即代碼 (IaC) 是一種使用代碼自動(dòng)配置基礎(chǔ)設(shè)施的方法。它幫助您將服務(wù)器、網(wǎng)絡(luò)、數(shù)據(jù)庫和其他 IT 資源視為軟件,并使用配置文件對(duì)其進(jìn)行管理。因此,您可以按需即時(shí)啟動(dòng)資源、管理配置一致性并消除配置偏差,同時(shí)提高軟件開發(fā)效率。它還降低了軟件開發(fā)成本。Terraform 和 AWS CloudFormation是兩個(gè)最流行的IaC 工具。
結(jié)論
在當(dāng)今競(jìng)爭(zhēng)激烈的軟件世界中,創(chuàng)造優(yōu)質(zhì)的產(chǎn)品和服務(wù)不足以贏得客戶的信任。您向客戶提供產(chǎn)品和服務(wù)的方式最為重要。Web 應(yīng)用程序可以幫助您做到這一點(diǎn)。因此,組織需要?jiǎng)?chuàng)建和部署高度優(yōu)化的 Web 應(yīng)用程序,以經(jīng)濟(jì)高效地為客戶提供速度和性能以及卓越的客戶 UI/UX 體驗(yàn)。設(shè)計(jì)正確的 Web 應(yīng)用程序架構(gòu)在這里至關(guān)重要。