torsdag 5 december 2013

Svenskar bakom Java-genombrott - Computer Sweden

Svenskar bakom Java-genombrott - Computer Sweden

Automatiserad aktiehandel ställer enorma krav. Inbyggda begränsningar i Java har hittills försvårat aktiehandel i realtid, men svenska Cinnober har kommit på en världsunik lösning.

Det finns ett problem med Javaplattformen för tillämpningar med extrema prestandakrav. Körningen av program stannas upp på ett svårförutsägbart sätt under extremt korta tidsperioder, på grund av hur minneshanteringen fungerar (se förklaring på nästa sida). Det är ett förhållande som Java delar med andra plattformar med automatiserad minneshantering.

Inom aktiehandel kan minneshanteringen få katastrofala följder, eftersom varje millisekund är viktig.

Nu har svenska Cinnober kommit med en lösning på problemet som förbluffar experter som Computer Sweden har varit i kontakt med.

På Oracle i Sverige, där mycket av utvecklingen av minneshanteringen på Javaplattformen sker, känner man inte till någon lösning av samma typ som Cinnobers.


Problemet

Språket och plattformen Java erbjuder många fördelar för olika typer av systemutveckling. Ett exempel är utveckling av applikationer för aktiehandel, vilka ställer extrema krav på prestanda, inte minst vad gäller förutsägbarhet.

– Java har många fördelar. I vissa lägen är det snabbare än andra lösningar och det finns gott om Javakunniga programmerare, säger Per-Anders Häll-Bedman, vice vd på Cinnober.

Men det finns alltså problem med minneshanteringen på Javaplattformen. För handel med en aktie på en börs ska inte det här innebära något problem, eftersom centrala globala sekvensnummer delas ut. Om du ber om att få göra en affär ställer du dig i kö. Du ska få göra affären när det är din tur, även om det handelssystem du använder har stannat upp i några millisekunder.

Problemen visar sig i handel med en aktie som finns på flera börser, då olika serier av sekvensnummer används. Om en aktieaffär bygger på samtidighet i handel på flera börser krävs absolut kontroll.

Ännu värre blir det för handelsalgoritmer som ofta bygger på många samtidiga affärer för flera aktier på flera börser. Ett annat problemområde är högfrekvenshandel, som kan inbegripa flera tusen aktieaffärer på olika börser. För att lyckas med sådana krävs förutsägbarhet för de tekniska lösningarna. Och det är förutsägbarhet som Cinnober säger sig erbjuda.

Företaget har sedan tidigare erbjudit tekniken i handelssystemet Tradexpress Ultra och inför den nu i det mer generella handelssystemet Tradexpress Trading System. I samband med det har nyligen en rapport publicerats i vilket den tekniska lösningen beskrivs.

Lösningen

En av fördelarna med Javaplattformen är att programmerare inte behöver hantera minnesanvändning på egen hand, alltså rensa minnet från ej använd information när det är på väg att bli fullt. Det tar Javaplattformen hand om, i en process som kallas ”garbage collection”.

Att slippa manuell minneshantering innebär inte bara en tidsbesparing för programmerare, det minskar även risken för programfel. Den stora nackdelen är att programmeraren inte har kontroll över när rensningen av minnet sker. Och när minnet rensas stannar körningen av programkod upp.

Per-Anders Häll-Bedman på Cinnober nämner att en normal tid för minnesrensning på Javaplattformen är 20–30 millisekunder. Det finns en virtuell Javamaskin som heter Zing från Azul Systems som kortar den tiden till 2–3 millisekunder. De här korta stoppen räcker för att ställa till problem med aktiehandel.

Det finns ett sätt runt problemet i Java. Det är att inte skapa nya objekt i program. Om alla objekt som ska användas skapas i början av körningen av ett program behöver minnet inte rensas. Men det blir till slut ett ohållbart sätt att skriva programkod, som går stick i stäv med de grundläggande tankarna för språket Java.

Cinnobers lösning på minnesproblemet är att använda två servrar tillsammans. Enkelt beskrivet kommer en förfrågan om en aktieaffär in till en modul som är skriven så att ingen rensning av minnet behöver ske. Sedan skickas förfrågan vidare till moduler på båda servrarna. Båda servrarna skickar svar tillbaka till kontrollmodulen och det som kommer fram först används. I de absolut flesta fall kommer inte minnesrensning att ske samtidigt på båda servrarna.

Kontrollmodulen beräknar när minnesrensning ska ske på båda servrarna. Det görs genom att ha koll på vad som finns i minnet och vad som är på väg in. Om det visar sig att minnesrensning kommer att ske samtidigt på båda servrarna fördröjs körningen på den ena så att servrarna hamnar ”ur synk”. Resultatet blir programkörning som är oberoende av minnesrensning.

Lösningen låter bedrägligt enkel och naturligtvis har många smarta Javaprogrammerare funderat i de här banorna. Det svåra är att skriva den kod som krävs och få den att fungera klanderfritt, vilket är vad Cinnober påstår sig ha gjort.

Framtiden

Just nu pågår diskussioner på Cinnober om att släppa delar av lösningen för avbrottsfri körning av Javaprogram som öppen källkod. En rapport som beskriver lösningen översiktligt har redan släppts. Man funderar även på att ansöka om patent för vissa algoritmer i syfte att skydda sig från att andra parter hävdar egna patent på lösningen.

Att Cinnober kommer att fortsätta förfina Javalösningar verkar i alla fall vara tvärsäkert, även om ett språk som C inte lider av problemet med minnesrensning.

– Java gör det möjligt att få fram lösningar snabbare. Det blir komplext att arbeta med ett språk som C, säger Peter Lenti, teknikchef på Cinnober.

På sikt är det fullt tänkbart att Cinnobers lösningar letar sig in i de officiella Javastandarder som fastställs av JCP, Java Community Process. Närmast till hands ligger standardsamlingen Java EE, Java Platform, Enterprise Edition.

Det är också fullt tänkbart att lösningar av den här typen används för andra tillämpningar än aktiehandel. Varför inte för övervakning kärnkraftverk?

– Tillämpningar i vilka det är viktigt att undvika realtidsstopp är tänkbara. Ett exempel är att analysera sociala medier, säger Per-Anders Häll-Bedman på Cinnober.


 

Inga kommentarer:

Skicka en kommentar