Table of Contents | ||||||
---|---|---|---|---|---|---|
|
Cluster Terminology
This topic introduces some of the concepts unique to the cluster creation and communication feature of A-Stack.
Terminology | Description | Synonym Terms |
---|---|---|
Network | A collection of A-Stack running instances that communicates (notifications) and keep persistent data store in sync. | Cluster, Clustering |
Peer | A-Stack running instance that is participating in forming a Network | |
Node | A-Stack running instance | Peer if participating in forming a network. |
Group | Logical Name defined to make communication type between a collection of Nodes | |
Advertise | Send Notifications to peer or group | |
Replicate | Replication of data (TQL Storage) between nodes or a group of nodes |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<NewPackage> <RuntimeParams> <RegionSectionName>Cluster1</RegionSectionName> <ClusterName>[:RuntimeParams.RegionName:]_[:RuntimeParams.RegionSectionName:]</ClusterName> </RuntimeParams> <NewFacetInstance Name="wsNotificationCluster" Type="SffNetworkFacet" Context="new" fid="wsNotificationCluster"> <OnActivate> <ImportFacet>[:RuntimeParams.MacroFacetID:]</ImportFacet> <SetLocalData Key="fedpeers"> <Value> <Server Id="[:RuntimeParams.ClusterName:]_Server1" Host="bkhan" Port="8082"/> <Server Id="[:RuntimeParams.ClusterName:]_Server2" Host="bkhan" Port="8083"/> <Server Id="[:RuntimeParams.ClusterName:]_Server3" Host="bkhan" Port="8084"/> <Server Id="[:RuntimeParams.ClusterName:]_Server4" Host="bkhan" Port="8085"/> </Value> </SetLocalData> <For Each="server" From="$LocalData.fedpeers" In="Server"> <AddProcessData Key="DeviceEnginesClusterPeers.DeviceEnginePeer"> <Value> <Name>[:$LocalData.server.Id:]</Name> <URL>ws://[:$LocalData.server.Host:]:[:$LocalData.server.Port:]/fid-wsNotificationCluster</URL> <AdvertiseTo>[:RuntimeParams.ClusterName:]</AdvertiseTo> <Group>[:RuntimeParams.ClusterName:]</Group> </Value> </AddProcessData> </For> <Log Level="INFO" Message="TQLNotificationCluster : Federation AdvertiseTo servers [:$ProcessData.DeviceEngines:]"/> <Process> <Network> <OnPeerError> <Log Level="error" Message="TQLNotificationCluster : Peer [:$ContextData.$Peer.Key:] error: [:$Error:]"/> </OnPeerError> <Namespace Name="AMQPCluster"> <Include>$ProcessData.DeviceEngines<ClusterPeers</Include> </Namespace> <Group name="[:RuntimeParams.ClusterName:]" UserName="tql" Password="tql12345" VirtualHost="/" Durability="true" Host="mqtt.atomiton.com" Port="5672" ExchangeName="AtomitonFanoutExchange" ExchangeType="fanout" QueueName="peer.[:PeerQName:]"> <Send post="amqp://?ClientType=publisher& UserName=[:UserName:]& Password=[:Password:]& VirtualHost=[:VirtualHost:]& HostName=[:Host:]& PortNumber=[:Port:]& ExchangeName=[:ExchangeName:]& ExchangeType=[:ExchangeType:]& QueueName=[:QueueName:]& Durability=[:Durability:]"> <RoutingKey>cluster.[:QName:]</RoutingKey> <Template> <Message> <Value> <PublishMessage>[:$Request.Message.Value:]</PublishMessage> </Value> </Message> </Template> </Send> <Receive get="amqp://?ClientType=subscriber& UserName=[:UserName:]& Password=[:Password:]& VirtualHost=[:VirtualHost:]& HostName=[:Host:]& PortNumber=[:Port:]& ExchangeName=[:ExchangeName:]& ExchangeType=[:ExchangeType:]& QueueName=[:QueueName:]& Durability=[:Durability:]" as="ServerPipeline" disable="CMD_SEND"> <Message> <Value> <AMQPSubscriptionConfig> <RoutingKey value="cluster.[:QName:]"/> </AMQPSubscriptionConfig> </Value> </Message> </Receive> </Group> </Network> </Process> <SffReport Name="wsNotificationCluster_OnActivate"/> </OnActivate> <OnOpen ModifyPipeline="WsServerExtensionArgs" Context="keep"/> <Policy name="MyMetering" type="SffSimplePolicy" kind="metering"> <inc type="integer" target="RequestCount"/> <add type="integer" target="TotalBytes" value="[:$RawData.TotalBytesRead:]"/> <set type="integer" target="AvgRequestSize" value="[:$ThisData/(number(TotalBytes div RequestCount)):]"/> </Policy> <OnError> <SetLocalData Key="guard" Value=""/> <ReportError> <Error>[:[:$LocalData.guard:]$Error:]</Error> <occurredIn>TQLNotificationCluster</occurredIn> </ReportError> <SffReport Name="wsNotificationCluster_OnError"/> </OnError> </NewFacetInstance> </NewPackage> |
Cluster Topologies
Choosing the correct data storage strategy depends on the type of application (simple to complex), deployment and interoperability to other platforms. Here are some basic recommended guidelines
...