建站前必做的优化加速规划

虽然文章主题是《建站前必做的优化加速规划》,实际是《建站前避免采坑的反思总结了》,文章的内容都是建站之后各种教训的积累。

0.背景

网站建设前需要对网站进行内容主题的定向、目标群体的定位分析、结构层次(即菜单导航栏)和外观式样的设计、再到域名的注册、主机服务器的购买挑选、SEO 关键词的选择以及围绕 SEO 的文章链接形式的选定、文章内容的延续性等等,这些方面相关的文章教程有很多,我也才疏学浅写不出新义,就不再狗尾续貂了。但是有一个很重要的细节,即网站建设前就进行加速优化考虑的却很少见,常见的加速优化都是基于建站后的,属于亡羊补牢吧。而网站的页面载入时间是关乎用户体验至关重要的因素,可谓是2秒钟的生死时速,需要在2秒钟内网页美好呈现,快节奏的社会里网站也要求快一点,再快一点……所谓凡事预则立,不预则“折腾死人”,所以网站建站前就进行加速优化方面的总体规划可以达到事半功倍的效果,因此也很有必要。

website_优化_加速

1.优化加速之网站架构规划

网站架构不仅仅涉及到整个网站的稳定性、可靠性和负载能力,还影响着后续的扩展升级,数据的安全和响应时间都有着重要的意义,架构也可以说是优化调整的基础,不同的架构决定着不同的优化加速的方向和重点。我这里主要探讨的是个人网站的架构发展规划,来源于自己的折腾历程,大型网站的架构不熟悉。

1.1.网站架构——入门基础

初始阶段,一般先是建个小型网站或者个人博客论坛等练练手艺打打基础,是从感性认识上升到理想实践的第一步了,这个阶段属于投石问路,在这个阶段需要为网站加速而提前规划的内容不多。主要就是平台的选择了,目前主流的是 LAMP = Linux + Apache HTTP Server + MySQL(或 MariaDB) +PHP 或者 LNMP = Linux + Nginx + MySQL(或 MariaDB) +PHP 而且都安装在一台服务器主机中,后者中的 Nginx 是广泛使用的小型轻量化多功能 WEB 服务软件,占有资源较少,一定程度上能够提高网站的响应速度。但是,这个阶段 WEB 服务软件和数据库服务软件以及动态语言服务软件(如 PHP )等因为都在一台服务器主机上,因此服务器主机的负荷能力是关注的重点了,另外定期或不定期备份的数据库备份、资源备份很有必要了,否则数据和资源丢了就一夜回到解放前了,建议搭配云盘进行数据备份,如 DropBox、Onedrive等,注意这种备份不是实时的,是周期性触发的比如一天一次。

1.2.网站架构——初级演化

有了前面的基础性的积累,肯定期望着自己的网站能够更好更稳定的发展了,而发展的基础是资源数据的积累,因此怎么保证数据的可靠实时备份就显得尤为重要了。对于使用了 MySQL(或 MariaDB)数据库的,可以利用它的二进制日志功能进行主从复制,主从复制至少需要2台服务器主机,一台依然是全功能服务器主机,安装了 LAMP 或 LNMP 的提供全功能服务,而另一台可以是弱功能主机,仅仅安装 MySQL(或 MariaDB)用于数据的同步备份。在有了2套数据库系统之后,可以进行读写分离的优化了,网站的运营时候,一般都是读取数据远多于写入数据,读写分离实际上是将单台服务器主机的负荷进行的转移和分担。可以将 A 服务器主机指定为读和写数据库主机,B 服务器主机仅仅负责从 A 服务器自动同步数据和提供读取服务。还有一种主从复制的升级版即主主复制,实际上是两台服务器主机互为主从复制。至于非数据库的资源文件部分,采用 Rsync 进行同步,不一定需要实时同步,因为个人站点读为主,写为辅,而且是写数据库居多,因此非数据库内容的资源文件,可以定时同步,但主动或已知修改时立即手动同步。
默认方式的主从复制是异步的,主库不检测不关注从库是否写入成功,因此可能造成数据丢失;解决办法是半同步模式的主从复制,半同步复制需要接收到从库的正确反馈,才会回复” OK “给数据写入的操作人员,如在博客下正在留言的用户,半同步复制需要安装专用插件软件;更高级的是 GTID 复制,更加安全有效的保证数据的一致性,而且不需要插件,配置上也不复杂,强烈推销一下!

1.3.网站架构——中级演化

在初级的基础上架构上,利用 Docker 技术,2台套 LNMP,数据库主主复制GTID,辅以智能路由(可能需要搭建自己的 DNS 服务器)或者 云服务器上的云负载均衡服务(或大牌服务器主机商的足够余量的反代服务器),进行合理的路由和负荷选择分配,免费的 CDN (或/和 图床 or 对象储存)也可以来一份试试。再来个第三台服务器主机进行数据库及资源文件的备份存档用。
在没有使用专业的负载均衡云服务器时,或者也没有自己组建高度可靠的单服务器的反向代理时,那么这一阶段的关键是 DNS 服务了,因为需要它对2台套 LNMP 服务器主机挑选用于对外提供服务,因此需要它智能一点,再智能一点……简单的智能 DNS 服务器就是依据 IP 地址逐一进行轮询式的负载均衡(或者简单粗暴点,主域名套 CNAME 域名,然后域名解析到 CNAME 时每次都需要来 DNS 服务器获取主域名 IP ,这样修改主域名 IP 时,不怕缓存的影响),高级的可以依据链路负荷、服务器响应时间、用户来源IP(需要支持 EDNS 技术的 DNS 服务器) 、服务器健康状态做动态负载均衡

1.4.网站架构——高级演化

个人网站的架构的高级演化,暂未实践。个人想法是:先2~3个主机服务器作为前端的反向代理服务器,后端 WEB 服务器分为多静态资源服务器、多动态资源服务器及多数据库服务器,动静分离如Lnmpa架构,当然都是高可用加持了,再搭配 CDN 、智能路由,O(∩_∩)O哈哈~,这也属于美好梦想架构了。

2.优化加速之域名规划

2.1.域名规划—— cookie-free domains

注册好域名之后,绑定什么样的域名到我们的站点是很有必要提前考虑的,因为这不仅仅影响到 SEO 还影响到网站的加载速度。比如是用” www.go2do.net “还是用” go2do.net “就很有讲究,后者短小简洁容易记忆,但前者的“网络”特征明显。除此之外,更重要的是影响到 YSlow 网站测速插件里面建议的” Use cookie-free domains “加速特性,简单理解就是不要对静态资源如图片、css等发送 cookie 数据包以减少不必要的网络数据流量。如果我们绑定的网站域名是” go2do.net “,那么默认的” cookie domains “是” go2do.net “, 同时,如果网站静态资源也是使用的” go2do.net “相关的域名” Use cookie-free domains “特性将失效。
网站的 cookie 信息用于保存我们在一个网站的登录状态及设置信息,当一个二级域名被设置为” cookie domains “时,就拿大名鼎鼎的 CSDN 举例吧,如” cookie domains = csdn.net “,那么在登录” blog.csdn.net “后再进入” bbs.csdn.net “这次的登陆信息依然是有效的,因为” cookie domains = csdn.net “这样的设置让保存了登陆信息的 cookie 对” csdn.net “下的任意域名都有效,也就是说访问任意的” *.csdn.net “域名都会发送 cookie 数据包进行验证和交互服务设置信息,也包括形如” img.csdn.net “等图片静态资源类的域名。解决办法有二个,一是图片静态资源类的域名注册并使用新域名形如” img.img-csdn.net “等,这个选择是比较好的选项;二是” cookie domains = blog.csdn.net “等即收缩 cookie 数据的作用范围,这个节约毛爷爷的办法。

2.2.域名规划——并行加载

仅仅只使用一个域名链接所有资源如图片、css 、js、html等,利于减小创建连接的开销如 TCP 三次握手;但每个浏览器对同一个域名并行发起的网络数据请求的数量是有限的,如果浏览器加载的资源很多,就需要排队等待前面的资源加载完成后,才能逐步加载后续的资源。如果使用 2~3 个域名进行资源的分配,让浏览器同时并行请求多个域名,以增加 TCP 连接开销为代价换取并行时速度。时间换空间 or 空间换时间,孰优孰劣不能一概而论了。 具体实现方式可以参考《格物躬行博客(基于 WordPress)的性能优化之路》。

关于域名而引起的加速优化,一定要提前规划好,否则会导致文章和网站资源等链接改来改去。

3.优化加速之建站程序的选择

鼎鼎大名的建站程序非 WordPress 莫属!功能强大,插件丰富,当然也会因为臃肿而慢了一点、一点,也许适合爱折腾的人吧。Zblog 小巧,可惜第一次安装就莫名其妙的失败了,也没找到解决办法,只好放弃了。建立 Wiki 类知识库平台,可以用 Dokuwiki,它不使用数据库(或者说是文本数据库),一般博客文章的逻辑关系没有 Wiki 那么清楚明了和结构层次清晰。不同的选择也就选择了不同的速度。

以上这些优化工作都应该在建站之前就规划好,如果是事后诸葛亮只能事倍功半了。

欢迎投稿、分享转载,转载请保留如下信息:格物躬行博客[https://www.go2do.net]

本文由 [go2do] 原创,本文链接: https://www.go2do.net/vps/how-optimization-acceleration-planning-website.html



You may also like...

发表评论

电子邮件地址不会被公开。

本页共执行140次数据库查询,耗时0.265秒,使用内存 1.75 MB