[libvirt] Redesigning Libvirt: Exploding the libvirtd architecture

Michal Privoznik mprivozn at redhat.com
Thu Nov 23 10:32:14 UTC 2017


On 11/14/2017 06:26 PM, Daniel P. Berrange wrote:
> The solution(s)
> ===============
> 
> As noted above, we made some baby-steps towards a modular daemon architecture
> when we introduced virtlockd and virlogd. It is now time to fully commit to a
> modular design and explode libvirtd into a swarm of daemons each responsible for
> a clearly demarked task. Such a decomposition would naturally fall across the
> internal driver boundaries, giving a virtnwfilterd, virtnetworkd, virtstoraged,
> virtnodedevd, etc. We have to maintain compatibility with our existing client
> API implementation though. This libvirtd would have to still accept connections
> from the client and route the RPC request directly onto the modular daemon. We
> could also enhance the client API to directly know how to connect to the modular
> daemons, bypassing libvirtd. If we restricted the modular daemons to only concern
> themselves with local UNIX domain socket usage, we could then provide libvirtd
> as the bridge to remote TCP access, and for backcompat with legacy client library
> impls.
> 
>  [app] -> [libvirt.so] -> [libvirtd]
> 
> becomes
> 
>  [app] -> [libvirt.so] -> [virthypervisord]
>                        +> [virtnetworkd]
>                        +> [virtstoraged]
>                           ...etc
> 

So what about remote connections? Say hostA is running my KVMs and hostB
is where mgmt app lives. If hostB is connecting to hostA's libvirt I
guess it's still going to be libvirtd which will then multiplex RPC
calls and redirect them to correct daemon? IOW, if hostB calls
virStoragePoolGetXMLDesc() how is this request going to end up at
hostA's virstoraged?

Michal




More information about the libvir-list mailing list