公众号旧文
半年后,我恍然大悟:原来服务器没那么神秘
年初第一次接触服务器的时候,我认为它是很高深的东西。
看到别人搭建网站、部署服务,好像背后有一套复杂的技术体系。
服务器、Linux、端口、防火墙、域名、DNS、Docker、Nginx……
每一个名词都像一道门槛,让人觉得距离普通人很远。
近半年一直在折腾各种东西,我才慢慢发现:
服务器没有那么神秘。
服务器本质上,就是一台长期运行的电脑,而电脑里面运行着一些程序。
仅此而已。
一、服务器的本质:运行一个程序
相信你第一次接触服务器,也被各种概念给吓住了。
什么:
- 云服务器
- VPS
- 容器
- 集群
- 负载均衡
- 微服务
这些词听起来很复杂。
但最底层的逻辑则非常简单:
你写了一个程序。
比如:
python3
app.py
程序启动以后:
监听 8000 端口
等待用户访问
返回数据
这台机器就具备了服务器的功能。
例如一个网页服务:
浏览器
↓
服务器IP:8000
↓
你的Python程序
↓
返回网页
一个DNS服务:
用户查询
↓
53端口
↓
DNS程序
↓
返回IP地址
一个图片服务:
上传图片
↓
Web程序
↓
保存文件
↓
返回访问地址
所谓服务器,只是这个程序一直运行,并且别人可以访问它。
二、systemd 才是让它变成服务的关键
当然,直接运行:
python3
app.py
是不够的。
因为:
- SSH断开怎么办?
- 程序崩溃怎么办?
- 服务器重启怎么办?
于是出现了 systemd。
systemd 就像一个管理员。
你告诉它:
这个程序很重要,请帮我一直运行。
例如:
[Service]
ExecStart=/usr/bin/python3 /opt/app/app.py
Restart=always
然后:
- 程序退出 → 自动启动
- 服务器重启 → 自动启动
- 查看状态 → 一条命令
systemctl status app
这时候,一个普通程序,就变成了一个稳定运行的后台服务。
三、Docker 也没有那么神秘
之前看到 Docker,我也觉得很复杂。
什么:
- 镜像
- 容器
- Dockerfile
- compose
后来发现,本质也是管理程序运行环境。
比如你的程序需要:
- Python 3.12
- 某些依赖库
- 某些配置文件
Docker 只是把这些东西打包起来。
换一台服务器:
docker compose up
程序又跑起来了。
它解决的是怎么保证我的程序在另一台机器也能正常运行。
四、DNS、域名,也都是程序
以前觉得域名解析非常神秘。
后来自己搭建权威 DNS 才发现 DNS 服务器也是一个程序。
用户问:
www.example.com 的IP是多少?
DNS程序回答:
123.123.123.123
就这么简单。
域名系统看起来庞大,是因为全球很多服务器共同协作。
但单独看一个DNS服务,就是监听53端口,然后返回数据。
五、半年后的最大感悟
现在回头看,不要把服务想象成一个神秘的东西。
它就是一台电脑。
电脑里运行程序。
程序监听端口。
systemd 保证程序活着。
域名让别人找到它。
数据库保存数据。
网络负责传输。
所有复杂系统,拆开以后,都是这些简单组件组合起来的。
结语
半年前,我看到服务器的时候,会觉得:
这是什么高级技术?
半年后,我看到一个新服务,第一反应变成:
它运行的是什么程序?
监听哪个端口?
数据存在哪里?