11.1 現代產品
現代產品已經沒有人稱它們為程序了。現代產品可能由數十個程序、數百個互聯網服務和一堆API組成,這些API由部署產品的數據中心的雲提供。
許多現代產品(如果不是全部)都是基於客戶端-服務器的範式運行。也就是說,在你的設備(手機、筆記本電腦、电腦)上有個程序,負責與用戶(你)進行通信,而所有關鍵功能都在遠端服務器上進行,所有重要的事情都在那發生。
有時你的客戶端可能會與多個獨立的服務器通信,或者一個產品的服務器可能會與另一個產品的服務器通信。這樣形成了一個由客戶端和服務器組成的全球網絡,大家互相合作。
因此,現代應用程式模型可能更好地描述為客戶端-互聯網-服務器的範式。那裏有太多不同的複雜通信。甚至出現了所謂的「智能通信通道」,它們會自主決定將你的請求發送給誰以及何時發送。
11.2 客戶端
程序客戶端可以分為四類:
- Desktop客戶端 — 在電腦上運行的程序
- Mobile客戶端 — 用於iOS或Android的應用程式
- Web客戶端 — 在瀏覽器中運行的網站/網頁應用程式
- Server客戶端 — 運行在其他服務器上的應用程式
每個類別都可以細分為不同的部分。例如,web客戶端就是一個網站或網頁應用程式,這意味著它由瀏覽器和網站組成,網站在瀏覽器中加載。不同的瀏覽器也不相同,可能會以不同的方式工作。
即使我們選擇最常用的瀏覽器,也還有網站需要加載進去。網站通常由三部分組成:
- HTML
- CSS
- JavaScript
你可能會說沒什麼比這更簡單的了,但已經沒有人只用HTML和JavaScript寫網站了。現在開發網站使用的已經不是庫,而是完整的框架,比如React, Angular或Vue。而且這些已經不是網站了,而是完整的網頁應用程式。有自己的構建、測試和範式。
簡單的CSS也沒有人用了:已經有CSS預處理器來幫助生成它,甚至有完整的CSS框架。天哪,甚至還有完整的CSS框架專門用於電郵,這樣如果有人在瀏覽器或大多數郵件客戶端中查看你的信,它會看起來很漂亮。
現在也沒有人用JavaScript寫代碼:所有大型網頁應用程式都是用TypeScript編寫,然後編譯成JavaScript。你懂的…
11.3 互聯網和基礎設施
客戶端和服務器的通信—有什麼能比這更簡單的呢?但即便是在這方面,一切也已經改變了。
首先,你的產品很可能會托管在某個現代數據中心。全球有很多公司提供各種托管服務,無論是在他們的服務器上還是在你的物理服務器上。只要你掏錢,什麼要求都能滿足。
物理服務器不再是物理的。所有現代數據中心都提供租賃虛擬服務器。這是一台虛擬電腦,在一台物理服務器上可能會有數十台虛擬電腦。不過這在升級服務器方面很方便。如果你需要更多的內存,可以在幾分鐘內為你的虛擬服務器添加。
但這種方法也已經過時了。現在,流行的是遷移到云端,也就是說你的產品不僅僅是在數據中心的虛擬服務器上部署,而是積極利用這些數據中心的大量基礎設施和服務。
你需要用於存儲備份的服務器:雲中有一整套方便的基礎設施。你需要一個99.9999999%可靠的數據庫嗎?也有。Kafka, RabbitMQ, NoSQL?都有並且很容易配置。只要付錢就行。
這些數據中心和雲開始成為你產品的一部分。例如,Amazon在全球擁有大量數據中心,因此他們提供CDN服務:你們的公共內容將緩存在所有Amazon數據中心,讓全球用戶獲得更快速度。
或者可以通過Amazon Gateway API服務器來訪問你們應用程式的API,這樣就能非常靈活地配置與你們服務的工作方式。你可以分配負載給不同的服務,抵御DDoS攻擊,自動化文件加載,設置智能緩存,還有很多其他功能。
這樣就在客戶端應用程式和你的服務之間出現了很多「智能通信」,這些通信你可以配置,也必須配置。即便你可能永遠不會親自去做,但你應該知道它們的存在,它們可能會顯著影響你的程序運行。
我們還沒有談到路由器、5G信號塔、衛星和海底光纜等話題。當你將視頻流從你的服務器發送到客戶端時,如果客戶端的連接不佳,這就會崩潰。猜你猜看看要誰來解決這個問題?
11.4 服務器
單詞服務器部分代表了多種不同的概念,所以了解一下最流行的這些概念會對你有幫助。
物理服務器
物理服務器是一種設備,是一台獨立的計算機,配備了資源(處理器、內存、存儲),用於數據處理和各類應用程式運行。這些服務器通常安裝在數據中心,為網站、應用程式、數據庫和其他服務提供運算能力。
虛擬服務器
虛擬服務器是一個被軟件模擬的服務器,在物理服務器環境中運行。借助虛擬化技術,一台物理服務器可以被分割成多個隔離的虛擬服務器,每個虛擬服務器都有自己的操作系統,可以單獨重新啟動和配置。
程序服務器(例如Nginx)
像Nginx這樣的程序服務器是一種服務器軟件,用於處理對網絡資源的請求。Nginx廣為人知的是作為網頁服務器,同時它也可以作為郵件代理服務器及在微服務架構中作為反向代理和負載均衡器。
數據庫服務器
數據庫服務器是一種專用的服務器,用於管理數據庫和處理對數據庫的請求。它提供數據的集中存儲和處理,通過網絡提供數據訪問。數據庫服務器支持事務處理、數據搜索和修改,同時保障數據存儲的可靠性和安全性。數據庫服務器的例子包括MySQL, PostgreSQL, Oracle Database和Microsoft SQL Server。
在某個數據中心的某台虛擬服務器上,你的React和Node.js項目會運行,與數據庫協作,從NginX接收請求,並將其操作的日誌發送到Splunk。
而正是因為你的代碼,成千上萬的用戶對這個產品感到滿意。他們使用產品,為其支付費用,這樣產品擁有者也會感到滿意。公司的股票會增長,你會獲得以股票為形式的獎勵,然後你也會感到滿意。簡直是自然界的幸福迴圈 :)
GO TO FULL VERSION