知识卡片
Libvirt的Driver模型与抽象泄漏的取舍
内容
Libvirt要用同一套API管理KVM/QEMU、Xen、LXC、VirtualBox等完全不同的虚拟化技术,做法是给每种VMM配一个独立的Driver,由Driver负责把Libvirt的通用API调用翻译成该VMM自己的操作。但Libvirt并不强求所有VMM的能力被完全拉平:某个VMM特有的能力如果没有通用性,Libvirt就不去实现它;反过来某个通用接口如果在某个VMM里根本没有对应语义,也可以直接空缺。发散:这体现了做统一抽象层时一个诚实的设计取舍——与其为了强行”完全统一”而扭曲每种底层实现的语义,不如承认抽象必然存在缺口,让通用接口只覆盖真正共性的部分,特有能力允许在抽象层之外单独暴露,这比削足适履地追求100%统一往往更务实、更不容易埋雷。
参考来源
《Linux开源存储全栈详解从Ceph到容器存储》第6章《存储管理与软件定义存储》