Após a validação do mecanismo por meio dos experimentos do Capítulo~\ref{sec:resultados}, desenvolveu-se a versão final do XTC e de seus mecanismos auxiliares.
A principal diferença da versão final em relação à utilizada nos experimentos anteriores, é a forma de medir a vazão de cada roteador virtual.
Na avaliação experimental do Capítulo~\ref{sec:resultados}, o XTC media a vazão de um roteador virtual a partir de saídas produzidas pelo Iperf
na máquina receptora. Apesar de servir para a validação do XTC, essa forma de medir não seria adequada pois o tráfego encaminhado pelo roteador seria
um tráfego genérico real e não um fluxo produzido pelo Iperf. Além disso, a vazão deve ser medida na própria máquina que encaminha a fim
de possibilitar uma maior escalabilidade e independência do mecanismo em relação às máquinas que estão recebendo os fluxos encaminhados.
Para tal, a arquitetura da Figura~\ref{fig:arquiteturaXTC} foi desenvolvida e cada um dos seus elementos é descrito a seguir.
Todos os módulos foram implementados na linguagem Python.

\begin{figure}
\centering
\includegraphics[width=0.8\textwidth]{./figuras/arquiteturaXTC.eps}
\caption{Arquitetura do XTC.}
\label{fig:arquiteturaXTC}
\end{figure}

\begin{itemize}
\item \textbf{Servidor de Medidas}: Este módulo executa a partir do Domínio 0 da máquina física. Ele acessa as estatísticas de bytes recebidos
pelos \textit{back-ends} presentes no Domínio 0. Essas estatísticas indicam o tráfego que cada máquina virtual enviou para o Domínio 0. O Servidor 
de Medidas de vazão mede essas estatísticas de rede através da  leitura do arquivo do Linux \texttt{/proc/net/dev}. Cada linha desse arquivo corresponde
às estatísticas de rede das interfaces de redes físicas ou dos \textit{back-ends}. A partir da coleta das estatísticas a cada intervalo,
definido por padrão em 1 segundo, o servidor envia a vazão de cada \textit{back-end} usando um \textit{socket} TCP (\textit{Transmission Control Protocol}).
\item \textbf{Cliente de Medidas}: Este módulo é uma classe que periodicamente recebe a vazão de cada \textit{back-end} do Servidor de Medidas.
O Cliente de Medidas pode ser instanciado no Domínio 0 ou em alguma outra máquina de controle remota, utilizando um \textit{socket} TCP com o servidor.
Este módulo possui a correspondência entre cada \textit{back-end} e o respectivo roteador virtual (RV) associado a ele. Essa correspondência
pode ser alterada em tempo de execução através de métodos desta classe. Através dessas informações o Cliente de Medidas é capaz
de calcular a vazão de um RV somando a vazão de todos seus \textit{back-ends} associados. Assim, o Cliente de Medidas
informa a uma instância do XTC a vazão do RV que esse XTC controla. O funcionamento conjunto deste módulo com o Servidor de Medidas provê maior escalabilidade
para o XTC pois evita que cada instância do XTC precise medir a vazão do roteador controlado. Isso permite que em um ambiente com $n$ instâncias
do XTC, o arquivo \texttt{/proc/net/dev} necessite ser acessado apenas uma vez a cada intervalo ao invés de $n$ vezes.
\item \textbf{XTC}: Este módulo executa as principais rotinas de controle do XTC e deve ser instanciado para cada roteador virtual (RV) controlado.
A instância do XTC deve ser executada na mesma máquina do Cliente de Medidas. Cada instância do XTC recebe a vazão do RV correspondente 
e configura seu \textit{cap} através do cálculo de suas rotinas de controle. A configuração do \textit{cap} é realizada através da comunicação
entre a máquina com o XTC e o Domínio~0 utilizando primitivas da Libvirt~\cite{libvirt}. Essas primitivas permitem a configuração do parâmetro \textit{cap} de forma remota.
\end{itemize}
