﻿@startuml
skinparam monochrome true
'Diagrama de implantação'

/' Definições Primárias
* CLients:
  * Usuários Web ok 
  * Sistemas Externos ok 
  * Módulos Internos ok 
* Servidores Principais
  * Servidor de Aplicação - Fornce Api dos Módulos (Interno)
  * Servidor de Mensageria - Fornece Api de Integração
  * Servidor Web - Fornece Sistema Web
Servidores Auxiliares
  * ARR - Balanceador de Carga
  * Redis - Servidor de Cache
'/

/' Clusters de Servidores
* Servidor de Aplicação 
* Servidor de Mensageria 
'/


'************************ SERVER Front ********************
package WebServerPack as "Web"{
    node LB1 as "Load Balancer"{
		component LB1_ARR as "Application Request Routing"
	}

   package PLB_1 as "Cluster \nIntegration Farm"{
	   node ESBServer as "Integration Server (1-N)"{
		   [Enterprise Service Bus]
	   }
   }
   
   package PLB_2 as "Cluster \Web Aplication Farm"{
	   node WebApp as "Web Aplication (1-N)"{
		   [Single Page Application]
	   }
	   LB1_ARR -down-> [Enterprise Service Bus]
	   LB1_ARR -down-> [Single Page Application]
   }
}

'************************ SERVER Back ********************
package WebServerPackBack as "Application"{
   node LB2 as "Load Balancer"{
		component LB2_ARR as "Application Request Routing"
   }
   node cache as "Cache Server"{
   	   component Redis
   }

    package PLB_3 as "Cluster \nApplication Farm"{
	  node App as "Module Server (1-N)"{
	  	  component module1 as "Service Module 1"
		  component module2 as "Service Module 2"
		  component module3 as "Service Module N"
	  }


	}
}
 LB2_ARR --> module1
 LB2_ARR --> module2
 LB2_ARR --> module3
 
 
 node dbServer as "Data Base Server"{
    	component sgbd as "SGBD"{
 	   	database bd as "Database'"{
 		}
 	}
 }
 

 module1 -[hidden]-> bd
 module2 -[hidden]-> bd
 module3 -[hidden]-> bd


 module1 -down-> sgbd
 module2 -down-> sgbd
 module3 -down-> sgbd


'************************  SERVER Front -> SERVER Back ********************
[Enterprise Service Bus] -down->  LB2_ARR
'[Enterprise Service Bus] .down.> Redis
 [Single Page Application] -[hidden]-> Redis

 module1  .up.> Redis
 module2  .up.> Redis
 module3  .up.> Redis

'************************ Client ********************

node CLI_Desktop as "Desktop"{
	component CLI_DesktopBrowser as "Browser"
}
node CLI_Mobile as "SmartPhone"{
	component CLI_DeMobileBrowser as "Browser"
}

node CLI_Aplications as "Client Application"{
	component CLI_AppService as "Services"
}


CLI_DesktopBrowser --> LB1_ARR : Http
CLI_DeMobileBrowser --> LB1_ARR : Http
CLI_AppService --> LB1_ARR : Http

@enduml