从内容的生成机制来看,互联网上的内容主要有两类:一是静态内容,二是动态内容。其中,静态内容主要是指内容完全由网页HTML文件提供,任何人在任何时间浏览静态内容看到的都是一样的东西。而动态内容是指不同的访问者或在不同时间访问同一个Web页面时可能得到不同的页面内容,内容具有实时性,访问的过程具有交互性。因此,动态内容的提供除了和静态内容一样需要网页外,还需要采用数据管理系统和业务逻辑程序来使网站具有更多自动的和高级的功能。
主流的Web网站系统都能够在逻辑上划分为三个层次,即表现层、业务逻辑层和数据访问层,如图2-5所示,不同的层次在系统中有不同的功用。
表现层是以Web方式为用户提供访问界面,主要负责接收用户的请求以及业务逻辑层处理结果的返回及展示;业务逻辑层主要是针对具体业务逻辑的处理,能够根据表现层传来的用户需求向数据访问层发出数据查询要求并将查询结果进行相应的整合,返回给表现层向用户展现;数据访问层主要是以数据库、文件系统等方式对原始数据进行保存和管理,并为业务逻辑层或表示层提供数据查询服务。
在一个Web系统中,不同类型的内容由不同的系统层保存和提供。通常与用户直接交互的表现层提供大部分静态内容,例如图片、Flash动画、多媒体文件以及部分静态网页片段等。而动态内容,就需要由业务逻辑层和数据访问层协作提供。其中,业务逻辑层是Web系统的核心层,负责处理所有的业务逻辑并生成动态内容。
了解了Web系统的分层架构以后,我们再回过头来看CDN的分类。CDN实现网页内容加速主要依赖于内容边缘缓存和功能复制两类机制,本质就是将Web源站各个层次上的功能转移到CDN边缘Cache上完成。根据CDN完成的不同层面的Web功能转移,将CDN分为表示层复制和全站复制两大类。
对于Web网站提供的各种类型的静态内容(不论是网页、文件还是流媒体数据),其加速都可以通过在边缘Cache上复制Web系统的表示层来完成。在实现中,CDN的Cache设备将以反向代理的角色接受用户发来的连接请求,然后在本地复制的数据表示层的静态数据中寻找满足用户需求的数据,直接反馈给用户。在Cache上命中的内容,则无须再向源站Web系统请求。这种情况下,Cache上缓存的内容通常是完整的Web内容实体,例如网页嵌入内容、多媒体文件等。现在大多数商用CDN系统采用的都是这类只处理静态内容请求的网站加速方案。
对于当前日益丰富的动态内容加速,需要在CDN上复制和缓存业务逻辑层和后台数据访问层。其中,业务逻辑层在CDN Cache上的复制使之能够承担用户请求处理、应用数据计算、动态内容生成等工作,因此这类方法也被称为"边缘计算"。将Web应用程序或应用组件直接安装在CDN Cache中,目的是在最接近用户的位置完成应用处理,同时也分担了源站的计算压力。在某些应用场景中,动态内容的生成需要大量的数据支持,比如目录服务、交易数据等,仅仅将业务逻辑复制到边缘服务器中还不足以解决从源站获取其生成动态内容所需的数据而造成的传输性能瓶颈,因此还需要对数据访问层进行必要的复制,即除了在Cache上完成业务逻辑的运算工作,还复制了源站后台数据访问层的内容,用以加速动态内容的生成。这个过程的关键在于合理解决系统中多个数据副本间的一致性问题。另外,还有一些网站的动态内容是基于具体用户的个性化数据定制生成的,需要在数据访问层对用户数据进行特别的关注。用户数据本身也是依托于数据访问层的存储介质和管理系统存在的,但在访问模式等方面具有独特性,因此CDN需要制订相应的复制和缓存策略,并解决相关的隐私和安全问题。也许这样的讲解仍然有些令人困惑,没关系,在本书的第7章还将深入讲解动态内容的生成和加速技术