适合个人网站的云服务组合

标签: 个人网站 服务 组合 | 发表时间:2023-12-21 08:00 | 作者:
出处:https://zgq.ink/
回想起来我折腾博客和各类网站已将近 10 年光阴,在维护 0xFFFF 的几年来,也尝试过各类不同的建站方案。当前用到的各类服务,综合速度和成本而言,感觉可能的选择方向差不多已经成型,可以做一个总结。
若你也想低成本搭建属于自己的网站,且想拥有不俗的访问速度,这里的方案也许可以是你的一个参考。

基本结构

抽象地说,运行一个网站需要的能力主要分两大块,一是域名与 DNS 解析,二是负责处理浏览器请求的服务器端。从需求来看,域名和 DNS 的能力相对比较固定,而服务器端需要的能力就比较多样,按角色和常用的业务来区分,可以分为这几类:
  1. 接入层网关、反向代理:接收用户流量,转发到对应的服务
  1. 静态页面:HTML 网页 / Jamstack 应用的 Service-side Rendering
  1. JS / CSS 等:通常会通过第三方域名 CDN 分发,提高网页的打开速度,减小对主站的依赖
  1. 媒体类附件:网站流量消耗的大头,通常托管在对象存储,也可通过 CDN 分发
  1. 动态服务:当一个网站需要交互的能力,需要有服务承载相关的 API 接口
动态服务而言,大致可以按“无状态服务”和“有状态服务”去区分,无状态服务可以随时创建和销毁,有状态服务则需要持久化服务产生的数据。部分服务可能还需要数据库和缓存服务等的支持,类似 MySQL、PostgresSQL、Redis 等等。
当前云计算已经足够发达,基本你能想到的点,都有对应的云服务提供,因此也可以根据实际需要和网站的功能,来选择合适的服务去支撑。写这篇文章的主要目的,也是分享我当前在用的服务,以及选择 / 不选择它们背后的一些考虑点。

DNS 与接入层网关

DNS 方面我选择 DNSPod,考虑点在于它有中国大陆内的解析节点,并且在专业版可以支持全球服务器的解析,价格还可接受。最关键是它提供了精细化地在不同的地域去做分流解析的能力,这对于部署在海外的站点是非常有利的,可以针对大陆用户去专门部署优化的线路,相比于 Cloudflare、 ClouDNS 等会更加灵活。
接入层网关方面,关注目标在于,地域上离用户越近越好,可以针对不同地域用户使用针对其最优的线路,以减少网络层面的不确定性,尽可能和用户维持稳定的连接。对应的服务选择,一是支持动态请求链路优化的 CDN 服务,二是网络条件较好的云服务器,三是现今一些支持边缘计算的网站服务商(如 Vercel、 Fly.io 等),通常它们的边缘节点之间的链路会做一些特殊优化,可以合理使用利用起来。
这里我选择二、三两种方案结合,以一个阿里云香港的轻量服务器来承接来自大陆的流量,其他地域的流量通过 fly.io 承接,用 DNSPod 实现按地域的分流。目前(2023年底)的阿里云 hk 轻量服务器的网络质量非常优秀,全大陆访问的延迟可以 控制在 50ms 内;Fly.io 的好处则在于,他们有一个连通全球的边缘计算网络,理论上我只需要在我想要的地域部署服务,其他地域可以直接通过边缘节点接收用户请求,然后再在内部转发到服务所在地域的计算实例,网络请求相对也会更加可控一些。两者结合下来,实现各自中国大陆内外优势的互补。
对于反向代理的程序,这里直接用 Caddy Server,无论在轻量服务器还是 fly.io,只需做一些简单配置,就能实现流量转发,并自动申请签发配置好 https 证书,非常简单方便。

静态页面

众所周知,大部分网站、Web App 等实质上由静态的 HTML 网页以及各种脚本、样式图片音频资源等组合,因此托管静态页面和资源,应该是建站最基本的需求。
这方面的托管,基本没什么障碍的点,无非就是维护成本方面的差异,无论 Vercel、 Fly.io、 GitHub Pages、 Cloudflare Pages,还是自己架 HTTP 服务器部署,都没有什么毛病。部分服务还提供了适应静态页面渲染的边缘节点。
当前我是用 Vercel 多一些,本博客和 0xFFFF Wiki 都放在这上面,主打一个简单直接方便,push 代码直接就能自动触发构建和部署,非常省心。

静态资源、CDN

浏览器下载 HTML 后,通常需要加载脚本、样式、图片等资源,这会带来一个额外的流量消耗。接入层网关本身的带宽成本相对要贵一些,且访问速度方面不太可控,通常会单独对 HTML 外的资源,去根据访问情况做分布式的缓存。这也是 CDN 的一大作用,CDN 以大带宽低成本的优势,分摊源站点的流量,提升用户的访问体验。
这里我主要选择了 Bunny CDN,以及腾讯云 CDN 做大陆的静态资源加速。前者在价格和速度方面非常有优势;后者结合已备案域名,在大陆的访问体验更佳。主要考虑的点还是在速度方面的提升。

媒体类附件

一个网站的静态资源通常分为两部分,一部分是网站本身业务逻辑的一部分,这部分可以提前处理好交给服务托管;还有一部分是用户操作过程中新增的上传、后台处理需要的图片等,这种类型的数据就很适合放在对象存储上。
适合个人站长的选择不是太多,这方面鼻祖自然是 Amazon S3,不过传闻贼贵,不是一般学生可以承担的那种;另外还有国内大厂的 COS / OSS,Cloudflare R2,Backblaze B2 等。
Cloudflare R2 是很好的选择,它流量费全免的机制非常适合新手上路研究,但 Cloudflare 要求绑定的域名的 NS 记录都指向他们的 DNS 服务器。也就是说会和 DNSpod 的分流策略所冲突,无奈忍痛放弃。
经过一番尝试,发现 Blackblaze B2,这一服务在成本方面极具优势,虽然没有 Cloudflare 的 CDN 免流量费香,配合 Bunny CDN 去处理,效果还挺不错,0xFFFF 主站重度使用半个月下来,流量也才 2G 左右,费用 0.04 美分。
注册时记得选择 US West,距离大陆近一些,注册成功后改不了。注册时记得选择 US West,距离大陆近一些,注册成功后改不了。
Bunny CDN 和 Backblaze B2 有 合作,可以优化接入相关体验。B2 官方还会有一些教程和文章,做的还挺贴心细致的: AWS CloudFront vs. bunny.net: How Do the CDNs Compare

动态服务

对于功能更强大的网站,静态的网页文件不太能满足需求,这时候就需要有后端服务支持,通常这类后端服务可能会提供以下的能力:
  1. 动态生成 HTML
  1. 根据请求 API,动态生成响应,驱动业务逻辑
  1. 可能根据需要,生成其他资源(图片 / 待下载的文件等)
如开头所说,动态服务有无状态服务和有状态服务两种:
  • 无状态服务:fly.io 会更适合,它可以以 Firecracker 虚拟机的形势一键部署运行 Docker 镜像,并快速部署到合适的地域,减少网络延迟的影响
  • 有状态服务:用一个单独的 VPS 来处理比较合适,这里我继续用了阿里云香港的轻量服务器,业务规模不大的情况下,一台机器足矣。这里可选项有很多,腾讯云、AWS 的 LightSail、Vultr、Linode 等也是不错的选择,最重要是稳定和可靠
一个可行的方向是尽可能把服务做得无状态,可以部署到边缘节点的话速度会更具优势(但同时也需要考虑不同地域之间状态共享的问题)。

数据库

我原本比较倾向在本机去部署网站的数据库,但经历过一次误操作导致  论坛数据丢失 的事件,也让我心有余悸,一方面日常备份得加强,另一方面也在考虑把数据库维护的工作交给专业的 DBA 服务。
这类服务通常很贵很贵,但感谢互联网,低成本的 Serverless 托管 DB 方案还是有的,目前看  TiDB Cloud 和  PlanetScale 的免费额度能覆盖到,大概一点缺点是公网访问数据库,延迟会对应提高,需要做好 cache 的方案。目前亚太地区只有新加坡和东京机房,可能需要考虑把计算实例挪到新加坡区域(接入层可以不动)。
有的站点会依赖 Redis 做 cache 或者 DB,这时候也需要考虑备份和托管的方案,目前 Upstash Redis 应该还不错,看 fly.io 和他们合作搞了 内部方案。
如果业务涉及到大量 SQL 查询(博客 / 论坛等),还是需要单机部署数据库,那就需要从备份入手。这里的一点经验也是,在跑数据库的容器加入定时任务,然后定期 mysql dump 出最新的 sql,gzip 压缩作备份,再保存到备份专用的对象存储桶中,备份软件推荐 Deplicati,存储桶我用的腾讯云的 COS。

引荐链接

若本文对你有所帮助,有需要的话,可以通过下方的引荐链接注册对应服务,可以为我多增加一些账户余额:

参考

 

相关 [个人网站 服务 组合] 推荐:

适合个人网站的云服务组合

- - gq's blog
回想起来我折腾博客和各类网站已将近 10 年光阴,在维护 0xFFFF 的几年来,也尝试过各类不同的建站方案. 当前用到的各类服务,综合速度和成本而言,感觉可能的选择方向差不多已经成型,可以做一个总结. 若你也想低成本搭建属于自己的网站,且想拥有不俗的访问速度,这里的方案也许可以是你的一个参考.

12个精美的HTML5个人网站欣赏

- Amo - HTML5研究小组
随着IE9、Chrome、Firefox的不断更新,网页的制作技术同样发展很快. HTML5是现在Web开发领域的热点,更多的开发人员开始使 用HTML5来开发交互性强、效果出众的Web应用和游戏. 本期的HTML5 网站大观要与大家分享12个精美的HTML5个人网站作品. 希望这些HTML5 网站实例能帮助大家更好的学习HTML5网站制作.

30个不错的设计师个人网站设计案例

- emilo - 创意悠悠花园
设计师自己的个人网站会怎么设计呢. 今天分享:30个不错的设计师个人网站设计案例,希望其中有你喜欢的,或者可以给你带来灵感的. Read the rest of 30个不错的设计师个人网站设计案例 (35 words). © emilo for 创意悠悠花园, 2011. Post tags: 个人网站, 设计师, 设计案例.

如何用用WordPress博客模板搭建个人网站?

- - CSDN博客推荐文章
个人博客型网站建设的条件:域名+空间+博客程序 (免费开源的或者商业博客程序).    三步操作,快速建立.   首先,我们从wordpress.org的官方网站上下载最新版. A、登录你的空间管理面板,为WordPress建立一个数据库,以及一个具有访问和修改权限的MySQL用户.   如果您的主机提供商使用  cPanel,您可以遵照下面的说明,来创建您的 WordPress 数据库和用户.

教你免费且快速地搭建个人网站

- -
GoileoLee的投稿,分享了如何拥有自己的专属域名,大家赶紧试试看. GoileoLee的博客地址:. 这篇文章主要讲如何拥有自己的专属域名. 你可以在属于自己的网页上展示你的 github、微信、微博、QQ、Twitter、Email等信息,但主要是展示自己的作品. 玉刚大神说过:树立个人品牌,让名企hr们主动来找你.

[组图]国外最流行的五种个人网站设计风格

- princewzy - cnBeta.COM
对于一位网页设计师来说,要展示您的工作,拥有一个个人网站至关重要. 一个网站设计是否有效,关键是如何布置网站的内容. 下面我们将介绍一些设计师和艺术家的个人网站的几种布局,并看一看每种风格的若干例子.

HTML5网站大观:12个精美的 HTML5 个人网站欣赏

- Eros - cnBeta.COM
本期的 HTML5 网站大观要与大家分享12个精美的 HTML5 个人网站作品. HTML5 是现在Web开发领域的热点,更多的开发人员开始使用HTML5来开发交互性强、效果出众的Web应用和游戏. 希望这些 HTML5 网站实例能帮助大家更好的学习HTML5网站制作.

个人网站,怎么应对大流量,怎么做负载均衡?

- - 知乎每日精选
应对负载和数据压力,分几个层面. 要理解硬件的瓶颈,内核的特性,压力构成,对硬件适当提升;典型的如淘宝和新浪微博,使用fusion-io做固态存储,i/o支撑能力提升了几十倍,很多优化就简单多了,当然,人家对整个mysql的多线程写入机制,cpu寻址方式,顺序写和随即写的存储分布也做了非常多的工作,不仅仅是购买硬件而已,但是核心是,理解硬件,理解系统级的处理机制,来做优化.

理解数据库中的undo日志、redo日志、检查点 | 乐天的个人网站

- -
数据库存放数据的文件,本文称其为data file. 数据库的内容在内存里是有缓存的,这里命名为db buffer. 某次操作,我们取了数据库某表格中的数据,这个数据会在内存中缓存一些时间. 对这个数据的修改在开始时候也只是修改在内存中的内容. 当db buffer已满或者遇到其他的情况,这些数据会写入data file.

服务禁语

- tiancaicai - 白板报
前几天在一个公交汽车站拍到了一张规定,里面规定了服务禁语和礼貌用语,看了大乐. 3、乘车高峰车厢内拥挤时,禁语:“快往里走,站在前面又没有钞票检. ”文明语:“请尽量往里走,照顾没有上车的乘客”. 4、车子抛锚,禁语:“车子抛锚没有办法,人都要生毛病的,车子坏了也正常. ”文明语:“对不起,车子出现故障修一下,请大家理解.