Kun je een eigen serverless bank bouwen? Dat vroeg Ronald Doorn van Schuberg Philis zich met enige regelmaat af, tot hij de mogelijkheid kreeg de koe bij de horens te vatten. Hij bouwde een spaarbank volledig in de AWS-cloud en bewijst daarmee opnieuw dat legacybanken het zwaar gaan krijgen.
Waarom wilde je een eigen bank bouwen?
"Ik begon ooit negen jaar geleden als Unix-beheerder en later kwam daar Windows bij. Intussen werd meer en meer op AWS en Azure gedaan, maar ik had daar geen ervaring mee. Om dat te leren heb ik iets verzonnen dat nuttig is voor Schuberg Philis en waar ik zelf weer van leer. Mijn idee: hoe zou een spaarbank er in een serverless omgeving uitzien? Omdat ik al eerder een opensource- global loadbalancer genaamd Mercury in Golang had geschreven, wilde ik mezelf in deze taal verder ontwikkelen. En omdat Golang destijds het beste werd ondersteund door AWS, koos ik voor AWS."
Waarom een spaarbank?
"Een van de doelen was om een zo goedkoop mogelijke bank te maken en dan heb je een bank nodig waar relatief weinig gebeurt, want elke keer als je een request bij AWS doet, kost dat geld. Een spaarbank is dan een relatief simpel banksysteem met weinig veranderingen in de data, dus weinig requests, waarvoor de cloud een goede oplossing is. Waarom servers aan laten staan die negentig procent van de tijd nietsdoen?"
Inmiddels zit elke bank wel deels in de cloud of zit dat toch iets anders?
“Wat we heel veel zien, zijn bedrijven die van een traditionele manier van banking naar een cloud gaan. Ze nemen dezelfde software over, gooien wat vm'etjes in de cloud, gooien er wat tooling omheen om het te automatiseren en je hebt een cloud based bank. Dat klinkt leuk, maar het blijft dezelfde oude software, die soms nog op Cobol draait. Met het liften en shiften van vm'etjes zeggen dat je een cloudoplossing hebt, lijkt me niet de richting die de bankenwereld wil opgaan."
Leren hoe een bank werkt en hoe je dit voordelig opzet voor de klant
Ronald vertelt dat hij 'eigenlijk een beetje' de vrijheid nam om niet alleen te leren hoe AWS werkt, maar ook hoe een bank werkt, hoe het financiële systeem in elkaar zit en wat daar allemaal bij komt kijken. Hij ging ook kijken hoe hij zelf een bank zou ontwikkelen. Schuberg Philis geeft collega's de tijd voor eigen onderzoek dat uiteindelijk ook door het bedrijf ingezet zou kunnen worden, maar dat is niet verplicht. Ronald had ook andere klanten en voor hen moest uiteraard wel gewoon gewerkt worden. "In eerste instantie ben ik gaan kijken wat de goedkoopste onderdelen zijn binnen AWS die je zou kunnen gebruiken en dan kom je al snel op lambda-functies, Amazon DynamoDB en SQS of simple queue service."
Al snel liep Ronald tegen beperkingen aan waar hij omheen moest werken, zoals een tijdslimiet van vijf "Met het liften en shiften van vm'etjes zeggen dat je een cloudoplossing hebt, lijkt mij niet de richting die de bankenwereld wil opgaan."
minuten bij een lambda-request. "Wat ga je doen als iemand via een te trage verbinding een paspoortkopie moet uploaden voor identificatie? Komt niet heel vaak voor, maar als het langer dan vijf minuten duurt, dan stopt het. Uiteindelijk heb ik daar wel een weg omheen gevonden door een tijdelijke S3-bucket te gebruiken via de browser van de gebruiker. Met de tijdelijke specifieke schrijfrechten staat het bestand direct op de goede plek. Dan kun je daar nog triggers achter gooien, bijvoorbeeld het extraheren van informatie als paspoortnummer, geboortedatum en dat soort zaken. Een nieuwe lambda-functie leest dat paspoort en checkt de gegevens met de gegevens die de klant heeft ingegeven."
"Ook het gebruik van Amazon DynamoDB was interessant. Eerst had ik het idee dat het wel zou werken als een MongoDB bijvoorbeeld, maar dat bleek niet zo te zijn." DynamoDB is een niet-relationele of NoSQL-database van Amazon. Ronald geeft als voorbeeld dat de manier van het doen van een data-query anders werkt en dat je het gevaar loopt om voor een simpele query de halve database te moeten ophalen, wat een kostbare grap is. Daarna zou je met behulp van filters het echte resultaat moeten zoeken, omdat je maar maximaal vijf indices kunt gebruiken. "Stel, je wilt alle klanten uit Tilburg. Daar zet je geen index op, maar om ze toch te vinden, moet je de database van alle klanten ophalen en dan zoek je naar Tilburg. Als er twee klanten in Tilburg zitten, dan was dat een dure grap, want je betaalt per kilobyte van de hele gelezen dataset en niet alleen klanten uit Tilburg. Dat moet je dus anders gaan doen."
Voor Ronald was dat een interessante uitdaging, nadenken over je databasemodel in Dynamo en hoe je iets met zo min mogelijk query's voor elkaar kunt krijgen. "Omdat je goed moet nadenken over de data die je erin wil hebben, moet je ook goed nadenken over welke functies je echt nodig hebt, zoals inloggen, wijzigen klantgegevens enzovoort. Na wat spelen kom je er vanzelf achter wat het handigste is om te gebruiken."
Blockchain
"Als je bedenkt hoe een moderne bank eruitziet, moet je wel alle functionele elementen kennen om ze modulair te kunnen maken. Dus, ik dacht, daar kan ik heel mooi blockchain voor gebruiken met smart contracts. Zo kun je veel bankfuncties oplossen zonder dat je de code in je banksoftware schrijft, zoals multisignature-systemen. Dat zit al standaard in blockchain. Als je het ingewikkelder wil maken, zoals met leningen en hypotheken, dan kun je dat met smart contracts doen. Dat is enerzijds generiek, maar anderzijds ook persoonlijk."
Zijn volgende stap was het bouwen van zijn blockchain met lambda-functies in DynamoDB, waar wel het hele blockchainmodel in zit.
Ronald onderzocht verschillende blockchains en kwam tot de conclusie dat hij alleen de blockchaintechnologie wilde gebruiken, zoals de blockchain zelf met smart contracts, maar dan zonder het traditionele consensusmodel. "Het hele consensusmodel is leuk als andere partijen, die je mogelijk niet vertrouwt, met die blockchain praten. Maar ik ben als bank de enige gebruiker van de blockchain, dus consensus heb ik niet echt nodig. Als je dat weghaalt, kun je de data opslaan in een blockchain die niet constant hoeft aan te staan om consensus te berekenen."
Zijn volgende stap was het bouwen van zijn blockchain met lambda-functies in DynamoDB, waar wel het hele blockchainmodel in zit. Dat laatste heeft dan vooral te maken met controleerbaarheid of audibility in jargon. Hij gebruikte ook de smart-contractfunctionaliteit samen met de virtuele machines die daarvoor nodig zijn, om ze uit te voeren.
“Het voordeel voor een controleur is dat je nog steeds een blockchain hebt met de hashes die de blokken koppelen, en aantoont dat de blockchain consistent is. Voor een auditor is dat heel fijn. Ook het multisignen van een rekening zit er al in, dus dat hoeft niet geprogrammeerd te worden. Het grootste voordeel zijn de smart contracts, omdat je de logica van nieuwe producten die bij bestaande banken eeuwen duren voordat ze geïmplementeerd kunnen worden, heel makkelijk kunt schrijven en als smart contract uitbrengen. Vervolgens voert het smart contract zichzelf uit op de blockchain.”
Wat zeg je tegen zogenaamde openblockchainpuristen?
"Aanpassingen moeten gedaan worden door een transactie-api, dat wordt geregistreerd in de blockchain. Als je handmatige een entry wil wijzigen, dan moet je een transactie invoeren met alle details met een hash die klopt. Het is ingewikkeld, bij een standaarddatabase is het veel makkelijker om iets te wijzigen. Uiteraard moet je wel functies hebben die controleren dat er niet gerommeld wordt. Je weet al heel snel dat het niet klopt."
"Het wordt een ander verhaal als je de bank wilt koppelen met verschillende banken en verschillende partijen toegang moeten hebben tot je blockchain, maar in dit geval is het zo privé, tja, dan is het gewoon heel handig.”
Het lastigst bij banken zijn alle processen waar je in eerste instantie niet over nadenkt, zoals end-of-dayprocessen en betalingsroutering, waarbij allerlei zaken tussen verschillende banken worden gecommuniceerd. “Zo wordt bij het geld overmaken naar een andere bank de transactie eerst naar een wash-account verplaatst en pas later wordt dat weer overgemaakt naar een andere bank via SEPA en naar een balance-account.”
Met zijn onderzoek naar een modulaire bank heeft Ronald voor zichzelf in ieder geval bewezen dat hij een bank in a box kan bouwen, iets wat velen als te ingewikkeld of als onmogelijk zien. "Gebruik gewoon de modules die je nodig hebt en de rest niet. Druk op de knop en automatisch deployen die hap!"
Schuberg Philis-diner
Op 5 maart 2020 houden we het Schuberg Philis-diner, een meetup waarbij je op het kantoor van Schuberg Philis te Schiphol-Rijk echt een kijkje in de keuken krijgt. Vorig jaar hadden we bijvoorbeeld een workshop Docker & Kubernetes onder begeleiding van Schuberg Philis Engineers. Daarnaast was er een keynote over Security in de cloud. Binnenkort gaan wij aan de slag met het samenstellen van het programma voor het volgende Schuberg Philis-diner. Wil jij hiervan op de hoogte worden gehouden? Vul dan onderstaande poll in. Zodra het definitieve programma bekend is ontvang je één mail van ons.
Bekijk hier het verslag van vorig jaar om een indruk te krijgen.
Wil jij op de hoogte worden gehouden van het Schuberg Philis-diner?
Dit artikel is een onderdeel van een artikelenreeks in samenwerking met Schuberg Philis.
Dit artikel is geen redactioneel artikel, maar een advertorial. Mocht je ideeën met ons willen delen over deze vorm van adverteren, dan horen wij dat graag. Hierover kun je met ons in gesprek via [Discussie] Reclame algemeen, daar zullen collega's aanwezig zijn om jouw vragen en/of opmerkingen te bespreken/beantwoorden.