云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

专属服务器_f5和cdn_企业级

小七 141 0

将Edge Side Include与Workers一起使用以实现高可用性

上周,我们写了关于使用Cloudflare Workers实现ESI的文章。这是lukasreider的一篇客座文章,介绍了如何使用ESI不仅获得更好的性能,而且在迁移后端时优化可用性。在这篇文章中,您将了解我的客户机Titel Media如何使用Cloudflare Workers实现简单的边缘包含。这个想法是部分替换在线杂志的部分内容highsnobeity.com网站通过一个新的、更加完善的前端实现。在本文中,您将了解这个用例,以及我如何为Cloudflare工人找到一个强大的应用程序。幕后故事我目前的项目,highsnobeity.com网站正在将Wordpress替换为专用内容管道和自定义前端。这是一本巨大的杂志,有大量的内容,数百个每日更新和一个由60多名编辑组成的国际团队,研究和撰写激动人心的故事。背后的公司,Titel Media GmbH,一家在柏林和纽约设有办事处的出版社,无疑已经从Wordpress的内容托管业务中成长起来。演出必须继续我们不能简单地重写像WordPress这样复杂的web发布管道。也不能简单地在任何可管理的时间范围内重写一个完整的前端,然后在不造成任何中断的情况下安全地部署它。这样的"大重写"有其固有的风险。他们可能会以许多惊人的方式失败。作为他们中的一员,没有完成任务,非常受欢迎。未能达到高期望值(也正是这些期望值导致了重写)也会粉碎每个项目经理的梦想。或者如何在1年以上的过渡期内管理不断变化的需求?我们的工作组,应该解决这个过渡,制定了一个计划,以可持续地发展开发团队,同时为未来的安全道路铺平道路。我们绝对不想等待1-2年,直到一切都被改写。我们也不想在接下来的5年里继续与Wordpress合作我们不想中断目前编辑的出版流程想法是:部分重写页面Wordpress是,而且运行得很好。多年来处理这种装置的复杂细节,已经形成了一个相当成熟的装置。幸运的是,没有来自底层技术的压力来匆忙完成转换。时间,大约1年多,实际上是站在我们这边的。团队能够一步一步地做出改变。这是我们将一些伟大的想法整合到一起的时候:Edge Side Includes。我第一次听说这件事,是在一些办公室厨房的谈话中,谈到亚马逊显然从来没有失败过,因为他们的许多服务都是由后备服务支撑的。例如,如果页面的某些部分没有及时呈现,则该部分可以优雅地回退到其他合适的内容。我永远无法证实这些说法,但这个想法确实让我坚持了下来。当需要高可用性时,这个想法非常有吸引力。在过渡期,我们的想法是一步一步地重写网站的部分内容,并在一切正常运行的同时稳步发展新的前端。我们需要ESI工具箱中的两个特定功能:包括:我们的新前端,应该能够呈现当前页面的组件。我们希望包含它们,并用新的前端覆盖部分页面。回退:Wordpress将在实时过渡期间保持运行。任何失败的片段仍然可以从Wordpress中获取。原始HTML文档让我们看一个简化的例子。源代码用以下HTML文档和相应的X片段头进行响应:{const wait=设置超时(()=>{清除超时(等待)拒绝()},安全超时)})碎片[键]=承诺。比赛([获取(请求),超时])})返回碎片}如果有要预取的片段,则会启动这些请求并将其存储在字典中,保存到各自的标签上。每个请求共享10秒的全局超时的一部分。如果请求没有及时响应,则以后将被视为失败。在对内容类型等进行了一些检查之后,这部分是一个关键的性能优势:流化响应。// ...const{readable,writable}=new TransformStream()变压器体(响应.正文,可写,片段)// ...transformBody逐行读取源响应,并搜索片段。// ...//初始化解析器状态let state={writer:writer,fragments:fragments}让乐趣=解析让lastLine=""while(真){const{done,value}=等待读卡器.read()如果(完成)中断常量缓冲区=编码.解码(值,{流:!完成})const lines=(lastLine+buffer).split("\n")这个循环基本上是一个在每行之间保持状态的解析树。但最重要的是,不要包括最后一行。响应块,可能就在一行中间被截断,因此不能代表一整条线。因此,我们保留最后一行,并将其与下一行连接起来。设i=0;常量长度=线条.长度-1个;对于(;i