知识卡片
独立进程隔离子功能用序列化开销换可靠性和安全性
内容
把一个子功能放进独立进程而不是同一进程内的模块,换来的是错误隔离——某个后端连接崩溃、卡死,不会拖垮整个系统;换来的是权限和依赖的独立性——每个进程可以有自己的第三方依赖和授权方式,不必绑定核心系统的约束;也换来了地址空间隔离带来的安全性。代价是跨进程边界必须对数据做序列化,多了一层转换开销。这种取舍在把可靠性和安全性看得比性能更重要、且跨进程调用不在关键路径上时是合算的。
参考来源
- 位置:《架构之美》第12章《当集市开始构建教堂》12.3.3节《Akonadi的架构》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0247.xhtml)
- 结论依据:原文明确"用来访问特定类型存储后端……的组件将以单独的进程运行……代理可能会崩溃,但不会使整个服务器崩溃……它同时也将正确地隔离Akonadi服务器的地址空间……当然它也存在缺点,那就是必须对Akonadi存储空间中的数据进行序列化"。
- 原始内容:与该服务器潜在的错误、缓慢或不可靠的通信都不会影响整个系统的可靠性。代理可能会崩溃,但不会使整个服务器崩溃……它同时也将正确地隔离Akonadi服务器的地址空间,因此减少了潜在的安全问题……当然它也存在缺点,那就是必须对Akonadi存储空间中的数据进行序列化。