LinkedIn 如何构建安全可缩放的 Web 生态

发布时间:2018-01-16 20:40:45

年前最后一场技术盛宴 | 1月27日与京东、日志易技术大咖畅聊智能化运维发展趋势!

LinkedIn 如何构建安全可缩放的 Web 生态

主要结论

在评估新技术的过程中进行缺口分析(Gap analysis)

可通过持续部署和持续集成模型缓解并预防安全弱点

通过为部署流程提供工具实现自动化的安全扫描

快速部署模型需要相应范围的测试并鼓励测试驱动的开发(TDD)

客户端 Web 框架能跨越 Web、iOS 及 Android 等多种客户端架构提供更一致的 API

2008 年到 2014 年间,LinkedIn 全球用户数从约 1600 万增长至约 3.3 亿,短时间内爆发式增长为基础架构造成了重重压力。随着用户数持续增长,我们需要更深入地了解用户对我们平台的使用方式,以及通过哪些新产品线能更好地满足全球职场专家的需求。

超高速增长过程中的缩放

因此我们开发了多个内部使用的 Web 应用程序,工程师、产品经理、高管、运维团队会使用这些工具执行从 A/B 测试、应用程序开发和生命周期管理,到报表和分析在内的各种任务。随着新应用快速变得充实,我们也开始通过新方法解决技术问题,陆续引入并推广了更多不同类型的语言、框架和工具。这样的增长和实验最终导致不同部门的技术和解决方案间缺乏统一性,随着越来越多新入职工程师组建新团队,造成了不小的压力。

诸如 Python、Ruby、Java、Scala、JavaScript 等语言出现在各种工作任务中,此外还有不停的收购,导致整个生态内包含大量相互无法兼容,但又必不可少的解决方案。别忘了,这种探索的本意是好的,是为了针对面临的问题寻找最棒的长期解决方案。我们鼓励不同团队寻找自己认为能为组织带来价值的技术,而这种探索过程本身也可以帮助我们确定可以在长期范围内依赖的技术,进而在硅谷和全球范围内快速缩放,始终保持领先地位。

2015 年中期,数十个依然处于活跃状态的项目已经使用了不同实现、框架以及库。由于方法各不相同,团队间代码分享很麻烦,需要通过不同代码库和工作成果来体现,并且实现结果本身也缺乏统一性。例如仅就 JavaScript 来说,有些团队同时使用了库和 jQuery 以及 Backbone.js 等微库(Micro-library),一些团队使用了主流框架,一些团队开发了自己的框架。通过何种方法为应用构建前端,开发者如何跨团队共享通用逻辑,从开发者的工效和满意度方面来说如何提供更流畅的最佳实践,这些方面逐渐开始面临不确定性。

你可能已经想到了,从长期角度来看,所用技术的数量不断增长也会造成安全债。由于使用了大量框架、语言和组件,我们越来越难以评估在这基础上开发出的应用程序的安全状况。此外这也削弱了我们发布通用框架级安全解决方案,借此缓解某些类型安全漏洞危害的做法所能实现的效果。

缓慢的部署流程所产生的影响

与此同时,仅 LinkedIn.com 网站本身,复杂的基础架构就已包含超过 3,000 个子模块,代码总量超过 6 百万行,所有这些内容都包含在一个代码库主干(Trunk)中。这个主干通过一种乏味的月度发布周期进行管理,有多个团队的数百位工程师参与其中。每次发布前需要选择一个发布候选版(RC),随后将该版本交给测试团队进行为期四天的手工回归测试。如果发现任何 Bug,会对 RC 版本开发热修复程序,以避免对部署流程产生影响。为避免再等一个月才能向用户提供新功能或 Bug 修复,工程师们往往会“疲于奔命”赶在截止期限前将自己的代码签入。

(点击放大图像)

LinkedIn 如何构建安全可缩放的 Web 生态

图 1:我们原本的部署流程

这种循序渐进,对时间要求极为严格的流程要求产品经理和营销合作伙伴必须共同就工作时间做出非常细致的安排,双方必须针对新功能的发布制定一致的规划。但是针对用户反馈进行迭代的过程也变得非常困难,因为我们的发布工作每年只能进行十二次。

此外,为了预防和缓解潜在安全漏洞,也对部署和发布流程提出了更高要求。我们必须做到:一旦确定某个需要的修复程序,必须尽快部署到生产环境。这通常意味着安全问题的修复程序必须独立于发布周期实现热修复。通常来说,在相对隔离的情况下部署安全补丁是一种好的实践,例如在部署安全更新过程中,不同时部署与安全性无关的 Bug 修复程序。这主要是为了降低当非安全更新影响到网站功能而需回滚时,重新暴露出安全漏洞的可能性。

Copyright © 2012-2017 领英助手(Linkedin助手 | Linkedin Assistant) 版权所有
  • QQ交谈
  • 售前咨询
  • 客服热线:
  • 1752755579
  • 扫一扫 体验微信营销