1. 现代产品
现代产品已经没人再叫它们程序了。现代产品可能包含数十个程序、数百个互联网服务和大量由云数据中心(也叫数据处理中心)提供的 API,这些数据中心就是它们部署的地方。
很多现代产品(如果不是全部的话)都遵循Client-Server范式。就是说,你的设备(手机、笔记本、电脑)上运行一个程序,负责和用户(你)沟通,而关键功能都在专门的服务器上,所有重要的处理都在那里 ➡️🖥️
有时候你的客户端会和多个独立的服务器通信,或者一个产品的服务器会请求另一个产品的服务器。这样就形成了一个全球范围的客户端和服务器网络,它们彼此协作。
因此,现代应用模型可能更适合用Client-Internet-Server范式来描述。因为通信变得越来越复杂,出现了一些所谓的“智能通信通道”,它们能自动决定何时、向谁发送请求 🛰️📡
2. 客户端
客户端程序大致可以分为4类:
- 🖥️ Desktop客户端 — 在电脑上运行的程序
- 📲 Mobile客户端 — iOS或Android上的应用
- 🌐 Web客户端 — 在浏览器中运行的网站/网页应用
- 🌍 Server客户端 — 在另一台服务器上运行的应用
每一类还可以细分。例如,Web客户端就是网站或Web应用,它由浏览器和加载的网页组成。浏览器也不是都一样,有不同的表现和能力。
即使用最常见的浏览器,也还会有加载的网页。网页通常由三部分组成:
- 📄 HTML
- 🎨 CSS
- ⚡ JavaScript
“没啥难的,”你可能会说。但现在没人只用HTML和JavaScript写网页了。开发网页现在用的不仅仅是库,而是完整的框架,比如React、Angular或Vue ⚛️。而且网页也不再只是网页,而是完整的Web应用,有自己的打包、测试和范式。
纯CSS也很少有人直接写了。现在有CSS预处理器帮忙生成CSS,还有完整的CSS框架。甚至连邮件也有专门的CSS框架,让你的邮件在浏览器和大部分邮件客户端都能漂亮显示 💌。
用纯JavaScript也很少了,很多大型Web应用都是用TypeScript写的,然后编译成JavaScript。你懂的...
3. 互联网和基础设施
客户端和服务器的通信,听起来很简单,但其实它们的关系也发生了变化。
你的产品很可能会部署在现代数据中心里。全球很多公司都提供各种托管服务,不管是在他们的服务器上,还是在你自己的物理服务器上。想要什么服务,花多少钱都行。
物理服务器不再是真正的“实体”了。现在的现代数据中心都提供虚拟服务器租用。虚拟服务器其实就是虚拟机,在一台物理服务器上可以跑很多个。这样升级也方便,只要多加点内存,几分钟就搞定 ⏱️。
不过,这种方式也逐渐过时了,现在流行的是“云”——你的产品不只是部署在虚拟服务器上,而是充分利用云数据中心的各种基础设施和服务。
比如,你需要存储备份,有专门的云基础设施;需要高可靠的数据库,有的云服务能保证99.9999999%的可靠性;Kafka、RabbitMQ、NoSQL都可以轻松用,只要付钱。
这些数据中心和云服务开始成为你产品的一部分。例如,亚马逊在全球有很多数据中心,提供CDN服务:你的公共内容会在所有亚马逊数据中心缓存,全球用户访问速度更快 🛰️。
或者,你可以通过Amazon Gateway API把你的API请求转发到不同的服务,灵活配置。可以分散负载、抵御DDoS攻击、自动上传文件、智能缓存,很多功能 🛡️。
所以,客户端和你的服务之间会有很多“智能通信”,这些都可以配置。即使你不自己设置,也要知道它们存在,并且会影响你的程序运行。
我们还没说到路由器、5G基站、卫星、海底光缆这些东西。你发个视频流给客户端,结果因为网络差,连接断断续续。猜猜,谁来解决这个问题?当然是你啦 😅
4. 服务器
“服务器”这个词可以指很多不同的东西。了解一些常见的类型会很有帮助。
- 🖥️ 物理服务器
物理服务器就是一台硬件设备,是一台有CPU、内存、存储的电脑,用来处理数据和运行各种程序。这些服务器放在数据中心,提供网站、应用、数据库等服务的算力。 - 🪐 虚拟服务器
虚拟服务器是用虚拟化技术在物理服务器上模拟出来的“虚拟机”。一个物理服务器可以划分成多个虚拟服务器,每个都像独立的电脑,有自己的操作系统,可以单独重启和配置。 - 🕹️ 程序服务器(比如Nginx)
这是专门用来处理请求的程序,比如Nginx。它可以作为Web服务器,也能做反向代理、负载均衡、邮件代理等,架构中很重要。 - 💾 数据库服务器
专门用来存储和管理数据库的服务器。它负责存储数据、处理请求,保证数据的安全和可靠。比如MySQL、PostgreSQL、Oracle、SQL Server。
在数据中心里,可能会有一台虚拟服务器跑你的C#和ASP.NET Core项目。它会连接数据库,通过Nginx或Azure Application Gateway接收请求,把日志发到Azure Monitor或Splunk等监控系统 📈。
正是因为你的代码,数百万用户会满意。他们用你的服务,付钱,老板也会满意。公司股票涨,你拿奖金,大家都开心 💸。这就是行业里的“循环幸福” :)
GO TO FULL VERSION