2.1 现代产品
现代产品没人叫程序了。现代产品可以包括几十个程序、上百个互联网服务和大量由云数据中心提供的API(也叫数据处理中心),它们在那里面运行。
许多现代产品(如果不是全部的话)都按照 客户端-服务器范式工作。就是说在你的设备上 (手机,笔记本,电脑)有一个程序负责跟用户(你)沟通,关键功能则在远程服务器上处理所有重要的事情。
有时候你的客户端可以与多个独立的服务器交流,或者一个产品的服务器可以联系另一个产品的服务器。 这样就形成了一个由客户端和服务器组成的全球网络,它们相互协作。
因此,可能更好地描述现代应用程序模型是 客户端-互联网-服务器范式。因为那里有太多复杂的通信了。甚至出现了所谓的“智能通信渠道”,它们能自动决定何时向谁发送请求。
2.2 客户端
客户端程序可以大致分为四类:
- 桌面客户端 — 运行在计算机上的程序。
- 移动客户端 — iOS 或 Android 应用程序。
- 网络客户端 — 在浏览器中运行的网站/网络应用。
- 服务器客户端 — 在另一台服务器上运行的应用程序。
而其中每一个又可以细分成不同部分。例如, web客户端是一个网站或web应用程序,因此它是由 浏览器和加载到其中的网站组成的。浏览器也是 各不相同的,可以有不同的工作方式。
但即使我们用最常见的浏览器,还有加载到其中的网站。网站通常由三部分组成:
- HTML
- CSS
- JavaScript
“没有什么比这更简单的了,”你可能会说。不过现在没人只用HTML和JavaScript手写网站了。开发网站现在不仅仅使用库,还用完整的框架,比如React、Angular或Vue。现在的不是网站,而是功能齐全的web应用程序,带有自己的构建、测试和范式。
纯CSS也没人用了。已有CSS预处理器帮助生成CSS,还有完整的CSS框架。甚至连email都有专用的CSS框架,以便你的邮件在浏览器和大多数邮件客户端中看起来都很漂亮。
纯JavaScript也很少有人写了——所有大型web应用程序都是用TypeScript创建的,然后编译成JavaScript。你懂的...
2.3 互联网和基础设施
客户端和服务器的通信—有什么能比这更简单的呢?但即便在它们的关系中,一切都发生了变化。
你的产品很可能会托管在某个现代数据中心。全球许多公司提供各种产品托管服务,无论是在他们的服务器还是在你们自己的物理服务器上。只要你出钱,他们能满足你所有愿望。
物理服务器不再是物理的。所有现代数据中心都提供虚拟服务器租赁。虚拟服务器就是某种虚拟电脑,在一个物理服务器上可能有几十个。但是,这在服务器升级方面很方便。如果你需要更多内存,可以在几分钟内为你的虚拟服务器增加内存。
但这种方法也已经过时了,现在流行的是迁移到云端——这意味着你的产品不仅在数据中心的虚拟服务器上部署,还积极使用这些数据中心的大量基础设施和服务。
你需要一个用于存储备份的服务器吗—云端有现成的便捷基础设施。你需要可靠性99.9999999%的数据库吗? 也有这样的服务。Kafka、RabbitMQ、NoSQL?一切都已经存在并易于配置。 只要花钱就行。
这些数据中心和云已经开始成为你产品的一部分。例如,Amazon在全球有大量的数据中心,所以他们提供CDN服务:你的公共内容会在所有Amazon数据中心缓存,你的全球用户会更快获取它。
或者你可以通过Amazon Gateway API服务来处理你应用的API请求,这样可以非常灵活地配置你的服务。可以分配负载到不同的服务,反射DDoS攻击,自动化文件上传,配置智能缓存,还能做很多其他事情。
因此,在客户端应用程序和你的服务之间出现了大量的“智能通信”,这些可以并且需要进行配置。即使你从未亲自进行过这种工作,你也应该知道它们的存在并可能对你的程序的工作有显著影响。
而且我们还没涉及到路由器、5G基站、卫星和海底光缆之类的话题。你从服务器向客户端发送视频流,而由于客户端连接不佳并频繁断线导致故障。猜猜看,谁来解决这个问题?
2.4 服务器
单词"服务器"可能隐藏着完全不同的概念。了解最常见的一些概念对你会很有帮助。
物理服务器物理服务器是指一台独立的计算机设备,具有处理器、内存、存储等资源,负责处理数据并支持各种软件应用的运行。这些服务器安装在数据中心,为网站托管、应用、数据库等服务提供计算能力。
虚拟服务器虚拟服务器是一个在物理服务器环境中运行的软件模拟服务器。通过虚拟化技术,一个物理服务器可以被划分成多个独立的虚拟服务器,每个虚拟服务器拥有自己的操作系统,可以独立重启和配置。
服务器程序(例如,Nginx)服务器程序,如Nginx,是用于处理对web资源请求的服务器软件。Nginx广泛被认为是一个web服务器,它还可以在微服务架构中作为邮件代理服务器、反向代理服务器和负载均衡器。
数据库服务器数据库服务器是一种专门用于管理数据库和处理数据请求的服务器。它提供数据的集中存储和处理,通过网络提供数据访问。数据库服务器支持事务处理、数据搜索和变更,并确保信息存储的可靠性和安全性。数据库服务器的例子包括MySQL、PostgreSQL、Oracle Database和Microsoft SQL Server。
在某个数据中心的某个虚拟服务器上,你的Python和Django项目将运行。它将与数据库交互,接受来自NginX的请求,并将操作日志发送到Splank。
但正是由于你的代码,数百万用户将会为你的产品感到高兴。他们会使用产品,为其付费,而在这种情况下,产品的拥有者也会高兴。公司的股价会上涨,你将获得股票分红,也会感到高兴。简直是自然界的幸福循环 :)
GO TO FULL VERSION