浅谈私有CDN布署的作用

seo优化 2024-12-02 10:24www.1681989.comseo排名

随着Web应用程序(WebApp)大量取代传统桌面应用,资讯服务类型的软件公司所面临的“重复与浪费”问题愈发突出。这不仅存在于软件架构本身,更延伸到资源管理方面。软件架构需要模块化、组件化,确保已开发的功能(程序代码)能够最大化地再利用。这包括众多的插件或模块,可在需要时轻松调用或扩展。但在资讯服务公司中,通常拥有众多系统项目,重复造成的浪费问题因此更加严重。

经过编译的程序或源代码本身并不会引发体积问题。例如,封装成dll或jar文件后,可在不同项目中引用。配合良好的自动化构建机制,我们无需将外部公共模块(或组件)纳入项目版本控制系统。仅在测试或最终发布时,才需临时加入这些文件。WebApp的内容远不止程序代码,还包括大量“资源”,如各种库、框架等。如果没有妥善管理,这些资源将被重复发布到多个服务器,造成存储空间和带宽的浪费,甚至被纳入项目版本控制系统的存储库。

以Ext JS 4为例,其源代码解压后体积高达166MB。为了调试方便,我们可能需要保留完整的、未经优化的文件。如果使用的框架没有良好的插件机制,那么将不得不将Ext JS添加到项目的文件夹中,即使在构建测试或生产阶段才会暂时加入。相信许多项目都是直接将这些资源添加到项目的存储库中,一并发布到版本控制系统。这是最简便的方式,但也是最浪费资源的做法。这样做会导致以下问题:

1. 非项目内容却被纳入版本控制,占用空间并增加维护麻烦。

2. 项目存储库变得过于庞大,真正属于项目的部分可能不到30MB,但整体却超过100MB。对于较旧的SVN系统,文件越多越复杂,运行可能越慢。

3. 对于新加入的成员或在灾难恢复时需要重新获取完整文件的情况,都会浪费服务器资源和网络带宽,并且会浪费宝贵的时间。如果一家公司有20个系统,这种浪费将成倍增加。对于采用持续集成机制的项目,浪费的问题会更为严重。

对于资讯服务公司来说,建立私有CDN显得尤为重要。在这个时代,云服务价格低廉,很难有理由不去建立自己的CDN。CDN(内容分发网络)是一种通过互联网连接的电脑网络系统,能够高效、可扩展且低成本地将内容传递给用户。通过建立远程的档案服务服务器,将WebApp项目常用的静态资源放置在这些服务器上,可以确保这些服务器具有高可用性、扩展性,并提供足够的负载量。这样,所有项目共享的WebApp资源都可以部署到这些服务器。建立CDN的优点包括开发人员可以快速利用资源(无需每次都重新下载、建立库),减少远程部署所需时间,实现不同项目间的资源共享,降低正式服务器的存储和带宽消耗等。事实上,Google已经建立了自己的CDN,提供免费服务给开发者使用网站常用资源如jQuery、jQuery UI等。尽管免费的CDN服务看起来是一个很好的选择,但它们往往不能满足你对所有资源的需求。以Ext JS为例,Google只提供核心部分Ext Core,而Sencha虽然为Ext JS GPL提供了CDN服务,但在实际使用过程中却频繁出现找不到文件的情况。这对于一家信息服务公司来说,依赖外部CDN并不是一个明智的决定。一旦CDN服务停止运营或不再提供某个版本的资源,可能会影响到公司的系统稳定性。建立私有CDN是一个更好的解决方案。

自己租用专线架设服务器来做CDN并不划算。为了实现数据和网络的备份以及高可用性,预防断电断网等意外情况,所需成本高昂。而采用虚拟主机(Virtual Host或VPN)虽然成本相对较低,但一般虚拟主机都有容量和带宽流量的限制,并且无论是否使用,都需要支付基本的月租费。

鉴于此,本文推荐采用Amazon的S3(Simple Storage Service)和CloudFront来构建CDN。Amazon S3的优点在于它采用“按需付费”模式,只需为使用的存储空间、访问次数和传输量付费。如果最初只需要存放500MB的档案,只需为实际使用的存储空间和传输量付费。注册S3服务无需设定容量,即使未来需求增长到几TB,也不必一开始就购买高级方案,同时没有每月传输量的限制。

使用S3建立CDN非常简单:

1. 创建S3存储桶(Bucket),将名称设置为CDN网址(例如:cdn.yourname.com)。

2. 修改DNS设置,通过CNAME将网址指向Bucket的Endpoint网址。

3. 设定Bucket的Web Site为Enabled。

4. 将要放到CDN的档案如Ext JS等,上传至Bucket,并设为Public。

对于Mac和Linux用户,可以使用s3cmd工具来管理档案。这款软件可以在命令行下轻松将本地档案上传或同步到指定的S3地址。除了用于建立CDN,如果遇到客户因预算或速度考虑需要将整个项目迁移到企业内部网络可直接访问的服务器时,也可以使用s3cmd进行镜像,确保项目使用的资源有统一的访问配置。

如果你的WebApp需要向大众开放,甚至面向全球用户,那么搭配CloudFront使用S3可以建立全球化的CDN。CloudFront不存储文件,而是用来“传递”S3或其他来源的文件。通过分布在世界各地的数据中心(S3的Bucket),它可以减少网络传输路径的延迟。简单来说,CloudFront可以让S3的文件下载速度更快,而且传输费用比S3更便宜(包括传输费用+访问次数)。

Copyright © 2016-2025 www.1681989.com 推火网 版权所有 Power by