Installazione e aggiornamento > Guida al dimensionamento di ThingWorx > Considerazioni sul dimensionamento dei cluster ThingWorx
Considerazioni sul dimensionamento dei cluster ThingWorx
Dimensionamento dei nodi di ThingWorx Foundation
Nelle operazioni in cluster il dimensionamento per i singoli nodi di ThingWorx Foundation è in gran parte invariato. In ogni nodo del cluster deve essere disponibile memoria sufficiente per caricare l'intero modello di oggetto. Di conseguenza, la dimensione di ogni nodo del cluster deve coincidere con la dimensione di un nodo di un singolo server. Ad esempio, un singolo server di medie dimensioni è di 16 vCPU e 32 GiB RAM. Analogamente, per un cluster a due nodi, ogni nodo del cluster è di 16 vCPU e 32 GiB RAM.
Se Apache Ignite viene distribuito separatamente, il consumo di memoria del server Foundation può essere ridotto leggermente in quanto le informazioni sullo stato delle proprietà sono state trasferite nei nodi di Ignite.
L'utilizzo della CPU aumenta per eseguire i task di sincronizzazione dei cluster in background. Nelle configurazioni cluster anche le singole operazioni possono essere leggermente più lente a causa della latenza aggiunta di una cache condivisa. Questa viene sfalsata dalla possibilità di eseguire un numero maggiore di operazioni in parallelo (logica aziendale e/o richieste di utenti) in più nodi.
Per garantire disponibilità elevata, una volta determinata la dimensione corretta di un singolo nodo, si consiglia di distribuire almeno un altro nodo di ThingWorx Foundation rispetto a quello necessario per gestire il picco di carico nell'applicazione. In questo modo il cluster potrà continuare a soddisfare le aspettative di prestazioni in caso di errore di un singolo nodo.
Dimensionamento dei nodi del server connessioni
Nelle operazioni in cluster i server connessioni sono necessari per distribuire il carico dei dispositivi nel cluster oppure per ridistribuirlo in caso di errore di un nodo.
Come per i nodi di Foundation, si consiglia di distribuire almeno un altro server connessioni rispetto a quello necessario per gestire il numero di dispositivi previsto. Ciò consente ai server connessioni di mantenere la connettività con tutti i dispositivi in caso di errore di un singolo nodo di connessione del server.
Fare riferimento all'Help Center di ThingWorx Connection Services per i requisiti di sistema per le singole opzioni del server connessioni.
Dimensionamento dei nodi di Apache ZooKeeper
Apache ZooKeeper è una soluzione open source per la sincronizzazione delle applicazioni distribuite. Fornisce monitoraggio ed elezione del leader per i nodi ThingWorx.
Si consiglia un insieme a tre nodi, ciascuno con 2 vCPU e 2 GiB di RAM. È necessario un numero dispari di istanze per mantenere un quorum.
Per ulteriori informazioni, vedere i requisiti di sistema di Apache Zookeeper: https://zookeeper.apache.org/doc/r3.1.2/zookeeperAdmin.html#sc_systemReq
Nodi del database di dimensionamento
Oltre che per la disponibilità elevata, il carico del database aumenta nelle configurazioni cluster di ThingWorx. Per illustrare questa condizione, sono stati eseguiti test di carico identici con cinque distribuzioni medie diverse utilizzando macchine virtuali Microsoft Azure:
Confronto tra prestazioni a nodo singolo e cluster (solo PostgreSQL)
Foundation
1 × F16s_v2
2 × F16s_v2
3 × F16s_v2
4 × F16s_v2
5 × F16s_v2
Ignite
Nessuno
3 × F8s_v2
3 × F8s_v2
3 × F8s_v2
3 × F8s_v2
PostgreSQL
1 × F16s_v2
1 × F16s_v2
1 × F16s_v2
1 × F16s_v2
1 × F16s_v2
InfluxDB
Nessuno
Nessuno
Nessuno
Nessuno
Nessuno
Risultati per nodo (media)
26.000 WPS
19 operazioni HTTP
12.000 WPS
10 operazioni HTTP
10.000 WPS
6 operazioni HTTP
7.000 WPS
6 operazioni HTTP
6.000 WPS
2 operazioni HTTP
Totale risultati
24.000 WPS
19 operazioni HTTP
30.000 WPS
24 operazioni HTTP
28.000 WPS
22 operazioni HTTP
30.000 WPS
12 operazioni HTTP
Promemoria: i consigli della guida al dimensionamento sono finalizzati all'uso delle baseline iniziali per dimensionare le implementazioni ThingWorx. I risultati variano in base alla configurazione edge, al carico di applicazioni e così via.
Mentre i test riportati sopra mostrano un piccolo miglioramento dell'inserimento dei dati, le prestazioni della richiesta HTTP non migliorano a causa di risorse di database inadeguate.
Per risolvere questo problema, la scalabilità può migliorare con istanze RDBMS più grandi e/o utilizzando InfluxDB come indicato di seguito.
Confronto tra prestazioni a nodo singolo e cluster (PostgreSQL + InfluxDB)
Foundation
1 × F16s_v2
2 × F16s_v2
3 × F16s_v2
4 × F16s_v2
5 × F16s_v2
Ignite
Nessuno
3 × F8s_v2
3 × F8s_v2
3 × F8s_v2
3 × F8s_v2
PostgreSQL
1 × F8s_v2
1 × F8s_v2
1 × F8s_v2
1 × F8s_v2
1 × F8s_v2
InfluxDB
1 × F8s_v2
1 × F8s_v2
1 × F8s_v2
1 × F8s_v2
1 × F8s_v2
Risultati per nodo (media)
90.000 WPS
120 operazioni HTTP
53.000 WPS
187 operazioni HTTP
39.000 WPS
148 operazioni HTTP
31.500 WPS
127 operazioni HTTP
27.000 WPS
108 operazioni HTTP
Totale risultati
106.000 WPS
375 operazioni HTTP
118.000 WPS
445 operazioni HTTP
126.000 WPS
508 operazioni HTTP
135.000 WPS
540 operazioni HTTP
Promemoria: i consigli della guida al dimensionamento sono finalizzati all'uso delle baseline iniziali per dimensionare le implementazioni ThingWorx. I risultati variano in base alla configurazione edge, al carico di applicazioni e così via.
* 
Per questi test è stato utilizzato InfluxDB Open Source, che non offre disponibilità elevata. Per le implementazioni dei cluster ThingWorx per la produzione si consiglia InfluxDB Enterprise. Per il dimensionamento di InfluxDB Enterprise, pianificare due nodi "Dati" di InfluxDB, come indicato, oltre a tre nodi "Meta", in genere 1-2 vCPU e 0,5-1 GiB di RAM ciascuno. Per ulteriori informazioni sul dimensionamento di InfluxDB, consultare https://docs.influxdata.com/influxdb/v1.8/guides/hardware_sizing/.
Dimensionamento dei nodi di Apache Ignite
In un cluster ThingWorx Apache Ignite fornisce una cache condivisa per i valori delle proprietà e dati aggiuntivi, quali le operazioni di trasferimento di file.
Ignite può essere incorporato all'interno del processo di ThingWorx Foundation e non è richiesta un'installazione separata. In alternativa, per una distribuzione dei carichi migliore, Ignite può essere distribuito anche come cluster separato.
Ignite può inoltre essere eseguito in una delle due modalità riportate di seguito.
Modalità PARTITIONED - I dati vengono suddivisi in partizioni uguali e ripartiti equamente tra i nodi partecipanti. Migliori prestazioni di scrittura cache.
Modalità REPLICATED - Ogni istanza di Ignite ha una copia di ogni punto dati. Migliori prestazioni di lettura cache.
Per ulteriori informazioni, esaminare la documentazione relativa alle modalità della cache di Apache Ignite: https://apacheignite.readme.io/docs/cache-modes
Il carico principale da Ignite è la velocità effettiva della rete tra ogni istanza di ThingWorx Foundation e Ignite. Sebbene i requisiti di CPU, disco o memoria possano indicare dimensioni di macchine virtuali più ridotte dai provider di cloud, è importante monitorare la velocità effettiva della rete limitata o accelerata.
Eventuali problemi di velocità effettiva della rete possono essere risolti passando a sistemi più grandi con una maggiore capacità di rete o aggiungendo altri nodi Ignite (utilizzando la modalità PARTIZIONATA) per distribuire il carico.
Per iniziare può considerarsi prudente e appropriato utilizzare una dimensione della memoria corrispondente ai nodi di ThingWorx Foundation.
Per calcolare con maggiore precisione il footprint della memoria della cache condivisa, attenersi alla procedura descritta di seguito.
1. Calcolare il footprint della memoria di VTQ (valore, timestamp e qualità) per la cache delle proprietà di ThingWorx.
a. Per ogni tipo di oggetto, determinare la dimensione del tipo di dati in memoria. Ad esempio, se la proprietà è una stringa di 50 caratteri e per ciascun carattere sono necessari 2 byte, la stringa richiede 100 byte di memoria.
b. Aggiungere 8 byte. (4 per data/ora del valore specifico e 4 per la qualità del valore).
c. Moltiplicare per 2. ThingWorx memorizza nella cache il valore corrente e quello precedente di ciascuna proprietà.
d. Moltiplicare per il numero di oggetti di quel tipo.
e. Sommare il risultato per ogni tipo di oggetto.
2. Aggiungere il 30% per gli indici di valori in memoria di Ignite.
3. Moltiplicare per il numero di copie di dati desiderate nel cluster di Ignite. Ad esempio, se si desidera un backup dei dati in modo che nessun dato venga perso in caso di errore di un singolo nodo di Ignite, moltiplicare per 2.
4. Dividere per il numero di nodi del cluster di Ignite che si intende distribuire.
5. Ogni nodo di Ignite richiederà altri 300 MB circa per la propria operazione.
Per ulteriori informazioni, esaminare la documentazione di Apache Ignite: https://apacheignite.readme.io/docs/capacity-planning
È stato utile?