CodeGym /課程 /JAVA 25 SELF /IT 產品模型

IT 產品模型

JAVA 25 SELF
等級 9 , 課堂 6
開放

1. 現代產品

現代的產品已經不再被稱為「程式」了。現代產品可能包含數十個程式、上百個網路服務,以及由雲端資料中心(也叫資料處理中心)提供的眾多 API,並部署於其中。

許多現代產品(甚至幾乎全部)都遵循客戶端–伺服器」範式。也就是在你的裝置上(手機、筆電、電腦)有一個程式,負責與使用者(你)互動,而關鍵功能則位於遠端伺服器上,所有重要的事都在那裡發生 ➡️🖥️

有時你的客戶端會與多個獨立伺服器通訊,或者某個產品的伺服器會呼叫另一個產品的伺服器。於是就形成一個由客戶端與伺服器組成的全球性網路,彼此互相協作。

因此,用客戶端–網際網路–伺服器來描述現代應用的模型或許更貼切。裡頭已經出現太多複雜的通訊形式。甚至還有所謂的「智慧型通訊通道」,會自動決定該把你的請求送給誰、何時送出 🛰️📡

2. 客戶端

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

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

而且每一類又能再細分。比如說,Web 客戶端就是網站或 Web 應用,這表示它由瀏覽器與網站兩部分構成,網站會載入到瀏覽器中。瀏覽器也並非完全一致,行為可能各有不同。

即便我們選用最普及的瀏覽器,網站本身仍然是重點。網站通常由三個部分組成:

  • 📄 HTML
  • 🎨 CSS
  • ⚡ JavaScript

「這還不簡單嘛,」你會說。只是,如今已經沒有人單純用 HTMLJavaScript 來寫網站了。開發網站現在不只是用函式庫,而是使用完整的框架,例如 ReactAngularVue ⚛️。而且這些已不再只是「網站」,而是具有自有建置流程、測試與範式的完整 Web 應用。

CSS 也很少有人直接使用了。已有能協助產生 CSS 的預處理器,還有各式 CSS 框架。甚至連電子郵件都有專門的 CSS 框架,讓你的信件不論在瀏覽器或多數郵件客戶端中都能漂亮呈現 💌。

也很少有人用純 JavaScript 開發——大型 Web 應用大多使用 TypeScript,再編譯成 JavaScript。你懂的……

3. 網際網路與基礎設施

客戶端與伺服器的通訊——有什麼比這更簡單的?不過,即便在它們的互動中,如今也已經大不相同。

你的產品很可能會部署在某個現代資料中心。世界各地有許多公司為你的產品提供各式主機代管服務,不論是在他們的伺服器上,還是在你自己的實體伺服器上。只要付錢,需求一應俱全。

資料中心

實體伺服器已經不再是實體。所有現代資料中心都提供租用虛擬伺服器。虛擬伺服器就是一台虛擬電腦,而在一台實體伺服器上可以開出數十台。這在伺服器升級方面非常方便。如果你需要更多記憶體,只要幾分鐘就能替你的虛擬伺服器加上 ⏱️。

不過這種做法也逐漸過時了,現在流行搬到雲端——這不僅是把你的產品部署在資料中心的虛擬伺服器上,而是積極運用該資料中心提供的各種基礎設施與服務。

你需要用來保存備份的伺服器——雲端裡有現成又好用的基礎設施。你需要可靠性 99.9999999% 的資料庫?也有。KafkaRabbitMQNoSQL?一切都已備妥且易於設定。只要付費即可。

而這些資料中心與雲端正逐漸成為你產品的一部分。例如,Amazon 在全球擁有大量資料中心,因此他們提供 CDN 服務:你的公共內容會被快取到 Amazon 的所有資料中心,全球的使用者都能更快取得它 🛰️。

或者可以把你應用的 API 請求交由 Amazon Gateway API 服務處理,它能非常靈活地協調你各項服務的運作。可以把負載分配到不同服務、抵禦 DDoS 攻擊、自動化檔案上傳、設定智慧快取,功能多到說不完 🛡️。

因此,在客戶端應用與你的服務之間,會出現許多「智慧型通訊」,而且需要加以設定。即使你從未親自操作過,也應該知道它們的存在,並且它們會對你的程式運作產生重大影響。

更別提路由器、5G 基地台、衛星與海底的網路纜線。你從伺服器向客戶端傳送影音串流,但對方的連線品質不好、連線不時中斷。猜猜看,誰要來解決這個問題?你啊 😅

4. 伺服器

「伺服器」一詞可能指代截然不同的概念。了解其中最常見的幾種對你會很有幫助。

  • 🖥️ 實體伺服器
    實體伺服器是一種硬體設備,本身就是一台擁有資源(處理器、記憶體、儲存)的獨立電腦,用於處理資料並支援各種軟體應用的運作。這些伺服器安裝在資料中心中,為網站、應用程式、資料庫與其他服務提供運算能力與託管環境。
  • 🪐 虛擬伺服器
    虛擬伺服器是在實體伺服器環境中運行的、以軟體方式模擬的伺服器。藉由虛擬化技術,一台實體伺服器可以被劃分成多個彼此隔離的虛擬伺服器,每個都擁有自己的作業系統,並可獨立重新開機與設定。
  • 🕹️ 伺服器程式(例如,Nginx)
    Nginx 這樣的伺服器程式,是用來處理對網路資源請求的伺服器端軟體。Nginx 以 Web 伺服器聞名,也能在微服務架構中充當郵件代理伺服器與反向代理伺服器,以及作為負載平衡器。
  • 💾 資料庫伺服器
    資料庫伺服器是用於管理資料庫並處理其請求的專用伺服器。它提供集中化的資料儲存與處理,透過網路提供資料存取。資料庫伺服器支援交易處理、查詢與變更資料,同時確保資訊儲存的可靠性與安全性。資料庫伺服器的例子包括 MySQLPostgreSQLOracle DatabaseMicrosoft SQL Server

而在某個資料中心的某台虛擬伺服器上,你的 C#ASP.NET Core 專案將會運行。它會與資料庫互動,透過 NginxAzure Application Gateway 接收請求,並把自身行為的日誌送往像 Azure MonitorSplunk 這樣的監控系統 📈。

而正是因為你的程式碼,數百萬使用者會對你的產品感到滿意。他們會使用服務、為此付費,最終產品擁有者也會滿意。公司的股價會上漲,你會拿到股票獎金——你也會很開心 💸。這就是產業裡名副其實的幸福循環 :)

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