AWS Database Blog

Amazon Aurora DSQL for global-scale financial transactions

You can use Amazon Aurora DSQL to run global-scale financial transactions across multiple AWS Regions without choosing between strong consistency and low latency. Today, that choice carries real costs, like overnight reconciliation jobs, manual failover procedures, and the operational risk of brief data inconsistencies in systems that handle customer balances and payments. Amazon Aurora DSQL removes these trade-offs by delivering globally consistent, strongly durable transactions with active-active availability and serverless operations.

In this post, we first examine why traditional approaches to distributed consistency fall short for financial workloads. We then walk through how the Amazon Aurora DSQL architecture addresses these challenges, and apply it to three production use cases: core banking, global spend management, and digital currency infrastructure. We close with implementation considerations and how to get started with the Amazon Aurora DSQL Free Tier.

Evolving demands on financial services databases

Financial databases have always needed consistency and availability. What’s changed is the operating context. A decade ago, most transaction processing was regional. A bank’s core ledger ran in one data center, trading systems served a single exchange, and end-of-day batch reconciliation was an accepted norm. Today, your customers expect real-time visibility across geographies, regulators are tightening windows for transaction reporting, and multi-Region availability has moved from a premium feature to a competitive requirement.

A common scenario illustrates the challenge: you need to debit an account in one Region and credit another account in a different Region, both within a single transaction. The traditional answer is two-phase commit (2PC), where a coordinator node collects agreement from each participant before committing. It works, but the coordinator is a single point of failure, the coordinator holds locks across the full round-trip, and partial failures require recovery logic that is difficult to test and expensive to operate. Across Regions, coordinator round-trips add hundreds of milliseconds and lock contention during cross-Region transactions can throttle throughput at exactly the moments it matters most.

The alternative most teams reach for is eventual consistency through asynchronous replication, multi-primary topologies with conflict resolution, or purpose-built distributed stores. This avoids the coordination overhead of 2PC but shifts the burden to your application developers, who must implement idempotency, conflict resolution, and reconciliation logic in every service that touches shared state. Some teams accept brief inconsistency and factor it into their operational risk models. That trade-off can be reasonable for analytics or caching workloads, but it is harder to justify when you are directly handling customer balances, payments, or trade settlement.

Amazon Aurora DSQL fills the gap between these two approaches, giving you strong consistency without the coordination overhead of 2PC and without the reconciliation debt of eventual consistency.

Amazon Aurora DSQL architecture and what it means for financial services

You get the benefits of the Amazon Aurora storage engine, extended for distributed operation across AWS Regions. Introducing Amazon Aurora DSQL covers the full architectural detail. Here, we focus on the properties that matter most for financial services workloads.

Active-active, multi-Region design. You can read and write in every Region where you deploy a cluster. Each Regional node is a peer that accepts transactions, with write transactions replicated synchronously across Regions and to a witness Region.

The witness Region is a lightweight, neutral third location that participates in commit decisions to maintain a quorum (a majority vote) among three locations that confirms a transaction is durable. Three Regions are needed because a quorum requires agreement from at least two of three participants. When one of your two active Regions goes down, the remaining active Region and the witness Region still form a majority, so transactions continue to commit without interruption or data loss. With only two Regions and no witness, losing one Region would leave the other unable to confirm whether in-flight transactions were committed.

With multi-Region clusters, you get up to 99.999 percent availability at the database layer. For resilience strategies that require multi-Region operation, this removes the need to build and maintain manual failover, primary/secondary coordination, and post-failover data reconciliation. This is most effective when you pair it with active-active application tiers that operate independently in each Region, so your full stack absorbs Regional disruptions without centralized coordination at every layer.

Serverless operation and scaling. You don’t need to plan capacity, manage replicas, or design a sharding strategy. Compute, commit, and storage layers scale independently and automatically. Amazon Aurora DSQL charges for the compute and I/O you consume. You only pay for the capacity you use during market opens or quarter-end spikes, not for idle overhead during quieter periods. Financial workloads with the unpredictable demand patterns described earlier in this post can see substantial cost savings compared to traditional provisioned database architectures.

Consistency model. Transactions execute locally in the nearest Region, and Amazon Aurora DSQL coordinates across Regions only at commit time of mutating transactions. The consistency model is optimistic concurrency control (OCC) with snapshot isolation, which means your transactions don’t hold locks while executing. Read-only transactions complete with local latency and see consistent snapshots without any cross-Region coordination overhead. Write transactions pay the cross-Region coordination cost only at commit, not during execution, which keeps the coordination window minimal.

Instead, each transaction works against a consistent snapshot of the data, and Amazon Aurora DSQL checks for conflicts only when you commit. When two transactions modify the same row, one commits successfully and the other fails with a serialization error that the application retries.

This is an important property for the use cases that follow. Workloads where transactions typically touch distinct rows (different accounts, different trades) see minimal contention. Workloads that frequently update the same rows benefit from schema designs that reduce row-level conflicts, such as appending new rows rather than updating counters in place. The Amazon Aurora DSQL documentation provides detailed guidance on schema patterns designed for OCC.

PostgreSQL compatibility. Teams already working with PostgreSQL can use your existing SQL syntax, drivers, and client libraries with Amazon Aurora DSQL. The examples in this post use familiar PostgreSQL patterns, and you can migrate existing relational schemas with minimal changes. For the list of PostgreSQL features that Amazon Aurora DSQL doesn’t currently support, see Amazon Aurora DSQL known issues and differences.

Financial services use cases

Across the following use cases, a common theme is that you replace complex multi-database architectures with a single globally consistent data layer, removing reconciliation processes and manual failover procedures. What differs is the specific operational context and regulatory pressure.

Core banking and ledger consistency

Core banking applications maintain the accurate, real-time ledgers for customer accounts, balances, and transactions. Large banks operating across geographic Regions have historically run separate regional cores or relied on batch processes to sync data between them.

This creates two problems. If the primary Region goes down, transaction processing stops or fails over with potential data loss. During normal operation, balance queries in one Region may not reflect recent transactions processed in another. Regulators and customers now expect continuous availability and real-time accuracy across Regions.

Amazon Aurora DSQL changes this by letting each branch or Regional application read and write to a local endpoint while updates propagate automatically to every other Region in the cluster. A deposit processed in US East (Ohio) is immediately visible to a teller querying from US West (Oregon). When a Region becomes unavailable, the remaining Regions continue processing transactions with no data loss and no manual failover. Because the database provides a single globally consistent state, you can produce regulatory reporting from every Region without cross-system reconciliation.

To make this concrete, consider a funds transfer between two accounts. In a traditional multi-Region architecture, this might require a saga pattern, message queues, and compensating transactions to handle partial failures across regional databases. Amazon Aurora DSQL reduces this to a single ACID (Atomicity, Consistency, Isolation, Durability) transaction.

The following schema illustrates several design choices optimized for Amazon Aurora DSQL’s distributed architecture. UUID primary keys avoid the coordination overhead of sequential IDs across Regions. CHECK constraints enforce business rules at the database level rather than in application code. TIMESTAMPTZ columns provide consistent timestamps regardless of which Region processes the transaction. These examples use literal values for clarity. In production, always use parameterized queries through your database driver to prevent SQL injection. Application code should validate sufficient funds before initiating the transfer. You can run the following SQL interactively in the Amazon Aurora DSQL playground.

-- Schema: simplified core banking ledger
CREATE TABLE accounts (
    account_id UUID PRIMARY KEY,
    customer_id UUID NOT NULL,
    balance NUMERIC(18,2) NOT NULL CHECK (balance >= 0),
    currency VARCHAR(3) NOT NULL,
    updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE transactions (
    transaction_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    from_account UUID NOT NULL,
    to_account UUID NOT NULL,
    amount NUMERIC(18,2) NOT NULL,
    description TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Funds transfer as a single ACID transaction
BEGIN;
UPDATE accounts
SET balance = balance - 500.00, updated_at = NOW()
WHERE account_id = 'acct-1234'
  AND balance >= 500.00;
UPDATE accounts
SET balance = balance + 500.00, updated_at = NOW()
WHERE account_id = 'acct-5678';
INSERT INTO transactions (from_account, to_account, amount, description)
VALUES ('acct-1234', 'acct-5678', 500.00, 'Funds transfer');
COMMIT;

Both account updates and the transaction record commit atomically, regardless of which Region the application connects to. If the sender has insufficient funds, the CHECK constraint fails and the entire transaction rolls back. There is no intermediate state where one account is debited without the other being credited. No saga orchestration, no compensating transactions, no reconciliation job to run overnight.

Because transfers typically touch distinct account rows, concurrent transactions against different accounts commit without contention under the Amazon Aurora DSQL optimistic concurrency model. In the uncommon case where two transactions target the same account simultaneously, OCC detects the conflict at commit time and one transaction retries, preserving consistency without application-level locking.

Global spend management and corporate card systems

Modern spend-management services act as centralized decision layers that authorize and track every financial transaction for thousands of businesses worldwide. Every card swipe, Automated Clearing House (ACH) transfer, wire, or reimbursement triggers multiple transactional updates to balances, credit limits, merchant controls, risk scores, and accounting mappings. These actions often originate from different locations within seconds of each other, and even a brief inconsistency (for example, a balance update lagging behind an authorization decision) results in declined transactions, overspending, or fraud exposure.

With Amazon Aurora DSQL, you maintain a single, globally consistent ledger across Regions. Each Region accepts writes locally and commits them as part of the same globally consistent transaction set, which is particularly valuable when you integrate with multiple payment processors and banking partners deployed across different Regions. The strongest value you get is the consolidated ledger and reconciliation layer, maintaining globally consistent balance views, spend controls, and accounting records without batch synchronization between regional databases.

Digital currency infrastructure

Global digital currency issuers operate always-on services that support minting, redemption, transfers, and settlement across multiple Regions, blockchains, and banking partners. These services must maintain accurate, real-time ledgers that track token supply, customer balances, and transaction states with absolute accuracy. You can process minting, burning, and transfer events locally, close to exchanges, payment processors, or banking partners, while Amazon Aurora DSQL commits them atomically and makes them visible globally. Circulating supply, customer balances, and transaction histories stay synchronized across Regions continuously.

Getting started with AWS Free Tier

You get access to a perpetual AWS Free Tier and a set of guided AI skills that accelerate development without requiring deep expertise in distributed database design. The Free Tier includes 100,000 Database Processing Units (DPUs) and 1 GB of storage every month at no cost, which is enough capacity to run development environments or support small-scale applications.

Amazon Aurora DSQL AI skills help you with schema design for distributed workloads, referential integrity without foreign keys, and building production-ready applications from day one. These skills work with AI-powered coding tools like Kiro or Claude Code, providing interactive guidance for tasks such as designing schemas optimized for distributed transactions, building resilient multi-Region application architectures, and migrating existing PostgreSQL workloads to Amazon Aurora DSQL.

To explore the full set of Amazon Aurora DSQL skills, see the Amazon Aurora DSQL steering guide.

Conclusion

In this post, we showed you how Amazon Aurora DSQL combines globally distributed ACID transactions, active-active availability with up to 99.999 percent uptime, and serverless operations in a single managed service. We walked through how its architecture addresses the limits of two-phase commit and eventual consistency. We applied it to three production patterns that financial services teams build today: a core banking ledger with atomic cross-Region transfers, a globally consistent spend-management system, and a digital currency platform that keeps circulating supply and balances synchronized across Regions.

To get hands-on, create a Free Tier cluster from the Amazon Aurora DSQL service page, then follow the developer guide for connection setup, query patterns, and schema design. For deeper architectural context and feature comparisons, see the Amazon Aurora DSQL documentation, and reach out to your AWS account team for guidance on building a business case for migration.


About the authors

Trevor Spires

Trevor Spires

Trevor is a Sr. Solutions Architect at AWS, specializing in Financial Services. He works closely with AWS’s Capital Markets and FinTech customers to scale and secure their core infrastructure and AI systems in the cloud.

Raluca Constantin

Raluca Constantin

Raluca is a Sr. Database Engineer at AWS, specializing in Amazon Aurora DSQL. Her 18 years of database expertise span Oracle, MySQL, PostgreSQL, and cloud-native solutions, focusing on database scalability, performance, and real-time data processing.

Jigna Gandhi

Jigna Gandhi

Jigna is a Sr. Solutions Architect at AWS, specializing in Financial Services. She works closely with fintech, web3, and banking organizations to architect scalable, secure, and resilient cloud and AI solutions that power modern financial platforms.

Narendra Reddy Bathina

Narendra Reddy Bathina

Narendra is a Technical Account Manager at AWS for Financial Services. He partners with FinTech clients to enhance the resilience, performance, and scalability of their production systems, using years of frontline experience in databases, storage, and cloud operations.

Viraj Padte

Viraj Padte

Viraj is a Sr. Solutions Architect at AWS, specializing in Financial Services. He works with various Fintech customers to architect enterprise-ready infrastructure for supporting their core business and AI-powered platforms and solutions.