Seata-Go-Server is a highly available server-side component of a distributed transaction solution compatible with Seata (after version 0.5), developed using Golang, by InfiniVision contributed to the Seata open source community.
- High availability, fault-tolerance
- Auto-Rebalance
- Linear scalability
- Strong consistent metadata storage
The transaction coordinator process, each process contains multiple Fragment
A stateless node that provides the correct route to the outside and sends the request to the corresponding Fragment
Leader node.
Elasticell is a distributed Key Value store with strong consistency and reliability to store the metadata.
The performance of Taas is directly proportional to the number of machines. To support this feature, the minimum unit for processing global transactions in Taas is a Fragment
, which sets the number of concurrent global active transactions supported by each Fragment
at startup. Taas samples each Fragment
periodically according to a configurable interval, and Taas will generate a new Fragment
to handle more concurrency as soon as existing system exceeds the saturation ratio, which is also configurable.
Each Fragment
has multiple replication sets and a single Leader, the requests are processed by the Leader. When the Leader fails, the system will generate a new Leader to process the requests. During the election of the new Leader, the Fragment
does not provide services externally---the usual interval is a few seconds.
Taas itself does not store any metadata of transaction, actually they are stored withinElasticell. Elasticell is a distributed KV storage engine compatible with Redis
protocol, it adopts Raft
mechanism to guarantee the strong consistency.
As the system runs, there will be many Fragment
s and their copies in the system, which will result in uneven distribution of Fragment
on each machine, especially when the old machine goes offline or the new machine goes online. When Taas starts, it will select 3 nodes as the scheduler, which is responsible for scheduling these Fragment
s to ensure that the number of Fragment
s and the number of Leaders on each machine are approximately equal. The scheduler will also maintain the number of replications of each Fragment
at the specified amount.
git clone https://github.com/seata/taas.git
docker-compose up -d
The service listens by default on port 8091, modifying the server address experience corresponding to Seata.
Visit WEB UI http://127.0.0.1:8084/ui/index.html
Seata-Go-Server is contributed to the Seata open source community by [InfiniVision] (./proposed-contrib.md#InfiniVision). Prior to Seata's open source, InfiniVision was implementing a distributed transaction solution TaaS (Transaction as a Service). After Seata became open source, InfiniVision modified TaaS to be compatible with Seata and donated it to the Seata open source community.