{{template>:doctable | name=PoA-Manager | version=1.0 | accountable=Rafael Vasconcelos | depdency= [[UDI]], [[Gateway]] }} ====== PoA-Manager ====== O **PoA-Manager** é responsável por enviar a mensagem contendo os “Points of Attachment - PoAs” (GWs) para os MNs e realizar o balanceamento de carga entre os GWs quando necessário. Para tanto, o PoA-Manager monitora a execução dos GWs para saber quais estão ativos, sua carga de trabalho e os MNs que estão conectados em cada um dos GWs. A mensagem contendo os PoAs é enviada para cada MN que se conecta para que em casa de necessidade, o MN possa decidir realizar um Handover espontâneo. Já o balanceamento de carga entre os GWs é realizado através de um Handover mandatório enviado pelo PoA-Manager. ===== Usage ===== O uso do PoA Manager é bastante simples e o único construtor disponível é o default. Abaixo é mostrado um HelloWorld explicando como inicializar o PoA Manager. public class PoAManTest { public static void main(String[] args) { new PoAMan(); System.out.println("PoA Manager started..."); } } A cada intervalo intervalo de tempo predefinido, o PoAManager executa o algoritmo de balanceamento (**loadReportAnalyzer**) de carga que verifica se a carga dos GWs está ou não distribuída corretamente. Caso seja detectado um desbalanceamento, o plano gerado pelo algoritmo de balanceamento de carga é repassado para o **planningExecutor** que tem como responsabilidade gerar as mensagens de HandOver mandatório que serão enviadas para os MNs. Para evitar que a carga entre os GWs seja redistribuída em intervalos curtos demais, o parâmetro **DELAY_BETWEEN_TWO_LOAD_BALANCING_EXECUTIONS_IN_MILLIS** define o intervalo mínimo entre a realização de 2 balanceamentos de carga. /** * Checks if all Gateways are working and executes the load balancing algorithm * * {@inheritDoc} */ @Override public void run() { System.out.println("this.loadReportsByGateway.size() " + this.loadReportsByGateway.size()); this.detectFailedGateways(); if (((System.currentTimeMillis() - this.lastLoadBalacingExecutionTime) > PoAMan.DELAY_BETWEEN_TWO_LOAD_BALANCING_EXECUTIONS_IN_MILLIS) && (this.loadReportsByGateway.size() > 1)) { List analysis = this.loadReportsAnalyzer.runAnalyzer(this.loadReportsByGateway); List privateMessageList = this.planningExecutor.RunPlanningExecutor(analysis, this.vehiclesByGateway); if (privateMessageList.size() > 0) { this.sendPrivateMessages(privateMessageList); this.lastLoadBalacingExecutionTime = System.currentTimeMillis(); } } } ===== Architecture ===== Descrever a arquitetura do componente. As principais classes e relações que sustentam o componente. * ''getService()'' Returns Service * ''myMethod()'' Returns Service ===== Implementation Details ===== Para exercer sua função, o PoA-Manager ouve (i.e., assina) os tópicos LoadReport e ConnectionReport. O tópico ConnectionReport é utilizado para informar quando um MN se conecta ao SDDL, assim, o PoA-Manager pode enviar o objeto “PointsOfAttachment” contendo a lista de GWs ativos no SDDL logo que o MN se conecta. O tópico LoadReport, por sua vez, possui o ID do GW, o uso de CPU, memória livre, número de MNs conectados ao GW e o IP externo do GW. Este tópico é enviado periodicamente pelos GWs para que o PoA-Manager possa fazer o monitoramento dos GWs. Para que o GW possa enviar o tópico LoadReport, é preciso que a máquina onde o GW está sendo executado tenha a biblioteca “**libsigar**” (está na pasta lib do projeto do Gateway) configurada no ambiente. Como o PoA-Manager é responsável por fazer o balanceamento de carga dos GWs, ele possui uma política de balanceamento de carga que está implementada na classe **SimpleLoadReportsAnalyzer**. Originalmente a política implementada foi para verificar a diferença de MNs conectados entre os Gateways. Caso essa diferença passe de um limiar (originalmente 15%), a política de balanceamento informará qual deve ser a nova quantidade de MNs conectados em cada GW. A saída gerada pelo SimpleLoadReportsAnalyzer é repassada para a classe **PlanningExecutor**, esta responsável por gerar todas as mensagens de handover mandatório que serão enviadas para os MNs que deverão migrar de GW. ===== References ===== Bibtex/PDF entry dos papers sobre esse componente.