3
votes

Context

I'm using Titan v1.0.0, on AWS infrastructure and want to support failover/fault tolerance. AWS will take care of DynamoDb storage backend but it seems necessary to have several titan instances serviced by an (ELB) load balancer.

I'm using a nodeJs library to get to gremlin, and gremlin to access Titan.

Question

So, how does the Titan (not backend storage) clustering work? If at all.

To be clear, I'm not talking about any backend storage clustering, as I'm using dynamoDb on AWS. The documentation on transaction locking suggests to me that a titan cluster must exist, as other titan nodes wouldn't know about the locking without some sort of inter-communication. But I don't see any configuration options that support this.

If clustering is possible on titan, does anyone have any information on how to get this setup in a production High-Availability setup?

An illustration of the server-side architecture:

[NodeJsA]\             /[TitanA]\
          \           /          \
           [ELB (AWS)]            [DynamoDb (AWS)]
          /           \          /
[NodeJsB]/             \[TitanB]/

Further, if there is no clustering of the titan nodes then a change made via the TitanA node (above) could take the following amount of time to be seem on TitanB node (worst case):

(AWS eventual consistency convergence time (~1 sec) + TitanB cache timeout + poll time from NodeJs nodes to titanDB)

Another consequence of the lack of clustering would be that sessions would have be to pinned in the ELB else a read request, after an update, could be served by a different node with stale information.

1

1 Answers

2
votes

Titan doesn't do any "clustering" outside of what is supported by the selected backend. You referred to "locking" as something that would indicate that clustering is supported, but if you read about the locking providers in that link you supplied you'll see that locking isn't really doing anything terribly fancy at a Titan level and that it is backend dependent. So Titan instances really don't have any external clustering capabilities or knowledge of each other. You therefore need to take that into account with respect to your architecture.