知识卡片
支持"反安装"的设备初始化设计:让设备能在业务之间安全干净地流转
内容
一台设备要在不同业务之间被反复借用、归还,前提是每次交接时都能确保设备处于一个干净、可信的初始状态——如果上一个业务用完这台设备后残留的软件、配置、数据没有被彻底清理,下一个业务接手时可能会因为环境污染而出现莫名其妙的问题,甚至存在数据泄露风险。微博DCP的设备初始化流程专门设计了”反安装”这个环节:当某个业务A要调度一台之前被其他业务使用过的设备时,在真正交付给A之前,必须先通过反安装程序,把这台设备恢复到最原始、干净的状态,再走正常的初始化流程(通过Puppet这类配置管理工具把需要的软件和配置模块化、用RPM机制打包安装)。这个设计和业界另一种”免初始化”的思路形成了有趣的对比:有些团队会采用专门为容器而生的操作系统(如CoreOS、RancherOS、Red Hat Atomic)来避免每次都要走完整的初始化流程,但这种做法的代价是可维护度更高、迁移设备的成本也更高,微博团队权衡后没有选择这条路。这个案例揭示了一条容易被忽视的架构原则:一套”资源可以在多个使用方之间自由流转”的系统,如果不能保证每次流转时资源本身处于一个干净、确定的状态,流转能力本身反而会成为风险源——脏数据、遗留配置、安全隐患都可能通过设备流转从一个业务扩散到另一个业务;设计资源共享/复用机制时,”如何保证每次交接前的状态是干净可信的”这个问题和”如何实现资源的灵活调度”同等重要,甚至更优先,因为调度能力再强,如果流转过程本身不干净,反而会把原本独立的业务风险传染给彼此。
参考来源
- 位置:《高可用架构(第1卷)》第4章《容器与云计算》"4.5 微博基于Docker的混合云平台设计与实践"节,"4.5.5 大规模集群操作自动化"(源文件:_epub-src/OEBPS/Text/Chapter4_5_6.xhtml)
- 结论依据:原文说明"在初始化流程中,必须要支持软件反安装模式,例如,当A业务要调度设备时,其他业务在交付设备前,必须要先透过反安装程序,将设备恢复为最原始的状态",以及对比CoreOS等免初始化方案"此种做法的可维护度高,缺点在于迁移设备的成本较高",直接支撑本卡片结论。
- 原始内容:在初始化流程中,必须要支持软件反安装模式,例如,当A业务要调度设备时,其他业务在交付设备前,必须要先透过反安装程序,将设备恢复为最原始的状态……而目前业界中的一些做法也可以免去初始化的流程……不过,虽然这样可以做,但是此种做法的可维护度高,缺点在于迁移设备的成本较高。