1. 現代產品
現代的產品已經不再被稱為「程式」了。現代產品可能包含數十個程式、上百個網路服務,以及由雲端資料中心(也叫資料處理中心)提供的眾多 API,並部署於其中。
許多現代產品(甚至幾乎全部)都遵循「客戶端–伺服器」範式。也就是在你的裝置上(手機、筆電、電腦)有一個程式,負責與使用者(你)互動,而關鍵功能則位於遠端伺服器上,所有重要的事都在那裡發生 ➡️🖥️
有時你的客戶端會與多個獨立伺服器通訊,或者某個產品的伺服器會呼叫另一個產品的伺服器。於是就形成一個由客戶端與伺服器組成的全球性網路,彼此互相協作。
因此,用「客戶端–網際網路–伺服器」來描述現代應用的模型或許更貼切。裡頭已經出現太多複雜的通訊形式。甚至還有所謂的「智慧型通訊通道」,會自動決定該把你的請求送給誰、何時送出 🛰️📡
2. 客戶端
客戶端程式大致可以分為 4 類:
- 🖥️ Desktop 客戶端——在電腦上執行的程式。
- 📲 Mobile 客戶端——iOS 或 Android 應用程式。
- 🌐 Web 客戶端——在瀏覽器中運作的網站/Web 應用。
- 🌍 Server 客戶端——在另一台伺服器上執行的應用程式。
而且每一類又能再細分。比如說,Web 客戶端就是網站或 Web 應用,這表示它由瀏覽器與網站兩部分構成,網站會載入到瀏覽器中。瀏覽器也並非完全一致,行為可能各有不同。
即便我們選用最普及的瀏覽器,網站本身仍然是重點。網站通常由三個部分組成:
- 📄 HTML
- 🎨 CSS
- ⚡ JavaScript
「這還不簡單嘛,」你會說。只是,如今已經沒有人單純用 HTML 和 JavaScript 來寫網站了。開發網站現在不只是用函式庫,而是使用完整的框架,例如 React、Angular 或 Vue ⚛️。而且這些已不再只是「網站」,而是具有自有建置流程、測試與範式的完整 Web 應用。
純 CSS 也很少有人直接使用了。已有能協助產生 CSS 的預處理器,還有各式 CSS 框架。甚至連電子郵件都有專門的 CSS 框架,讓你的信件不論在瀏覽器或多數郵件客戶端中都能漂亮呈現 💌。
也很少有人用純 JavaScript 開發——大型 Web 應用大多使用 TypeScript,再編譯成 JavaScript。你懂的……
3. 網際網路與基礎設施
客戶端與伺服器的通訊——有什麼比這更簡單的?不過,即便在它們的互動中,如今也已經大不相同。
你的產品很可能會部署在某個現代資料中心。世界各地有許多公司為你的產品提供各式主機代管服務,不論是在他們的伺服器上,還是在你自己的實體伺服器上。只要付錢,需求一應俱全。
實體伺服器已經不再是實體。所有現代資料中心都提供租用虛擬伺服器。虛擬伺服器就是一台虛擬電腦,而在一台實體伺服器上可以開出數十台。這在伺服器升級方面非常方便。如果你需要更多記憶體,只要幾分鐘就能替你的虛擬伺服器加上 ⏱️。
不過這種做法也逐漸過時了,現在流行搬到雲端——這不僅是把你的產品部署在資料中心的虛擬伺服器上,而是積極運用該資料中心提供的各種基礎設施與服務。
你需要用來保存備份的伺服器——雲端裡有現成又好用的基礎設施。你需要可靠性 99.9999999% 的資料庫?也有。Kafka、RabbitMQ、NoSQL?一切都已備妥且易於設定。只要付費即可。
而這些資料中心與雲端正逐漸成為你產品的一部分。例如,Amazon 在全球擁有大量資料中心,因此他們提供 CDN 服務:你的公共內容會被快取到 Amazon 的所有資料中心,全球的使用者都能更快取得它 🛰️。
或者可以把你應用的 API 請求交由 Amazon Gateway API 服務處理,它能非常靈活地協調你各項服務的運作。可以把負載分配到不同服務、抵禦 DDoS 攻擊、自動化檔案上傳、設定智慧快取,功能多到說不完 🛡️。
因此,在客戶端應用與你的服務之間,會出現許多「智慧型通訊」,而且需要加以設定。即使你從未親自操作過,也應該知道它們的存在,並且它們會對你的程式運作產生重大影響。
更別提路由器、5G 基地台、衛星與海底的網路纜線。你從伺服器向客戶端傳送影音串流,但對方的連線品質不好、連線不時中斷。猜猜看,誰要來解決這個問題?你啊 😅
4. 伺服器
「伺服器」一詞可能指代截然不同的概念。了解其中最常見的幾種對你會很有幫助。
- 🖥️ 實體伺服器
實體伺服器是一種硬體設備,本身就是一台擁有資源(處理器、記憶體、儲存)的獨立電腦,用於處理資料並支援各種軟體應用的運作。這些伺服器安裝在資料中心中,為網站、應用程式、資料庫與其他服務提供運算能力與託管環境。 - 🪐 虛擬伺服器
虛擬伺服器是在實體伺服器環境中運行的、以軟體方式模擬的伺服器。藉由虛擬化技術,一台實體伺服器可以被劃分成多個彼此隔離的虛擬伺服器,每個都擁有自己的作業系統,並可獨立重新開機與設定。 - 🕹️ 伺服器程式(例如,Nginx)
像 Nginx 這樣的伺服器程式,是用來處理對網路資源請求的伺服器端軟體。Nginx 以 Web 伺服器聞名,也能在微服務架構中充當郵件代理伺服器與反向代理伺服器,以及作為負載平衡器。 - 💾 資料庫伺服器
資料庫伺服器是用於管理資料庫並處理其請求的專用伺服器。它提供集中化的資料儲存與處理,透過網路提供資料存取。資料庫伺服器支援交易處理、查詢與變更資料,同時確保資訊儲存的可靠性與安全性。資料庫伺服器的例子包括 MySQL、PostgreSQL、Oracle Database 與 Microsoft SQL Server。
而在某個資料中心的某台虛擬伺服器上,你的 C# 與 ASP.NET Core 專案將會運行。它會與資料庫互動,透過 Nginx 或 Azure Application Gateway 接收請求,並把自身行為的日誌送往像 Azure Monitor 或 Splunk 這樣的監控系統 📈。
而正是因為你的程式碼,數百萬使用者會對你的產品感到滿意。他們會使用服務、為此付費,最終產品擁有者也會滿意。公司的股價會上漲,你會拿到股票獎金——你也會很開心 💸。這就是產業裡名副其實的幸福循環 :)
GO TO FULL VERSION