你的CMS不是你的网站
内容管理系统是您内容的集中存储库。网站是由分散的片段组成的,这些片段在边缘以即时的方式组装,内容在交付给用户时才组装。如果它不是网站,那么CMS是做什么的呢?
首先,CMS的工作(毫不奇怪)是管理您的内容。它以原始形式保存内容,与最终应呈现的表示层分离。CMS还允许您以多种格式交付内容,例如JSON、RSS和Atom订阅源。许多旧的和专有的内容管理系统依赖于创建静态HTML输出来用于网站,但是大多数较新的或开源的内容管理系统是以可以直接查询并返回Web友好的标记的方式开发的。
正如PHP内容管理系统(如Drupal和WordPress)中常见的情况一样,CMS可以通过Web服务器输出内容。这导致人们认为CMS实际上就是网站。对于小型网站,这种差异可以忽略不计,不值得讨论。但是,对于大型网站(尤其是企业网站),这种差异变得不可避免。像Drupal这样的CMS安装在Web服务器的文档根目录中,并且像任何其他网页一样请求内容。一个好的CMS将处理诸如授予用户访问内容的权限、内容管理、主题设置,甚至接受用户提交的内容(如评论和博客文章)等事情。Apache接受GET请求并将其传递给Drupal,Drupal然后使用各种菜单回调来解释它,以确定所需的内容。它足够智能,可以首先检查用户访问控制,以确定是否允许请求的内容,然后决定交付它。CMS中的主题引擎在内容周围呈现HTML,并将HTML文档返回给Apache,以便交付给最终用户。
那么,什么是网站?
广义上讲,网站是HTML文档的集合,这些文档相互链接到其他页面,使用户可以轻松加载相关文档。但是,以更抽象的形式,以及大多数人期望从网站获得的形式来看,它是用户使用Web浏览器与之交互的互联网上的位置。用户实际交互的可能是静态HTML文件、通过PHP生成的HTML、使用AJAX和JSON数据的页面更新,甚至是从Web服务获取内容的Flash或Java插件。
最终,网站是用户在浏览器中输入您的URL并返回某些内容时看到和与之交互的巨大的抽象事物。当在您的网站上点击浏览,寻找他们想要的信息时,最终用户几乎不关心HTML或您的CMS;他们只关心内容是否以无缝的方式交付。
虽然内容本身构成了网站的大部分,但还有一些辅助组件与提供该内容有关。这必然包括Web服务器、内容分发网络(CDN)、前端缓存系统,甚至Web浏览器支持。所有这些都可能改变用户在内容离开内容管理系统后看到的内容。
将您的网站视为由几个类别或“桶”组成是有帮助的。您的内容管理系统确实本身就是一个“桶”。您还应该有用于缓存的“桶”(Varnish、CDN和Memcache)。此外,您可能还有另一个用于托管集成的“桶”,例如Facebook和其他社交网络插件、评论系统和统计分析。甚至可能还有用于移动应用程序的“桶”。每次访问者查看您网站上的页面时,他们都是从这些类别中的每一个中提取内容。
但是,就Web服务器而言,所讨论的“最终用户”实际上可能不是坐在Web浏览器前的人。请求者可能是负载均衡器,它管理对多个提供相同内容的Web服务器的请求。然后,负载均衡器又将其文档版本返回到像Varnish或CDN这样的前端缓存。Varnish读取内容并确定需要填充其他“孔”,并获取更多内容。
为什么我的网站应该去中心化?
用模板语言编写的内容管理系统往往开发速度非常快,并且可以快速更新新内容,但是由于它们倾向于频繁的动态页面生成,因此存在性能问题。对于少量流量,内部缓存通常就足够了。即使提供静态内容,Web服务器的扩展能力也有限,因为它们具有非常明确的硬件限制——可用RAM量除以分配给线程的内存量(如PHP的memory_limit值)决定了可以访问服务器的最大并发用户数。在负载均衡器后面添加多个Web服务器、启用前端缓存和使用CDN将显着提高网站的可扩展性。
添加更多的“桶”会增加网站容量。添加更多的“桶”也会改变来自CMS的请求结果,最终交付为网站的内容。这就是边缘计算成为您网站不可或缺的一部分的地方。为了进一步提高性能,可能有必要将某些组件(如用户注册和评论系统)完全移出内容管理系统,并将这些东西放在您的其他“桶”中。例如,一种常见的方法是让CMS提供用户无关的内容,并在其中为“欢迎某某”消息设置占位符。这些占位符可以是边缘端包含(ESI),然后由面向用户的缓存系统替换。Varnish和大多数CDN默认支持ESI。ESI片段实际上可以存在于Web上的任何其他位置,这样CMS不再需要管理用户注册,更不用说甚至意识到它的存在了。
边缘端包含(例如,<esi:include src="http://example.com/fragment.html" onerror="continue"/>
)在处理由Apache提供的静态HTML文件时,与服务器端包含(SSI)非常相似。ESI是边缘端计算和缓存系统的标准。这使得可以在主CMS中管理内容,在辅助系统中管理用户和用户生成的内容,并从第三级系统包含其他外部内容。使用这种方法,您的网站实际上可能由在交付给最终用户之前在边缘组装的几个不同的内容管理系统组成。
一旦这个页面被组装和交付,这仍然可能不是用户最终与之交互的网站。一旦内容交付,客户端浏览器可能会进行更多更改。页面上对JavaScript的引用可能会调用小部件和其他托管集成,例如Facebook“喜欢”按钮、社交媒体“分享”按钮、反馈表单和用户评论系统。使用jQuery和其他JavaScript框架是从其他内容交付服务调用额外内容的一种常用方法,而您的内容管理系统不必控制任何这些内容。
软件即服务(SaaS)是有时构成网站的另一个“桶”。使用像SaaS这样的按需功能,您可以轻松处理去中心化的元素,例如用户评论或突发新闻警报。在这种情况下,AJAX向您的服务发出额外的请求并解释JSON响应(因为为什么CMS必须只交付HTML?),而jQuery将结果呈现到现有页面中。使用SaaS,最终是浏览器为您的网站这个大杂烩添加了最后的润色。
http 照片 通过 Shutterstock.com。