2.1 現代產品
現代產品已經沒有人叫它們程式了。現代產品可能包含數十個程式、數百個網路服務和許多由雲端資料中心提供的 API(也被稱為資料處理中心),這些產品在其中部署。
許多現代產品(如果不是全部的話)都基於 客戶端-伺服器範式。這就是當你的設備 (手機、筆電、電腦)上有一個程式,負責和用戶(你)溝通,而關鍵功能則在 遠端伺服器上進行,所有重要的事情都在那裡發生。
有時你的客戶端可能會與多個獨立的伺服器通信,或者一個產品的伺服器可以訪問另一個產品的伺服器。 這樣就形成了一種全球性的客戶端和伺服器網路,它們都相互合作。
因此,現代的應用程式模型,也許最好描述為 客戶端-網際網路-伺服器範式。那裡實在是有太多不同的複雜通信。 甚至出現了所謂的「智能通信通道」,它們能夠自主決定,該何時和向誰發送你的請求。
2.2 客戶端
客戶端程式可以大致分為四類:
- 桌面客戶端——在電腦上運行的程式。
- 移動客戶端——針對 iOS 或 Android 的應用程式。
- 網頁客戶端——在瀏覽器中運行的網站/網頁應用程式。
- 伺服器客戶端——在其他伺服器上運行的應用程式。
而每一類又可以進一步細分。舉個例子, web 客戶端——這是網站或網頁應用程式,也就是說,它由 瀏覽器和網站組成,網站會加載到瀏覽器中。瀏覽器也不是都一樣的,可能會以不同的方式運行。
但即使我們使用最常見的瀏覽器,還有待加載到裡面的 網站。網站通常由三個主要部分組成:
- HTML
- CSS
- JavaScript
「沒有什麼更簡單的,」你可能會說。然而,今天沒有人僅僅用 HTML 和 JavaScript 來編寫網站。如今的網站開發已經不僅僅是使用庫,而是使用完整的框架,如 React、Angular 或 Vue。而且現在也不再只是網站,而是完整的網頁應用程式,擁有自己的組建、測試和範式。
純 CSS 也不再有人用了。現在已有 CSS 預處理器來幫助生成 CSS,還有整個 CSS 框架。甚至為了郵件也有專門的 CSS 框架,這樣你的郵件看起來在瀏覽器和大多數郵件客戶端上都很美觀。
純 JavaScript 也已經很少有人用——所有大型網頁應用程式都是用 TypeScript 開發,然後編譯為 JavaScript。你明白的...
2.3 網路和基礎架構
客戶端與伺服器的通信——還有什麼比這個更簡單的嗎?但甚至在它們的關係中一切都已經改變了。
你的產品很可能會部署在現代資料中心之一。全球許多公司提供不同的託管服務用於你的產品,不論是在他們的伺服器上還是在你自己的實體伺服器上。為你的需求花錢,就能得到所有的服務。
實體伺服器不再是實體的。所有現代資料中心都提供虛擬伺服器租用服務。虛擬伺服器是一種虛擬計算機,在一個實體伺服器上可能有數十個虛擬伺服器。但這在升級伺服器方面很方便。如果你需要更多內存,你可以在幾分鐘內增加它到你的虛擬伺服器。
但這種方式也已經過時了,現在流行的是遷移到雲端——當你的產品不僅部署在資料中心的虛擬伺服器上,而且還能夠使用更大的基礎設施和這些資料中心的服務。
你需要一個伺服器來存儲備份——為此雲端中已有現成的便捷基礎設施。你需要一個可靠性達到 99.9999999% 的資料庫嗎? 那也是有的。Kafka、RabbitMQ、NoSQL?這些都已存在而且易於配置。 只要付錢就行。
這些資料中心和雲端開始成為你產品的一部分。例如,Amazon 在全球擁有大量的資料中心,因此他們提供 CDN 服務:你的公開內容將被緩存在所有 Amazon 的資料中心,讓全球用戶可以更快速地獲取。
或者,你應用程式的 API 呼叫可以通過 Amazon Gateway API 服務,它允許非常靈活的配置與你的服務協同工作。可以分配到不同的服務上,抵擋 DDoS 攻擊,自動化文件上傳,配置智能緩存,還有很多其他功能。
於是,在客戶端應用程式和你的服務之間形成了許多「智能通信」,這些都是可以而且應該進行配置的。即便你從來不會親自去做,你也應該知道它們的存在,而且它們會對你的程式的運行產生重大影響。
而我們還沒提及路由器、5G 信號塔、衛星和海底網絡電纜等主題。你從伺服器向你的客戶端發送串流視訊,而它在崩潰,因為客戶端的信號不好,連線不斷中斷。你猜猜看,誰會去解決這個問題?
2.4 伺服器
「伺服器」這個詞可以涵蓋很多不同的概念。了解其中最常見的將會對你有幫助。
實體伺服器實體伺服器——這是一個代表獨立計算機的硬體,擁有資源(處理器、內存、存儲),用於處理數據和支持各種程式應用運行的設備。這些伺服器安裝在資料中心,提供主機網站、應用程式、資料庫和其他服務的能力。
虛擬伺服器虛擬伺服器——這是一種在物理伺服器環境中運行的軟體模擬伺服器。通過虛擬化技術,一個物理伺服器可以分為多個隔離的虛擬伺服器,每個都有自己的操作系統,可以獨立重啟和配置。
程式伺服器(例如,Nginx)程式伺服器,如 Nginx,是用於處理網路資源請求的伺服器軟體。Nginx 廣為知曉的是作為網頁伺服器,它也可以在微服務架構中擔任郵件代理伺服器和反向代理伺服器的角色,還可以作為負載均衡器。
資料庫伺服器資料庫伺服器是一種專用伺服器,用於管理資料庫和處理資料庫請求。它提供資料的集中存儲和處理,透過網絡提供對資料的訪問。資料庫伺服器支持事務處理、數據查詢和修改,同時確保資料存儲的可靠性和安全性。資料庫伺服器的例子包括 MySQL、PostgreSQL、Oracle Database 和 Microsoft SQL Server。
而在某個資料中心的某個虛擬伺服器上,你的 Python 和 Django 專案將會運行。它將與資料庫合作, 從 NginX 接收請求,並將它的操作日志發送到 Splank。
但正是由於你的程式碼,成千上萬的用戶將會因為你的產品而高興。他們將使用這產品,為此付費,而在這種情況下,產品的持有人也會很高興。公司的股票會上漲,你將會獲得股票獎勵,這樣你也會很高興。這是一個快樂的圓環循環 :)
GO TO FULL VERSION