Lucas Cavalcanti over het gebruik van Clojure, Microservices, Hexagonal Architecture en Public Cloud bij Nubank

2021-11-04 09:45:18 By : Mr. Huailiang Zhang

Live webinar en Q&A - Uw CI/CD-pijplijn met Shift-Left Enterprise Observability (Live Webinar 10 november 2021) Save Your Seat

Faciliteren van verspreiding van kennis en innovatie in professionele softwareontwikkeling

Engineering De digitale transformatie maakt gebruik van de succesvolle staat van dienst van de productie op het gebied van het verbeteren van de productiviteit en kwaliteit en de principes van organisatorisch verandermanagement. Het is een trainingsprogramma dat is ontworpen om de barrières voor verandering te verminderen, teams in staat te stellen goede ontwerppatronen te begrijpen en uiteindelijk organisaties in staat te stellen een systematische aanpak voor continue verbetering te creëren.

De track "Architectures You've Always Wondered About" van QCon staat altijd vol met verhalen over innovatieve technische oplossingen. Het is de kern van InfoQ om die verhalen naar onze lezers te brengen, en deze eMag is een verzamelde verzameling van enkele van de hoogtepunten van het afgelopen jaar.

In de podcast vertelt Rosaria Silipo over de opkomende trends in deep learning, met focus op low-code programmering om datawetenschappers te helpen deep learning-technieken om zonder de oplossing helemaal opnieuw te hoeven coderen.

Problematische softwareprojecten kunnen halverwege de vlucht worden hersteld als Value Stream Management (VSM)-analyses op forensische worden gebruikt om de oorzaak van de problemen te vinden. De metrieken voor hoofdoorzaken die in worden genomen, zijn onder meer: ​​​​Beschikking van mensen; Teamstress; gezondheid; Sprintnauwkeurigheid; proces efficiëntie; Verhaalbeheer; en Defect Gen. Een grondoorzaak RAG-rapporten tonen belangrijke mitigaties.

Liz Rice omvat hoe eBPF krachtige tools mogelijk maakt bij het verbinden, beveiligen van applicaties in de cloud.

Zet advies van meer dan 64 professionals van wereldklasse om onmiddellijke actiepunten. Woon online op 1-12 november.

Leer van praktijkmensen die innovatie en verandering in software stimuleren. Kom persoonlijk langs op 4-6 april 2022.

InfoQ Homepage Podcasts Lucas Cavalcanti over het gebruik van Clojure, Microservices, Hexagonal Architecture en Public Cloud bij Nubank

In deze aflevering van de InfoQ-podcast praat Charles Humble met Lucas Cavalcanti, een Principal Engineer bij Nubank, de latere FinTech in Latijns-Amerika en de meest waardevolle digitale bank ter wereld. Ze omvatten de vroege architectuurkeuzes van Nubank, waaronder het starten met Clojure en microservices, de transactie van het gebruik van de openbare cloud voor financiële diensten in Brazilië, het verlangen van Nubank naar onveranderlijke architectuur en het gebruik van de Hexagonal Architecture van Alistair Cockburn, en verminderen die zijn geleerd naarmate de startup.

Charles Humble: Hallo en welkom bij de InfoQ Podcast. Ik ben Charles Humble. Een van de co-host van de show. En hoofdredacteur bij Cloud Native Consultancy Firm Container Solutions. Mijn gast vandaag is Lucas Cavalcanti. Lucas is Principal Engineer bij Nubank, de FinTech in Latijns-Amerika en is uitgegroeid tot de meest waardevolle bank ter wereld. Hij gaf in mei van dit jaar een lezing op QCON Plus, genaamd Architecting Software for Leverage. verbeterde vernieuwende hij de software, de teamstructuur van het ontwikkelen en ontwikkelen met de verschillende stadia van het bedrijf, van het opstarten in 2013 tot groei, consolidatie en uitbreiding. Ik wilde graag met hem praten over de programmeertaalkeuzes van Nubank en hun keuze keuzes, omdat ik het gesprek absoluut meeslepend vond.

Zoals ik al zei, was het startpunt voor deze podcast een QCON Plus-talk. En de volgende editie van QCON Plus komt eraan in november, online en persoonlijk. Evenals de ongelooflijke tot online ervaring van 1 en met 5 november. De volgende week hebben we persoonlijke evenementen in New York en San Francisco. De plaatsen zullen beperkt zijn. QCON Plus beschikt over meer dan 12 tracks die zijn betrokken door domeinexperts, om zich te concentreren op de onderwerpen die op dit moment te doen in software. Tracks die in november worden uitgezonden, zijn onder meer het Cloud Operating Model. Microservice-patronen en anti-patronen, van externe tot hybride teams, en architecturen waar u zich altijd al over heeft afgevraagd. En met QCON Plus kunt u ontdekken wat er op uw radar moet staan ​​voor 's werelds meest innovatieve softwareleiders, die verandering en innovatie. Elk zal hun, best practices en praktische oefeningen met u delen om de transformatie te verbeteren over welke technologische component van uw roadmap moeten zijn. We hopen je in november online van persoonlijk te zien. U kunt qcon.plus bezoeken voor meer informatie. En daarmee - Lucas, welkom bij de InfoQ Podcast.

Lucas Cavalcanti: Dank je, Charles. Erg blij om hier te zijn.

Charles Humble: In uw QCON Plus-toespraak zei u dat tijdens de opstartfase van Nubank de time-to-market een belangrijke drijfveer was. En dan heb je een aantal van je eerste voorafgaande voorbereidingen op een zittende. Wat ik eigenlijk best verrassend vond. Dus zou je misschien die eerste technologie-stack kunnen beschrijven met taal, databases, messaging-infrastructuur, enzovoort, begin je voort te bouwen.

Lucas Cavalcanti: We streven naar het bouwen van een creditcardproduct van uiteindelijk een bank. En op dit financiële domein begonnen we wat aannames te doen, toch? Dus op die eerste basis is dat we voor bankieren de hele geschiedenis moeten hebben, het hele audit van alles wat we doen. Dus de allereerste keuze was de database, eigenlijk de Datomic-database. Wat erg niche was. Het is op dit moment nog erg niche. Maar het is een database die geen gegevens over updates. Dus het bewaart alle updates die zijn gebeurd op de gegevens in de transactielogboeken. Dus in de plaats van de gegevens op als een Git Repository. Het werkt als Git, in plaats van het gewoon te vervangen.

En wat je wint van gratis op Datomic, is dat je de hele geschiedenis krijgt. En dat leek me een mooie pand om een ​​FinTech te hebben, bij Financial Domain Service. En Datomic is gebouwd in Clojure. Dus vanwege Datomic hebben we Clojure gekozen als de belangrijkste programmeertaal. We gingen hoetaal dan ook voor een functionele programmeer. We zullen waarschijnlijk naar Scala of een andere taal zijn beëindigd. Als Datomic Clojure niet was. En deze keuzes waren vooral omdat we geloven in de programmering, vanwege de eenvoud die het krijgt. En ook vanwege hoe we het kunnen verbinden met het financiële domein. Terwijl volledig functionele programmering nauw verband houdt met wiskunde en zeer nauwkeurige berekeningen.

Dus ook deze waren de, verder streven we om alles in de cloud te bouwen. Dus daar zoeken we naar voor AWS. En Kafka was een technologie die in 2013 begon te krijgen. En het had ook die goede controle om geen berichten te verliezen. Het houdt een logboek bij van de berichten die u opnieuw kunt afspelen. En daarom besluiten we ook voor Kafka. En de kern van de beslissingen die we namen, waren vooral het verkrijgen van de onveranderlijkheid van de functionele programmering en het behouden van gegevens van het niet van gegevens, zelfs niet bij updates. Dit was het belangrijkste drijfveer voor onze beslissingen.

Charles Humble: Je zei dat je Clojure gebruikte. Heb je ernaast een microservice-framework gebruikt, of gebruikte je de taal alleen?

Lucas Cavalcanti: Onze eerste stapel Clojure, we gebruiken verrassend genoeg geen framework of iets van de taal. We hebben een bibliotheek gebruikt voor het uitvoeren van de HTTP-servercode, zoals het afhandelen van HTTP-verzoeken enzovoort. Maar we hadden de behoefte om een ​​frame te hebben, of iets als Rails in Ruby en zo. In Clojure was alleen het hebben van een HTTP-clientbibliotheek en HTTP-serverbibliotheek voldoende voor ons. Omdat u hiermee HTTP-verzoeken kunt afhandelen door een kaart te ontvangen en een kaart te retourneren. En dat is eenvoudig genoeg en krachtig om dat te doen.

Lucas Cavalcanti: De servicecode had geen bibliotheek nodig. En de implementatiecode, die is anders. Clojure is Java, dus we kunnen alles gebruiken wat Java heeft. Dus we hebben de code in eerste instanties gebundeld in een WAR-bestand. Afbeelding in een WS, riet gebakken die de Jetty-server bevat, die je gewoon zou kunnen vormen om ons bestand uit S3 te halen. Dit was dus onze implementatiestrategie. En helemaal in het begin hadden we maar vier van vijf diensten. Dus in het begin was het niet zo bijzonder. Maar het maakte gebruik van gebakken afbeeldingen op Amazon en wolkenformatie om te werken met de implementaties.

Charles Humble: Gewoon bij Clojure blijven. Had je de taal eerder gebruikt, of was het nieuw voor iedereen daar?

Lucas Cavalcanti: Ik heb Clojure kort op de universiteit gezien. Ik had een klas Functioneel Programmeren, dat ik daar over Clojure hoorde. Ik zag iets over LISP, en minder over LISP. Dus ik had eigenlijk van, Clojure is gebaseerd op LSP. Dus eigenlijk omzeil je de syntaxis door LISP te leren. En Clojure leert gewoon de afzender-API via LISP. Maar ik heb nooit met Clojure gewerkt toen ik Nubank begon. Dus we zagen de ideeën achter Clojure Ik heb al over hen gehoord. Maar ik begin Clojure pas echt te gebruiken als ik lidwoord van Nubank. En dat is het geval voor 99% van de mensen die lid worden van Nubank.

Lucas Cavalcanti: Bijna allemaal hebben ze nog nooit met Clojure gewerkt. En Clojure is een taal die verrassend eenvoudig is om mee te werken. Omdat het heel weinig taalconstructies heeft, zijn haakjes en functionele oproepen. Er is niet veel meer dan dat, in vergelijking met taal als Scala heb je 100 taalfuncties die je soms moet begrijpen. Maar in Clojure heb je haakjes, je hebt LISP dat, we hebben alleen iets minder nodig als je naar de macrowereld gaat. Maar je bijna nooit naar Macro's te gaan.

Charles Humble: Waren er bronnen, of boeken, of dat soort dingen dat je nuttig vond bij het leren van een taal, of heb je het letterlijk pikt?

Lucas Cavalcanti: Ik had al een functionele programmeerachtergrond. Ik denk dat dit iets is dat langer denk om te begrijpen van te leren. Maar als je al een functionele programmeerachtergrond hebt, is het leren van de Clojure-syntaxis en constructies iets dat je in een week zou kunnen doen. Je hoeft niet tonnen boeken te lezen, of dit soort dingen. Er zijn dus enkele zeer Clojure-boeken die goede verschijnen boven we Clojure zijn gaan gebruiken, niet eerder. En we hebben in het begin verschillende fouten gemaakt met de codestijl, met de Code Organization Clojures. Omdat we eigenlijk een andere taal gebruiken, zoals een Java-organisatie of gewoon een Ruby-organisatie die niet volledig van toepassing is op Clojure. En de organisatie die we uiteindelijk bedachten was zeer efficiënt. En heel anders dan wat we uit andere talen krijgen.

Charles Humble: Je zei ook dat je begon met AWS op een openbare cloudinfrastructuur. En zeker in Europa is bankieren extreem zwaar gereguleerd, wat het gebruik van de openbare cloud een beetje uitgedrukt kan maken. Dus ik was benieuwd of dat ook het geval was in Brazilië, en of je op het gebied van regelgeving problemen kreeg toen je op gang kwam?

Lucas Cavalcanti: We waren een beetje pioniers als financiële instelling in de cloud. We hadden een aantal regels in Brazilië, of we hadden een regelgeving met een grijs gebied - of je gegevens over de klanten alleen in Brazilië kon opslaan, of je kon het buiten doen of niet. Maar de Centrale Bank is een instelling die is ontworpen om naar meer concurrentie en meer innovatie te gaan. Dus ze waren bereid om het gebruik dat we in de cloud hadden te begrijpen. En begin dan met het bouwen van nieuwe regelgeving en nieuwe regels voor banken die in de cloud zijn geboren.

Om een ​​overzicht te krijgen, heeft slechts vijf banken die 80, 90% van alle bankdiensten in Brazilië. Of in ieder geval was dat zo toen we begonnen. Dus de Centrale Bank was bereid om nieuwe dingen te begrijpen en nieuwe regels te creëren. En omdat ik in het begin in de cloud was, was er wat overheidsbeleid nodig om met regelgevers te praten. En we zijn pioniers, en na ons doken er verschillende andere FinTech op in Brazilië. Vanwege die regelgevingsupdates die door ons zijn gebeurd. Niet alleen vanwege ons, maar we waren vrij vroeg in die beweging.

Charles Humble: Je was op heel veel manieren aan het pionieren. Ik vind het boeiend. Wat deed u op het gebied van monitoring in dit vroege stadium van het bedrijf?

Lucas Cavalcanti: Heel vroeg beginnen we het Clojure-ecosysteem te gebruiken, zoals het gebruik van het Clojure-ecosysteem. Er waren dus een paar tools in Clojure die op dat moment realtime monitoring en tijdelijke monitoring mogelijk compleet. Dus het controleren van de staat van de services, het controleren van foutenpercentages over een periode. Dus het was toen niet blijvend. Ik ben de naam van het gereedschap vergeten. Maar het was een Clojure-tool die goed integreerde met de bibliotheek die we op dat moment voor de HTTP-server gebruikten. We gebruiken het nog steeds, maar deze bibliotheek is heel goed uitgebreid.

Dus begonnen we deze realtime monitoring, maar tijdelijke monitoring. En we zijn ook begonnen met het beheren van een Kibana-logcluster voor monitoring. En dat uiteindelijk een grotere uitdaging dan we hadden. En uiteindelijk we Splunk gebruiken, wat onze logaggregator-service is. En dat werkte best goed. En dan werkt het tot nu toe. Ik denk dat de schaal te bereiken die we nu hebben, en dit soort diensten te gebruiken. Maar ik denk dat de monitoring in het begin een realtime monitoring en een logaggregator was. Dat was het zo'n beetje in het begin.

Charles Humble: In uw QCON Plus-lezing zei u kort dat u de Hexagonal Architecture van Alistair Cockburn als inspiratie gebruikt, die duidelijk meer objectgeoriënteerd is. Maar kun je misschien omschrijven wat dat is, en hoe je het hebt toegepast?

Lucas Cavalcanti: Een ding om te vermelden over de Cockburn Hexagonal Architecture is dat het werd geboren in een Java-object van een woord. En gewoon om een ​​context te krijgen. Dus wat we gebruiken, is niet precies die implementatie. Maar het gebruikte dat idee als inspiratie. Dus ik denk dat het idee van Coburn is dat je een webserver hebt. En bij elke operatie is die webserver een poort en heb je de adapter, een poort die een interface is. En dan is de bovenstaande adapter de daadwerkelijke implementatie van die interface. En de rest is hoe de kosten moeten worden uitgevoerd. De implementatie, we gebruiken dat idee van het scheiden van een poort, dat het de communicatie met de buitenwereld is vanaf de adapter, wat de code is die communicatie vertaalt naar daadwerkelijke code die je kunt uitvoeren. En dan is de controller het stuk dat de communicatie van de buitenwereld krijgt en de eigenlijke bedrijfslogica opgebouwd.

Ik denk dat de Cockburn-definitie stopt bij de controller. En na de controller is het al bedrijfslogica. Aangezien we bezig zijn met Clojure en functionele programmering. We vonden het nuttig om pure bedrijfslogica te scheiden van onzuivere, in de zin van neveneffect bedrijfslogica. Onze controllerlaag is dus voor het afhandelen van bijwerkingen. En we hebben nog een ander laag, de kern van de bedrijfslogica. Dat gaat over pure functies, die kaarten ontvangen en terugsturen, van iets dergelijks. En die scheiding was erg nuttig voor ons. En ik heb een lezing dat ik de link hier later kan sturen, waarin die uitsplitsing wordt uitgelegd, die zeshoekige architectuur die we gebruiken die deze scheiding heeft.

Charles Humble: Dat zou geweldig zijn. En ik zal ervoor zorgen dat ik een link naar de shownotities kan zorgen voor de podcast op InfoQ. Maar het klinkt als het eerder op zeshoekige architectuur is ontwikkeld dan op strikt zeshoekige architectuur?

Lucas Cavalcanti: En we hebben zelfs een andere naam gegeven om over deze ideeën te voorkomen. Noem het dus een diplomatenarchitectuur. Die is geopend op poorten en adapters, deze zeshoekige architectuur. Maar het heeft deze functionele voorkeur, de functionele programmeerbias om elke laag zo functioneel mogelijk te laten zijn, van kaarten te ontvangen en indien mogelijk terug te sturen. En geen bijwerkingen hebben, en de bijwerkingen op lagen houden. Waar ze complexer zijn en je ze anders kunt behandelen.

Charles Humble In de kern lijkt dit een reeks architecturale keuzes te zijn die worden veranderd door het willen hebben van een onveranderlijke architectuur. Wat eigenlijk, interessant genoeg, een idee is dat ik onlangs heb verkend in de podcast met Matthew Perry. Dus daar zal ik ook naar links in de shownotes. Maar heb ik dat goed? Is dat wat je te doen?

Lucas Cavalcanti: Wij zijn in een zeer complex domein. Het financiële domein is op zichzelf al erg complex. En die ideeën kregen we van de Clojure-gemeenschap. Rich Hickey waar hij een heel goed gesprek over heeft, zoals "simple made easy". Dat is de kern van de Clojure-taal. Dat wil zeggen, we moeten streven naar het maken van eenvoudige constructies. Want het probleem is al complex genoeg, toch? Dus als je streeft naar eenvoud, hoef je problemen op te lossen, omdat jij die problemen hebt gecreëerd. Dat je net het probleem oplost dat je moet oplossen. En onveranderlijkheid is één ding dat al het andere eenvoudig maakt. Omdat u zich minder zorgt om te maken, wanneer alles onveranderlijk is.

Lucas Cavalcanti: We gebruiken dat idee voor het ontwerp van de code, zoals de architectuur van de code die we voor de services hebben, toch? Dus poorten en adapters, diplomatenarchitectuur en onveranderlijkheid op de meeste plaatsen. Maar ook de infrastructuur is onveranderlijk. En dit was een idee dat op dat moment gaande was. Maar het werd niet veel gebruikt. Wat goed is, je draait op de wolk. Maar uw machines zijn onveranderlijk in die zin dat u een architecturale wijziging wilt aanbrengen, of een implementatie, iets vergelijkbaars. Een machine die al in de cloud draait, verander je niet. Je maakt altijd een nieuwe aan met de nieuwe configuratie, of met de nieuwe code, of iets dergelijks.

Dat onveranderlijke idee gebruiken we ook voor de hele infrastructuur. Dus elke keer doen we een nieuwe verandering van architectuur, of configuraties. Het gaat altijd om het doden of maken van een nieuwe versie van het systeem, met de nieuwe configuratie van met de nieuwe implementatie. En als dat loopt, doden we de oude. En dat stelt ons ook in staat om met minder entropie over de infrastructuur te redeneren. Met minder dingen die fout kunnen gaan. Want als de nieuwe configuratie slecht gaat, is het terugdraaien eenvoudig. Waar je gewoon de nieuwe doodt en de oude bewaart. U hoeft niet bij te houden welke handmatige bewerkingen we op de services uitvoeren. Elke nieuwe nieuwe gebruik nieuwe machines en de oude worden verwijderd.

Charles Humble: Je hebt duidelijk een aantal veranderlijke aspecten van het systeem, dus hoe wordt daarbij omgegaan? in traditionele zeshoekige architectuur die in de havens zal zijn? Staat het in de databank? Heb je een abstractielaag? Hoe ga je om met veranderlijke aspecten?

Lucas Cavalcanti: De belangrijkste veranderlijke aspecten van het systeem behorend tot de database. Het is als veranderlijkheid op het systeem, veranderlijke staat. Ze staan ​​meestal in de database. Maar zelfs de database die we gebruiken, de Datomic. We noemen het ook wel een onveranderlijke database. In zekere zin heeft het een logboek van gebeurtenissen die erin gebeuren. En wanneer u een database krijgt, krijgt u een waarde. Een momentopname van de gegevens. Dus het is eigenlijk als je een databasewaarde krijgt, het stopt de tijd. Op die waarde krijgt u geen nieuwe transacties. Dus in die zin is het onveranderlijk. Als je het gebruikt, reken je af. Als iemand anders upstream-repository de heeft dat geen invloed op jou, toch? Tot je een merge doet.

Datomic gebruikt hetzelfde idee. Je krijgt een kassa van je gegevens, dat verandert niet totdat we de volgende versie hebben. Dus ik denk dat dat is hoe we veranderlijkheid op een onveranderlijke manier hebben aangepakt. Omdat de daadwerkelijke transacties een beetje veiliger worden. Omdat we die toestand niet hebben veranderd. De gegevens veranderen, de zaken veranderen. Maar de gegevens die u krijgt, de kaarten die u uit de haalt haalt. Ze zijn onveranderlijk. Een ding dat we hier niet hebben genoemd, maar Clojure standaard, alle gegevensstructuren zijn onveranderlijk. Dus wanneer u uw code schrijft, wanneer u uw bedrijfslogica schrijft, is alles al onveranderlijk. Je moet er dus niet over na te denken. Je hoeft niets extra's te doen om te krijgen. Is de taalstandaard. En dat geldt ook voor de database.

Charles Humble: Nog een beslissing die je al vroeg hebt genomen, die na je QCON-gesprek voor veel discussies gekozen. Was dat je begonnen met microservices. Dus typisch, als je een startup start, zou je iets kiezen dat snel opkomt. Dus de klassieker een Ruby on Rails-monoliet zijn, daar voor zou echt. Je dat bouwen en als het werkte, en je begon klanten aan te trekken. U zou misschien overstappen op een Java of JVM gebaseerde taal. En refactor naar microservices. We hebben al gezegd dat je op de JVM bent begonnen, maar je bent ook begonnen met microservice. waarom?

Lucas Cavalcanti: We zijn begonnen met het idee dat we slagen of jammerlijk falen. Er is dus geen midterm. Als we geen klein van middelgroot bedrijf zouden zijn. Het zou niet veel zin hebben. Dus een van de ideeën is dat we geloven dat op schaal, als het bedrijf gegroeid voor meerdere teams van meerdere plaatsen. De microservices-architectuur is een architectuur waarmee u meerdere teams kunt hebben. En dus voor een klein beetje van de organisatie tussen de teams. Maar dat was niet het enige. We hadden ook beperkte beperkingen op de gegevens die we aan het opslaan waren. We hadden bijvoorbeeld klantgegevens, wat persoonlijk identificeerbare informatie is. En we gaan ervan uit dat we het anders aanpakken dan de transactiegegevens van de klant. Dus dat hadden we ook, en we hadden het autorisatiesysteem dat ook andere opslagvereisten of databasevereisten zouden hebben. Dus de eerste gesplitste microservices die we deden. Was vooral omdat we die heterogene opslagvereisten hadden voor verschillende soorten gegevens die we hadden.

Dus we hadden een klantenservice die was ontworpen om persoonlijke informatie op te slaan. En daarom hebben we codering met REST van voldoende codering zodat we geen klantgegevens lekken. En we hadden die op een andere manier worden gevormd en zo transactiegegevens. En we hadden de waarderingsgegevens die ook een andere eis hadden. En dat waren de drie eerste diensten die we hadden. En we hadden een vierde, namelijk geolocatieservice. Omdat we voor het aanmeldingsproces hebben postcodes moeten krijgen, en postcodes hadden daar sowieso een database voor, dat de eerste beslissing die we hadden om te scheiden in services, niet noodzakelijkerwijs microservices. Maar het opsplitsen van diensten in de architectuur, was vanwege onze andere eisen aan het opslaan van gegevens. Wat we in dezelfde database zouden kunnen doen. Maar het is moeilijker om het op dezelfde database te doen, wanneer u verschillende schaalbaarheid van verschillende coderingsvereisten hebt.

Charles Humble: En toen je begon, maakte je een zeer snelle groeiperiode door. Van ongeveer 2015 tot 2016. Wat volgens mij een stuk sneller was dan je had verwacht. Dus wat waren enkele van de boodschappen die u vanuit architectonisch oogpunt opleverde?

Lucas Cavalcanti: Een van de belangrijkste dingen die toen gebeurde, is dat we een derde partij zijn gaan gebruiken om het creditcardsysteem te beheren. We hebben geen creditcardsysteem van de grond af. We hebben in feite een kant-en-klaar creditcardprocessorsysteem gekocht. En van de projecties die we hadden, en van de eerste gesprekken. Met die processor kunnen we nog wel een paar jaar leven, voordat we alles in huis moeten halen. Dus de eerste verrassing die we hadden, was veel eerder dan verwacht een volledig creditcardsysteem te bouwen om uit die processor te komen. Dus het eerste architectuurding is, hoe migreren we een systeem van een derde partij en in-house alle functies ervan? Ik denk dat dat een van de eerste denk was. En het werkt als het doorbreken van een verouderd systeem van als al die gedragingen die we zien die architectonisch zeer krachtig zijn. En ook aan de zakelijke kant, door elke functie in huis te halen.

Lucas Cavalcanti: En ook onze architectuur voor implementatie schaalde niet voordat we hadden verwacht, toch? We hebben dus een architectuur die gemakkelijk 500.000 klanten zou kunnen passagiers. En we dachten dat we daar ook een paar jaar mee zouden kunnen leven. En we bereikten het doel een jaar later, of twee jaar later, dan hadden we verwacht. En we moeten een sharding-project starten, vanwege de eerste keuze die we hadden om codevorming op AWS te gebruiken. We hadden toen nog geen Kubernetes. We hadden Docker niet toen we het bedrijf begonnen. En eigenlijk groeide het bedrijf sneller dan we het project konden uitvoeren om alles naar Docker te migreren, of naar betere structuren op AWS. Dus we zullen een sharding-project kunnen doen.

En dit sharding-project was eigenlijk, we begonnen de klantgegevens in dezelfde shard te plaatsen. Maar we kunnen nog een scherf hebben met een andere groep klanten en alle gegevens op die scherf. Dat was de beslissing die we hadden over sharding, we zijn gescheiden door de klant. Hoe dan ook, dit was een van de dingen waarmee we de cloud konden gebruiken, die je verticaal schalen. Van voor sommige pods kunt u sommige pods horizontaal schalen. Maar uiteindelijk bereiken we een grens. En we moeten dit sharding-project doen, omdat we die limiet op de cloud hebben. Het is niet oneindig. En dat moeten we veel eerder doen dan verwacht. En toen we echt klaar waren met het sharding-project. De eerste scherf was groter dan hij zou moeten zijn. En dat daarna gevolgd voor wat problemen. Maar dat zorgde later voor verschillende boodschappen op schaalbaarheid.

Charles Humble: Je zei dat je aan het sharden was door de klant. Je al gezegd dat je eerste scherf hebt groot was. Ik stel me voor dat er veel randgevallen moeten zijn als je op die manier gegevens deelt. Bijvoorbeeld verschillende hoeveelheden activiteit per rekening van wat dan ook. Dus deed die keuze wat meer onverwachte randgevallen opwerpen. Dingen die je niet had verwacht toen je de beslissing nam?

Ja, ik denk dat we uiteindelijk hebben geleerd dat niet alleen het aantal een factor is, maar ook de duur van die klant. En het feit dat de eerste klanten van een startup de early adopters zijn. Zijn meest omvattende het product. Dus deze eerste scherf werd een tijdje een speciale scherf. Omdat we het meest overbodige klanten hebben die het product veel gebruiken. We hadden meer gegevens, meer nieuwigheid. En we hadden meer op die shard, omdat het te lang beginnen om het project te ontwikkelen.

Alle voorzieningen op die shard waren bijvoorbeeld vier keer, vijf keer meer dan de andere scherven die we daarna hebben gemaakt. Uiteindelijk konden we alle scherven ongeveer zelfs groot maken. Maar we moeten wel prestatieafstemming uitvoeren op die eerste scherf. En het hele idee achter het doen van sharding in het begin, was om geen prestatie-afstemming te doen. Omdat de code vaak een stuk complexer is dan de niet-geoptimaliseerde codes. Als je optimaliseert voor mensen is dat heel wat anders dan voor de machine. Dus moeten we optimalisaties doen. Want de eerste scherf is, of was lange tijd bijzonder.

Charles Humble: Juist, ja. Dat is eigenlijk, nu je zegt dat dat niet verwonderlijk is. Dat ik me kan voorstellen waarom je het zou missen. En je zei ook dat je bent overgestapt op het gebruik van Kubernetes voor containerorkestratie. Dus hoe heb je dat aangepakt? Gebruik je EKS, of een dienst, of heb je het zelf gedaan?

Lucas Cavalcanti: Toen we Kubernetes begonnen te gebruiken, was er geen EKS, ontwikkeld niet in Brazilië. Dat is wat je krijgt in de vroege adoptiefase van technologieën. Dat deden we voor Kafka. Dat deden we voor Docker. Dat deden we voor Kubernetes. Dus toen we begonnen waren daar nog geen cloudoplossing voor. AWS had toen nog geen Kafka-cluster. AWS had geen Docker-container van Kubernetes-service. En uiteindelijk doet het dat nu ook.

Dus als we vandaag beginnen, doen we waarschijnlijk alles in de cloud, of gebruiken we voor een clouddienst. Maar we zijn begonnen ons eigen Docker-register te maken en migreerden uiteindelijk naar het AWS-register. We hebben ons eigen Kubernetes-cluster gemaakt. En we zijn nog bezig met de migratie naar de Amazon-service. We zagen het potentieel van die technologieën. Dus we vonden dat het de moeite waard was om een ​​early adopter te zijn, of vroeg genoeg adopter daarvan. Maar we betaalden de prijs om een ​​on-premise oplossing te doen voordat we een cloudoplossing hadden.

Charles Humble: En naarmate je opschaalt, veranderen ook je gegevensbehoeften. Je zei dat je Kafka al gebruikt. Dus dacht ik, nou ja, is het nu Kafka Streams. Maar ik denk dat je ook te vroeg was voor Kafka-streams?

Lucas Cavalcanti: Op het moment dat Kafka Streams live ging bij de productie. We hadden al onze eigen Kafka-gebruiksstijl. En als ik me niet vergis, hebben we al een ETL-pijplijn gebouwd om de gegevens om te zetten in een Spark-cluster. Dus eigenlijk, omdat we dat al doen. Het had geen zin meer om Kafka Streams te gebruiken, of in ieder geval niet in het algemeen. Ik dat het zinvol kan zijn voor specifieke gevallen. Maar niet voor het hebben van deze geaggregeerde gegevens. En vanwege deze sharding- en microservice-architectuur hebben we twee gegevenssplitsingen. De eerste deur diensten. Dus elke service kan zijn eigen database hebben en we hebben scherven. Elke service heeft dus meerdere van databases. We hadden dus een aggregatorsysteem nodig dat alle gegevens over alle services in alle shards kon krijgen. Dus analisten konden query's uitvoeren en analyseren uitvoeren van alle andere functies in het bedrijf had toegang tot die gegevens, die waren opgesplitst. Dus we moeten dat ETL-proces wel uitvoeren. En tegen de tijd dat we dat moeten doen, was Kafka Streams nog niet klaar. En we hebben geen gebruik van gemaakt.

Charles Humble: We hebben vooral gefocust op de backhand. Maar gewoon uit onrecht. Waar sta je nu, wat doe je op het gebied van mobiel en front-end? Hoe ziet die technology stack er nu uit?

Lucas Cavalcanti: Dat is in de loop van de tijd ook veel geëvolueerd in het bedrijf. Vandaag is de nieuwe code, het nieuwe dat we gebruiken, op Flutter. We gebruiken Flutter plus Dart om te schrijven in beide nieuwe situaties kan worden uitgevoerd, rechts, IOS en Android. Maar in de loop van de tijd hadden we verschillende tussentijdse veranderingen op mobiel. We zijn begonnen met bijna volledige Native. En tegen de tijd dat React wat grip, begonnen we een beetje met React Native. We hebben in de loop van de tijd wat veranderd om uiteindelijk bij Flutter te komen. Maar we hebben de hele app nog niet naar Flutter gemigreerd. Omdat het zelfs om dat te doen. We hebben nog niet wat code met de vorige technologieën die we gebruiken. Maar vandaag maken we gebruik van Flutter.

Lucas Cavalcanti: Ik ben zelf geen mobiele ontwikkelaar. Ik ben daar een beetje ver van. Maar het lijkt veel te stimuleren, de opbrengst. Dat doen we ook met het ontwerpsysteem. Dus de Flutter-technologie plus herbruikbare componenten die al de look en feel van het bedrijf hebben. En het is gemakkelijk om te verbinden aan te sluiten. Dit enorme, de productiviteit. En daar hebben we geen specialisten voor nodig. We kunnen mobiel werk laten generaliseren. En we hebben een team van mobiele specialisten dat de componenten bouwt voor dat ontwerpsysteem en die Flutter. We hebben wel herbruikbare componenten die ons Mobile Specialist Team bouwt. En dan kunnen generalisten dat op een gewone manier gebruiken, of op een manier je niet al te veel mobiele context voor nodig.

Charles Humble: Het komt niet vaak voor dat je een startup kunt doen, tot het punt dat je nu bereikt. Met het voordeel van achteraf, zijn er iemand van twee dingen die, wetende wat je weet, hoe je het anders zou doen?

Lucas Cavalcanti: Een ding dat we over dit systeem hebben opgenomen, is dat financiële dienstverlening een gereguleerde sector is. We hebben dus verschillende keuzes gemaakt die van invloed waren op de dagelijkse werking van het systeem, dus de productieomgeving. Maar er waren keuzes die niet zo goed werkten in de analytische omgeving, toch? Dus hebben we een code gemaakt, die de invarianten automatisch voor het systeem heeft verlopen slim. Wat dan iets is dat later heel moeilijk te repliceren is in de analytische omgeving, om te waarom dat systeem zichzelf op die manier corrigeerde. En we hadden wat impliciete operaties. En tegen de tijd dat het een beetje als een goed idee. Je hebt bijvoorbeeld een boekhoudsysteem van een nooit negatief mag worden. En als het negatief wordt, hadden we een code die het zelf corrigeerde en zorgt ervoor dat dat nooit negatief was. Maar dit is iets dat alleen bestaat in het geheugen van de machine die de code begint. We hebben geen sporen voor die specifieke correctie.

En dat heeft ons uiteindelijk veel schade toegebracht, het vermogen om dingen uit te leggen zijn gebeurd. Dus hoe dan ook, om te zeggen waar ik het meest spijt van heb, is om impliciete bewerkingen te hebben die niet in de database worden opgeslagen, of die geen oorsprongsinformatie hebben. Dat was een van de fouten, de grote fouten die we hadden. En ook geen beslissingen documenteren, zoals architectuurbeslissingen en ontwerpbeslissingen die we hadden. En productbeslissingen over de eerste jaren van het bedrijf hebben we lastig gevallen. Niet alleen de code, ook wij de documentatie van de code en alles niet hadden. Maar het belangrijkste waren de beslissingen. De besluiten bestaan ​​alleen in mijn bestaan ​​en de weinige mensen die aan het begin van het bedrijf bestonden. Het deed ons een paar jaar later pijn toen we opschaalden naar meerdere teams. En toen het groot genoeg werd, weten mensen zonder context niet waarom de beslissing van bedrijf was. Het verleden niet bij mij om alles elke keer aan iedereen uit te leggen, toch? Dus ik denk dat er twee dingen waren.

Charles Humble Ik denk dat het hebben van een architectuurbeslissingslogboek een van die dingen is die vaak gemist, het is echt waardevol wordt: Lucas dat is geweldig. Hartelijk dank voor uw deelname deze week aan de InfoQ Podcast.

Lucas Cavalcanti: Heel erg bedankt.

Woon van 1 tot 12 november de online softwareconferentie QCon Plus bij en blijf op de hoogte van de trends die er te doen zijn op het gebied van softwareontwikkeling.

QCon Plus is een online conferentie voor senior software engineers, architecten en teamleiders. Duik samen met 64 softwareleiders van wereldklasse, zoals Anika Mukherji, Fran Mendez van Courtney Kissler, in de patronen, werkwijzen en gebruiksscenario's die worden gebruikt door 's werelds meest innovatieve softwareprofessionals. Woon QCon Plus bij (1-12 november) en bespaarde waardevolle tijd door nieuwe technologieën te begrijpen en toe te passen op uw projecten.

Michelle Brenner bouwt Netflix-werkstations en artiesten in staat om overal te creëren

Asim Hussain van Microsoft over het ontwerpen van software voor duurzaamheid en de Green Software Foundation

Domain Storytelling met Stefan Hofer en Henning Schwentner

Rosaria Silipo over codeloos diep leren en visueel programmeren

Probeer NGINX Plus en NGINX App Protect - 30 dagen gratis.

Elke dinsdag wordt een overzicht van de inhoud van vorige week op InfoQ verzonden. Word lid van een community van meer dan 250.000 senior ontwikkelaars. Bekijk een voorbeeld

U moet een InfoQ-account opnemen van inloggen of inloggen om opmerkingen te plaatsen. Maar er is zoveel meer achter geregistreerd staan.

Haal het meeste uit de InfoQ-ervaring.

Toegestane html: a,b,br,blockquote,i,li,pre,u,ul,p

Toegestane html: a,b,br,blockquote,i,li,pre,u,ul,p

Toegestane html: a,b,br,blockquote,i,li,pre,u,ul,p

Elke dinsdag wordt een overzicht van de inhoud van vorige week op InfoQ verzonden. Word lid van een community van meer dan 250.000 senior ontwikkelaars. Bekijk een voorbeeld

Focus op de onderwerpen die er op dit moment te doen zijn in softwareontwikkeling. Duik diep met 64 softwareleiders van wereldklasse. Ontdek hoe zij opkomende trends toepassen. Leer hun use cases en best practices. Blijf de adoptiecurve voor en vorm aan uw roadmap met QCon Plus online softwareontwikkelingsconferentie.

InfoQ.com en alle inhoud copyright © 2006-2021 C4Media Inc. InfoQ.com gehost bij Contegix, de beste ISP waarmee we ooit hebben gewerkt. Privacyverklaring, Algemene voorwaarden, Cookiebeleid