在企业业务上云的过程中,很多团队最先遇到的问题并不是“如何写代码”,而是“如何把服务稳定、安全、可扩展地运行起来”。本文将以一个典型 Web 应用为例,介绍如何基于腾讯云的云服务器 CVM、负载均衡 CLB、对象存储 COS 等产品,搭建一个基础但相对完整的云上 Web 服务架构。
很多个人项目或早期业务会直接购买一台云服务器,然后在上面部署 Nginx、后端服务和数据库。这种方式简单直接,但存在明显风险:
一旦服务器宕机,整个服务都会不可用;当访问量上升时,单机资源很容易成为瓶颈;静态文件和业务服务混在一起,也会增加运维复杂度。
因此,在生产环境中,更推荐将 Web 服务拆成几个部分:入口流量层、业务计算层、静态资源层和数据存储层。
一个常见架构如下:
用户
|
v
负载均衡 CLB
|
v
多台云服务器 CVM
|
+---- 业务服务
|
+---- 数据库 / 缓存
|
v
对象存储 COS:图片、视频、附件、静态资源CVM 用于运行实际的业务程序,例如 Java、Node.js、Go、Python 或 PHP 应用。相比本地服务器,CVM 的优势在于创建快、弹性强,并且可以根据业务压力灵活调整配置。
在实际部署时,建议至少准备两台 CVM,并部署相同版本的业务服务。这样可以避免单点故障,也方便后续滚动发布。
CLB 位于用户和云服务器之间,负责把请求分发到多台后端服务器上。它可以根据健康检查结果自动摘除异常实例,提升整体可用性。
例如,当某一台 CVM 上的服务进程异常退出时,CLB 可以检测到该实例不可用,并停止向它转发流量。服务恢复后,再重新加入转发列表。
对于图片、视频、日志包、用户上传附件等文件,不建议直接存放在 CVM 本地磁盘中。原因很简单:服务器扩容后,文件分布会变得混乱;服务器故障时,文件也可能丢失。
COS 更适合存储这类非结构化文件。业务服务只需要保存文件地址或对象 Key,真正的文件内容交给 COS 管理。对于访问量较大的静态资源,还可以配合 CDN 加速访问。
首先创建两台 CVM,并安装基础运行环境。以 Node.js 应用为例,可以执行:
sudo apt update
sudo apt install -y nodejs npm nginx然后将业务代码上传到两台服务器,并使用 PM2 或 systemd 管理进程:
npm install
npm run build
pm2 start app.js --name web-service为了便于负载均衡健康检查,可以提供一个简单的健康检查接口:
app.get('/health', (req, res) => {
res.status(200).send('ok');
});在每台 CVM 上配置 Nginx,将外部请求转发到本地应用端口:
server {
listen 80;
server_name _;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /health {
proxy_pass http://127.0.0.1:3000/health;
}
}配置完成后重启 Nginx:
sudo nginx -t
sudo systemctl reload nginx创建 CLB 后,将两台 CVM 添加为后端服务器。监听器可以选择 HTTP 80 或 HTTPS 443。
健康检查路径建议配置为:
/health当 CLB 能够正常访问该接口时,说明后端服务已经可以接收流量。
业务系统中的上传文件可以直接存入 COS。例如,用户上传头像后,后端服务将文件上传到 COS,并将返回的访问地址保存到数据库。
这样做的好处是:
文件不依赖某一台 CVM;扩容服务器时不需要同步本地文件;大文件访问不会占用业务服务器带宽;后续可以平滑接入 CDN。
云上服务上线前,安全配置非常重要。建议至少完成以下几项:
第一,安全组只开放必要端口。例如 HTTP 80、HTTPS 443、SSH 22。数据库端口不要直接暴露到公网。
第二,SSH 登录建议关闭密码登录,改用密钥登录,并限制登录来源 IP。
第三,生产环境必须使用 HTTPS,避免用户数据在传输过程中被窃听或篡改。
第四,应用配置中的数据库密码、密钥、Token 不要直接写入代码仓库,可以通过环境变量或配置管理服务注入。
第五,开启日志与监控,及时发现 CPU、内存、磁盘、网络和接口错误率异常。
当业务访问量上升时,可以从以下几个方向扩容:
如果 CPU 或内存压力较高,可以增加 CVM 数量,并加入 CLB 后端;如果静态资源访问量较大,可以使用 COS + CDN;如果数据库压力较高,可以考虑读写分离、缓存或数据库实例升级;如果部署频繁,可以引入自动化发布流程,例如 GitHub Actions、CODING DevOps 或自建 CI/CD。
这套架构的优点是扩展路径清晰。早期可以用较低成本启动,后续也可以逐步演进到更复杂的微服务、容器化或 Serverless 架构。
本文介绍了一种基于腾讯云搭建 Web 服务的基础架构方案:使用 CLB 作为统一流量入口,使用多台 CVM 承载业务服务,使用 COS 存储静态文件和用户上传内容。
相比单机部署,这种方案具备更好的可用性、扩展性和运维灵活性。对于中小型 Web 应用、企业官网、管理后台、内容平台等场景,这是一种成本适中、落地简单、后续可演进的云上部署方式。
在实际项目中,架构设计不必一开始就追求复杂。更合理的做法是先保证服务稳定运行,再根据业务增长逐步引入缓存、消息队列、容器服务、自动化发布和可观测性体系。这样既能控制成本,也能让系统持续演进。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。