Laura AI – TechStack unseres RoboAdvisors
Wie mit Scala & TypeScript ein DSGVO konformer RoboAdvisor in der Google Cloud entstanden ist.
In unserem letzten Blogbeitrag haben wir euch erklärt, wie ihr mit unserem neuen RoboAdvisor “Laura AI” eine digitale Baufinanzierung und somit ein Finanzierungskonzept für eure Wunschimmobilie erstellen könnt. Heute wollen wir uns den TechStack hinter dem RoboAdvisor anschauen. Dabei schauen wir uns nicht nur die Technik rund um React und die Scala Microservice Architektur an, sondern gehen auch auf das Vorgehen während der Entwicklung ein. Gemeinsam mit der Volksbank Rosenheim Chiemsee haben wir nach den Lean-Startup Ansätzen in einem Jahr die Anforderungen definiert und das Produkt bis zur Marktreife gebracht.
Die Technologie von Laura AI
Nach 12 Sprints und monatlichen Usability Testessen haben wir Stand heute 15 private „Laura AI“ Repositories, die diverse Frontendapplikationen, Serverless Functions, Infrastructure as Code und Microservices für Kubernetes beinhalten. In Zahlen bedeutet das Ganze stand 01. März 2019 ca. 160.000 Lines of Code und über 5.000 Zeilen Kommentare. Das meiste davon wurde in TypeScript und Scala programmiert.
Microservices mit akka, play2 und NodeJS
Unser heterogenes Backend besteht aus mehreren Micro- und Nanoservices.
Dabei haben wir große zusammenhängende Blöcke als Microservice auf Kubernetes und kleinere Nano-Services als Serverless Cloud Function deployed.
Das gesamte Content-Management-System (CMS) ist in Scala programmiert und verwendet das Play2 Framework von Lightbend. Gemeinsam mit Slick und Flyway ist eine nahtlose Migration und Integration aller benötigten Daten auf der Datenbank gegeben. Dieses System liefert und speichert über REST Schnittstellen alle benötigten Daten für die Laura AI React Anwendung. Dazu zählen neben den Basisparametern der einzelnen Banken auch die Spracheinstellungen und das Finanzierungslexikon, das im Hintergrund über einen akka Service automatisch den Dialogflow KI Service trainiert.
Der Immobilien-Crawler für die Analyse der Immobilienportale, sowie unser Vertriebs-Crawler sind mithilfe von akka umgesetzt. Sie parsen die fertig gerenderte Seite und extrahieren aus dem HTML Code die notwendigen Informationen. Bei Portalen die og:graph nutzen, werden diese Daten ebenfalls extrahiert.
Unsere PDFs der finalen Konzepte generieren wir über mehrere NodeJS Container, die im Hintergrund Latex Templates aus Git auschecken, mit Texten und SVG Grafiken anreichern und anschließend zu einer PDF kompilieren. Dieses kann dann über Firebase Storage vom Benutzer als PDF heruntergeladen werden.
Der Chatbot „Laura“ ist zwar mit dem Dialogsystem Dialogflow von Google konzipiert, aus Performancegründen wird dieser aber nicht direkt vom Frontend angesprochen, sondern über ein Chat Gateway, das mit akka und Scala programmiert wurde, angetriggert. Auch das dynamische Training von neuen Wörtern aus dem Finanzierungslexikon wird über diese Schnittstelle abgebildet.
Neben den über Kubernetes gehosteten Services gibt es auch viele Google Cloud Functions, die kleinere Aufgaben übernehmen. Ein Beispiel ist die Mailjet Serverless Function, die wir zum Versand von E-Mails nutzen. Anders als AWS bietet Google keinen Dienst für den direkten Versand von E-Mails wie etwa den AWS Simple E-Mail Service (SES). Ein weiteres Beispiel für einen Nanoservice ist die anonyme Kontoanalyse und die Umwandlung dieser Daten in ein Haushaltsbuch. Derzeit ist diese Funktion nicht aktiv, da wir dies ohne Lizenz der BaFin rechtlich noch nicht anbieten können.
Alle unsere Services unterliegen strengen Qualitätskontrollen. So werden alle Services mit Unit oder Integrationstests ausgestattet und für die wichtigen Prozesse existieren End-2-End Tests, die wir mit cypress.io programmiert haben. Bevor ein Commit von der Testumgebung auf den Master, also die Produktivumgebung, gemerged werden kann, ist ein 4 Augen Review notwendig. Wenn ein Pull-Request die notwendigen Qualitätsanforderungen erfüllt und gemerged ist, wird er automatisch über eine Continuos Deployment Pipeline mithilfe von Circle CI bis in den produktiven Betrieb gebracht. Dabei spielt es keine Rolle, ob es sich um Nanoservices oder Microservices auf Kubernetes handelt.
Laura AI User Interface
Zum Public Release existieren zwei TypeScript React Applikationen.
Eine Applikation wird für die Verwaltung der Daten des RoboAdvisors verwendet. Dort können Administratoren oder Partnerbanken Ihre Einstellungen definieren und der Chatbot kann weiter trainiert werden.
Die zweite Applikation ist die Webapplikation von „Laura AI“ selbst. Sie wird wie die Administrationsoberfläche auch über Firebase gehostet und bietet Einstiegspunkte für Desktop und mobile Endgeräte. Der React Router der App entscheidet, ob die normale WebApp oder die progressive WebApp für mobile Endgeräte ausgeliefert werden soll.
Interessant am Frontend ist auch, dass diese Applikation über mehrere Domains erreicht werden kann. Notwendig ist dies, da wir über jetzt-baufinanzieren.de über die Geolocation entscheiden zu welcher Partnerbank wir den Request routen und andererseits hat jede Partnerbank die Möglichkeit eine eigene Subdomain anzulegen, die immer die passenden Daten der eigenen Bank enthält. Die Volksbank Rosenheim-Chiemsee hat sich beispielsweise für baufinanzieren-rosenheim.de entschieden. In den nächsten Wochen werden speziell in diesem Bereich noch weitere Anpassungen folgen, um auch das „Duplicate Content“ SEO Problem in den Griff zu bekommen. Jede Partnerbank kann dann folglich seine eigene Startseite definieren. Zum Release leiten wir bei einer Bank erst einmal alle Requests an die Domain der Volksbank Rosenheim-Chiemsee um.
Die Oberfläche von Laura AI hat in den vergangenen Monaten mehr als 10 Usability Tests beim Usability Testessen der TechDivsion durchlaufen. Unbedarfte Tester haben die App immer wieder aufs Neue auf den Prüfstand gestellt. Die jeweiligen Verbesserungen sind immer wieder in die nächsten Sprints eingeflossen. So konnten wir eine Oberfläche mit optimaler Benutzerführung gestalten und den User gezielt durch das komplexe Thema lenken. Eine der größten Hürden bei einer solch modernen komplexen Oberfläche war und ist definitiv die Internet Explorer 11 Problematik, der eine ausgeprägte Eigenwilligkeit im Interpretationsverständnis der CSS Attribute hat.
Google Cloud
Anfangs noch bei Amazon Web Services (AWS) gehostet sind wir mittlerweile komplett in die Google Cloud umgezogen. Neben vielen Diensten der Google Cloud Plattform nutzen wir auch Zusatzdienste wie Dialogflow (Chatbot) und Firebase (React Hosting und Authentication).
Laura AI ist dabei auf mehrere Google Projekte aufgeteilt, die jeweils eigene private Netzwerke bilden. So ist die Testumgebung komplett von der Produktivumgebung getrennt und wir betreiben zwei separate Kubernetes Cluster für unsere Docker Container. Die Datenhaltung ist, wie auch die Servicearchitektur, sehr heterogen. So nutzen wir für unsere strukturierte Daten PostgreSQL (Cloud SQL) und für weniger strukturierte Daten den Cloud Datastore von Google. Statische Dateien, wie zum Beispiel Bilder, werden über Firebase Storage gehostet. Für die Benutzerverwaltung setzen wir Firebase Authentication ein. Dieser Dienst ist vorerst nur für Mitarbeiter und Administratoren notwendig, da die Plattform öffentlich zugänglich ist.
Da wir bei der Entwicklung sehr starken Fokus auf das reaktive Manifest gelegt haben und unsere Dienste immer in mindestens zwei Rechenzentren in der Region Frankfurt betrieben werden, können wir eine sehr hohe Verfügbarkeit gewährleisten.
Unser Monitoring und Logging ist weitgehend mit Google Stackdriver aufgebaut und wir testen automatisch regelmäßig die Funktionalität der Applikation.
Der Weg zu ISO270001 und die DSGVO
Im Bankumfeld mussten wir als Startup schnell lernen, dass Sicherheit sehr großgeschrieben wird. So haben wir uns entschieden, dass wir einen externen Datenschutzbeauftragten bestellen, der auch eine Zertifizierung als CISO (Chief Information Security Officer) besitzt. Gemeinsam haben wir in mehreren Wochen bereits den Grundstein für die ISO27001 gelegt und können datenschutzkonform nach der DSGVO arbeiten. In dieser Zeit haben wir eine Leitlinie für Informationssicherheit eingeführt, alle notwendigen Prozesse und Dokumente erstellt, unsere Mitarbeiter in den Bereichen geschult und deren Wissen mit Prüfungen überprüft und dokumentiert. Leider sind wir erst einmal auch an einer Hürde der BaFin gescheitert. So konnten wir einen Dienst zur automatischen Klassifizierung der Kontodaten in Form eines Haushaltsbuches nicht im ersten Release ausliefern, da uns die Lizenz für die Kontoinformationsdienste fehlt und diese auch nicht von der Partnerbank beigesteuert werden kann.
Lean-Startup mit einer Bank
Bei der Umsetzung der Plattform „Laura AI“ folgten wir den Ansätzen von Lean-Startup und haben das Projekt mit Sprints und agilem Management abgewickelt. Diese Ansätze konnten wir anfangs nur deshalb mit der Volksbank Rosenheim umsetzen, da wir einen agilen Fixpreis gewählt haben. Uns war bewusst, dass dies eigentlich eine Todsünde des modernen Software Engineerings ist, haben aber an den Erfolg und die langfristige Zusammenarbeit geglaubt, was sich auch bewahrheitet hat. Durch unser enormes Engagement konnten wir die VR-Bank überzeugen den RoboAdvisor bis zum Marketable Product weiterzuentwickeln und ihn am 01.03.2019 für deren Kunden freizugeben.