发布于2025年12月5日12月5日 本文将介绍我们在设计基于WASM 的牧云插件系统时遵循的原则和思路。我们将在设计过程中探讨安全性、可扩展性、可维护性、性能等问题,并简要介绍我们为实现这些目标而做出的一些考虑和决策。这是“**Host Agent插件引擎开发故事**”系列文章的第二篇,以后会持续更新。本系列文章将带领您深入了解长汀牧云团队的主机Agent插件引擎的开发过程。内容涵盖了技术选型、插件接口设计、组件通信框架等多个方面,并详细讲解了其背后的原理和实现方法。无论您是网络安全专业人士,还是对技术开发感兴趣的读者,您都可以从中有所收获。我们希望通过分享开发过程中面临的挑战、解决方案和实践经验,提供深入的见解和有价值的技术参考,帮助读者了解如何构建高效可靠的安全产品,共同推动安全技术社区的发展。 ## 主机安全系统如何变得更“有料”? 作为主机安全系统,牧云确实需要一个插件系统来提供可靠性和灵活性。在这个快速发展的互联网时代,主机安全系统需要不断适应新的威胁和挑战。一个强大且易于扩展的插件系统将对构建高效、灵活的安全策略有巨大的帮助。 插件系统的引入使我们能够: 1. **快速响应新威胁** 2. **提供个性化安全解决方案** 3. **降低维护成本** 4. **鼓励创新** 5. **实现跨平台兼容性** 为了实现这些目标,我们需要对现有的插件系统进行深入分析,找出存在的问题。在此基础上,我们将利用新技术构建面向未来的插件系统,让我们的主机安全体系更加“有料”。 ## 插件系统在牧云中的“作用”与“期望” 插件系统作为连接核心系统和各个功能模块的桥梁,在牧云中发挥着重要作用。 在牧云,我们对插件系统有以下期望: 1. **易于集成**:插件系统应该简化集成新功能的过程,让开发者可以轻松地将新功能以插件的形式集成到系统中。同时系统应该能够自动管理插件之间的依赖关系,保证插件的顺利运行。 2. **高度模块化**:每个插件应该有明确的功能定位和职责分工,这样在维护和更新时,只需要操作特定的插件,而不影响其他部分。这有助于提高系统的稳定性和可维护性。 3. **安全可靠**:安全是主机安全系统的核心要求。插件系统需要保证插件之间相互隔离,防止潜在的安全风险。另外,插件应该在受限制的沙箱环境中运行,以防止恶意插件对系统造成损害。 4. **易于监控和管理**:插件系统需要提供完善的管理和监控机制,以便管理员能够实时了解插件的运行状态,及时处理异常情况。此外,系统还应支持插件热更新,以便在不重启系统的情况下实时更新插件的功能和性能。 5. **优秀的开发体验**:插件系统需要提供友好的开发接口和丰富的文档支持。它还应该提供方便的调试和测试工具,以便开发人员能够更高效地完成开发工作。 (我们一直梦想着用静态编译语言编写插件,同时仍然获得所有其他优势。) 通过实现这些期望,我们将能够构建面向未来的插件系统,进一步提高牧云主机安全系统的灵活性、可扩展性和安全性,为用户提供更好的安全解决方案。 ## 牧云插件系统的设计目标 为了满足牧云主机安全系统的需求和期望,我们在设计插件系统时设定了以下目标: ### 强大的工程能力 插件系统需要支持易于维护和升级的架构,以便开发人员能够在不牺牲代码质量的情况下,在最短的时间内响应新的需求和问题。此外,我们还需要优化插件开发和调试流程,提高开发者的开发效率和体验。 ### 高性能 性能是插件系统的关键指标之一。为了满足主机安全系统的实时性要求,我们需要保证插件系统具有较低的运行开销。同时,我们还需要优化插件之间的通信和协作,以提高整体性能。 ###安全可控 安全是主机安全系统的重中之重。插件系统要求插件运行在沙箱环境中,以防止潜在的安全风险。另外,我们还需要为插件提供严格的权限管理机制,保证插件只能访问有限的系统资源。 ## 插件系统的成长烦恼 为了实现上述设计目标,我们在设计牧云插件系统时进行了深入的研究和分析。我们对现有的插件系统(‘Golang+LNG+Lua’)进行了评估,发现其存在运行开销高、维护性差、开发体验差等问题。虽然‘Golang+Lua’的插件系统给我们带来了一定的便利,但随着业务的发展和需求的变化,这种技术方案的局限性使得很难满足我们对主机安全系统中插件系统的期望。 ###问题一:插件引擎本身运行开销较高 在`Golang+Lua` 插件系统中,`Lua` 代码需要运行在`Lua` 虚拟机中。尽管“Lua”虚拟机本身具有高性能,但其运行速度与“Golang”代码相比仍然存在明显差距。同时`Golang`和`Lua`之间的数据交互也会造成额外的性能损失。这些问题使得插件系统的整体性能很难达到我们的预期。 ### 问题2:LuaJIT VM维护得不好 虽然`LuaJIT`提供了一些性能改进,但该项目的维护水平近年来有所下降,更新速度也变慢。这意味着当我们遇到问题时,可能无法得到及时的技术支持和修复,从而影响插件系统的稳定性和安全性。 ###问题三:开发体验差,流程繁琐,调试困难 「Golang+Lua」的插件系统需要开发者在两种语言环境之间切换,这给开发过程带来了额外的复杂性。另外,由于Golang 和Lua 之间的接口调用和数据交互,调试过程变得更加困难。这些问题降低了开发人员的工作效率,增加了项目的开发周期。 鉴于这些问题,我们决定寻求一种新的插件系统解决方案,以更好地满足我们对主机安全系统中插件系统的期望。在下一章中,我们将探讨其他插件开发选项及其局限性,以及为什么我们最终选择基于WebAssembly 的插件系统。 ## 主机安全系统中的插件系统设计原则 在寻找新的插件系统解决方案时,我们针对主机安全系统的应用场景明确了以下设计原则,以确保插件系统能够满足我们在主机安全系统中的需求: ### 实时(高性能) 网络安全事件往往发生在瞬间,主机安全系统需要能够快速识别并响应这些事件。插件系统的高性能保证了安全策略的实时执行,有助于及时发现和阻止潜在的攻击,降低系统风险。 ###轻量级(资源占用小且可控) 主机安全系统通常需要在各种设备和环境上运行,包括服务器、工作站和嵌入式设备。轻量级的插件系统可以降低对硬件资源的要求,保证安全策略在资源受限的环境下能够有效执行。 ### 安全(沙箱隔离) 网络安全领域的插件可能涉及敏感操作和数据处理。通过沙箱隔离技术限制插件的权限,可以防止潜在的恶意插件窃取敏感数据或篡改关键系统配置。此外,沙箱隔离还可以降低漏洞利用风险,提高系统安全性。 ###兼容(复杂运行环境不冲突) 主机安全系统需要与多种操作系统和应用程序共存。插件系统的兼容性可以保证在复杂的运行环境下不会发生冲突,避免对正常业务造成不利影响。 ### 稳定(长期运行不死机) 网络安全防护是一个持续的过程,主机安全系统需要能够在长期运行过程中保持稳定。稳定的插件系统可以保证安全策略持续有效,降低意外故障带来的安全风险。 ### 跨平台(不同操作系统无需更改一行代码) 网络环境中存在多种操作系统,例如“Windows”、“Linux”和“macOS”等,插件系统的跨平台特性可以降低插件开发的复杂性和维护成本,提高安全策略的通用性和适应性。 ### 灵活(功能和沙箱限制可以调整) 针对不同的网络安全场景和需求,插件系统需要具备一定的灵活性。可调节的功能和沙箱限制,可以根据实际情况定制安全策略,提高安全防护的针对性和有效性。 ### 易于使用(简单的安装和配置过程) 网络安全人员部署和维护主机安全系统时,需要快速安装和配置插件。简单易用的插件系统可以降低操作难度,提高工作效率。同时,简化安装配置流程也有助于减少误操作,避免安全隐患。 ## 为什么选择基于WASM 的插件系统? 基于对主机安全系统插件系统设计原理的充分理解,我们选择了基于“WebAssembly”的插件系统作为解决方案。以下是该插件系统在满足设计原则方面的优点: 1. `WebAssembly` 提供接近本机执行速度(**本机速度**)。在主机安全系统场景中,为插件提供高性能的执行环境,可以保证安全策略能够实时响应网络安全事件,有效减少插件对计算和内存资源的占用。 2、`WebAssembly`基于**基于能力的安全**提供了内置的沙箱隔离机制(**Sandboxed**),可以作为插件的权限管理机制。非常适合主机安全系统的插件化需求,可以很好地提高插件系统的安全性和‘Agent’的可靠性。 3. `WebAssembly` 插件将以任何可以编译成`WASM` 的语言编写(**多语言灵活性**)。当然,这不仅可以满足我们用静态编译语言编写插件的梦想,还可以提供使用合适的语言来满足特殊安全场景的额外优势。 (比如平时写`Rust`插件是为了高效、安全地节省资源,如果有紧急需求,可以直接使用`Python`来解决问题,然后逐步将安全能力转化为更高效的形式) 4.`WebAssembly`具有无与伦比的可移植性(**Portablity**),可以直接运行在不同的操作系统和不同的运行环境中。降低了插件开发和维护的复杂度,提高了安全策略的通用性和适应性。 ## 未来的期望 基于“WASM”的插件系统在满足主机安全系统设计原则方面显示出巨大的潜力。不过,‘WASM’技术仍在快速发展,未来还会有更多的功能和优化供我们利用。期待‘WASM’在以下方面为网络安全系统提供更多支持: 1、更强大的沙箱隔离功能,提高插件系统的安全性; 2.更高效的垃圾收集和内存管理机制,进一步减少资源使用; 3.更便捷的开发调试工具,简化插件开发流程; 4.更广泛的社区支持,推动‘WASM’在网络安全领域的应用。 通过不断的探索和实践,我们相信基于WASM的插件系统将会给主机安全系统带来革命性的变化。让我们共同期待这一创新技术将为网络安全带来的惊喜。 ## 推荐相关博文 上一篇文章:**【【揭秘牧云插件开发者的创新之路:从无法解决的问题到“充满乐趣”】](https://stack.chaitin.com/techblog/detail?id=72)** 系列文章目录:【【预览】主机Agent插件引擎开发故事总结】(https://stack.chaitin.com/techblog/detail?id=82) 1. **[[揭秘牧云插件开发者的创新之路:从无法解决的问题到“充满乐趣”]](https://stack.chaitin.com/techblog/detail?id=72)** 2. **[【牧云插件系统面向未来的设计原则]](https://stack.chaitin.com/techblog/detail?id=73)** 3. **【【牧云插件系统选型之争】】(https://stack.chaitin.com/techblog/detail?id=77)** 4. **【【牧云插件系统技术选型中探针开发用什么? 】](https://stack.chaitin.com/techblog/detail?id=83)** 5. **【【牧云插件系统技术选型及插件开发? 】](https://stack.chaitin.com/techblog/detail?id=85)** 6. **【【牧云插件系统技术选型插件通信框架PK】】(https://stack.chaitin.com/techblog/detail?id=94)** 7. **[【牧云插件系统技术选型:大家都会抱怨的序列化方法选择之争]](https://stack.chaitin.com/techblog/detail?id=97)** 8. **[【牧云插件系统技术选型:应该选择哪种WASM运行时?如果不选择这个,就会出大问题! 】](https://stack.chaitin.com/techblog/detail?id=105)**
创建帐户或登录后发表意见