ga('send', 'pageview');
Categories
Mjukvaruhantverk Teknik

Uppdragsrapport: RxJava för att slippa callback-hell och en synnerligen kritisk komponent

I en serie intervjuer får vi träffa några av Citerus utvecklare ute på uppdrag. Här träffar vi Dan Peterström som bygger en gateway mot underliggande system.

I en serie intervjuer får vi träffa några av Citerus utvecklare ute på uppdrag. Här träffar vi Dan Peterström som bygger en gateway mot underliggande system. 

Hej Dan! Berätta kort om ditt uppdrag.

Jag sitter i ett team som bygger en ny mobilapp för en bank. Mitt ansvarsområde är att tillhandahålla en så kallad backend for frontend (BFF), en server/gateway som är den enda kontakten för mobilapplikationerna in i övriga system. I övrigt består teamet av utvecklare för de olika mobilplattformarna. Genom att ha serverkompetens i appteamet är tanken att man ska kunna leverera features ”från ax till limpa” självständigt, samt att underliggande systems API’er ska kunna ändras utan att direkt påverka apparna.

Från ett tekniskt perspektiv, hur bygger ni denna server-gateway?

Tanken är att följa ett mikrotjänsttänk, där servern kan produktionssättas självständigt och äger sitt eget data. Vi har använt oss av ramverket Dropwizard, som är ett lättviktigt Java-ramverk för att skapa mikrotjänster. En ny teknik som jag har mycket nytta av är reaktiv programmering med RxJava. Många anrop från appen resulterar i flera, parallella anrop in i interna system, som sedan ska flätas ihop till ett svar när alla anropade system svarat. Skulle detta göras med t.ex. Futures, istället för RxJava, hamnar man lätt i ”callback hell”. I fallet att vissa system svarar fel eller inte svarar alls, vill man begränsa felen och ge användaren ett så bra svar som möjligt.

Det här låter i mina öron som en relativt kritisk service med höga krav på upptid. Hur hanterar ni det?

Erfarenhet säger att det bästa sättet att få dåliga betyg i appstore är att ha nertid – då kommer enstjärnsbetyg som ett brev på posten. Det är faktiskt kul att få snabb kundfeedback men det sätter ju som du säger fokus på att ha bra upptid. För att kunna vara proaktiva har vi en väl utbyggd monitorering av både tjänsten och alla anrop den gör till underliggande system. Vi monitorerar felkoder och svarstider, mäter trender och mönster i trafiken. Här använder vi oss av produkter/bibliotek såsom Grafana, Prometheus och Dropwizard metrics. Där teamet sitter finns en stor tv med graferna över systemets hälsa, med larm uppsatta som genast meddelar om vissa gränsvärden överskrids.

Vad har varit ditt största bidrag i det här uppdraget?

Mitt största bidrag var nog att se helhetsbilden av projektet och samverka med andra delar av organisationen, såsom säkerhets- och infrastrukturteamet. Jag hade förväntat mig en stelbent bankorganisation, men genom att forma och mötas i små grupper med alla kompetenser kunde vi undanröja hinder och snabbt få ut appen i produktion.

Vilka lärdomar har du gjort?

Det har hänt mycket på Java-sidan under uppdraget, både Java 9 och Java 10 har släppts, med framförallt förbättringar vad gäller syntax. Java 10 kan tillsammans med hjälpmedel som Lombok underlätta utveckling och minska produktivitetsgapet till andra språk som Kotlin och Scala.

Tack Dan!


Vill du jobba med Dan? Kolla gärna här!

 

By Dan Peterström

Leave a Reply

Your email address will not be published. Required fields are marked *