过去,企业可以依靠策略性部署的代理来提升应用性能。这是因为传统应用(包括单体架构和三层架构)通常在客户端与服务器之间采用单一数据路径。
简单来说,所有内容都只通过一条路径传输,无论是静态还是动态内容,也无论是文本还是图像。因此,可以在客户端与服务器之间部署合适的应用交付控制器(代理),以优化性能。顺便一提,这在过去乃至现在通常都是通过调整各种IP、TCP甚至HTTP参数来实现的。缓存、压缩和针对特定内容的加速等应用服务,正是这些技术的实际应用。

但现代应用已无法再自给自足。如今,根据Sonatype的数据,现代应用主要由第三方组件构成(占80%–90%,其中开源组件日益增多)。从Web应用中大量存在的脚本和其他可注入代码便可看出这一点。有时,这些脚本会在远程执行,并返回图像、广告或Web字体和精灵图等其他内容。有时,脚本本身会在运行时加载,并在浏览器环境中执行,例如jQuery。
这就是所谓的组件化,也可以称为原子化,即将应用拆分成许多更小的部分。在客户端,我们将这些部分称为组件,因为它们通常在同一空间中执行。在服务器端,我们越来越多地将其称为微服务,并将其部署在容器中。两种情况带来的影响相似:最终会产生数量难以预测的数据路径,直接影响性能。
基本上,您只能控制一条数据路径,而这条路径可能只占应用的20%。这意味着,由于对性能的控制非常有限,您对用户体验的控制也非常有限。
安全性也是如此,感谢您注意到这一点。关键在于,我们正在迅速掌握如何利用客户端代码技术来提升安全性。但这种方法在性能优化方面效果不佳,因为大多数应用不是移动应用就是Web应用,而这两类应用通常都没有机会或能力调整网络协议栈。
解决这一问题的方法之一是重新掌握控制权。这样做还有一个好处,就是可以同时获得附带的安全收益。
双赢:降低风险并提升性能
如果应用经常从外部站点动态加载组件,请停止这种做法,并立即停止。这不仅影响性能,也会带来同样严重的安全问题。这样做实际上等于允许外部来源的脚本在应用上下文中不受限制地运行。发生安全事件时,用户无法分辨哪些是应用自身的组件,哪些是从外部加载的组件。近期围绕runc容器漏洞引发的风波已经表明,将恶意代码注入从第三方注册表或站点加载的资源会带来安全风险。
如果是脚本,建议将其复制到自己的基础设施上并由其提供服务。这样既能通过保持控制来降低风险,也能调整各项设置,为用户提升性能。这也包括DNS。研究一再表明,DNS对应用性能的影响最大,而且往往是负面影响。从外部站点加载组件时,需要依赖对方的DNS基础设施达到预期性能。而从自己的站点加载组件,则可利用用户的本地DNS缓存,从而显著降低这种影响。
从自有站点托管脚本,还可以采用TCP优化、SSL/TLS卸载或常规应用加速技术来提升整体性能。此外,还可对这些脚本执行安全扫描,确保其中没有隐藏的意外风险。
组件化非常有利于开发,也确实有助于缩短价值实现时间。但它可能会对性能和安全产生负面影响。请注意相关的安全风险和用户满意度风险,并了解可采取哪些措施来应对这些风险。
关于作者

Lori MacVittie是F5首席技术官办公室的杰出工程师兼首席技术布道师,在应用交付、自动化战略和基础设施领域拥有深厚的专业知识。无论是为AI智能体定义防护机制、剖析脆弱的多云架构,还是探索可扩展系统的极限,她都善于化繁为简。她在应用开发、IT架构以及网络和系统运维领域拥有30多年的行业经验。加入F5之前,她曾担任技术编辑,并因出色表现获得奖项。 MacVittie拥有计算机科学硕士学位,著述颇丰,出版作品涵盖安全、云和企业架构领域。她还热衷于桌面游戏和电子游戏,并且对奶酪有着毫不掩饰的鲜明见解。
Lori Mac Vittie 的更多博客文章相关博客文章
Thingbot正转变为攻击平台
Lori MacVittie重点介绍了F5 Labs对2018年1月至6月全球物联网设备攻击的研究,并指出了其中令人警醒的影响。物联网设备不仅持续遭到利用,还被转变为攻击平台,这意味着攻击者可以更充分地利用这个必然增长的市场。
借助F5全新Quick Start,在AWS上快速开展业务
在AWS re:Invent开幕前,我们很高兴与大家分享F5与AWS之间全新的Quick Start集成。F5的Tom Atkins将介绍该服务如何启动、配置和运行在AWS上部署工作负载所需的计算、网络、存储及其他AWS服务。