Context note. This 2010+ architecture. You probably don’t want to copy it today. A lot of the principles remain but the choice technologies have shifted. So beware. Also, I haven’t worked @simple for years, so some of this is probably outdated.
Simple ran on @awscloud. We started building in the cloud pre-VPC when dinosaurs roamed the earth. We built a bespoke IaC system called CloudBank. It worked. Mostly.
We moved the backend to a monorepo a few years in. Almost all backend code was @scala_lang. Source control on a self-hosted @github enterprise instance. Build was Jenkins + Maven. Not the best monorepo stack.
We had a service oriented architecture. A “service” was a few EC2 instances and a dedicated @postgresql database. These all lived in a walled garden VPC. I’ll talk more about services shortly.
The service instance stack was @scala_lang and Dropwizard. Thanks @coda. Pure REST APIs.
Authnz was handled externally but all service-to-service/database chatter was x509 cert secured.
Service discovery was through DNS. Kind of janky but worked for the most part. It& #39;s always DNS.
Ok, so the fun part: services. Naming services was a bone of contention among the team. Not quite as controversial as the great IRC to @slack move but controversial none the less.
The primary concern was that the service names are not self evident to what the service actually does. For me, it’s now the most endearing part of the system, so that’s what I’m going to focus on.
Also, most every service also had a startup ASCII banner. I’ve collected those where I could and linked to them.
Aperture:
The authenticated proxy service for all backend requests. https://gist.github.com/jarreds/64d85ec045a2c7768f6e7d3a0671c21e">https://gist.github.com/jarreds/6...
The authenticated proxy service for all backend requests. https://gist.github.com/jarreds/64d85ec045a2c7768f6e7d3a0671c21e">https://gist.github.com/jarreds/6...
Arroway:
Handles customer-to-customer contacts, transfers, and a never released feature called MoneyDrop. Like AirDrop but for money. https://gist.github.com/jarreds/24b288df366e37c17fa6b8b9cceebd8a">https://gist.github.com/jarreds/2...
Handles customer-to-customer contacts, transfers, and a never released feature called MoneyDrop. Like AirDrop but for money. https://gist.github.com/jarreds/24b288df366e37c17fa6b8b9cceebd8a">https://gist.github.com/jarreds/2...
Beam:
Communicated with The Bancorp Bank to keep systems-of-record in sync. We owned the SoR in this case. They had a SOAP API called CorpConnect which we lovingly wrote a SOAP client for called CorpseConnect. https://gist.github.com/jarreds/c1410eace18447cf6ef12d5e95a36d68">https://gist.github.com/jarreds/c...
Communicated with The Bancorp Bank to keep systems-of-record in sync. We owned the SoR in this case. They had a SOAP API called CorpConnect which we lovingly wrote a SOAP client for called CorpseConnect. https://gist.github.com/jarreds/c1410eace18447cf6ef12d5e95a36d68">https://gist.github.com/jarreds/c...
Botton:
Mobile device push tokens and notifications. https://gist.github.com/jarreds/2c437eec7064342a30013398a490b295">https://gist.github.com/jarreds/2...
Mobile device push tokens and notifications. https://gist.github.com/jarreds/2c437eec7064342a30013398a490b295">https://gist.github.com/jarreds/2...
Buckingham:
An accounting service. Implemented an append only ledger. Kept track of transactions and balances for a long time. https://gist.github.com/jarreds/19ca75481e107e9cf99703ebb8790136">https://gist.github.com/jarreds/1...
An accounting service. Implemented an append only ledger. Kept track of transactions and balances for a long time. https://gist.github.com/jarreds/19ca75481e107e9cf99703ebb8790136">https://gist.github.com/jarreds/1...
Capers (previously Obelisk):
A bill payment service. Integrated with FiServ.
A bill payment service. Integrated with FiServ.
Carmel
The user service. Passwords (bcrypt), customer metadata, and a hodgepodge of stuff. Maybe the oldest service? https://gist.github.com/jarreds/6c1e4bbc270e06348f5e0e3939c32753">https://gist.github.com/jarreds/6...
The user service. Passwords (bcrypt), customer metadata, and a hodgepodge of stuff. Maybe the oldest service? https://gist.github.com/jarreds/6c1e4bbc270e06348f5e0e3939c32753">https://gist.github.com/jarreds/6...
Cartesian
Account, balances, transactions, etc proxy service for parent bank. https://gist.github.com/jarreds/1fbd18ae0c4d0c872641796c246c0fbc">https://gist.github.com/jarreds/1...
Account, balances, transactions, etc proxy service for parent bank. https://gist.github.com/jarreds/1fbd18ae0c4d0c872641796c246c0fbc">https://gist.github.com/jarreds/1...
Cheddar:
Manages goals (envelope budgeting) and the accounting for that.
Manages goals (envelope budgeting) and the accounting for that.
Clownshoes
Remote deposit capture. Taking pictures of checks. Good times. https://gist.github.com/jarreds/554b125853d2133f2ced5610bbec0719">https://gist.github.com/jarreds/5...
Remote deposit capture. Taking pictures of checks. Good times. https://gist.github.com/jarreds/554b125853d2133f2ced5610bbec0719">https://gist.github.com/jarreds/5...
Corndog (originally Corndoge):
Recon service that did lots of SFTP file processing. Corndog is an anagram of recon if you squint right. Not the only recon system. Recon is *very* important if you’r a fintech. https://gist.github.com/jarreds/1ee9ccd73556a053d3481b4c5044b4e9">https://gist.github.com/jarreds/1...
Recon service that did lots of SFTP file processing. Corndog is an anagram of recon if you squint right. Not the only recon system. Recon is *very* important if you’r a fintech. https://gist.github.com/jarreds/1ee9ccd73556a053d3481b4c5044b4e9">https://gist.github.com/jarreds/1...
Cryptkeeper:
A tokenization service. Encrypts + tokenizes PII and other secure data. https://gist.github.com/jarreds/a635b7204c1e65adaa68216c138a4d0f">https://gist.github.com/jarreds/a...
A tokenization service. Encrypts + tokenizes PII and other secure data. https://gist.github.com/jarreds/a635b7204c1e65adaa68216c138a4d0f">https://gist.github.com/jarreds/a...
Demux:
Kafka + PostgreSQL logical replication demultiplexer.
Kafka + PostgreSQL logical replication demultiplexer.
Fingerprint:
Device fingerprinting. https://gist.github.com/jarreds/5c08d88bfdd221d54896689f0058cd84">https://gist.github.com/jarreds/5...
Device fingerprinting. https://gist.github.com/jarreds/5c08d88bfdd221d54896689f0058cd84">https://gist.github.com/jarreds/5...
Hindenburg (aka Memento):
Moments activity feed and transaction meta data enrichment service. https://gist.github.com/jarreds/9c8c522ce76fd7c111e8548ca89f70e5">https://gist.github.com/jarreds/9...
Moments activity feed and transaction meta data enrichment service. https://gist.github.com/jarreds/9c8c522ce76fd7c111e8548ca89f70e5">https://gist.github.com/jarreds/9...
Hummingbird & MechaHummingbird:
Support messaging. https://gist.github.com/jarreds/56350ec8e80cb6b900a3e20ea7e99248">https://gist.github.com/jarreds/5...
Support messaging. https://gist.github.com/jarreds/56350ec8e80cb6b900a3e20ea7e99248">https://gist.github.com/jarreds/5...
Hundi:
Check ordering service. Yes, paper checks. https://gist.github.com/jarreds/e7e205175788035678b594b5da175abc">https://gist.github.com/jarreds/e...
Check ordering service. Yes, paper checks. https://gist.github.com/jarreds/e7e205175788035678b594b5da175abc">https://gist.github.com/jarreds/e...
Kumquat:
Bridge to FDC through IBM WebSphere MQ using OpenDataStreams (ODS, sometimes called "odius"). https://gist.github.com/jarreds/0d5a4284fddd7f3cc93f6802cfa14fbd">https://gist.github.com/jarreds/0...
Bridge to FDC through IBM WebSphere MQ using OpenDataStreams (ODS, sometimes called "odius"). https://gist.github.com/jarreds/0d5a4284fddd7f3cc93f6802cfa14fbd">https://gist.github.com/jarreds/0...
Manfried:
Card, EMV, PIN management. https://gist.github.com/jarreds/e1fbd112176e7b5c8503169eda71c1b6">https://gist.github.com/jarreds/e...
Card, EMV, PIN management. https://gist.github.com/jarreds/e1fbd112176e7b5c8503169eda71c1b6">https://gist.github.com/jarreds/e...
Mercator:
Geospatial ATM locations. https://gist.github.com/jarreds/39c1a61e30d35d05d5dc5219779ded8c">https://gist.github.com/jarreds/3...
Geospatial ATM locations. https://gist.github.com/jarreds/39c1a61e30d35d05d5dc5219779ded8c">https://gist.github.com/jarreds/3...
Multipass:
Identity verification (IDV) service.
Identity verification (IDV) service.
Mux:
Finite state machine driven materialized views as a service.
Finite state machine driven materialized views as a service.
Nacho:
ACH processing service. https://gist.github.com/jarreds/5666067b65798dcb5a923e27d5ea2928">https://gist.github.com/jarreds/5...
ACH processing service. https://gist.github.com/jarreds/5666067b65798dcb5a923e27d5ea2928">https://gist.github.com/jarreds/5...
Pantry:
@plaid integrations. Note: https://www.plaidpantry.com"> https://www.plaidpantry.com — a local chain of convenience stores. https://gist.github.com/jarreds/7f648271ede67cc60b13b2e651e19268">https://gist.github.com/jarreds/7...
@plaid integrations. Note: https://www.plaidpantry.com"> https://www.plaidpantry.com — a local chain of convenience stores. https://gist.github.com/jarreds/7f648271ede67cc60b13b2e651e19268">https://gist.github.com/jarreds/7...
Peanuts:
Supports the merry-go-round insights. https://gist.github.com/jarreds/b901a31d19dba4c42f708dddb2a9dc11">https://gist.github.com/jarreds/b...
Supports the merry-go-round insights. https://gist.github.com/jarreds/b901a31d19dba4c42f708dddb2a9dc11">https://gist.github.com/jarreds/b...
Poseidon:
The ISO 8583 communication service ("CPU link") communicating with First Data. https://gist.github.com/jarreds/92099b211dfe3f2f0384a197a5f7cc48">https://gist.github.com/jarreds/9...
The ISO 8583 communication service ("CPU link") communicating with First Data. https://gist.github.com/jarreds/92099b211dfe3f2f0384a197a5f7cc48">https://gist.github.com/jarreds/9...
Sails:
Obviously a @salesforce integration service. https://gist.github.com/jarreds/8a41f0882ef2c7ca8b27e6f2cca95c62">https://gist.github.com/jarreds/8...
Obviously a @salesforce integration service. https://gist.github.com/jarreds/8a41f0882ef2c7ca8b27e6f2cca95c62">https://gist.github.com/jarreds/8...
Seegull:
Sends and verifies SMS pins (a poor MFA) via the @twilio. https://gist.github.com/jarreds/c3f16bb24464224181b6b16831ec76a5">https://gist.github.com/jarreds/c...
Sends and verifies SMS pins (a poor MFA) via the @twilio. https://gist.github.com/jarreds/c3f16bb24464224181b6b16831ec76a5">https://gist.github.com/jarreds/c...
Semisonic:
I honestly don’t remember :(
I honestly don’t remember :(
Sippy:
Customer and identity verification via @socure @IDology plus a cool rules engine. https://gist.github.com/jarreds/5ccc9e5e21ebd29c1f2e79bf1a60220e">https://gist.github.com/jarreds/5...
Customer and identity verification via @socure @IDology plus a cool rules engine. https://gist.github.com/jarreds/5ccc9e5e21ebd29c1f2e79bf1a60220e">https://gist.github.com/jarreds/5...
Skyliner:
Previous activity feed service. Not ironically replaced by Hindenburg. https://gist.github.com/jarreds/481c1defd18e453f43e2fd5ab40371d3">https://gist.github.com/jarreds/4...
Previous activity feed service. Not ironically replaced by Hindenburg. https://gist.github.com/jarreds/481c1defd18e453f43e2fd5ab40371d3">https://gist.github.com/jarreds/4...
Testbed:
A shell service for experiments. https://gist.github.com/jarreds/6df6bdcabde3805b385c33e4e9541ed9">https://gist.github.com/jarreds/6...
A shell service for experiments. https://gist.github.com/jarreds/6df6bdcabde3805b385c33e4e9541ed9">https://gist.github.com/jarreds/6...
Tonic:
Another Salesforce synchronization service. https://gist.github.com/jarreds/00a7300123868b09c9e2a5a793d764bf">https://gist.github.com/jarreds/0...
Another Salesforce synchronization service. https://gist.github.com/jarreds/00a7300123868b09c9e2a5a793d764bf">https://gist.github.com/jarreds/0...