奇虎 360 企业安全从 2011 年到 2015 年,经历了几次服务端架构的变迁。从一开始的软件自研到最后的全部使用开源软件,360 企业安全部真切体会到了开源软件带来的好处。另外,360 也通过各种各样的方式来构建自己开放、透明、平等的企业文化。InfoQ 编辑采访了奇虎企业安全高级工程师温铭,听他分享了 360 内部的开源软件实践经验以及开源文化构建经验。同时,温铭还将在 ArchSummit 全球架构师峰会上分享题为《开源文化对360 天擎架构演进的影响》的演讲,敬请关注。
InfoQ:能分阶段介绍下 360 企业安全的服务端架构的演进情况吗?
温铭:360 企业安全服务端的架构演进主要分为三个阶段。
第一个阶段是以自己开发的组件为主。我们用 C++ 自己写了一个简易的 Web Server,并在此基础上面衍生的一系列工具。页面的开发,我们没有使用成熟的 PHP 框架,而是自己写了个路由。这一阶段产生的问题就是基础组件不稳定,跟不上产品功能的快速迭代,而不稳定的产品,企业用户也不能接受。开发付出了很多努力,但一直没有找到适当的节奏。后面有几个开发的同事觉得要跳出这个糟糕的循环,于是就在新模块的开发中引入了 OpenResty 和 Yii,并和自研的组件并存。这样带来的明显好处是效率的提升,开发有精力来完成了前后端分离,QA 也从完全的黑盒测试中脱身,搭建了服务端的自动化测试和性能测试。这些改变为后面重构打下了坚实的基础。
在第三个阶段,我们重构了产品,并统一了服务端的技术架构,同时相关的功能组件全部换用成熟的开源软件搭建。比如我们使用 OpenResty 来搭建整个服务端,周边工具用 Python 和 Go 来完成,报表和数据分析采用 ElasticSearch。这样开发就可以更专注于产品功能实现和开源软件的深入学习,而不用担心基础组件的稳定性。
InfoQ:你提到,一开始的时候你们的开发人员都在自己『造轮子』,那这样的方式有什么问题?在自研和开源软件之间,你认为应该如何选择?
温铭:很多时候,『造轮子』的原因是开发人员没有找到合适的开源软件,或者在技术方面自视过高。盲目的自己从头开发组件,时间成本、稳定性以及后续的维护都是问题。我认为『造轮子』的前提是,现有的成熟开源软件不满足你的需求。比如 360 云查杀对性能要求非常高,而当时没有开源软件符合需求,所以我们就在 LevelDB 的基础上面开发自己的 Key-Value 数据库。而对于大部分的服务端开发来说,开源软件足以应付相关需求。
InfoQ:开源软件的选型上,你有什么好的经验吗?
温铭:现在开源软件发展非常快,新技术层出不穷,在技术选型的时候,你会面对很多的选择。不管使用什么开源软件,在服务端的架构层面,你都需要做到各个组件像乐高积木一样,没有耦合并且可以方便的进行更换。在你产品的第一个的版本里面,最好选择成熟稳定、自己团队熟悉的开源软件,而不是性能最好的,因为这时候你需要快速的出产品和快速迭代,性能并不是最重要的;在随后的版本中,你可以通过性能测试的各项数据,来决定使用哪个开源软件。
除了性能的考虑之外,开源软件自身的发展也需要考虑:对开发者是否友好、修复 bug 的速度、版本迭代的周期等。
InfoQ:开源软件的使用过程中,经常会涉及到需要修改开源软件的代码。那在内部版本和社区版本之间,你们是如何同步的,有什么好的经验吗?
温铭:360 企业安全服务端有一个特殊的产品需求,是其它产品的服务端开发不会遇到的,就是需要支持 Windows 平台。因为很多企业还是希望软件运行在 Windows 上面。所以我们会对一些开源软件进行修改,以增加对 Windows 平台的支持。我们刚开始的做法是下载源代码,然后修改,但造成的问题是没法快速跟进开源软件版本的更新,也没法把修改的代码回馈到社区。现在我们会 fork,然后把改动 pull request 向社区来回馈代码,同时要有完善的测试案例和文档,代码要符合软件本身的编码风格。
InfoQ:你怎么看开源文化?360 是如何构建开源文化的?
温铭:360 在 GitHub 上面开源了多个自己开发的软件,公司内部有技术评级以及定期的技术嘉年华,鼓励工程师主动分享技术并参与到开源软件中去。在技术团队中,透明和平等的文化,最适合各种技术的成长。我们团队有一个不成文的规定:AKA(all know all)。比如在技术选型上,我们会出一个大概的架构,然后发给所有开发讨论,由于我们是一个大杂烩的技术团队,有人说“PHP 是最好的语言”,有人是 Python 的粉丝,还有人推崇 Go,还有人坚守 Windows 平台,所以各种讨(chao)论(jia)后才确定最后的选型。
InfoQ:要使用开源软件,是不是需要团队成员对这些开源软件有足够的了解?
温铭:即使不去修改开源软件的代码,团队成员也需要对这些软件的内部实现有深入的了解,才能用到适合的场合以及做参数的调整。我们每周会有定期的技术分享和 code review,来保证团队每个人都知道团队使用了哪些技术,如何更好使用这些技术。
InfoQ:团队在参与开源软件方面,你有什么好的经验可以分享?
温铭:最重要的是要团队成员有主动性和热情参与其中。并不是贡献了 patch 才算参与到开源软件中,在实际的开发中解决了问题,总结分享出来,也是一种方式。我们团队正在 GitBook 上面写关于 OpenResty 和 ElasticSearch 的书,分享我们的一些实践。这也是一种参与开源的方式。
受访嘉宾介绍
温铭,一直在互联网安全公司从事高性能服务端的开发和架构,用各种技术手段打击木马传播和互联网欺诈。目前在奇虎用互联网技术帮助企业提高安全防护。
活动推荐:
2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。
评论