1. 现代产品
如今几乎没人再把产品称作“程序”。一个现代产品可能包含几十个程序、上百个互联网服务以及大量 API,这些由部署所在的云数据中心(也称为数据处理中心)提供。
许多(如果不是全部的话)现代产品遵循 范式 客户端-服务器。这意味着你的设备(手机、笔记本、电脑)上运行着负责与用户(你)交互的程序,而关键功能位于远端服务器上,所有重要的事情都在那里发生 ➡️🖥️
有时你的客户端会与多个独立服务器通信,或者一个产品的服务器会调用另一个产品的服务器。于是形成了由客户端与服务器组成的全球性网络,它们彼此协同工作。
因此,用 范式 客户端-互联网-服务器 来描述现代应用模型或许更贴切。那里已经充斥着大量复杂的通信。甚至出现了所谓的“智能通信通道”,它们会自主决定何时把你的请求发给谁。🛰️📡
2. 客户端
客户端程序大致可以分为 4 类:
- 🖥️ Desktop 客户端 — 运行在计算机上的程序。
- 📲 Mobile 客户端 — 运行在 iOS 或 Android 上的应用。
- 🌐 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 API Gateway 服务,它能非常灵活地配置与你的各项服务的协作。可以把负载分配到不同服务、抵御 DDoS 攻击、自动化文件上传、配置智能缓存,还有更多能力 🛡️.
总之,在客户端应用与各项服务之间会出现大量“智能通信”,这些都是可以也应该去配置的。即使你不亲自操作,也应当知道它们的存在,并且它们会显著影响你的程序运行。
更别提路由器、5G 基站、卫星以及铺设在海底的互联网光缆等话题了。你从服务器向客户端发送视频流,结果对方因为网络状况糟糕、连接总是中断而出现故障。猜猜谁要去解决这个问题?还是你 😅
4. 服务器
在“服务器”一词之下,可能隐藏着完全不同的概念。了解其中最常见的几类对你会很有帮助。
- 🖥️ 物理服务器
物理服务器是一种硬件设备,本质上是一台拥有资源(处理器、内存、存储)的独立计算机,用于处理数据并支撑各类软件应用运行。这些服务器部署在数据中心,为网站、应用、数据库和其他服务提供算力与托管能力。 - 🪐 虚拟服务器
虚拟服务器是运行在物理服务器环境中的软件仿真服务器。借助虚拟化技术,一台物理服务器可以被划分为多个相互隔离的虚拟服务器,每个都有自己的操作系统,并可独立重启与配置。 - 🕹️ 服务器软件(例如 Nginx)
像 Nginx 这样的服务器软件,是用于处理对 Web 资源请求的服务端软件。Nginx 以 Web 服务器而闻名,同时还能在微服务架构中充当邮件代理、反向代理以及负载均衡器等角色。 - 💾 数据库服务器
数据库服务器是用于管理数据库及其查询处理的专用服务器。它提供集中式的数据存储与处理,并通过网络向外提供数据访问。数据库服务器支持事务处理、数据检索与修改,同时确保信息存储的可靠性与安全性。数据库服务器的示例包括 MySQL、PostgreSQL、Oracle Database 和 Microsoft SQL Server。
于是,在某个数据中心的某台虚拟服务器上,你用 C# 和 ASP.NET Core 开发的项目就会跑起来。它会与数据库交互,通过 Nginx 或 Azure Application Gateway 接收请求,并把运行日志发送到 Azure Monitor 或 Splunk 等监控系统中 📈。
而正因为你的代码,数以百万计的用户会对你的产品感到满意。他们会使用你的服务、为之付费,最终产品的拥有者也会满意。公司的股价上涨,你获得股权激励——然后你也会很开心 💸。这就是业界真正的“幸福循环” :)
GO TO FULL VERSION