Creodata Solutions Logo

Microservices Architecture for AML Platforms: Why It Matters for Banks

April 18, 2026

The AML compliance technology landscape in East Africa is littered with the wreckage of monolithic systems that promised comprehensive coverage and delivered operational complexity instead. A mid-sized Kenyan bank purchases an all-in-one AML platform, implements it over 18 months, and goes live — only to discover that updating the goAML XML generation logic when FRC changes its validation rules requires a full system upgrade affecting every module. That upgrade requires testing across the entire platform, a lengthy change approval process, a maintenance window, and rollback risk. Meanwhile, the new FRC validation deadline is two weeks away.

This is not a hypothetical. It is a pattern that repeats across the region every time a regulator issues updated schema guidance or a new typology indicator list. Monolithic AML systems treat every component as part of a single deployable unit — which means changing one thing risks breaking everything.

Microservices architecture solves this problem by decomposing the AML platform into independent, single-purpose services that can be developed, deployed, updated, and scaled independently. For AML compliance specifically, the benefits are not abstract engineering preferences — they have direct operational consequences for compliance teams, IT departments, and regulators.


The Problem with Monolithic AML Systems

Single Point of Failure in Compliance Workflows

In a monolithic AML system, all compliance workflows — CTR generation, STR case management, XML generation, submission tracking, audit logging — run inside a single application. When that application experiences a problem, all workflows stop. A database connection timeout during CTR batch processing at month-end can freeze the entire compliance function, including the submission of time-sensitive STR reports that have nothing to do with CTR processing.

East African banks operating in jurisdictions with strict STR submission deadlines (Kenya FRC imposes reporting deadlines from the date of suspicion) cannot afford a single point of failure in their compliance workflow. Regulatory penalties for missed deadlines do not make exceptions for system outages.

Difficult to Update When FRC Changes XSD Rules

Kenya FRC and other East African FIUs update their goAML validation rules periodically. These updates range from minor changes to the indicator code list to structural changes in the schema that affect how XML documents are built. In a monolithic system, the XML generation component is compiled and deployed as part of the same application as the case management system, the risk engine, and the user interface.

Updating the XML generation logic requires rebuilding and redeploying the entire application. For an institution with a formal IT change management process — which most Tier 1 and Tier 2 banks are required to maintain — this means a change request, impact assessment, testing across all modules, UAT, board approval in some cases, and a production deployment window. The timeline is weeks, not days. When FRC issues schema changes with tight compliance deadlines, this deployment model becomes a regulatory risk in its own right.

Scaling Bottlenecks During CTR Batch Processing Peaks

CTR batch processing is computationally intensive and highly periodic. At month-end, banks may need to process hundreds of thousands of transactions against multiple threshold rules, generate CTR XML documents for hundreds of individual CTRs, validate each document against the XSD, and submit them to the FIU portal within a short window.

In a monolithic system, this processing load competes with interactive user requests from compliance officers working on STR cases simultaneously. The batch processing can degrade the interactive user experience, or the interactive load can cause batch processing to miss its submission window. Scaling the system to handle the peak load means scaling all components — even those that are not under load — because they cannot be scaled independently.

Vendor Lock-In and Upgrade Risk

Monolithic AML systems from traditional vendors frequently use proprietary technology stacks, proprietary database schemas, and proprietary integration interfaces. Migrating away from such a system when it no longer meets requirements — whether because the vendor raises prices, discontinues the product, or fails to support regulatory changes in a timely manner — requires a complete reimplementation. The data is locked in the vendor's schema. The integration logic is locked in the vendor's API. The institution is a captive customer.


Microservices Architecture Explained for Compliance Leaders

What a Microservice Is

A microservice is an application component designed to do exactly one thing, do it well, and expose its capability through a well-defined API. Each microservice can be developed, tested, deployed, and scaled independently of every other microservice. They communicate through APIs and message queues rather than direct database connections or shared libraries.

This is not merely a technology preference. For AML compliance, independent deployability means that when Kenya FRC changes its validation profile, only the ValidationEngine service needs to be updated and redeployed. Every other service — including the case management system that compliance officers use to manage their daily workload — continues running unaffected.

How 10 Microservices Work Together in an AML Platform

A complete AML reporting platform decomposes into the following services, each with a distinct responsibility:

ConfigurationService is the source of truth for all country-specific configuration: FIU endpoints, CTR thresholds per currency, goAML validation profiles, and country profiles for Kenya, Uganda, Tanzania, Zambia, and Rwanda. When a threshold changes, only this service is updated.

CaseManagementService manages the lifecycle of every STR and CTR case from creation through approval to submission. It provides the workflow engine, approval routing, document attachment, and status management for compliance officers.

CTREngineService performs threshold detection and batch CTR generation. It consumes transaction data, applies aggregation logic (including cross-channel aggregation for mobile money), compares against thresholds from the ConfigurationService, and generates draft CTR cases. This service is the primary candidate for independent scaling during month-end batch processing peaks.

XMLGenerationService takes approved case data from the CaseManagementService and generates XSD-compliant goAML XML documents. It is the only service that needs to change when the UNODC schema is updated or when a country-level FIU changes its validation requirements.

ValidationEngine applies pre-submission validation rules against generated XML documents. It enforces both XSD structural compliance and the semantic business rules specific to each country's FIU. A report that passes XSD validation but violates Kenya FRC's narrative length requirement is caught here before submission.

SubmissionService handles all communication with FIU portals: transmitting XML reports, tracking submission status, capturing acceptance and rejection responses, managing resubmission queues, and flagging compliance deadlines.

AuditService maintains the immutable event log for all compliance activities. Every case creation, status change, approval decision, submission attempt, and rejection response is logged here with full context. The audit log cannot be modified or deleted — it provides the evidentiary foundation for regulatory examinations.

RiskScoringService implements the weighted risk scoring engine that evaluates alerts and generates STR recommendations. It operates independently from case management, scoring alerts on demand and populating pre-built case data when escalation is warranted.

AuthorizationService manages staff user accounts, RBAC roles (ANALYST, COMPLIANCE_OFFICER, ADMIN, AUDIT_VIEWER), and JWT issuance for authenticated sessions. It is deployed from shared infrastructure used across Creodata platforms, reducing implementation cost for institutions already running other Creodata services.

NotificationService manages workflow alert emails — case assignment notifications, approval reminders, submission confirmations, FIU feedback alerts. It consumes events from the messaging layer and delivers notifications through SMTP or cloud email services.


Benefits for Compliance Operations

Independent Deployment: Update XML Rules Without Touching Case Management

The most immediately valuable architectural benefit for compliance teams is the ability to deploy updates to one service without affecting others. When FRC publishes a new indicator code list or changes its mobile money channel enumeration, the update is made to the XMLGenerationService and ValidationEngine, validated in a staging environment, and deployed — while compliance officers continue working on active cases in the CaseManagementService without interruption.

No change window is needed for the entire platform. No UAT is required on modules that were not changed. The deployment is targeted, tested, and proportionate to the actual change being made.

Resilience: One Service Failure Does Not Halt All Reporting

Microservices deployments implement circuit breaker patterns that isolate failures to the affected service. If the SubmissionService experiences connectivity issues with the FIU portal during a maintenance window, the CaseManagementService and CTREngineService continue operating normally — compliance officers can continue building and approving cases; the approved reports queue until the SubmissionService recovers. The failure is contained rather than cascading.

For compliance functions operating under submission deadlines, this resilience is a genuine operational safeguard. The alternative — a monolithic system where a single service disruption freezes all operations — creates escalatory risk during exactly the high-pressure periods when multiple submission deadlines may coincide.

Scalability: Scale CTR Batch Processing Independently

During month-end CTR batch processing, the CTREngineService requires substantially more compute resources than during normal operating periods. In a microservices deployment on Kubernetes, this service can be scaled horizontally by adding container instances when the processing queue grows, then scaled back down when the batch completes — without over-provisioning resources for the entire platform throughout the month.

This is economically significant for cloud deployments (where compute is billed by usage) and operationally significant for on-premises deployments (where over-provisioning has a capital cost).

Multi-Country Support Without Code Changes

Each country FIU configuration — threshold amounts, currency codes, validation profiles, XML schema extensions, portal endpoints — is stored in the ConfigurationService. Expanding from Kenya to Uganda is a configuration exercise, not a development exercise. The compliance team and country administrator configure Uganda's FIA profile, and the platform automatically applies Uganda-specific rules to Ugandan submissions. The XMLGenerationService and ValidationEngine query the country profile for each report and apply the appropriate rules.


Benefits for IT and Security Teams

Single-Tenant Isolation

Creodata's goAML platform is deployed as a single-tenant system — one deployment per institution, with no shared database schema, no shared infrastructure, and no shared credentials with any other institution. This is a fundamental design decision that distinguishes purpose-built banking compliance platforms from multi-tenant SaaS solutions.

For IT security teams, single-tenant isolation means that a security incident at another institution has no impact on your deployment. Your data is your data. Your audit logs are not intermingled with another institution's. Your FIU credentials do not sit in shared infrastructure alongside other institutions' credentials.

Container-Based Deployment: Docker and Kubernetes

All services are packaged as Docker containers, orchestrated through Kubernetes. For IT teams, this means the platform is deployed in a standardised, reproducible manner — the same container images that run in staging run in production. The Kubernetes manifests define the deployment topology, scaling policies, resource limits, and network policies for all services.

For banks deploying on-premises, Kubernetes can run on bare metal or VMware, without any cloud dependency. For banks deploying to Azure, the same manifests run on Azure Kubernetes Service (AKS), with managed control plane and automated node provisioning.

Infrastructure as Code

The complete platform infrastructure — virtual networks, Kubernetes clusters, database servers, storage accounts, service bus queues — is defined in Bicep templates (Azure) or Kubernetes manifests (on-premises). This means infrastructure is reproducible, version-controlled, and auditable. Disaster recovery scenarios involve re-running the infrastructure templates rather than manually rebuilding environments from memory.

For IT governance and audit purposes, infrastructure as code provides a complete record of what was deployed, when it was deployed, and what configuration it was deployed with.

API-First Design for Core Banking Integration

Every service exposes a documented REST API conforming to the OpenAPI 3.0 specification, with Swagger UI available for interactive exploration. For core banking integration teams, this means standard OAuth 2.0 / API key authentication, documented request and response schemas, and consistent error response formats across all services.

Integration with Temenos T24, Infosys Finacle, Oracle FlexCube, or any other core banking system requires only a standard HTTP client — no proprietary SDKs, no installed agents, no database-level coupling.


Event-Driven Messaging in AML Workflows

How RabbitMQ and Azure Service Bus Connect Services

The microservices in the AML platform communicate asynchronously through a message broker — RabbitMQ for on-premises deployments, Azure Service Bus for Azure deployments. Rather than services calling each other directly over HTTP for every event (which creates tight coupling and synchronous failure propagation), services publish events to a shared message exchange, and interested services consume those events.

This decoupling is architecturally significant. The CaseManagementService does not need to know that the AuditService exists. When a case status changes, the CaseManagementService publishes a case.approved event to the exchange. The AuditService, which subscribes to all events, receives it and logs it. The NotificationService, which subscribes to case.approved events, receives it and sends an email alert to the assigned compliance officer. Neither the AuditService nor the NotificationService required any modification to the CaseManagementService to enable this behaviour.

Key Workflow Events

ServiceEvent PublishedConsumers
CaseManagementServicecase.createdAuditService
CaseManagementServicecase.approvedAuditService, NotificationService
CTREngineServicectr.batch.generatedAuditService
ValidationEnginereport.validatedAuditService
SubmissionServicereport.submittedAuditService, NotificationService
SubmissionServicefiu.feedback.receivedAuditService, NotificationService

Immutable Audit Log from All Events

The AuditService subscribes to every event category through a wildcard binding — it receives all events regardless of type. Every event received is written as an immutable record to the audit log database with the event type, timestamp, originating service, correlation ID (enabling reconstruction of the full workflow chain for any individual case), and the complete event payload as a JSONB document.

This means the audit log is a complete, chronological record of every action taken in the compliance workflow, sourced directly from the services that performed those actions. It is not dependent on any individual service maintaining its own log correctly — the AuditService captures events independently.

Notification Service for Compliance Officer Alerts

The NotificationService subscribes to the specific event types that compliance officers need to know about: case approvals (their cases are ready for review), report submissions (their submissions have been sent), and FIU feedback (responses have been received). These subscriptions are configurable per user and per role — an AUDIT_VIEWER does not receive case approval notifications; a COMPLIANCE_OFFICER does.


Trade-offs and Considerations

Operational Complexity vs. Flexibility

Microservices architecture introduces operational complexity that a monolithic application does not have. Instead of one application to monitor, there are ten. Instead of one database to back up, there are multiple services each maintaining their own data store. Distributed tracing — correlating a request as it flows through multiple services — requires specific tooling (OpenTelemetry, Application Insights, or Jaeger). Health checking requires monitoring all services, not just one.

For institutions with in-house DevOps capability or a managed deployment partner, this complexity is manageable. For institutions without DevOps experience, it represents a genuine operational burden that must be accounted for in deployment planning.

When a Simpler Architecture Is Appropriate

For very small financial institutions — community savings groups, small SACCOs with fewer than 5,000 members, low-volume microfinance institutions — the operational overhead of a ten-service microservices platform may not be proportionate to the compliance reporting volume. A simpler, consolidated architecture that handles a few CTRs and STRs per month can satisfy regulatory requirements with less operational complexity.

The microservices architecture delivers its greatest value at medium to large scale: institutions with 50,000+ customer accounts, multi-branch operations, mobile money channels, and multi-country presence where the independent scalability and update isolation of individual services translate into material operational benefits.

Managed Deployment Option

For banks that want the architectural benefits of microservices without the operational overhead of managing a Kubernetes cluster, a managed deployment model is available. Under this model, the platform is deployed and maintained in the Azure Kenya region by Creodata's deployment team, with the bank accessing it through a private network connection. The bank's IT team does not need Kubernetes expertise — they interact with the platform through its APIs and the compliance portal interface.


Take the Next Step

Creodata's goAML AML Reporting Platform is built on a ten-service microservices architecture specifically designed for East African AML compliance requirements. Every service is independently deployable, independently scalable, and individually maintainable — ensuring that schema updates, regulatory changes, and operational incidents affect only the components they involve, not your entire compliance function.

See the platform architecture and compliance capabilities in a live demonstration: Request a Demo at creodata.com/demo