CodeGym /課程 /C# SELF /IT 產品模型

IT 產品模型

C# SELF
等級 9, 課堂 6
開放

1. 現代產品

現代產品已經沒有人再稱它們為「程式」。現代產品可能包含數十個程式、數百個網路服務,以及由雲端資料中心(也叫資料處理中心)提供的眾多 API,這些資料中心就是它們部署的地方。

許多現代產品(如果不是全部的話)都遵循Client-Server範式。也就是說,你的裝置(手機、筆電、電腦)上會有一個負責與用戶(你)溝通的程式,而關鍵功能則在專用的伺服器上,所有重要的運算都在那裡進行 ➡️🖥️

有時候你的客戶端會與多個獨立的伺服器溝通,或者一個產品的伺服器會向另一個產品的伺服器發出請求。這樣就形成了一個由客戶端和伺服器組成的全球網絡,它們彼此互動。

因此,現代應用程式的模型,也許用Client-Internet-Server範式來描述會更貼切。因為那裡的通訊變得非常複雜,甚至出現所謂的「智慧通訊通道」,它們能自動決定何時、向誰傳送你的請求 🛰️📡

2. 客戶端

客戶端程式大致可以分成4類:

  • 🖥️ Desktop 客戶端 — 在電腦上運行的程式
  • 📲 Mobile 客戶端 — 適用於 iOS 或 Android 的應用
  • 🌐 Web 客戶端 — 在瀏覽器中運行的網站或 Web 應用
  • 🌍 Server 客戶端 — 在另一台伺服器上運行的應用

每一類都可以再細分。例如,Web 客戶端就是網站或 Web 應用,它由瀏覽器和載入的網站組成。瀏覽器也不是都一樣,有不同的瀏覽器,運作方式也可能不同。

即使我們用最常見的瀏覽器,網站本身也還是由三個部分組成:

  • 📄 HTML
  • 🎨 CSS
  • ⚡ JavaScript

「沒什麼難的」,你可能會這麼說。不過今天沒有人只用 HTML 和 JavaScript 來做網站了。現在開發網站,會用到完整的框架,比如 React、Angular 或 Vue ⚛️。而且,網站已經不只是網站,而是完整的 Web 應用,有自己的打包、測試和範式。

純 CSS 也已經不常用。現在有 CSS 預處理器,幫助產生 CSS,還有整套 CSS 框架。甚至連電子郵件的排版,也有專門的 CSS 框架,讓你的信件在瀏覽器和大多數郵件客戶端都能漂亮呈現 💌。

用純 JavaScript 也已經少見了,所有大型 Web 應用都用 TypeScript 開發,然後再編譯成 JavaScript。你懂的...

3. 網路與基礎設施

客戶端與伺服器的通訊,說起來很簡單,但實際上已經變得很複雜了。

你的產品,很可能會部署在現代資料中心之一。全球有很多公司提供各種雲端主機服務,無論是在他們的伺服器上,還是用你的實體伺服器。想幹嘛就幹嘛,花錢就行。

img

實體伺服器已經不再是真正的「實體」了。現代資料中心都提供虛擬伺服器租用。虛擬伺服器就是一台虛擬電腦,一台實體伺服器上可以跑好幾個。這樣升級也方便,只要增加記憶體,幾分鐘內就搞定 ⏱️。

但這種方式也開始過時了,現在流行的是「雲端」——你的產品不只是部署在虛擬伺服器上,而是充分利用資料中心的各種基礎設施和服務。

需要存放備份?雲端有專門的存儲方案。要高可靠性(99.9999999%)的資料庫?也有。Kafka、RabbitMQ、NoSQL,通通都可以輕鬆配置。只要付錢就行。

這些資料中心和雲端,已經開始成為你產品的一部分。例如,Amazon 在全球有很多資料中心,提供 CDN 服務:你的公開內容會在所有 Amazon 資料中心快取,讓全球用戶都能更快取得 🛰️。

或者,你的應用 API 請求可以經由 Amazon Gateway API,進行靈活的管理。負載平衡、DDoS 防護、自動上傳檔案、智慧快取,很多功能都可以設定 🛡️。

因此,客戶端應用與你的服務之間,會建立許多「智慧通訊」,這些都可以也應該被配置。即使你不親自操作,也要知道它們的存在,因為它們會大大影響你的程式運作。

我們還沒提到路由器、5G 基站、衛星、海底光纜這些東西。你傳送影片流給客戶端,但如果連線不穩,影片就會卡頓。猜猜,誰來解決這個問題?你 😅

4. 伺服器

「伺服器」這個詞,可能代表很多不同的東西。了解一些常見的類型,對你很有幫助。

  • 🖥️ 實體伺服器
    實體伺服器就是一台專用的電腦,擁有 CPU、記憶體、儲存空間,用來處理資料和支援各種應用。這些伺服器通常放在資料中心,提供網站、應用、資料庫等服務的運算能力。
  • 🪐 虛擬伺服器
    虛擬伺服器是用軟體模擬出來的伺服器,在實體伺服器上運行。透過虛擬化技術,一台實體伺服器可以分割成多個獨立的虛擬伺服器,每個都可以有自己的 OS,獨立重啟和設定。
  • 🕹️ 程式伺服器(例如 Nginx)
    這類伺服器軟體用來處理網路請求,比如 Nginx。它可以作為 Web 伺服器,也能做郵件代理、反向代理,甚至負載平衡器,支援微服務架構。
  • 💾 資料庫伺服器
    資料庫伺服器專門用來管理資料庫,處理資料存取請求。它提供集中存放和管理資料的能力,支援交易、搜尋、修改,確保資料安全可靠。常見的有 MySQL、PostgreSQL、Oracle、Microsoft SQL Server。

在資料中心裡,可能會有一台虛擬伺服器跑著你的 C# 和 ASP.NET Core 專案。它會跟資料庫溝通,請求由 Nginx 或 Azure Application Gateway 處理,並把日誌傳到監控系統,比如 Azure Monitor 或 Splunk 📈。

正是因為你的程式碼,數百萬用戶會滿意。他們用你的服務、付錢,最後產品的擁有者也會很開心。公司股價會漲,你也會拿到股票獎金 💸。這就是產業裡的幸福循環 :)

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION