前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。
云服务器是远程向用户提供计算资源的互联网基础设施。我们可以将云服务器视为一台私人计算机,可以像本地计算机(例如笔记本电脑或台式机)一样设置和控制它。这篇概念性文章概述了云服务器架构的几个关键组件、云服务器与其他云产品之间的区别,以及如何确定哪种云产品适合我们的网站或 Web 应用程序。
请注意,我们有时会看到“云服务器”、“Web 服务器”和普通“服务器”互换使用。通常,云服务器是指整个 Linux 环境,或者实际上是整个计算机。实际上,云服务器将始终在更大的服务器集群中作为虚拟机或模拟计算机的软件系统运行,这一过程称为虚拟化。
要了解云服务器,了解在云中运行的软件类型会很有帮助。
操作系统:要设置云服务器,我们需要做的第一件事就是安装操作系统。如今,由于广泛的支持、免费或灵活的许可以及服务器计算中的普遍存在,几乎所有云客户都使用基于 Linux 的操作系统(例如 Ubuntu 或 Rocky Linux)。
服务器端软件:这是一类设计为在云环境中运行的软件,该环境没有桌面环境或连接的显示器。通常,这意味着该软件是通过命令行界面安装和配置的,然后由普通用户通过网络浏览器或其他应用程序访问。尽管我们在云服务器上安装的软件和工具类型可能有很大差异,但了解一些关键组件将有助于我们做好规划和设置自己的云服务器的准备。
Web 服务器:该软件使我们的云服务器能够使用 HTTP 协议与互联网上的用户或应用程序进行通信。服务器端软件(如 Web 服务器)必须以明确定义的方式响应来自客户端或客户端软件的某些类型的请求。例如,当用户在 Web 浏览器中输入 URL 时,Web 浏览器(此处称为客户端)向服务器发出请求。作为响应,服务器获取 HTML 文档并将其发送回浏览器,在浏览器中将其作为网页加载。如果我们从头开始设置云服务器来托管网站或 Web 应用程序,则可能需要安装和设置服务器软件,其中Nginx和Apache HTTP Web Server是两个最流行的选项。
API 服务器:API(应用程序编程接口)是一种软件媒介,使应用程序能够相互通信。Web 服务器是一种实现 HTTP API 的 API 服务器。还有许多其他不同类型的 API,使我们的云服务器能够向外部应用程序和数据资源发送或接收数据,例如提取天气数据、航班信息或其他类型的数据以与我们的应用程序一起使用。单独的 API 实现有时也称为 API端点,或简称为“端点”。
数据库服务器:数据库服务器,也称为数据库,是另一种类型的 API 服务器。与可以通过 Web 浏览器访问并通常呈现 HTML 界面的 Web 服务器不同,数据库服务器通常通过数据库查询 API 访问。一些数据库部署将面向外部,并且可以为需要在浏览器中与它们交互的任何人实现自己的 Web 界面,而其他数据库部署可能只能通过这些查询由其他云软件在内部访问。
注意:在不与其他租户共享的专用物理机上运行没有任何类型虚拟化的 Linux 通常称为裸机托管。尽管相对较少的云提供商仍然提供除非常高端之外的裸机服务器,但运行裸机服务器的最常见的现代等效方式是在 Raspberry Pi 上运行 Linux 环境,通常适用于较小的项目。
由于云服务器实际上是一个完整的虚拟计算机,因此可以联系它们来理解其他云产品。例如,一些云提供商将提供专用网络托管或专用数据库托管。任何单独提供数据库或 Web 服务器的产品都有效地抽象出了等式中的实际云服务器。执行此操作的方法有多种,通常仍会涉及虚拟化服务器集群,但原理是一致的。主要区别在于,云服务器(有时称为VPS或虚拟专用服务器,以澄清它是虚拟机)可以以任何方式运行任何软件,而任何其他云产品实际上都是优化和受限的服务器功能的子集。
在过去的几十年里,这些产品的市场发生了很大的变化。在虚拟化广泛应用之前,曾经有一个 Web 主机市场,他们会提供像Nginx(或当时的 Apache)这样的 Web 服务器来支持数十个具有自己独特权限集的不同用户,并为每个用户提供托管服务。 这很方便,因为它不需要用户承担任何服务器管理职责,但实际上它仅限于支持静态网站(即仅 HTML、CSS 和 javascript,没有后端引擎)或嵌入式 PHP 应用程序除了 Web 服务器之外没有任何依赖项。
从那时起,VPS 产品(完整的云服务器)变得更加普遍。致力于运行整个云服务器,尤其是在生产部署中,需要一定程度的 Linux 最佳实践知识,通常在专门的系统管理(“sysadmin”)或开发运营(“DevOps”)角色中正式化,以处理安全性、部署等。能够偶尔或根据需要执行这些角色非常有用,但可能很复杂。考虑到开发大多数软件并不严格需要知道如何与 Linux 服务器或命令行交互,这个很不错。
云服务器通常内置有许多安全功能,无需提供商业规模的生产部署即可在云服务器上安全可靠地运行开源软件。大多数服务器软件包都附带精心配置的默认设置,并经常更新以避免任何安全风险。通常部署这样的防火墙就足够了,ufw
可以单独暴露网络端口以确保服务器安全,或者至少将安全责任转移给 Nginx 等软件的维护人员,Nginx 已在全球数百万台服务器上使用。
还有其他与嵌入式网络主机更具可比性的现代产品。在某些情况下,现代静态网站可以使用现代 JavaScript 功能来完全消除对后端服务器的需求。一些云提供商将这种类型的托管称为“无头 CMS”,并提供其他创作工具和 Web 表单作为更大的软件即服务产品的一部分。
除了这种静态站点功能之外,一些提供商还支持部署所谓的无服务器功能。这些是一次性脚本,可以离散地利用后端服务器功能,并将其部署到可以直接运行它们的环境中。当与静态站点部署一起使用时,这种方法有时称为Jamstack
静态站点和无服务器部署具有高度可移植性,并且与传统 Web 托管一样,它们避免了围绕完整服务器部署的几乎所有安全和维护问题。然而,它们的范围要有限得多。例如,作为堆栈的一部分,我们可能需要以特定方式在 Nginx Web 服务器后面部署 Docker 容器:为此或任何类似的配置,我们需要整个云服务器。
一般来说,任何可以部署到云服务器的软件也可以部署到本地计算机。尽管这些差异可能具有启发性(值得注意的是,许多人不在本地计算机上运行 Linux,并且服务器端软件并不总是打包为直接在 macOS 或 Windows 上运行),但这些差异在实践中很小。这是云服务器的主要价值提供:无论出于何种意图和目的,它都是一台可以做任何事情的完整计算机。
与裸机计算机一样,云服务器的性能将根据其硬件规格而提高,并相应定价。集群内的每个云服务器都分配有一定数量的资源。与裸机计算机不同,云服务器规格可以根据需要快速扩展和缩小。在评估服务器时,我们应该了解这些规范将如何影响我们的需求。
云服务器通常由可用 CPU 核心数量、总可用内存 ( RAM ) 及其附加磁盘存储来配置。虽然磁盘速度和 CPU 速度在现实条件下通常会有所不同,但大多数云提供商都已标准化平均磁盘速度,大致可与消费级固态磁盘驱动器 ( SSD ) 相媲美,CPU 速度可与 Intel Xeon 核心相媲美。一些提供商还会通过允许的磁盘输入/输出操作总数( IOPS )或允许的网络流量总量来限制较低层的云服务器,之后流量可能会受到限制,从而导致某些软件出现瓶颈。
几乎所有的云提供商都允许我们购买额外的存储,例如块存储或对象存储,可以根据需要连接到我们的 VPS。使用此额外存储通常是一个好主意,而不是继续扩展 VPS 的基准存储分配。将所有数据存储在单个根分区上可能会使扩展更具挑战性。
为了能够在开放互联网上访问,云服务器必须分配有公共 IP 地址。这可以是遵循该模式的IPv4 地址123.123.123.123
,也可以是遵循该模式的IPv6 地址2001:0db8:0000:0000:0000:ff00:0042:8329
。几乎所有支持网络的软件都可以直接解析和访问这些IP地址,但是大多数时候,服务器IP地址会在分配的域名后面*,例如https://my_domain.com
. 一些云提供商会自动为每个 VPS 分配一个 IP 地址,有的云提供商可能会要求我们购买 IP 地址并将其单独分配给我们的服务器。这些称为保留 IP*,它们在大型部署中可以更加灵活。
域名通常是使用DNS 记录从单独的注册商那里购买和配置的。
要连接并使用云服务器,我们需要了解如何在本地和远程终端环境中工作。远程终端连接主要使用称为SSH或Secure Shell的协议。与 HTTP 一样,这是最常用的协议之一,尽管 SSH 自然更常由管理员而不是最终用户使用。HTTP 在端口上运行80
(以及 HTTPS 的端口443
)。SSH 通常在端口 上运行22
。
本问概述了评估、使用和理解云服务器的概况。了解产品范围以及部署首选项随时间变化的方式有助于将现有软件文档用于我们自己的用例。