
此博客中用到的技术栈
在它们的强力驱动下,博客系统获得了更快的响应速度
总览
本体:Halo
数据库:PostgreSQL
搜索引擎:Meilisearch
附件储存:AList
虚拟化及环境:Docker
认证系统:Casdoor
GoEdge CDN 内容分发网络
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
此博客及轻雪其他业务所使用的CDN为GoEdge搭建,由007IDC提供的服务器支持
利用开源的GoEdge可以零成本制作自己专属的CDN系统,支持集群式管理和API。
在CDN的支持下,此博客在国内请求全命中缓存的情况下,延迟始终低于0.5s
PostgreSQL 数据库
PostgreSQL 是一个强大、开源的对象关系型数据库系统,拥有超过 35 年的活跃开发历史,因此赢得了可靠性、功能健壮性和性能方面的良好声誉。
选什么数据库不太是软件用户能决定的,不过在我部分项目需要数据库的场景均使用了PostgreSQL或SQLite作为主要储存,MySQL实在太老了,外加不少高级特性容易出问题
Meilisearch 搜索引擎
Meilisearch是一个轻量,高速的搜索引擎。它本身不和数据库一起工作,是一个独立的搜索引擎。
早期我使用过一些纯前端的静态博客,内置的内容搜索效率之低,但是一直得不到改善,后续换了有后端支持的博客,这种情况得以改善。
该功能通过Halo插件Meilisearch支持。谈到Meilisearch,就不得不提到掌上重邮中的搜索功能,作为该项目的后端开发者,最初我们是在后端使用orm+sql进行输入内容匹配和模糊搜索,尤其是模糊搜索,实现起来可能不麻烦,但是在数据量很大的情况下,容易造成一些时间复杂度为O(nm)的逆天操作,导致每次搜索都会很久才能响应给客户端,听前几任的开发者说最长的时候需要查询20秒。于是老登找时间重建索引,引入Meilisearch作为搜索引擎,现在每次查询都能在用户不可感知的时间内返回所有结果,极大优化了用户体验
AList 附件储存
AList是一个支持多种存储的文件列表程序,使用 Gin 和 Solidjs。总的来说就是一个好东西,尤其是喜欢折腾各种网盘和自己部署NAS的用户,也很适合部署在HomeLab。之所以不用Halo内置的附件储存系统,是因为我一般会把大部分资源集中储存在一个地方供我查阅,这是我个人组织文件的习惯。该功能通过Halo插件AList储存库实现。
另外附上我的AList实例地址,使用访客登录可以访问一些我的公开内容:Liteyuki AList
虚拟化技术 Docker
博客本身是跑在Docker容器里的,优势有很多,这样也非常便于部署,如果按照普通方法在Linux上部署也算不上困难,但是非常麻烦,至少我个人不喜欢这样搞,这不是一种技术恐惧,而是单纯觉得没必要。使用docker compose,找个部署目录直接创建一个docker-compose.yml,然后一个命令就可以启动容器。并且用一些工具可以对容器健康度进行检测。关于Docker的其他内容就不多说了。
认证系统
作为一个从高中就开始玩HomeLab的人,部署一堆乱七八糟的服务自然少不了它们自带的认证系统和账号系统,比如网盘,站点管理器,自部署社交平台,Gitea什么的,这种情况下给每个平台单独配置一些个人资料比较麻烦,所以单点登录SSO对我来说就极为便捷,只需要一个账户,即可认证各个平台。常用的SSO协议很多,这里用的是OAuth2,后端使用的软件是Casdoor,不同的软件,OAuth2实现都大差不差的,选择Casdoor倒是因为它界面好看,配置方便,集成的第三方提供者多。同时,通过Halo插件的支持,可以用Liteyuki Passport登录我的博客