Ontwikkelen van een nieuwe site voor de standaard & onderzoek naar het opzetten van een distributed...

122
ONTWIKKELEN VAN EEN NIEUWE SITE VOOR DE STANDAARD & ONDERZOEK NAAR HET OPZETTEN VAN EEN DISTRIBUTED CACHE Niels Timmermans STAGERAPPORT PROF. BACH.ICT 3

Transcript of Ontwikkelen van een nieuwe site voor de standaard & onderzoek naar het opzetten van een distributed...

ONTWIKKELEN VAN EEN NIEUWE SITE

VOOR DE STANDAARD

&

ONDERZOEK NAAR HET OPZETTEN VAN

EEN DISTRIBUTED CACHE

Niels Timmermans

STAGERAPPORT

PROF. BACH.ICT 3

Stagerapport 2

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Stagerapport 3

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

STAGEGEGEVENS

Stagiair:

Niels Timmermans

Opleiding:

Professionele Bachelor Elektronica-ICT afstudeerrichting ICT

Academiejaar:

2012 – 2013

Stageperiode:

Van 14/02/2013 tot 23/05/2013

Stagebegeleider:

Knockaert Sven

Stageplaats:

CORELIO A.Gossetlaan 30 1702 Groot-Bijgaarden 02 467 25 08

Mentor:

Vandevyvere Martijn

Stagerapport 4

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

SAMENVATTING

In het kader van mijn opleiding liep ik gedurende 3 maanden stage op het Digital Competence Center

van Corelio. Hier worden technologische vernieuwingen aangaande De Standaard, Het Nieuwsblad, …

gerealiseerd.

De opdracht die ik tijdens deze stage uitvoerde bestond uit twee delen. Enerzijds het uitwerken van

een aantal features van de nieuwe site van De Standaard en anderzijds het uitvoeren van een

onderzoek naar het opzetten van een distributed cache binnen De Standaard.

Tijdens het eerste luik van de stage ontwikkelde ik een tagoverzichtspagina. Op deze pagina worden

alle tags die binnen De Standaard worden gebruikt weergegeven.

Daarnaast werkte ik het onderdeel rond auteursprofielen uit. Ik ontwikkelde een pagina waar de

auteursinformatie en diens artikels worden weergegeven. Ook zorgde ik ervoor dat op de

detailpagina van een artikel een lijst van de auteurs onder de inhoud van het artikel wordt getoond.

Ook werkte ik een archief uit waar alle artikels op datum kunnen worden opgevraagd. Dit met het

oog op Search Engine Optimization zodat alle artikels door zoekmachines geïndexeerd kunnen

worden.

Een laatste onderdeel dat ik uitwerkte was het beursgedeelte binnen de nieuwe site. Ik ontwikkelde

een service die alle data aan de applicatie aanbiedt. Vervolgens werkte ik ook de beurspagina’s uit en

ontwikkelde ik verscheidene widgets die de service aanspreken.

Het tweede luik van de stage bestond uit het uitvoeren van een onderzoek naar het opzetten van

een distributed cache. Een distributed cache is het abstraheren van de caching uit de applicatie in

een logische laag die uit verschillende servers bestaat.

Tijdens dit onderzoek vergeleek ik deze manier van caching met de traditionele manier. Daarnaast

zocht ik welke mogelijkheden er zijn om deze cache op te zetten en ook welke technologieën er

hiervoor bestaan. Deze technologieën werden getest en met elkaar vergeleken.

Met deze stage werd mij een unieke kans geboden om mee te werken aan de ontwikkeling van één

van de grootste sites binnen België. Door de omvang van de applicatie leerde ik omgaan met

problemen i.v.m. schaalbaarheid en performantie. Op zeer korte tijd leerde ik zeer veel bij en

verwierf verschillende competenties die mij met een voldaan gevoel doen terugblikken op deze

stage.

Stagerapport 5

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

WOORD VOORAF

Mijn grote dank gaat uit naar Martijn Vandevyvere die me de kans gaf stage te lopen bij Corelio. Aan

het begin van de stage gaf hij me de kans om mee te werken aan het project om een nieuwe site

voor De Standaard te bouwen. Gedurende de hele stage stond hij klaar om al mijn vragen te

beantwoorden en mij zijn kennis over te dragen.

Daarnaast wil ik ook prof. Sven Knockaert bedanken om mij gedurende mijn stage te begeleiden en

mijn stageverslag te controleren.

Ten slotte gaat mijn dank ook uit naar alle collega’s bij Corelio. Gedurende 3 maanden heb ik de eer

gehad met hen te mogen samenwerken en veel van hen te mogen opsteken. In het bijzonder gaat

mijn dank uit naar Jan Kinable en Geoffrey Samper om mij hun kennis over te dragen en bij te staan

gedurende mijn stage. Ook wil ik Thomas Van den Bossche speciaal bedanken voor de aangename

samenwerking tijdens het uitwerken van het beursgedeelte van de nieuwe site.

Stagerapport 6

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

INHOUD

Stagegegevens ......................................................................................................................................... 3

Samenvatting ........................................................................................................................................... 4

Woord vooraf .......................................................................................................................................... 5

Inhoud ..................................................................................................................................................... 6

Lijst met gebruikte afkortingen ............................................................................................................... 8

1 Voorstelling van het stagebedrijf ..................................................................................................... 9

1.1 Onstaan en geschiedenis ......................................................................................................... 9

1.2 DCC vs. ICT ............................................................................................................................... 9

1.3 Merken .................................................................................................................................... 9

2 Stageopdracht ................................................................................................................................ 10

2.1 Tagsoverzicht ......................................................................................................................... 10

2.2 Profielen ................................................................................................................................ 10

2.3 Archief ................................................................................................................................... 10

2.4 Biz .......................................................................................................................................... 11

2.5 Distributed Cache Research .................................................................................................. 11

3 Actieplan ........................................................................................................................................ 12

4 Voorstudie ...................................................................................................................................... 13

4.1 Distributed cache .................................................................................................................. 13

5 Praktische uitwerking ..................................................................................................................... 32

5.1 Tagsoverzicht ......................................................................................................................... 32

5.2 Profiel .................................................................................................................................... 36

5.3 Archief ................................................................................................................................... 41

5.4 Biz .......................................................................................................................................... 46

5.5 Distributed Cache .................................................................................................................. 62

Algemeen besluit ................................................................................................................................... 97

Bibliografie ............................................................................................................................................ 98

Stagerapport 7

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Bijlagen ................................................................................................................................................ 102

1. Redis server scripts .................................................................................................................. 102

2. Distributed Cache Benchmarks ............................................................................................... 109

Stagerapport 8

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

LIJST MET GEBRUIKTE AFKORTINGEN

ACID Atomic Consistency Isolated Durability

BIZ Beursnieuws

DCC Digital Competence Center

DDD Domain Driven Design

DRY Don’t repeat yourself

DSO De Standaard Online

HA High Availability

HDD Hard disk drive

JS Javascript

OSI Open Systems Interconnection

POC Proof of Concept

REST Representational state transfer

SEO Search Engine Optimization

SPROC Stored Procedure

URL Uniform Resource Locator

VM Virtuele machine

VUM Vlaamse Uitgeversmaatschappij

XML Extensible Markup Language

Stagerapport 9

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

1 VOORSTELLING VAN HET STAGEBEDRIJF

1.1 ONSTAAN EN GESCHIEDENIS

Corelio werd in 2006 de naam van de Vlaamse Uitgeversmaatschappij nadat de groep Médiabel met

Les Editions de L’Avenir en Passe-Partout werd overgenomen en de VUM zo een nationale

mediagroep werd.

De VUM zelf ontstond in 1976 toen André Leysen de failliete Standaard Groep met Het Nieuwsblad,

De Standaard en De Gentenaar overnam. Diens zoon Thomas is sinds 2008 bestuursvoorzitter.

In 2011 nam Corelio samen met Sanoma en de top van De Vijver SBS Belgium, de overkoepelende

organisatie van toenmalige televisiezenders VT4 en VijfTv (nu VIER en VIJF), over.

1.2 DCC VS. ICT

Binnen Corelio zijn er twee IT-diensten. Enerzijds is er het DCC en anderzijds ICT.

ICT is de dienst die instaat voor het onderhoud van servers en dergelijke. Ook de service desk die

dient ter ondersteuning van andere organen binnen het bedrijf met betrekkingen tot infrastructurele

zaken vallen hieronder.

Daartegenover is het DCC de afdeling die instaat voor de realisatie van ideeën over technologische

vernieuwingen binnen de hele organisatie. Hieronder vallen bv. vernieuwingen van de verschillende

(mobiele) sites, integratie van externe services, ontwikkeling van tools voor de redacties, …

Het is op deze afdeling dat de stage zal doorgaan.

1.3 MERKEN

Figuur 1.3-1 Corelio logo's

Stagerapport 10

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

2 STAGEOPDRACHT

De stageopdracht bestaat uit twee grote delen. Enerzijds het implementeren van een aantal

vernieuwingen binnen DSO die opgesplitst kunnen worden onder:

Tagsoverzicht

Profielen

Archief

Biz

Bij dit deel van de stage zal ik meedraaien als lid van het SCRUM team dat verantwoordelijk is voor

de vernieuwing van DSO.

Anderzijds zal tijdens het tweede deel van de stage onderzoek worden gedaan naar het opzetten van

een Distributed Cache.

2.1 TAGSOVERZICHT

In opdracht van de traffic manager moet er een overzichtspagina van alle tags die gebruikt worden

binnen DSO worden gemaakt. Deze linken door naar de overzichtspagina van de tag zodat alle

tagoverzichtpagina’s geïndexeerd worden door zoekmachines (SEO).

Daarnaast dient er paginering voorzien te worden van zodra er meer dan 50 tags zijn.

2.2 PROFIELEN

Aan een artikel kunnen profielen (van de auteurs) gelinkt worden. Het is de bedoeling om een

overzichtspagina voor een profiel te maken met de informatie van de auteur en een lijst van diens

artikels.

Daarnaast moet er ook worden gezorgd dat op een artikeldetailpagina onder het artikel een lijst

komt van de profielen die aan het artikel gelinkt zijn. In de hoofding van het artikel wordt er gelinkt

naar de profielpagina indien er een profiel gekoppeld is aan het artikel.

2.3 ARCHIEF

Naar analogie van het tagsoverzicht moet er een indexeerbaar archief aangemaakt worden van alle

artikels die gebruikt worden binnen DSO met een link naar de detailpagina van een artikel (SEO).

Stagerapport 11

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

2.4 BIZ

In oude site van De Standaard bestaan de beurspagina’s uit iFrames van een externe site. Het is de

bedoeling dat dit herwerkt wordt zodat de beurspagina’s bestaan uit widgets die zelf beheerd

worden en hun data verkrijgen op basis van een eigen service.

2.5 DISTRIBUTED CACHE RESEARCH

Momenteel maakt elke webserver gebruik van zijn eigen lokale cache. Het is de bedoeling dat er

onderzoek wordt gedaan of een omschakeling naar een Distributed Cache zijn voordelen heeft t.o.v.

het huidige systeem en hoe dit systeem het best opgezet kan worden.

3 ACTIEPLAN

4 VOORSTUDIE

4.1 DISTRIBUTED CACHE

A distributed cache is an extension of the traditional concept of cache used in a single locale.

A distributed cache may span multiple servers so that it can grow in size and in transactional

capacity. It is mainly used to store application data residing in database and web session

data. [1]

Caching is een heel belangrijk aspect bij het ontwikkelen van applicaties. Het zorgt ervoor dat data

sneller toegankelijk is en dat mogelijke bottlenecks onderuit worden gehaald. Een distributed cache

gaat hierin nog een stapje verder. Daar waar bij traditionele caching alle servers hun eigen lokale

cache hebben, is een distributed cache een cachinglaag die verspreid wordt over en toegankelijk is

door verschillende servers.

4.1.1 WAAROM KIEZEN VOOR EEN DISTRIBUTED CACHE?

PERFORMANTIE

Bij het gebruiken van een lokale cache gaat iedere node zijn eigen cache opbouwen en onderhouden.

Het nadeel van deze structuur is dat dezelfde data door de verschillende servers wordt opgehaald en

opgeslagen. Hierdoor zal de onderliggende datastructuur meerdere malen worden aangesproken.

Deze onderliggende datastructuur kan bv. een database zijn, maar evengoed een externe service.

Wanneer deze onderliggende datastructuur hevig belast wordt, kan dit gevolgen hebben voor de

performantie van de hele applicatie. Op deze manier kan de caching een bottleneck zijn binnen de

applicatie.

SCHAALBAARHEID

Daarnaast ontstaat het probleem dat bij grote applicaties het gebruik van de lokale caches absoluut

niet schaalbaar is. Stel dat de cache uitgebreid moet worden, moet dit voor iedere server individueel

gebeuren. Daar waar bij een distributed cache dit maar één keer (of bij eventuele replicatie twee

keer) zal moeten gebeuren. En aangezien men over grootschalige applicaties spreekt is dit een niet te

verwaarlozen issue.

Men zegt dat een distributed cache horizontaal schaalbaar is (in de breedte) terwijl lokale caching

enkel verticaal schaalbaar is.

Daardoor zal de kost bij de uitbreiding van het geheugen van een lokale cache lineair toenemen in

functie van het aantal servers, terwijl bij een distributed cache de kost constant zal blijven.

Stagerapport 14

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 4.1-1 Kost uitbreiding cache

AVAILABILITY

The ratio of (a) the total time a functional unit is capable of being used during a given interval

to (b) the length of the interval. [2]

Het bereiken van een zo hoog mogelijke availability of beschikbaarheid van een applicatie is één van

de grootste streefdoelen bij de ontwikkeling ervan. Het ultieme doel is natuurlijk dat een applicatie

altijd beschikbaar is, maar in de praktijk is dit echter niet in alle scenario’s mogelijk.

Bij een applicatie zoals een beursservice waar constant aandelen verhandeld worden, zouden bv. een

paar seconden downtime rampzalige gevolgen kunnen hebben. Algemeen wordt er gesproken over

de five nines waarbij gestreefd naar een availability ratio van 99,999%.

Figuur 4.1-2 HA [3]

Een distributed cache kan de availability van de applicatie positief beïnvloeden. Stel dat bij lokale

caching een webserver nadat deze down is geweest, terug opgestart wordt, dan zal deze zijn cache

terug opnieuw moeten opbouwen. Dit zorgt ervoor dat requests die op deze server terecht zullen

komen veel calls naar de onderliggende datastructuur zullen veroorzaken en zullen de requests

langer, mogelijks te lang, duren.

K

o

s

t

# Servers

Lokale caching

Distributed caching

Stagerapport 15

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Een distributed cache kan dit probleem opvangen doordat er verschillende replicatie topologieën

mogelijk zijn wat redundantie waarborgt en kunnen er aparte caching servers gebruikt worden. Deze

replicatie topologieën worden later besproken.

DATACONSISTENTIE

Een ander probleem dat optreedt bij gescheiden caches is de synchronisatie van data. Aangezien

iedere node zijn eigen cache heeft, heeft deze geen weet van eventuele veranderingen van dezelfde

data in een andere cache wat in sommige gevallen cruciaal (ACID) is.

Bij lokale caching kan men dit probleem verhelpen door de verantwoordelijkheid hierover te

verschuiven naar applicatie zelf of de onderliggende datastructuur. Maar dit zou niet de

verantwoordelijkheid van deze mogen zijn. [4]

ISOLATION

Bij lokale caching zit de caching verweven in het geheugen van het proces van de applicatie. Het

voordeel hiervan is de caching zeer snel is omdat er geen vertaling moet gebeuren wanneer data

weggeschreven of opgehaald wordt uit de cache.

Het nadeel hiervan is dat het cachen van de objecten verweven zit met applicatie terwijl dit eigenlijk

een aparte laag is net zoals de datalaag.

Een concreet voorbeeld waarbij dit naarboven komt, is bij het analyseren van een geheugendump

van het proces in geval van een bug of probleem. Doordat de caching verweven zit in hetzelfde

proces zal deze geheugendump veel onnodige informatie bevatten wat de efficiëntie van het

debuggen en het nemen van snapshots naar beneden haalt.

Daarnaast is caching zoals eerder aangehaald niet de verantwoordelijkheid van een applicatie en zou

dit uit de applicatie geabstraheerd moeten worden, wat bij distributed cache wordt bewerkstelligd

door het creëren van een aparte caching layer.

Figuur 4.1-3 Layers

Application layer

Caching

Data

Stagerapport 16

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Een bijkomend voordeel is dat aangezien de caching uit de applicatie getrokken is, deze ook door

andere applicaties en services benaderd kan worden. Denk maar een taskservice die indien er

wijzigingen gebeuren aan data op datalaag niveau, deze data meteen doorstuurt naar de caching

laag. Ook kunnen hieraan dan meteen enkele andere acties worden gekoppeld. Data kan ook

preventief ververst wordt zodat wanneer data in de cache vervalt, er geen cache miss optreedt met

bijhorende vertraging.

Bv. Stel dat een redacteur een artikel geschreven heeft, dan wordt dit automatisch in de cache

geladen en wordt ook de data van de meest recent gelezen artikels geüpdateted.

PRIMING

Primed Cache alleviates the problem of slow, incremental cache population exhibited by the

Demand Cache pattern. The primary difference is that a primed cache explicitly populates the

cache with an anticipated subset of data before making any database requests. A single

comprehensive query primes the cache with a single, relevant set of data that the application

is likely to reference. Most of the time this single query is much faster than the sum of the

smaller queries requires to populate the cache on demand. [5]

Doordat een distributed cache geïsoleerd is van een applicatie kunnen aparte services de cache

proactief gaan vullen. Dit zorgt ervoor dat de hit rate bij de start van een applicatie meteen hoger ligt

en dus de performantie meteen een stuk hoger zal liggen.

Daarnaast kan men data die uit de cache verwijderd zou worden omwille van de expirationtime

preventief heringeladen worden.

TRANSLATION PENALTY

Zoals eerder aangehaald zit bij lokale caching de data verweven in het proces van de applicatie zelf.

Wanneer we echter de caching uit dit proces halen zal er een vertaling moeten gebeuren wanneer er

naar de cache geschreven of van de cache gelezen wordt.

Wanneer het gaat om objecten zullen deze ge(de)serialiseerd moeten worden wat meer CPU-kracht

zal vergen van de webservers. Daarnaast zal een upgrade van de applicatie mogelijks als gevolg

hebben dat de geserialiseerde gegevens niet langer compatibel zullen zijn met de nieuwe

datastructuren. Zeker in een omgeving waar men actieve updates wil doen zal dit een aanpassing

vragen van de manier waarop de applicatie ontwikkeld wordt.

NETWORK ROUNDTRIP PENALTY

Een bijkomend nadeel van een gedistribueerde cache is de network roundtrip penalty. Doordat de

cache verspreid zit over meerdere servers zal ook de data verspreid liggen over verschillende servers

en indien er data opgehaald wordt zal dit over het netwerk gebeuren.

Een mogelijke tweak hiervoor is een combinatie van lokale caching voor de frequently used data die

over alle servers synchroon worden gehouden, en de distributed cache.

Stagerapport 17

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

SAMENGEVAT

Distributed cache Lokale cache

Schaalbaarheid

Performantie

Availability

Ease of use

Translation penalty

Network roundtrip penalty

Tabel 4.1-1 Distributed cache vs lokale cache

Stagerapport 18

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

4.1.2 CLIENT-SERVER OPSTELLINGEN

Een distributed cache kan op verschillende manieren opgesteld worden. Deze verschillende

mogelijkheden zullen we overlopen en met elkaar vergelijken.

Onder client verstaan we hier een node die gebruikt maakt van de distributed cache. Onder server

verstaan we een node die onderdeel is van de cachecluster.

CLIENT = SERVER

De clients kunnen ook als server geconfigureerd worden. In het geval van een webapplicatie zullen

de webservers samen (of een deel ervan) de distributed cache vormen.

In deze situatie wordt de caching uit het applicatieproces getrokken en zal op de webservers ook een

proces draaien dat verantwoordelijk is voor de caching. Één van de voordelen om webservers ook als

caching servers te gebruiken is dat de network roundtrip penalty in deze situatie voor een deel

getackeld wordt aangezien een deel van de cache lokaal zal staan. Naarmate het aantal servers stijgt,

zal dit voordeel vervallen. Ook hoeven er geen aparte servers worden geïnstalleerd of onderhouden

worden aangezien web- en cacheservers dezelfde nodes zijn.

Figuur 4.1-4 Network roundtrip penalty (client = server)

Daartegenover zullen de webservers naast de webrequests ook moeten instaan voor het afhandelen

van cacherequests. Hou in deze situatie rekening dat wanneer data die zwaar belastend is voor de

applicatie op één server terecht, deze ook alle trafiek zal moeten kunnen verwerken. Mogelijke

oplossingen hiervoor zijn om deze cruciale en veelgebruikte data alsnog op iedere webserver lokaal

te cachen.

Men kan ook op applicatieniveau zelf regions gaan definiëren en vanuit de applicatie bepalen op

welke server welke data terecht komt. Al gaat dit resoluut in tegen het grote idee van een distributed

cache, namelijk de caching en diens organisatie uit de applicatie te gaan wegtrekken.

0

10

20

30

40

50

60

70

80

90

100

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

%

# Servers

Network roundtrip penalty

Stagerapport 19

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Een bijkomend nadeel is dat de structuur waarop de cache gebouwd is dezelfde moet zijn als die van

de webservers. Ik denk bijvoorbeeld aan een .NET applicatie waarvoor onderliggend Windows vereist

is. Dan zal de onderliggende cache ook op Windows gebaseerd moeten zijn.

Web Server

Web Application

Web Server

Web Application

Web Server

Web Application

persistent or non-persistent distributed cache

Figuur 4.1-5 Client = Server [6]

CLIENT != SERVER

In deze opstelling zullen er aparte nodes zijn die de distributed cache zullen vormen.

Bij deze opstelling bewerkstelligd men een strikte scheiding tussen de applicatie- en cachelaag

aangezien de nodes die verantwoordelijk zijn verschillen van diegene die verantwoordelijk zijn voor

het aanbieden van de applicatie.

Het grote voordeel dat deze opstelling biedt is dat de nodes specifiek kunnen worden

geoptimaliseerd voor hun gebruik. Zo kunnen de caching servers onderliggend op een platform

Stagerapport 20

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

draaien dat specifiek geconfigureerd is om te gaan cachen. Daarnaast opent dit ook mogelijkheden

om in het geval van bv. een .NET applicatie de caching te laten draaien op een Linux platform. Zo

sluiten we oplossingen die enkel voor Linux beschikbaar zijn niet uit. Vaak zijn deze opensource en

low cost oplossingen wat zijn voordelen heeft. Voorbeelden hiervan worden later besproken.

Één van de nadelen van deze opstelling is de network roundtrip penalty. Aangezien de caching op

andere servers staat zal er voor iedere call over het netwerk moeten worden gegaan. Hiermee zal

rekening moeten worden gehouden indien voor deze opstelling worden gekozen. Naarmate het

aantal servers stijgt zal dit nadeel ten opzichte van een opstelling waar client en server dezelfde zijn,

verminderen.

Figuur 4.1-6 Network roundtrip penalty (client != server)

Een bijkomend minpunt is dat er extra servers nodig zijn wat extra licentiekosten en onderhoud met

zich mee brengt. In het geval van opensource oplossingen kan het nadeel van de extra licentiekosten

vervallen. Daarnaast zullen de webservers in deze opstelling minder resources nodig hebben en

gedownscaled kunnen worden aangezien de verantwoordelijkheid voor de caching op deze vervalt.

0

10

20

30

40

50

60

70

80

90

100

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

%

# Servers

Network roundtrip penalty

Stagerapport 21

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Web Server

Web Application

Web Server

Web Application

Web Server

Web Application

Cache server Cache server

non-persistent distributed cache

Figuur 4.1-7 Client != Server [6]

HYBRIDE OPSTELLING

Het is ook mogelijk om voorgaande opstellingen te combineren. Er kan zelfs gekozen worden om de

distributed cache te combineren met de lokale cache.

Een belangrijk aspect waarmee rekening moet worden gehouden wanneer men voor zo een

opstelling kiest is de synchronisatie van de verschillende componenten van de cache.

Een mogelijke oplossing hiervoor is een master-slave opstelling waarbij de master de slaves gaat

aansturen en op deze manier de synchronisatie tussen de nodes gewaarborgd blijft.

Stagerapport 22

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

VERGELIJKING

Client = Server Client != Server Hybride

Isolation

Mogelijkheden

Moeilijkheid

Cost

Performantie

Tabel 4.1-2 Client-Server opstellingen

Stagerapport 23

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

4.1.3 SERVER TOPOLOGIEËN

Hoe de nodes onderling communiceren en hoe de data binnen de cache gestructureerd wordt kan op

verschillende manieren geconfigureerd worden.

De keuze voor welke configuratie er gekozen zal worden zal naargelang de context waarin de cache

gebruikt wordt verschillen. Deze zal afhankelijk zijn van de noden inzake snelheid en redundantie.

De testen zijn uitgevoerd door Alachisoft, het bedrijf achter NCache, waarbij remote clients de cache

cluster benaderden.

MIRRORED CACHE

Bij een Mirrored Cache bestaat de cache uit twee nodes (active/passive). Alle requests worden door

de actieve node verwerkt die deze wijzigingen doorsluist naar de passieve node. Als de actieve node

faalt, komt de passieve node actief en aangezien deze synchroon is met de falende node zal de

applicatie hiervan geen hinder ondervinden.

Het grote nadeel bij deze configuratie is dat deze niet horizontaal schaalbaar is wat ervoor zorgt dat

bij grootschalige applicaties niet voor deze topologie gekozen zal worden.

Figuur 4.1-8 Mirrored Cache Benchmarks [7]

Aangezien deze opstelling niet schaalbaar is, zijn de resultaten vrij straightforward.

REPLICATED CACHE

Een andere mogelijkheid is het opstellen van een Replicated Cache. Hierbij zullen alle nodes over

dezelfde data beschikken. Bij het toevoegen van nodes zal de totale geheugencapaciteit van de cache

dus niet toenemen.

Stagerapport 24

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 4.1-9 Replicated Cache Benchmarks [7]

We zien dat naarmate er meerdere nodes aan de cluster worden toegevoegd, de leesperformantie

lineair stijgt. Aangezien de data over alle nodes gerepliceerd wordt, beschikken alle nodes over de

volledige data en kunnen bijgevolg alle nodes op alle calls antwoorden.

Daarnaast zien we dat de schrijfperformantie sterk daalt naarmate het aantal nodes toeneemt. Dit is

logisch want wanneer er iets wordt weggeschreven naar de cache moet deze wijziging ook bij de

andere nodes gedaan worden wat de duur van een schrijfoperatie verlengd.

PARTITIONED CACHE

Een Partitioned Cache is een cachestructuur waarbij iedere node een deel van de data bevat. Deze

data is dan enkel op die specifieke node beschikbaar en wordt niet gerepliceerd.

Het grote voordeel hiervan is dat wanneer er nodes toegevoegd worden aan de cluster de

lees/schrijfperformantie lineair stijgt. Daarnaast zorgt deze opstelling er ook voor dat de cluster

horizontaal schaalbaar is en dat als er een node wordt toegevoegd aan de cluster, de

geheugencapaciteit van de cache mee stijgt.

Het grote nadeel van deze opstelling is dat de data niet redundant opgeslagen wordt. Elk stukje data

is maar op één node beschikbaar dus wanneer er een node faalt, zal deze data opnieuw in de cache

moeten worden opgeslagen.

Stagerapport 25

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 4.1-10 Partitioned Cache Benchmarks [7]

PARTITIONED-REPLICA CACHE

Een Partitioned-Replica Cache is eigenlijk een combinatie van de vorige twee opstellingen. Nodes

gaan zich gaan groeperen en samen verantwoordelijk zijn voor een deel van de data. Op die manier

wordt er redundantie gegarandeerd wordt, maar anderzijds ook de performantie van een Partitioned

Cache gaat overnemen.

Ook de schrijf acties blijven performant aangezien de replicatie tussen de nodes onderling

asynchroon gebeurd en niet sequentieel zoals bij een Replicated Cache aangezien de replica passief

is. Dit betekent dat de applicatie niet zal wachten tot de data naar de replica weggeschreven is, maar

dat dit asynchroon gebeurd.

Figuur 4.1-11 Partition-Replica Cache Benchmarks [7]

PARTITION-REPLICA (SYNC-REPLICATION)

Bij een Partition-Replica (Sync-Replication) cache zal bij het schrijven naar de cache de verwerking

naar de replica’s synchroon gebeuren. Dit wil zeggen dat de applicatie zal wachten tot de wijziging

Stagerapport 26

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

ook op de replica zijn weggeschreven. Dit zorgt ervoor dat de schrijfperformantie lager is dan bij de

Partitioned-Replica Cache aangezien dit daar asynchroon gebeurd.

Op de leesperformantie heeft dit geen invloed.

Figuur 4.1-12 Partition-Replica (Sync-Replica) Benchmarks [7]

MASTER-SLAVE

Daarnaast kan men ook opteren voor een master-slave topologie. Hierbij zorgt de master ervoor dat

de data wordt gerepliceerd naar de slaves. Indien de master zou falen kan één van de slaves deze rol

overnemen en kan de cache actief blijven ondanks het falen. Dit is soort van mirrored cache.

VERGELIJKING

Snelheid Redundantie

Mirrored Cache

Replicated Cache

Partitioned Cache

Partitioned-Replica Cache

Partition-Replica (Sync-Relation)

Master-slave

Tabel 4.1-3 Server topologieën

Stagerapport 27

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

4.1.4 VOORBEELDEN

REDIS

Redis is een opensource key-value store wat het uitermate geschikt maakt om te gebruiken als

cache. Het is vergelijkbaar met Memcached maar biedt ondersteuning voor replicatie (master-slave

topologie). Daarnaast heeft het een uitgebreidere featureset. Zo ondersteunt Redis om meerdere

datatypes op te slaan zoals sets en lists, en kan data in de cache op verschillende manieren

gemanipuleerd worden.

VOORDELEN

Het is een opensource oplossing die zeer performant is en uitermate geschikt om een distributed

cache mee op te zetten. Er is ook een port beschikbaar naar Windows die developers toelaat om in

een eenvoudige klik de cache lokaal op te zetten. Daarnaast is er ondersteuning om de cache

persistent te maken wat ervoor zorgt dat je nooit met cold cache zit bij een eventueel falende node.

NADELEN

Het nadeel van Redis is dat de versie die geschikt is voor productie op Linux draait wat in het geval

van .NET applicaties ervoor zorgt dat er aparte cacheservers moeten worden voorzien.

Daarnaast zijn er geen geïntegreerde monitoringtools.

REDIS KEYSPACE NOTIFICATIONS

Redis biedt ook ondersteuning voor notificaties via Redis Keyspace Notifications. Keyspace laat

clients toe om verbinding te maken met een kanaal waarlangs notificaties worden kunnen worden.

REDIS SENTINEL

Redis Sentinel is een service die Redis aanbiedt voor automatische failover van nodes. Deze service

wordt met Redis meegeleverd.

REDIS CLUSTER

Redis Cluster is een platform dat momenteel nog in bèta-fase is en verwacht wordt voor het derde

kwartaal van 2013. Dit platform moet ondersteuning bieden voor het opzetten van een Redis cluster.

MEMCACHED

Memcached is een opensource distributed cache systeem die data key-value opslaat. Het is een zeer

eenvoudig platform, maar daar staat een hoge performantie tegenover. Daarnaast is Memcached

cross-platform en is zijn API beschikbaar voor de meeste populaire talen.

VOORDELEN

Stagerapport 28

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Voordelen van Memcached zijn dat het een opensource product is dat dus zelf naar eigen noden aan

te passen is en dus een low cost oplossing biedt bij het opzetten van een distributed cache.

NADELEN

Het grote nadeel aan Memcached is dat er standaard geen ondersteuning is voor replicatie of het

opzetten van een cluster.

REPCACHED

Repcached is een uitbreiding van Memcached waarbij replicatie wordt ondersteund. Hierbij bestaat

de cluster uit 2 nodes volgens een master-slave topologie.

MOXI

Moxi is een proxy voor een Memcached distributed cache om failover te voorzien. Deze vertraagt de

cache aanzienlijk.

COUCHBASE

Couchbase is een NoSQL database die ook als distributed cache kan worden opgezet. Het is een

makkelijk schaalbaar platform die een consistente hoge performantie garandeert. Naast de

uitgebreide featureset zijn er ook uitgebreide monitoringtools beschikbaar.

VOORDELEN

Couchbase is zeer makkelijk op te zetten en eenvoudig configureerbaar. Daarnaast biedt het ook een

uitgebreide featureset aan.

NADELEN

Aan al dit moois hangt een groot kostenplaatje.

NCACHE

NCache is een betalende oplossing voor het opzetten van een distributed cache. Het is extreem snel

en lineair schaalbaar met ondersteuning voor replicatie, failover en monitoring. Daarnaast biedt het

een diepgaande ondersteuning voor .NET applicaties. Volgende features zorgen hier o.a. voor:

ASP.NET Session storage

Entity Framework cache

NHibernate L2 Cache

Stagerapport 29

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 4.1-13 NCache Monitor [7]

VOORDELEN

Het voordelen van NCache zijn de uitgebreide featureset, hoge performantie en schaalbaarheid.

Daarnaast is het opzetten ervan zeer eenvoudig.

NADELEN

Aan al deze voordelen hangt natuurlijk een enorm kostenplaatje wat deze oplossing minder

aantrekkelijk maakt dan opensource oplossingen.

WINDOWS APPFABRIC

Windows AppFabric is een set technologieën die ontwikkeld zijn door Microsoft ter ondersteuning

van het bouwen en onderhouden van schaalbare webapplicaties. Één van deze technologieën is de

AppFabric Caching.

AppFabric Caching biedt de mogelijkheid om een Distributed Cache op te zetten. Hierin worden

objecten geserialiseerd opgeslagen. Het configureren en beheren van de AppFabric Caching kan via

Windows PowerShell.

Er zijn caching providers voorzien ter ondersteuning van ASP.NET applicaties voor sessions op te

slaan en ook voor output caching. Het aanspreken van de cache gaat via de Cache API.

VOORDELEN

Stagerapport 30

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Windows AppFabric heeft als grote voordeel dat het ontwikkeld is door een grote speler als

Microsoft die de middelen heeft om dit uit de te bouwen tot een stabiel platform. Daarnaast biedt

het een nauwe interactie met bestaande technologieën van Microsoft zoals ASP.NET, Windows

Azure, Windows Server, …

NADELEN

De performantie van deze oplossing is beneden alle peil i.v.m. andere oplossingen.

VERGELIJKING

Snelheid Redundantie Kost

Windows AppFabric

Memcached

NCache

Couchbase

Redis

Tabel 4.1-4 Distributed cache voorbeelden

Stagerapport 31

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

4.1.5 CONCLUSIE

De kosten die de verschillende platformen met zich meebrengen liggen verspreid. Daar waar

opensource producten extra hardware vereisen doordat ze meestal op linux draaien, wegen de

licentiekosten van andere producten zwaar door.

Uit deze voorstudie lijkt Redis de meest geschikte kandidaat. Het is een opensource oplossing met

een uitgebreide featureset. De verschillende oplossingen zullen verderop uitgebreid getest worden.

Stagerapport 32

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5 PRAKTISCHE UITWERKING

5.1 TAGSOVERZICHT

Een eerste opdracht is het maken van een tagsoverzicht voor de nieuwe site. Binnen DSO kunnen

tags aan artikels gekoppeld worden. Zo kunnen articlelistwidgets op basis van een tag worden

aangemaakt of zijn er tagoverzichtpagina’s.

Ter bevordering van SEO is het de bedoeling om een overzicht te maken waarin alle tags met links

naar hun tagoverzichtspagina worden weergegeven. Zo worden alle links bij het bezoek van een web

crawler geregistreerd.

5.1.1 OPDRACHT

URL /tags

Navigatie door een lijst van nummers/letters die bij het klikken naar een gefilterd overzicht

gaan

Paginering wanneer er meer dan 50 tags zijn

In het geval van paginering, moet er in vanaf pagina 2 volgende header worden toegevoegd: <meta name="ROBOTS" content="NOINDEX,FOLLOW">

5.1.2 UITVOERING

Allereest werden de routes geregistreerd. Een route bepaalt welke url’s waar naar verwijzen.

Daarnaast werd ervoor gezorgd dat er in het backend systeem geen pagina’s konden worden

aangemaakt die verwezen naar deze routes.

Het ophalen van de tags gebeurt via een repository. Deze zal onderliggend kijken of de data

beschikbaar is in de cache en deze hieruit ophalen. Indien de data niet in de cache zit, zal de

repository de database aanspreken via een stored procedure. Het resultaat dat via een mapper

vertaald wordt op objecten, wordt vervolgens opgeslagen in de cache.

Figuur 5.1-1 Data flow

Application RepositoryHttpRuntime

CacheStored

Procedue

Stagerapport 33

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

DATA

Bij het onderzoeken van de repository structuur werd al snel op een code smell gebotst. De

onderliggende structuur was zo opgezet dat aan iedere repository slechts één sproc gekoppeld kon

worden aangezien deze op klasseniveau gedefinieerd werd. Ook werd het type dat deze sproc terug

gaf verbonden met de repository klasse waardoor een repository slechts één type objecten terug kan

geven hoewel er voor eenzelfde entiteit meerdere datamodellen kunnen bestaan.

Deze code smell zorgde ervoor dat functionaliteit om data op te halen in de overervende klassen

herhaald werd, maar zonder dat deze gecached werden.

Vooraleer verder werd gegaan met het tagsoverzicht werd besloten om eerst de onderliggende

structuur voor de CachedEntityRepository klassen from scratch te herschrijven. Hierbij werden de

sprocs niet langer op klasseniveau bepaald, maar wel op methode niveau. Deze basisstructuur werd

herleid tot één generieke get methode die op basis van het returntype, een meegegeven

mappermethode en het uit te voeren statement de benodigde data gaat ophalen.

Dit maakt de code in de overervende klassen veel eenvoudiger en duidelijker. Daarnaast zit de

functionaliteit die verantwoordelijk is voor het ophalen van de data zo volledig afgescheiden.

De bestaande tagrepository werd herschreven zodat deze overerfde van de vernieuwde

CachedEntityRepository klasse.

Voor het ophalen van de tags werd de benodigde sproc geschreven die op basis van het eerste

karakter de tags gaat gaan ophalen. Daarnaast zijn er ook parameters voorzien om de pagina en de

paginagrootte mee te geven.

APPLICATIE

Het aanspreken van de tagrepository gebeurt op basis van het eerste karakter van de tags. Deze

wordt samen met de huidige pagina uit de url gehaald.

De pagina zelf bestaat uit drie delen:

Navigatie

Tags

Paginering

NAVIGATIE

Voor de navigatie worden alle geldige karakters weergegeven. Deze linken door naar het gefilterde

tagsoverzicht.

TAGS

De tags worden opgehaald uit de tagrepository zoals eerder vermeld. Op de pagina worden deze

weergegeven. Deze linken door naar de overzichtspagina van de tag.

PAGINERING

Stagerapport 34

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

De bestaande paginering bevatte enkel een boolean die bijhield of er nog een volgende pagina

bestond. Aangezien er paginering met paginanummers gevraagd werd diende deze uitgebreid te

worden.

Hiervoor werd het bestaande pagineringmodel uitgebreid met volgende functionaliteit:

Totaal aantal items

Items per pagina

Aantal weer te geven pagina’s

Implementeert IEnumerable<int>

Het koppelen van een route aan het paginamodel

Volledige compatibiliteit met de vorige implementatie

5.1.3 RESULTAAT

Het resultaat kan gevonden worden op http://www.standaard.be/tags

Figuur 5.1-2 Screenshot tagsoverzicht

Stagerapport 35

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.1-3 Screenshot tagsoverzicht paginering

Figuur 5.1-4 Sourcecode www.standaard.be/tags?page=2

Stagerapport 36

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.2 PROFIEL

Één van de nice-to-have features binnen dit project was het integreren van de auteursprofielen met

de artikels. Het is de bedoeling dat de gekoppelde profielen onder het artikeldetail worden opgelijst

en deze doorlinken naar een profielpagina waar de auteursinformatie en diens artikels worden

weergegeven.

5.2.1 OPDRACHT

PROFIELLIJST

Onder de detailpagina van een artikel moet er een lijst getoond worden van alle profielen die aan dit

artikel gelinkt zijn.

AUTEURSINFORMATIE

Naam

Foto

Beschrijving

Link "alle artikels" (naar profielpagina)

ARTIKELINFORMATIE

Onder de titel van een artikel staat informatie van het artikel.

Bv. 01/02/2013 om 12:42 door llo | Bron: VRT, asetniop.com

Indien er één of meerdere profielen gelinkt zijn aan het artikel, moet de naam van de auteur

vervangen worden door de naam van de profielen die doorlinken naar de bijhorende profielpagina.

REL = AUTHOR

De links naar de profielpagina krijgen het “rel” attribuut met value “author”

Bv. <a href="/auteur/andy-stevens" rel="author">Andy Stevens</a>

PROFIELPAGINA

URL /auteur/[slugName]

AUTEURSINFORMATIE

Naam

Omschrijving

Foto

Social

Stagerapport 37

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

o Facebook

o LinkedIn

o Twitter

o Flickr

o Website

o Google+ : voeg rel="me" toe aan deze link

ARTIKELLIJST

Onder de auteursinformatie komt een lijst van diens meest recente artikels. Als een artikel een plus

artikel is, krijgt deze een extra klasse “article--plus”. Er moet ook paginering worden voorzien met

pagina’s van 25 artikels.

5.2.2 UITVOERING

PROFIELLIJST

De profiellijst is een lijst van alle profielen die gekoppeld zijn aan een artikel. Deze wordt onder het

artikel weergegeven en linken door naar de profielpagina van de auteur.

Om deze functionaliteit te implementeren werd de articledetailwidget uitgebreid. Hieraan werd een

methode toegevoegd die de profielen die aan het artikel gekoppeld zijn, gaat ophalen. Dit gebeurt

a.d.h.v. een id die uit de context wordt gehaald. Deze context wordt geregistreerd op een hoger

niveau waar de gegevens uit de url worden gehaald.

Om deze profielen op te halen werd een profilerepository gemaakt op dezelfde wijze als dit bij de

tagrepository is gebeurd.

Het ophalen van de afbeelding gebeurt via de cdnservice.

Daarnaast diende de methode in de articledetailwidget die verantwoordelijk is voor het renderen

van de artikelhoofding te worden aangepast. Wanneer er profielen gekoppeld zijn aan het artikel zal

deze de namen van deze weergeven die doorlinken naar de detailpagina van het profiel.

Als laatste werd ervoor gezorgd dat dit een aparte widget werd door routes van deze widgets door te

verwijzen naar de aangemaakte methode.

PROFIELPAGINA

De profielpagina bestaat uit twee delen. Enerzijds is er een profilewidget met informatie over het

profiel en anderzijds een articlelistwidget die op basis van het profiel artikels weergeeft.

In de controller van de profielpagina wordt de naam van het profiel uit de url gehaald. Op basis

hiervan wordt het profiel opgehaald en opgeslagen in de context zodat de widgets aan deze data

kunnen.

Stagerapport 38

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Page

Zone

Block

Widget

Hiervoor werd de profilerepository uitgebreid zodat deze een profiel op basis van de profielnaam kan

ophalen.

Vervolgens werd de profilewidget gemaakt waarin de data uit de profilecontext wordt opgehaald en

weergeeft in een view.

Daarnaast werd de articlelistwidget uitgebreid zodat deze op basis van een profiel een lijst van

artikels kan generen. Hiervoor werden verschillende sprocs geschreven om al dan niet paginering te

voorzien en om artikels al dan niet te sorteren op het aantal keer dat ze gelezen zijn.

Vervolgens werd de profielpagina zelf aangemaakt. De views worden in de database opgeslagen

zodat deze dynamisch aangepast kunnen worden.

Figuur 5.2-1 Pagina structuur

Stagerapport 39

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

RESULTAAT

PROFIELLIJST

Een voorbeeld kan gevonden worden op http://www.standaard.be/cnt/DMF20111220_055

Figuur 5.2-2 Profilelist http://www.standaard.be/cnt/DMF20111220_055

Figuur 5.2-3 Articletitle met profiel http://www.standaard.be/cnt/DMF20111220_055

Stagerapport 40

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

PROFIELPAGINA

Een voorbeeld kan gevonden worden op http://localhost:9000/auteur/andy-stevens

Figuur 5.2-4 Profielpagina

Stagerapport 41

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.3 ARCHIEF

Ook de archiefpagina diende in een nieuw jasje te worden gestoken. Deze pagina is vooral voor SEO

zodat alle links naar detailpagina’s van artikels geregistreerd worden door zoekmachines.

5.3.1 OPDRACHT

HOOFDPAGINA INDEXEERBAAR ARCHIEF

URL: /archief/cnt

Concept: overzicht omgekeerd sequentieel (recentste maand bovenaan: februari, januari)

Pagina titel: "Archief - De Standaard"

Zichtbare titel <h1>: "Overzicht archief De Standaard Online"

Oude site:

o 201301

o 201302

o …

Nieuwe site:

o Februari 2013

o Januari 2013

o …

Tussentitel per jaar (2013, 2012, …)

Meta tags

o <meta name="robots" content="noindex, follow">

MAANDOVERZICHT

URL: /archief/cnt/2012/01

Concept: dagen van die maand sequentieel getoond (di 1 januari 2013, wo 2 januari 2013, …)

Page title: "Archief januari 2013 - De Standaard"

Zichtbare titel <h1>: "Overzicht januari 2013"

Oude site:

o 20130101

o 20130102

o ...

Nieuwe site:

o di 1 januari

o wo 2 januari

o …

Meta tags

o <meta name="robots" content="noindex, follow">

DAGOVERZICHT

Stagerapport 42

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

URL: /archief/cnt/2012/01/04

Concept: dagoverzicht

Page title: "Archief 1 januari 2013 - De Standaard"

Zichtbare titel <h1>: "Overzicht 1 januari 2013"

Oude site:

o BLDAL_20130101_001

o BLKDE_20121209_001

o ...

Nieuwe site:

o Groen Herent kiest voor vernieuwing

o HOW TO. After Party Detox

o …

Meta tags

o <meta name="robots" content="noindex, follow">

5.3.2 UITVOERING

HOOFDPAGINA INDEXEERBAAR ARCHIEF

Voor het maken van de hoofdpagina wordt er een model gecreëerd dat tussen een interval van jaren

voor iedere maand een datum genereert en deze opslaat in een dictionary. Deze datums worden in

de view overlopen en weergegeven.

MAANDOVERZICHT

Voor het maken van het maandoverzicht wordt er een model aangemaakt dat alle datums van die

bepaalde maand genereert. Deze datums worden in de view overlopen en weergegeven.

DAGOVERZICHT

Voor het dagoverzicht moeten alle artikels van een bepaalde datums alfabetisch worden

weergegeven en doorlinken naar de detailpagina van het artikel.

Aangezien hiervoor enkel de titel van het artikel en diens id vereist zijn, werd er een repository

aangemaakt die dit soort modellen teruggeeft. Daarnaast werd ook de sproc geschreven die deze

data ophaalt en vanuit de repository aangesproken wordt.

In de view worden al deze artikels overlopen en weergegeven.

Stagerapport 43

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.3.3 RESULTAAT

HOOFDPAGINA INDEXEERBAAR ARCHIEF

Een voorbeeld kan gevonden worden op http://www.standaard.be/archief/cnt

Figuur 5.3-1 Screenshot hoofdpagina indexeerbaar archief

Stagerapport 44

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

MAANDOVERZICHT

Een voorbeeld kan gevonden worden op http://www.standaard.be/archief/cnt/2013/4

Figuur 5.3-2 Screenshot maandoverzicht archief

Stagerapport 45

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

DAGOVERZICHT

Een voorbeeld kan gevonden worden op http://www.standaard.be/archief/cnt/2013/5/8

Figuur 5.3-3 Screenshot dagoverzicht archief

Stagerapport 46

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.4 BIZ

Ook heel het beursgedeelte van de site van De Standaard wordt vernieuwd. In de oude site wordt

alle data weergegeven in iFrames van de Vwd groep. Deze biedt ook een webservice aan om

beursdata op te vragen.

Het begrijpen van volgende termen is belangrijk om volgend hoofdstuk te begrijpen:

Beurs / StockMarket

Index / StockIndex

Aandeel / Share

Een beurs is een verzameling van aandelen. Zo is er bv. Euronext-Brussel die alle aandelen die in

Brussel verhandeld worden omvat.

Een index is een verzameling van aandelen die zo is samengesteld dat ze een bepaald deel van de

markt vertegenwoordigt bv. de Bel 20 is de verzameling van de 20 belangrijkste aandelen op de

Euronext beurs.

Een aandeel is vervolgens wat er op de beurzen verhandeld wordt. Het is mogelijk dat eenzelfde

aandeel op verschillende beurzen verhandeld wordt. Het is ook echter mogelijk dat een aandeel van

eenzelfde beurs in verschillende indexen voorkomt. Daarnaast is het ook nog mogelijk dat er van

hetzelfde bedrijf verschillende aandelen bestaan.

5.4.1 OPDRACHT

Het is de bedoeling in de nieuwe site om een eigen interne service te bouwen die enerzijds interne

data en anderzijds data die via Vwd binnengehaald wordt, aanbiedt. Deze service zal gebruikt

worden door de verschillende beurswidgets die de iFrames zullen vervangen. Daarnaast zullen ook

de verschillende beurswidgets gemaakt moeten worden en de bijhorende beurspagina’s.

Het grote voordeel hiervan t.o.v. de oude implementatie is dat de presentatie van de beursdata

volledig zelf beheerd wordt.

5.4.2 UITVOERING

De beurspagina’s dienen de beursinfo van volgende beurzen weer te geven:

BEL20

AEX

CAC40

DAX30

DOW

NASDAQ

Contractueel gezien zal de data voor de eerste drie Delayed worden aangeboden (vertraging van 15

minuten) en de andere EndOfDay (resultaten van de vorige beursdag).

Stagerapport 47

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

SERVICE

Zoals eerder vermeld zal er een interne service moeten worden ontwikkeld die data over de

verschillende beursentiteiten zal aanbieden. Intern zal o.a. de data opgeslagen die nodig is om

requests naar Vwd te maken, opgeslagen worden. Daarnaast zal er ook caching moeten worden

voorzien volgens de overeenkomst met Vwd.

INTERN

In de database zal volgende data van de verschillende beursentiteiten worden opgeslagen:

Naam

Naam die in de url gebruikt zal worden

Tag

Data om externe service aan te spreken

EXTERN

De service die Vwd aanbiedt is een ASP service die op basis van XML requests XML data terugstuurt.

Het specifiëren van de benodigde data gebeurt enerzijds via een id of andere code van Vwd en

anderzijds het DeliveryType. Deze laatste waarde werd zoals eerder vermeld contractueel bepaald en

zal bepalen hoe de data zal worden opgehaald (Realtime, Delayed of EndOfDay).

ANALYSE

In een eerste fase diende de structuur van de service opgesteld te worden en moest ook uitgezocht

worden waar de verschillende componenten binnen het domeinmodel thuishoorden.

Figuur 5.4-1 Structuur service

Stagerapport 48

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

De data wordt uit twee verschillende bronnen gehaald. Voor de data uit de database zal er een

repository gemaakt worden.

Daarnaast moet er een structuur voorzien worden om de externe data op te vragen en te verwerken.

De client is verantwoordelijk voor het opstellen, versturen en ontvangen van requests. Aangezien de

Vwd service XML genereert moet deze data ook nog verwerkt worden. Hiervoor zal de proxy zorgen.

Deze zal de data mappen op objecten.

Om deze beide datasources aan te spreken en de data aan te bieden aan de applicatie is er gekozen

voor een adapter.

Daarnaast diende er ook caching voorzien te worden. Er is gekozen om dit op het niveau van de

proxy en de repository te doen. De reden hiervoor is dat de aard van de data die beide providers

aanbieden verschillend is. Daar waar de data uit de repository eerder statisch en weinig onderhevig

aan veranderingen is, is de data verkregen uit de proxy dynamisch. Hierdoor zullen er verschillende

caching-tijden geconfigureerd worden.

IMPLEMENTATIE

Aangezien de verschillende beursentiteiten onderlinge referenties bevatten, diende er ook bepaald

te worden hoe deze data ingeladen ging worden.

Figuur 5.4-2 Stockentity loading model

Stagerapport 49

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Er is gekozen om de verwijzing naar de StockMarket in te laden van zodra een StockIndex of Share

opgehaald wordt uit de database. Dit werd gedaan omdat de data van de StockMarket van een

StockIndex of Share altijd gebruikt wordt. Enerzijds om de url op te bouwen en anderzijds om de

request naar Vwd op te stellen. De verwijzing naar de StockIndex van een Share dient manueel

ingeladen te worden omdat deze data in de applicatie niet altijd vereist is.

CLIENT

De client bouwt op basis van meegegeven parameters de request op. Daarnaast is er een wrapper

geschreven rond de System.Net.WebRequest klasse met het oog op de testbaarheid van de code.

Via deze wrapper worden de eigenlijke requests gedaan. De client leest de responsestream in en zet

deze om naar xml. Ook is er validatie en logging voorzien.

CLIENTPROXY

De proxy is het aanspreekpunt voor de adapter om data uit de externe service te verkrijgen. Deze

gaat onderliggend de client aanspreken en de teruggekregen xml mappen op objecten. Daarnaast

voorziet deze ook caching.

REPOSITORY

De repository is opgebouwd zoals andere repositories en zal de data uit de database mappen op

objecten. Ook hier is er caching voorzien.

ADAPTER

De adapter is het aanspreekpunt van de applicatie. Deze zal de repository aanspreken om data uit de

database te halen en hieruit de benodigde data halen om de proxy aan te spreken. De verkregen

data uit de proxy en de repository wordt vervolgens gebruikt om de objecten aan te maken die in de

applicatie gebruikt zullen worden.

ANALYSE

Één van de Agile methodologieën is het reviewen van code. Deze stelde de structuur van de service

in vraag en samen met enkele teamleden werd deze herbekeken. De naamgeving van de

verschillende componenten werd in vraag gesteld en ook het opsplitsen van functionaliteit kon

verbeterd worden. Samen werd volgende nieuwe structuur bekomen:

Stagerapport 50

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.4-3 Structuur service v2

Er zijn wijzigingen doorgevoerd op het gebied van naamgeving en op het gebied van de opsplitsing

van functionaliteit.

De adapter is vervangen door de StockMarketAppService aangezien het een service is en niet louter

een adapter. [8] Functioneel zal deze hetzelfde doen.

De grootste wijzigingen werden doorgevoerd op het niveau van de proxy. Deze was eigenlijk meer

een repository waarin de mapping verweven zat. Er is gekozen om deze mapping af te splitsen en

adapters aan te maken die de VwdClient en mapper aanspreken. Zo wordt er een Anti-Corruption

laag gecreëerd.

Stagerapport 51

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

An Anti-Corruption Layer (ACL) is another DDD pattern that encourages you to create

gatekeepers that work to prevent non-domain concepts from leaking into your model. They

keep the model clean. [9]

IMPLEMENTATIE

STOCKMARKETAPPSERVICE

Deze zal het aanspreekpunt zijn in de applicatie om data over beursentiteiten te verkrijgen.

Functioneel blijft deze onveranderd.

STOCKMARKETREPOSITORY

De stockmarketrepository zal de adapters aanspreken om data uit de externe service te verkrijgen.

Daarnaast zal deze ook voor de caching zorgen.

SHARECOLLECTIONREPOSITORY EN SHAREREPOSITORY

Deze zullen net als de repository in de vorige structuur data uit de database ophalen en cachen.

SHAREADAPTER EN STOCKINDEXADAPTER

De adapters zullen de VwdClient en de mapper aanspreken om de verkregen xml om te zetten naar

objecten.

VWDCLIENT

De verantwoordelijkheid van de VwdClient blijft het aanmaken en versturen van requests naar Vwd

en het ontvangen van de response.

VWDSHAREMAPPER EN VWDSTOCKINDEXMAPPER

De mappers zullen de xml vertalen naar objecten.

Stagerapport 52

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

WIDGETS

De beurspagina’s bestaan uit verschillende widgets. Deze maken onderliggend gebruik van de service

om hun data op te halen. De widgets kunnen hun parameters uit de context halen of deze kunnen

ook gespecifieerd worden.

Voor het aanmaken van de widgets zelf worden dezelfde stappen doorlopen als bij het maken van

andere widgets.

BEURSBALK

De beursbalk zal zorgen voor de navigatie tussen de beurspagina’s. Deze geeft voor indexen

waarvoor dit mogelijk is de huidige koersverandering weer alsook een grafiek van de koers.

Figuur 5.4-4 Beursbalk

GRAFIEK

De afbeeldingen van de grafieken worden aangeboden door Vwd. De grafiek moet afbeeldingen over

volgende perioden weergeven:

Intraday (Delayed) / 1 week (EndOfDay)

1 maand

3 maanden

1 jaar

5 jaar

Daarnaast kunnen bij aandelen de koers van het aandeel vergeleken worden met de koers van de

index.

Stagerapport 53

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.4-5 Grafiek

INFORMATIE VAN EEN INDEX / AANDEEL

Deze widgets zullen de service aanspreken om een index of aandeel op te halen en deze data

vervolgens weer te geven.

Figuur 5.4-6 Informatie van een index

Stagerapport 54

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.4-7 Informatie van een aandeel

AANDELENOVERZICHT

Deze widget toont een overzichtstabel van alle aandelen van een bepaalde index. Er is ook een tab

voorzien met alle aandelen van de beurs waaraan deze index gelinkt is indien dit contractueel

mogelijk is.

Alle aandelen linken door naar de detailpagina van het aandeel en de tabel kan gesorteerd worden

door te klikken op een kolom header.

Stagerapport 55

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.4-8 Overzichtstabel aandelen

Stagerapport 56

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

STIJGERS EN DALERS

Deze widget toont de top drie stijgers en dalers van een bepaalde index. Ieder aandeel linkt door

naar zijn detailpagina.

Figuur 5.4-9 Stijgers en dalers

OVERIGE

Naast voorgaande widgets zijn er ook een aantal widgets waaraan ik niet meegewerkt heb. Deze zijn

op dezelfde manier ontwikkeld. De widget roept de onderliggende service aan om data op te halen

en geeft deze weer.

SCREENSHOTS

Figuur 5.4-10 Heatmap

Stagerapport 57

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.4-11 Kerncijfers van een aandeel

Figuur 5.4-12 Winstcijfers van een aandeel

PROBLEMEN

Bij het uitvoeren van deze opdracht kwamen verschillende problemen naar voor. Hieronder worden

enkele van deze besproken.

ANALYSE

De tijdsdruk waaronder het project van de vernieuwing van de site verkeerde, zorgde ervoor dat de

analyse van heel het beursverhaal niet grondig uitgewerkt kon worden. Dit zorgde voor problemen

bij het integreren van de Vwd service aangezien het onduidelijk was over welke data beschikt kon

worden.

Daarnaast waren bepaalde scenario’s zoals wat de business wou wanneer bv. de externe service

onbereikbaar is, niet uitgewerkt wat voor vertraging zorgde.

Wel zorgde dit voor een nauwere communicatie en overleg tussen de teamleden aangezien deze

vaak zelf oplossingen voor de onvolledige analyse moesten zoeken.

VWD

Losstaand van het feit dat het design van de webservice van Vwd niet volgens de hedendaagse

normen ontworpen is (REST?), was deze service vaak onbereikbaar tijdens de ontwikkelingsfase.

Daarnaast zorgde een slechte documentatie voor onnodig tijdverlies.

Stagerapport 58

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Ook de communicatie met Vwd verliep niet altijd even vlot en vaak liet Vwd meerdere dagen

wachten op antwoord.

Ten slotte zijn er tijdens het ontwikkelen meerdere problemen naarboven gekomen i.v.m. rechten en

toegang tot data bij Vwd. Toegang tot data die toegankelijk moest zijn, werd geblokkeerd en data die

niet toegankelijk mocht zijn, was wel toegankelijk.

Na communicatie werden deze problemen uiteindelijk net voor de release verholpen.

RELEASE

Bij de release doken er een aantal problemen op. Zo werden er veel fouten gegenereerd bij het

cachen van beursentiteiten. Dit was het gevolg van de herschreven cachedentityrepository die niet

thread safe was. Dit probleem werd verholpen door de parameters op methodeniveau op te slaan

i.p.v. op klasseniveau.

Daarnaast duurden de requests naar Vwd uitzonderlijk lang in productie, soms zelfs met timeout tot

gevolg. Bij Vwd bleken de requests zelf snel te gaan, dus lag het probleem intern.

De proxyinstellingen stonden op automatic detection wat ervoor zorgde dat alle webrequests langs

de proxy werden verstuurd met de bijhorende vertraging tot gevolg. Het uitschakelen van de

automatic detection bleek de oplossing te zijn.

PERFORMANTIE

Bij het uitvoeren van performantietesten bleken de beurspagina’s traag te zijn. Dit probleem kwam

voor wanneer pagina’s werden opgevraagd waarvan de data die widgets nodig hadden niet in de

cache zat.

Bij verdere analyse van de performantie van de aparte widgets kwamen enkel specifieke problemen

naarboven.

BEURSBALK

Bij de beursbalk wordt er een request gedaan naar Vwd die de info van alle indexen gaat opvragen

om de koersverandering te kunnen weergeven. Deze request duurt bij Vwd lang om te verwerken.

Op korte termijn is het een oplossing om de koerswijziging in de beursbalk niet meer weer te geven.

Op lange termijn is het misschien een oplossing dit percentage asynchroon via een js call op te halen.

OVERZICHTSTABEL AANDELEN

Het ophalen van alle aandelen van een index en bijhorende beurs neemt aanzienlijk veel tijd in

beslag vooral op de Duitse beurs aangezien deze een paar duizend aandelen bevat.

Op korte termijn zou het een oplossing zijn om het aandelenoverzicht van de Duitse beurs te

beperken tot de aandelen van de index.

Op lange termijn is het een mogelijke oplossing om de aandelen van een beurs in het overzicht via js

te gaan ophalen wanneer er op geklikt wordt.

Stagerapport 59

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.4.3 RESULTAAT

De beurspagina’s werden op dezelfde manier aangemaakt als bv. de profielpagina.

Voorbeelden hiervan zijn te vinden op onderstaande url’s:

http://www.standaard.be/biz/beleggen

http://www.standaard.be/biz/beleggen/euronext-brussel/colruyt

Figuur 5.4-13 Screenshot Beurspagina Bel20

Stagerapport 60

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.4-14 Screenshot Beurspagina Colruyt

Stagerapport 61

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

TOEKOMST

In het huidige widgetsysteem worden alle widgets synchroon ingeladen. Aangezien deze

onafhankelijk zijn van elkaar, zou men in de toekomst perfect kunnen overschakelen naar een

systeem waar deze asynchroon worden ingeladen. Hiermee kan een enorme performantiewinst

behaald worden.

Specifiek voor deze beurswidgets zouden deze ook via javascript kunnen worden ingeladen. Het

voordeel hiervan is dat de gebruiker de pagina sneller te zien zal krijgen en de widgets vervolgens

eenvoudig (asynchroon) ingeladen kunnen worden. Dit systeem kan men wel niet toepassen voor

andere widgets omwille van SEO.

Een andere mogelijke oplossing is het opzetten van een distributed cache die door een aparte service

preventief wordt gepopuleerd en waarvan de beursdata automatisch ververst wordt.

Stagerapport 62

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.5 DISTRIBUTED CACHE

Uit de theoretische voorstudie bleek vooral Redis een geschikte kandidaat om een distributed cache

op te zetten gezien de noden binnen Corelio. De verschillende platformen zullen echter getest

worden om te kijken welke opstelling de meest performante en makkelijkst te onderhouden is.

De verschillende oplossingen met eventueel verschillende clients zullen tegen elkaar worden

afgewogen door het uitvoeren van schrijf en leesacties naar en van de cache. Enerzijds zal de data

bestaan uit gewone strings en anderzijds uit artikels. Dit is een model waarvoor de cache binnen

Corelio veel gebruikt zal worden. Zo wordt ook meteen de snelheid waarmee objecten vertaald

worden getest.

Daarnaast zal er ook telkens gevalideerd worden of de opgeslagen data niet corrupt is.

5.5.1 OPSTELLING

Voor het opzetten van de pocs en het testen van de verschillende platformen wordt er gebruik

gemaakt van een cluster virtuele machines.

Besturingssysteem Microsoft Windows Server 2008 R2 (64-bit) CPU 2 vCPU RAM 4096 MB Gebruik Webserver +Server/ Client cache Aantal 4 Besturingssysteem Redhat Enterprise Linux 6.4 CPU 2 vCPU RAM 8192 MB Gebruik Server cache Aantal 2

Daarnaast wordt er ook gebruikt gemaakt van een vast machine met volgende specificaties:

Besturingssysteem Intel Core i7-2820QM CPU 2 vCPU RAM 16384 MB Gebruik Server/Client cache Aantal 1

Stagerapport 63

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.5.2 INSTALLATIE

De installatie van de webservers was reeds voltooid. Voor de cacheservers werd gekozen voor een

Linux distributie aangezien zowel Redis als Memcached hiervoor ontwikkeld zijn. Voor Redis bestaat

er ook een Windows port, maar deze is onstabiel en niet geschikt voor productie. Deze port zal wel

gebruikt worden om Redis lokaal op de webservers of op de vaste machine te testen.

Couchbase en NCache zullen op de vaste machine geïnstalleerd worden en Windows AppFabric op de

webservers aangezien hiervoor Windows Server vereist is.

REDIS

De installatie van Redis gebeurde door het downloaden en builden van de package. Hiervoor werden

een aantal dependencies geïnstalleerd. De installatie gebeurde a.d.h.v. een zelfgeschreven

installatiescript dat naast Redis Server ook Redis Sentinel installeert (bijlage 1).

Versie: redis-2.6.13.

MEMCACHED

Memcached werd eenvoudig geïnstalleerd door het uitvoeren van volgend commando

yum install Memcached

Versie: Memcached 1.4.4.

COUCHBASE, NCACHE EN WINDOWS APPFABRIC

Voor dezen beperkte de installatie zich tot het volgen van de meegeleverde installer.

Versie: Couchbase Enterprise 2.0.1

NCache Enterprise 4.1 SP2

Windows AppFabric 1.1

Stagerapport 64

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.5.3 CLIENTS

Voor ieder platform zijn er verschillende clients beschikbaar. Aangezien de applicaties binnen Corelio

.NET applicaties zijn, zullen enkel .NET clients gebruikt worden in de testen.

REDIS

Voor Redis bestaan er verschillende C# clients. Omwille van hun lage performantie, beperkte

ondersteuning of documentatie zullen Booksleeve, Sider en redis-sharp niet verder besproken

worden.

SERVICESTACK

ServiceStack is één van de clients voor een Redis server. Deze biedt een gemeenschappelijke

interface aan waarlangs ook Memcached servers kunnen worden aangesproken. Daarnaast is er ook

functionaliteit voorzien om objecten te serialiseren.

Het nadeel aan deze oplossing is deze geen ondersteuning biedt voor Redis Sentinel.

CSREDIS

CsRedis is een library die ondersteuning biedt voor Redis Sentinel. Hierdoor is failover van de nodes

in de distributed cache ook clientside ondersteund. Daarnaast is het ook mogelijk om de cache

asynchroon te benaderen via deze library.

Er is echter geen ondersteuning voor het opslaan of ophalen van .NET objecten. Serialisatie zal dus

zelf geïmplementeerd moeten worden.

SERVICESTACK VS NEWTONSOFT SERIALIZER

Om de performantie van beide serializers te vergelijken werd er een benchmark uitgevoerd waarbij

via CsRedis op de vaste machine de lokaal draaiende Redis server werd benaderd.

Stagerapport 65

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-1 Servicestack vs NewtonSoft serializer 1000 string writes

Figuur 5.5-2 Servicestack vs NewtonSoft serializer 1000 string reads

We merken dat beiden serializers bij het opslaan of ophalen van strings evenwaardig zijn. Dit is ook

normaal aangezien strings niet meer geserialiseerd moeten worden.

0

10

20

30

40

50

60

70

80

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 strings)

Redis Servicestack Serializer

Redis NewtonSoft Serializer

0

10

20

30

40

50

60

70

80

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 strings)

Redis Servicestack Serializer

Redis NewtonSoft Serializer

Stagerapport 66

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-3 Servicestack vs NewtonSoft serializer 1000 article writes

Figuur 5.5-4 Servicestack vs NewtonSoft serializer 1000 article reads

Bij het opslaan en ophalen van artikels merken we echter dat de ServiceStack serializer performanter

is dat de NewtonSoft serializer.

0

50

100

150

200

250

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 articles)

Redis Servicestack Serializer

Redis NewtonSoft Serializer

0

20

40

60

80

100

120

140

160

180

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 articles)

Redis Servicestack Serializer

Redis NewtonSoft Serializer

Stagerapport 67

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-5 Servicestack vs NewtonSoft serializer 10000 string writes

Figuur 5.5-6 Servicestack vs NewtonSoft serializer 10000 string reads

Zoals eerder aangehaald is er bij het opslaan en ophalen van strings geen verschil tussen de

serializers.

0

100

200

300

400

500

600

700

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 strings)

Redis Servicestack Serializer

Redis NewtonSoft Serializer

0

100

200

300

400

500

600

700

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 strings)

Redis Servicestack Serializer

Redis NewtonSoft Serializer

Stagerapport 68

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-7 Servicestack vs NewtonSoft serializer 10000 article writes

Figuur 5.5-8 Servicestack vs NewtonSoft serializer 10000 article reads

Het verschil in performantie wordt nog duidelijker wanneer we het aantal operaties vergroten. Hier

zien we dat de ServiceStack serializer bij het wegschrijven van objecten naar de cache ongeveer 25%

sneller is dan de NewtonSoft serializer. Bij het lezen loopt de snelheidswinst zelfs op tot ongeveer

50%.

Voor verdere testen met CsRedis zal dus gebruikt gemaakt worden van de ServiceStack serializer.

0

200

400

600

800

1000

1200

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 articles)

Redis Servicestack Serializer

Redis NewtonSoft Serializer

0

200

400

600

800

1000

1200

1400

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 articles)

Redis Servicestack Serializer

Redis NewtonSoft Serializer

Stagerapport 69

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

SERVICESTACK VS CSREDIS

Om de performantie van beide clients met elkaar te vergelijken, werden een aantal benchmarks

uitgevoerd waarbij de clients op de vast machine een lokale Redis server benaderden.

Figuur 5.5-9 ServiceStack vs CsRedis 1000 string writes

Figuur 5.5-10 ServiceStack vs CsRedis 1000 string reads

We bemerken bij het opslaan op ophalen van strings geen noemenswaardig verschil tussen beide

clients.

0

10

20

30

40

50

60

70

80

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 strings)

ServiceStack

CsRedis

0

10

20

30

40

50

60

70

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 strings)

ServiceStack

CsRedis

Stagerapport 70

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-11 ServiceStack vs CsRedis 1000 article writes

Figuur 5.5-12 ServiceStack vs CsRedis 1000 article reads

Bij het verwerken van complexe data merken we dat de ServiceStack oplossing iets sneller is, maar

het verschil blijft beperkt.

0

20

40

60

80

100

120

140

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 articles)

ServiceStack

CsRedis

0

20

40

60

80

100

120

140

160

180

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 articles)

ServiceStack

CsRedis

Stagerapport 71

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-13 ServiceStack vs CsRedis 10000 string writes

Figuur 5.5-14 ServiceStack vs CsRedis 10000 string reads

Ook wanneer we het aantal operaties vergroten, bemerken we in het geval van strings geen verschil.

0

100

200

300

400

500

600

700

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 strings)

ServiceStack

CsRedis

0

100

200

300

400

500

600

700

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 strings)

ServiceStack

CsRedis

Stagerapport 72

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-15 ServiceStack vs CsRedis 10000 article writes

Figuur 5.5-16 ServiceStack vs CsRedis 10000 article reads

Wanneer we echter het aantal operaties vergroten in het geval van complexe data bemerken we dat

er een verschil optreedt. De grootte van het verschil blijft echter beperkt.

Gezien het verschil in performantie van beide oplossingen niet zo groot is, maar CsRedis wel

ondersteuning biedt voor Redis Sentinel, zullen we voor deze oplossing kiezen in verdere testen.

0

100

200

300

400

500

600

700

800

900

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 articles)

ServiceStack

CsRedis

0

100

200

300

400

500

600

700

800

900

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 articles)

ServiceStack

CsRedis

Stagerapport 73

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

MEMCACHED

Voor Memcached zijn er twee C# clients beschikbaar. Enerzijds EnyimMemcached en anderzijds

BeItMemcached. Beiden zijn opensource en kunnen dus naar eigen noden worden aangepast.

SERVICESTACK (ENYIMCACHED)

Zoals eerder aangehaald biedt ServiceStack ook de functionaliteit om een Memcached server te

benaderen. Ook functionaliteit voor de serialisatie van objecten is voorzien. Deze implementatie

maakt onderliggend gebruik van EnyimMemcached.

BEITMEMCACHED

BeItMemcached biedt ongeveer dezelfde functionaliteit aan als EnyimMemcached. Er zijn bv. wel

geen generieke get en set methodes, maar deze kunnen eenvoudig zelf geïmplementeerd worden.

Ook serialisatie van complexe objecten zal zelf geïmplementeerd moeten worden.

SERVICESTACK VS BEITMEMCACHED

Om beide clients met elkaar te vergelijken werden er benchmarks uitgevoerd waarbij de clients

vanop de webserver de remote Memcached server benaderden.

Stagerapport 74

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-17 ServiceStack vs BeItMemcached 1000 string writes

Figuur 5.5-18 ServiceStack vs BeItMemcached 1000 string reads

Bij het wegschrijven is het verschil tussen beide beperkt, maar bij het lezen van strings uit de cache is

de BeItMemcached oplossing sneller.

0

100

200

300

400

500

600

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 strings)

ServiceStack

BeItMemcached

0

100

200

300

400

500

600

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 strings)

ServiceStack

BeItMemcached

Stagerapport 75

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-19 ServiceStack vs BeItMemcached 1000 article writes

Figuur 5.5-20 ServiceStack vs BeItMemcached 1000 article reads

Het verwerken van schrijf en leesoperaties op artikels schetst hetzelfde beeld als bij de strings. In het

wegschrijven van data zijn beide clients evenwaardig, maar bij het inlezen van data is

BeItMemcached iets sneller.

0

100

200

300

400

500

600

700

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 articles)

ServiceStack

BeItMemcached

0

100

200

300

400

500

600

700

800

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 articles)

ServiceStack

BeItMemcached

Stagerapport 76

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-21 ServiceStack vs BeItMemcached 10000 string writes

Figuur 5.5-22 ServiceStack vs BeItMemcached 10000 string reads

Wanneer het aantal operaties toeneemt wordt het eerder waargenomen verschil tussen beide

oplossingen duidelijker. BeItMemcached haalt de strings ongeveer 33% sneller op de ServiceStack.

0

500

1000

1500

2000

2500

3000

3500

4000

4500

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 strings)

ServiceStack

BeItMemcached

0

500

1000

1500

2000

2500

3000

3500

4000

4500

5000

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 strings)

ServiceStack

BeItMemcached

Stagerapport 77

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-23 ServiceStack vs BeItMemcached 10000 article writes

Figuur 5.5-24 ServiceStack vs BeItMemcached 10000 article reads

Tot slot blijkt ook bij het uitvoeren van een groot aantal operaties op artikels dat de BeItMemcached

oplossing performanter is dan ServiceStack.

In verdere testen zal dus gebruik worden gemaakt van de BeItMemcached client.

0

500

1000

1500

2000

2500

3000

3500

4000

4500

5000

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 articles)

ServiceStack

BeItMemcached

0

1000

2000

3000

4000

5000

6000

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 articles)

ServiceStack

BeItMemcached

Stagerapport 78

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

COUCHBASE, NCACHE EN WINDOWS APPFABRIC

Voor deze oplossingen is er telkens één client beschikbaar die meegeleverd wordt bij de installatie.

Het nadeel hiervan is dat deze zelf niet naar eigen noden aangepast kunnen worden.

Stagerapport 79

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.5.4 VERGELIJKING

Uit de theoretische voorstudie bleek dat Redis de oplossing was die het best aansloot bij de noden

van Corelio. Deze oplossing zal naar performantie, betrouwbaarheid en stabiliteit vergeleken worden

met andere platformen.

Aangezien we automatische failover willen implementeren later, wordt er in de testen gebruik

gemaakt van CsRedis.

De resultaten geven geen beeld van de absolute snelheid van de platformen aangezien er in de

testen bij het ophalen ook telkens aan validatie wordt gedaan. Daarnaast beschikken de machines

waarop deze testen uitgevoerd zijn niet over de resources van productieservers.

Redis zal vergeleken worden met volgende platformen:

Memcached

Couchbase

NCache

Windows AppFabric

Stagerapport 80

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

REDIS VS. MEMCACHED

Voor de vergelijking van Redis en Memcached werden de cache servers remote aangesproken door

de webserver.

Figuur 5.5-25 Redis vs Memcached 1000 string writes

Figuur 5.5-26 Redis vs Memcached 1000 string reads

Bij het ophalen van strings zijn beide platformen ongeveer even performant en stabiel.

0

50

100

150

200

250

300

350

400

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 strings)

Redis

Memcached

0

50

100

150

200

250

300

350

400

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 strings)

Redis

Memcached

Stagerapport 81

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-27 Redis vs Memcached 1000 article writes

Figuur 5.5-28 Redis vs Memcached 1000 article reads

Bij het uitvoeren van operaties op artikels liggen de prestaties ongeveer in dezelfde lijn. Bij het lezen

merken we een kleine performantiewinst van Memcached.

0

100

200

300

400

500

600

700

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 articles)

Redis

Memcached

0

100

200

300

400

500

600

700

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 articles)

Redis

Memcached

Stagerapport 82

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-29 Redis vs Memcached 10000 string writes

Figuur 5.5-30 Redis vs Memcached 10000 string reads

Ook wanneer we het aantal operaties opdrijven, blijken de prestaties van beide platformen

evenwaardig wanneer het gaat over strings.

0

500

1000

1500

2000

2500

3000

3500

4000

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 strings)

Redis

Memcached

0

500

1000

1500

2000

2500

3000

3500

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 strings)

Redis

Memcached

Stagerapport 83

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-31 Redis vs Memcached 10000 article writes

Figuur 5.5-32 Redis vs Memcached 10000 article reads

Wanneer het gaat over het verwerken van artikels, blijkt Memcached iets performanter dan Redis.

0

500

1000

1500

2000

2500

3000

3500

4000

4500

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 articles)

Redis

Memcached

0

500

1000

1500

2000

2500

3000

3500

4000

4500

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 articles)

Redis

Memcached

Stagerapport 84

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

REDIS VS. COUCHBASE

Om Redis met Couchbase te vergelijken werden beide platformen op de vaste machine geïnstalleerd

en werd deze lokaal benaderd.

Figuur 5.5-33 Redis vs Couchbase 1000 string writes

Figuur 5.5-34 Redis vs Couchbase 1000 string reads

Bij het uitvoeren van operaties op strings merken we dat Couchbase performanter is dan Redis. We

merken gemiddeld een performantieverschil op van ongeveer 50%.

0

20

40

60

80

100

120

140

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 strings)

Redis

Couchbase

0

10

20

30

40

50

60

70

80

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 strings)

Redis

Couchbase

Stagerapport 85

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-35 Redis vs Couchbase 1000 article writes

Figuur 5.5-36 Redis vs Couchbase 1000 article reads

Bij het uitvoeren van operaties op artikels merken we dat de prestaties van beide bij het

wegschrijven naar de cache ongeveer gelijk is. Bij het ophalen van artikels uit de cache merken we

echter dat Redis een pak performanter is dan Couchbase (75%).

0

20

40

60

80

100

120

140

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 articles)

Redis

Couchbase

0

20

40

60

80

100

120

140

160

180

200

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 articles)

Redis

Couchbase

Stagerapport 86

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-37 Redis vs Couchbase 10000 string writes

Figuur 5.5-38 Redis vs Couchbase 10000 string reads

Ook wanneer we het aantal stringoperaties opdrijven, blijkt Couchbase ongeveer 50% performanter.

0

100

200

300

400

500

600

700

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 strings)

Redis

Couchbase

0

100

200

300

400

500

600

700

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 strings)

Redis

Couchbase

Stagerapport 87

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-39 Redis vs Couchbase 10000 article writes

Figuur 5.5-40 Redis vs Couchbase 10000 article reads

Wanneer het aantal operaties op artikels stijgt, merken we bij het wegschrijven dat Couchbase iets

performanter is. Bij het ophalen van artikels is Redis echter wederom een pak performanter. De

behaalde performantiewinst blijft ongeveer 75%.

0

100

200

300

400

500

600

700

800

900

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 articles)

Redis

Couchbase

0

200

400

600

800

1000

1200

1400

1600

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 articles)

Redis

Couchbase

Stagerapport 88

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

REDIS VS. NCACHE

Om Redis met NCache te vergelijken werden beide platformen op de vaste machine geïnstalleerd en

werd deze lokaal benaderd.

Figuur 5.5-41 Redis vs NCache 1000 string writes

Figuur 5.5-42 Redis vs NCache 1000 string reads

Bij het uitvoeren van stringoperaties merken we dat de Redis oplossing zowel bij het wegschrijven als

ophalen van data uit de cache sneller is.

0

20

40

60

80

100

120

140

160

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 strings)

Redis

NCache

0

20

40

60

80

100

120

140

160

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 strings)

Redis

NCache

Stagerapport 89

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-43 Redis vs NCache 1000 article writes

Figuur 5.5-44 Redis vs NCache 1000 article reads

Net als bij het uitvoeren van stringoperaties is Redis ook bij het uitvoeren van operaties op artikels

performanter dan NCache.

0

50

100

150

200

250

300

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 articles)

Redis

NCache

0

50

100

150

200

250

300

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 articles)

Redis

NCache

Stagerapport 90

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-45 Redis vs NCache 10000 string writes

Figuur 5.5-46 Redis vs NCache 10000 string reads

Wanneer het aantal uit te voeren operaties stijgt, wordt het verschil nog duidelijker. Bij het

wegschrijven van data naar de cache is Redis maar liefst dubbel zo snel.

0

200

400

600

800

1000

1200

1400

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 strings)

Redis

NCache

0

200

400

600

800

1000

1200

1400

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 strings)

Redis

NCache

Stagerapport 91

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-47 Redis vs NCache 10000 article writes

Figuur 5.5-48 Redis vs NCache 10000 article reads

Bij het wegschrijven of ophalen van complexe data wordt het verschil tussen beiden al helemaal

duidelijk. Redis haalt een performantiewinst van ongeveer 150% zowel bij het schrijven naar als lezen

van de cache.

0

500

1000

1500

2000

2500

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 articles)

Redis

NCache

0

500

1000

1500

2000

2500

3000

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 articles)

Redis

NCache

Stagerapport 92

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

REDIS VS. WINDOWS APPFABRIC

Aangezien Windows AppFabric enkel beschikbaar is voor Windows Server, werd deze geïnstalleerd

op een webserver waar lokaal ook Redis draaide voor deze testen.

Figuur 5.5-49 Redis vs Windows AppFabric 1000 string writes

Figuur 5.5-50 Redis vs Windows AppFabric 1000 string reads

Windows AppFabric is bij het uitvoeren van stringoperaties ongeveer 3,5 keer zo traag als Redis.

0

100

200

300

400

500

600

700

800

900

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 strings)

Redis

Windows App Fabric

0

100

200

300

400

500

600

700

800

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 strings)

Redis

Windows App Fabric

Stagerapport 93

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-51 Redis vs Windows AppFabric 1000 article writes

Figuur 5.5-52 Redis vs Windows AppFabric 1000 article reads

Ook wanneer het gaat over het opslaan of ophalen van complexe objecten blijkt Windows AppFabric

enorm traag. Bij het wegschrijven van deze objecten doet Windows AppFabric er ongeveer 4 keer zo

lang over.

0

100

200

300

400

500

600

700

800

900

1000

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (1000 articles)

Redis

Windows App Fabric

0

100

200

300

400

500

600

700

800

900

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (1000 articles)

Redis

Windows App Fabric

Stagerapport 94

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-53 Redis vs Windows AppFabric 10000 string writes

Figuur 5.5-54 Redis vs Windows AppFabric 10000 string reads

Ook wanneer het aantal operaties stijgt blijkt Windows AppFabric veel trager dan Redis.

0

1000

2000

3000

4000

5000

6000

7000

8000

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 strings)

Redis

Windows App Fabric

0

1000

2000

3000

4000

5000

6000

7000

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 strings)

Redis

Windows App Fabric

Stagerapport 95

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

Figuur 5.5-55 Redis vs Windows AppFabric 10000 article writes

Figuur 5.5-56 Redis vs Windows AppFabric 10000 article reads

De resultaten van deze laatste testen liggen in lijn van de vorige. Redis is veel performanter dan

Windows AppFabric. Bij het wegschrijven van complexe data is Windows AppFabric ongeveer 4 keer

zo traag en bij het ophalen van complexe data ongeveer 3,5 keer.

0

1000

2000

3000

4000

5000

6000

7000

8000

9000

1 2 3 4 5 6 7 8 9 10

ms

Test

Writes (10000 articles)

Redis

Windows App Fabric

0

1000

2000

3000

4000

5000

6000

7000

8000

1 2 3 4 5 6 7 8 9 10

ms

Test

Reads (10000 articles)

Redis

Windows App Fabric

Stagerapport 96

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

CONCLUSIE

Uit de testen tussen Redis en Memcached blijkt dat Memcached iets performanter is dan Redis. Maar

het verschil is beperkt en vooral dat de performantie van Redis niet zwaar lijdt onder de extra

featureset, maakt Redis een aantrekkelijkere oplossing dan Memcached. Vooral de ondersteuning

van automatische failover met Redis Sentinel en de ontwikkeling van Redis Cluster spelen in het

voordeel van Redis.

Bij het uitvoeren van operaties op strings blijkt Couchbase performanter dan Redis. Wanneer het

gaat over complexe modellen waaraan serialisatie gepaard gaat, blijkt Redis een pak performanter bij

het inlezen van data.

Aangezien de cache voornamelijk gebruikt zal worden voor het tijdelijk opslaan van complexe

objecten, zal een Redis opstelling performanter zijn. Daarnaast hangt er aan Couchbase een zwaar

kostenplaatje terwijl Redis gratis is.

We merken ook op dat resultaten erg stabiel zijn i.v.m. de testen tussen Redis en Memcached. De

schommelingen in die testen zijn dus vermoedelijk te wijten aan het netwerk aangezien de cache

servers vanop afstand werden benaderd.

NCache en Windows AppFabric zijn abominabel traag t.o.v. Redis. Zeker wanneer er met een cluster

zou gewerkt worden die uit meerdere nodes bestaat en de network penalty er nog bij zou komen,

zijn dit zeker geen werkbare oplossingen.

Redis lijkt over de hele de meest aangewezen oplossing wanneer we kijken naar performantie,

features, stabiliteit en het kostenplaatje.

Naast deze resultaten zijn ook een aantal zaken naarboven gekomen waar rekening mee zal moeten

worden gehouden. Om de performantie van de cache op een acceptabel niveau te houden zal de

afstand tussen servers en clients zo klein mogelijk moeten worden gehouden en de verbinding zo

snel mogelijk. Dit om de network penalty zo klein mogelijk te houden.

Ook is de snelheid waarmee de gegevens verwerkt omgekeerd evenredig met het aantal uit te

voeren operaties.

Stagerapport 97

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

ALGEMEEN BESLUIT

Gedurende de stage heb ik enorm veel opgestoken zowel op technisch als op persoonlijk vlak.

Ik heb de kans gekregen mee te werken aan één van de grootste sites van België. Zo kreeg ik te

maken met problemen die in andere omgevingen niet ter sprake komen op het gebied van het

ontwikkelen van schaalbare en performante webapplicaties.

Ik kreeg voor het eerst te maken met een applicatie van zodanige omvang en de verschillende

gevolgen die dit heeft op het vlak van codeorganisatie.

Ook leerde ik om samen te werken in een groot team en hoe dit zo efficiënt mogelijk georganiseerd

kan worden.

Ik heb ook de mogelijkheid gekregen om een onafhankelijk onderzoek te doen naar het opzetten van

een distributed cache. Naast het technische aspect leerde ik hierbij ook welke gevolgen zulke

vernieuwing kan hebben binnen een organisatie en met welke verschillende factoren allemaal

rekening moet worden gehouden om deze door te voeren.

De kern van wat ik gedurende deze stage heb bijgeleerd zit in dit verslag beknopt samengevat.

Daarnaast zijn er ook verschillende onderwerpen of aspecten die ik niet heb besproken maar waar ik

tijdens deze stage mee in aanraking ben gekomen:

Dependency injection

Inversion of control

Domain driven design

Agile

Scrum

Design patterns (Adapter, Repository, Builder, Factory, …)

Single Responsibility principle

Behavior-driven development

Test-driven development

KnockoutJS

Autofac

NHibernate

Team Foundation Server

NoSQL

SOLID

Continuous deployment

Continuous delivery

Continuous integration

Ik kan met een voldaan gevoel op deze stage terugblikken. Op zeer korte tijd heb ik op verschillende

vlakken enorm veel bijgeleerd en ik heb ook het gevoel dat ik iets heb kunnen bijbrengen en

verwezenlijken. Voor mij was deze stage meer dan geslaagd

Stagerapport 98

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

BIBLIOGRAFIE

[1] „Distributed cache,” Wikipedia, 2 4 2013. [Online]. Available:

http://en.wikipedia.org/wiki/Distributed_cache. [Geopend 23 4 2013].

[2] „Availability,” Wikipedia, 23 4 2013. [Online]. Available:

http://en.wikipedia.org/wiki/Availability. [Geopend 23 4 2013].

[3] O. Widder, „Tech Comics: "High Availability Computing",” 5 10 2012. [Online]. Available:

http://www.datamation.com/news/tech-comics-the-facebook-effect-a-2.html. [Geopend 23 4

2013].

[4] „Multitierarchitectuur,” Wikipedia, 13 3 2013. [Online]. Available:

http://nl.wikipedia.org/wiki/Multitierarchitectuur. [Geopend 3 5 2013].

[5] „Primed Cache,” [Online]. Available:

http://www.diranieh.com/DataAccessPatterns/PrimedCache.htm. [Geopend 23 4 2013].

[6] M. Vandevyvere, „Distributed Cache Options,” Corelio NV, Groot Bijgaarden, 2011.

[7] „NCache: Performance and Scalability Benchmarks,” 18 4 2013. [Online]. Available:

http://www.alachisoft.com/resources/ncache-performance-benchmarks.html.

[8] J. Sugrue, „Design Patterns Uncovered: The Adapter Pattern,” 2 9 2010. [Online]. Available:

http://java.dzone.com/articles/design-patterns-uncovered-0. [Geopend 16 5 2013].

[9] D. Laribee, „An Introduction To Domain-Driven Design,” Microsoft, 2 2009. [Online]. Available:

http://msdn.microsoft.com/en-us/magazine/dd419654.aspx. [Geopend 16 5 2013].

[10] „Inversion of Control – An Introduction with Examples in .NET,” 13 Februari 2013. [Online].

Available: http://joelabrahamsson.com/inversion-of-control-an-introduction-with-examples-in-

net/.

[11] „Ioc-containers wat en hoe?,” 14 2 2013. [Online]. Available:

http://tim.klingeleers.be/2012/04/ioc-containers-wat-en-hoe/.

Stagerapport 99

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

[12] „Dependency injection met inversion of control container,” 14 2 2013. [Online]. Available:

http://www.itprosolutions.be/2011/01/dependency-injection-met-inversion-of-control-

container/.

[13] „Sql Server - Efficient way to implement paging,” 15 2 2013. [Online]. Available:

http://stackoverflow.com/questions/548475/efficient-way-to-implement-paging.

[14] „Fluentmigrator,” 14 2 2013. [Online]. Available:

https://github.com/schambers/fluentmigrator/wiki/Migration.

[15] „Autofac,” 13 2 2013. [Online]. Available: http://code.google.com/p/autofac/.

[16] „Autofac,” 13 2 2013. [Online]. Available: http://abdullin.com/autofac/.

[17] „Nhibernate 3.0 tutorial with fluent nhibernate and linq 2 nhibernate,” 14 2 2013. [Online].

Available: http://www.d80.co.uk/post/2011/02/20/Linq-to-NHibernate-Tutorial.aspx.

[18] „Your first NHibernate based application,” 14 2 2013. [Online]. Available:

http://nhforge.org/wikis/howtonh/your-first-nhibernate-based-application.aspx.

[19] „Fluent Interface,” 14 2 2013. [Online]. Available:

https://github.com/schambers/fluentmigrator/wiki/Fluent-Interface.

[20] „Lightweight NHibernate and ASP.NET MVC integration with Autofac,” 13 2 2013. [Online].

Available: http://slynetblog.blogspot.be/2011/04/lightweight-nhibernate-and-aspnet-mvc.html.

[21] „KnockoutJS,” 15 2 2013. [Online]. Available: http://knockoutjs.com/.

[22] „Learn KnockoutJS,” 15 2 2013. [Online]. Available: http://learn.knockoutjs.com/.

[23] „Inversion of Control Containers and the Dependency Injection pattern,” 14 2 2013. [Online].

Available: http://martinfowler.com/articles/injection.html.

[24] J. Butt, „Windows Azure AppFabric Caching,” 14 3 2013. [Online]. Available: http://www.be-

init.nl/article/1478/windows-azure-appfabric-caching.

[25] D. Hume, „Memcached for C# - A Walkthrough,” 18 4 2013. [Online]. Available:

Stagerapport 100

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

http://www.deanhume.com/Home/BlogPost/memcached-for-c----a-walkthrough/62.

[26] sangeethashekar, „8.0 Factors that Affect Batch Cache-ability,” 15 1 2007. [Online]. Available:

http://blogs.msdn.com/b/sqlprogrammability/archive/2007/01/15/8-0-factors-that-affect-

batch-cache-ability.aspx. [Geopend 23 4 2013].

[27] L. Jankowfsky, „Caching, sharding, distributing - Scaling best practices,” 19 11 2009. [Online].

Available: http://www.slideshare.net/dodgeris/caching-sharding-distributing-scaling-best-

practices. [Geopend 23 4 2013].

[28] nbonvin, „Serving small static files: which server to use ?,” 24 3 2011. [Online]. Available:

http://nbonvin.wordpress.com/2011/03/24/serving-small-static-files-which-server-to-use/.

[Geopend 20 4 2013].

[29] T. Hoff, „Product: Memcached,” High Scalability, 1 8 2007. [Online]. Available:

http://highscalability.com/blog/2007/8/1/product-memcached.html. [Geopend 20 4 2013].

[30] Gear6, „Implementing High Availability Caching with Memcached,” Gear6, 26 8 2009. [Online].

Available: http://www.slideshare.net/gear6memcached/implementing-high-availability-

services-for-memcached-1911077. [Geopend 20 4 2014].

[31] „BeIT Memcached is a client for memcached written in C# 2.0,” [Online]. Available:

https://code.google.com/p/beitmemcached/. [Geopend 24 4 2013].

[32] Aniket, „Heartbeat – A Step by Step Configuration Guide to High Availability Linux Clusters,” The

IT Axis, 14 11 2009. [Online]. Available: http://theitaxis.wordpress.com/2009/11/14/heartbeat-

a-step-by-step-configuration-guide-to-high-availability-linux-clusters/. [Geopend 24 4 2013].

[33] „Memcache vs. Redis?,” Stackoverflow, 20 3 2013. [Online]. Available:

http://stackoverflow.com/questions/10558465/memcache-vs-redis. [Geopend 24 4 2013].

[34] „Redis vs Memcached,” 8 9 2010. [Online]. Available:

http://systoilet.wordpress.com/2010/08/09/redis-vs-memcached/. [Geopend 24 4 2013].

[35] K. Kovacs, „Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Couchbase vs Neo4j

vs Hypertable vs ElasticSearch vs Accumulo vs VoltDB vs Scalaris comparison,” [Online].

Available: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis. [Geopend 24 4 2013].

[36] C. Couch, „Redis as the primary data store? WTF?!,” 5 4 2013. [Online]. Available:

Stagerapport 101

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

https://moot.it/blog/technology/redis-as-primary-datastore-wtf.html. [Geopend 26 4 2013].

[37] „Redis cluster Specification,” [Online]. Available: http://redis.io/topics/cluster-spec. [Geopend

26 4 2013].

[38] „Is memcached a dinosaur in comparison to Redis?,” 11 7 2011. [Online]. Available:

http://stackoverflow.com/questions/2873249/is-memcached-a-dinosaur-in-comparison-to-

redis. [Geopend 26 4 2013].

[39] „Redis vs Memcached comparison,” [Online]. Available:

http://redis4you.com/articles.php?id=003. [Geopend 26 4 2013].

[40] Saxenap, „Install Redis Amazon Linux CentOS,” 6 2012. [Online]. Available:

https://github.com/saxenap/install-redis-amazon-linux-centos. [Geopend 7 5 2013].

[41] N. Timmermans, „Redis Server Sentinel Installation Scripts,” 8 5 2013. [Online]. Available:

https://github.com/nillis/redis-server-sentinel-installation-scripts. [Geopend 8 5 2013].

[42] „Redis Keyspace Notifications,” [Online]. Available: http://redis.io/topics/notifications.

[Geopend 21 5 2013].

Stagerapport 102

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

BIJLAGEN

1. REDIS SERVER SCRIPTS

5.5.5 REDIS-INSTALL-SCRIPT.SH

#!/bin/bash# Based on https://github.com/saxenap/install-redis-amazon-linux-centos # From https://raw.github.com/nillis/redis-server-sentinel-installation-scripts/master/redis-install-script.sh # Uses redis-server init script from https://raw.github.com/nillis/redis-server-sentinel-installation-scripts/master/redis-server # Uses redis-sentinel init script from https://raw.github.com/nillis/redis-server-sentinel-installation-scripts/master/redis-sentinel ###############################################

# To use: # git clone https://github.com/nillis/redis-server-sentinel-installation-scripts.git # sudo sh redis-install-script.sh

echo "*****************************************" echo " 1. Prerequisites: Install updates, set time zones, install GCC and make" echo "*****************************************" sudo yum -y update sudo yum -y install gcc gcc-c++ make echo "*****************************************" echo " 2. Download, Untar and Make Redis 2.6.13" echo "*****************************************" sudo wget http://redis.googlecode.com/files/redis-2.6.13.tar.gz sudo tar xzf redis-2.6.13.tar.gz sudo rm redis-2.6.13.tar.gz -f cd redis-2.6.13 sudo make sudo make install echo "*****************************************" echo " 3. Create Directories and Copy Redis Files" echo "*****************************************" sudo mkdir /etc/redis-server /etc/redis-sentinel /var/lib/redis-server /var/lib/redis-sentinel sudo cp src/redis-server src/redis-cli src/redis-sentinel /usr/local/bin sudo cp redis.conf /etc/redis-server echo "*****************************************" echo " 4. Configure Redis.Conf" echo "*****************************************" echo " Edit redis.conf as follows:"

Stagerapport 103

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

echo " 1: ... daemonize yes" echo " 2: ... bind 127.0.0.1" echo " 3: ... dir /var/lib/redis-server" echo " 4: ... loglevel notice" echo " 5: ... logfile /var/log/redis-server.log" echo "*****************************************" sudo sed -e "s/^daemonize no$/daemonize yes/" -e "s/^# bind 127.0.0.1$/bind 127.0.0.1/" -e "s/^dir \.\//dir \/var\/lib\/redis-server\//" -e "s/^loglevel verbose$/loglevel notice/" -e "s/^logfile stdout$/logfile \/var\/log\/redis-server.log/" redis.conf > /etc/redis-server/redis.conf echo "*****************************************" echo " 5. Configure Sentinel.Conf" echo "*****************************************" echo " Edit sentinel.conf as follows:" echo " 1: ... daemonize yes" echo " 2: ... bind 127.0.0.1" echo " 3: ... dir /var/lib/redis-sentinel" echo " 4: ... loglevel notice" echo " 5: ... logfile /var/log/redis-sentinel.log" echo "*****************************************" sudo echo "daemonize yes" >> sentinel.conf sudo echo "dir /var/lib/redis-sentinel" >> sentinel.conf sudo echo "loglevel notice" >> sentinel.conf sudo echo "logfile /var/log/redis-sentinel.log" >> sentinel.conf sudo cp sentinel.conf /etc/redis-sentinel echo "*****************************************" echo " 6. Move and Configure Redis-Server and Redis-Sentinel" echo "*****************************************" cd .. sudo cp redis-server /etc/init.d sudo cp redis-sentinel /etc/init.d sudo chmod 755 /etc/init.d/redis-server sudo chmod 755 /etc/init.d/redis-sentinel echo "*****************************************" echo " 7. Auto-Enable Redis-Server and Redis-Sentinel" echo "*****************************************" sudo chkconfig --add redis-server sudo chkconfig --level 345 redis-server on sudo chkconfig --add redis-sentinel sudo chkconfig --level 345 redis-sentinel on echo "*****************************************" echo " Installation Complete!" echo "" echo " Configure redis-server in /etc/redis-server/redis.conf" echo " Configure redis-sentinel in /etc/redis-sentinel/sentinel.conf" echo "" echo " To start redis-server execute /etc/init.d/redis-server start" echo " To start redis-sentinel execute /etc/init.d/redis-sentinel start" echo "" read -p "Press [Enter] to continue..."

Stagerapport 104

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.5.6 REDIS-REMOVE-SCRIPT

#!/bin/bash # From https://raw.github.com/nillis/redis-server-sentinel-installation-scripts/master/redis-remove-script.sh ###############################################

# To use: # git clone https://github.com/nillis/redis-server-sentinel-installation-scripts.git # sudo sh redis-remove-script.sh

echo "*****************************************" echo " 1. Stop Redis Server and Redis Sentinel" echo "*****************************************" sudo service redis-server stop sudo service redis-sentinel stop echo "*****************************************" echo " 2. Remove Auto-Enable Redis-Server and Redis-Sentinel" echo "*****************************************" sudo chkconfig --del redis-server sudo chkconfig --del redis-sentinel echo "*****************************************" echo " 3. Remove Directories and Files" echo "*****************************************" sudo rm -rf /etc/redis-server /etc/redis-sentinel /var/lib/redis sudo rm -rf /usr/local/bin/redis-server /usr/local/bin/redis-cli /usr/local/bin/redis-sentinel sudo rm -rf /etc/init.d/redis-server sudo rm -rf /etc/init.d/redis-sentinel echo "*****************************************" echo " Uninstall Complete!" read -p "Press [Enter] to continue..."

5.5.7 REDIS-SERVER INIT SCRIPT

#!/bin/sh # From - http://www.codingsteps.com/install-redis-2-6-on-amazon-ec2-linux-ami-or-centos/ # # redis - this script starts and stops the redis-server daemon # Originally from - https://raw.github.com/gist/257849/9f1e627e0b7dbe68882fa2b7bdb1b2b263522004/redis-server # # chkconfig: - 85 15 # description: Redis is a persistent key-value database # processname: redis-server # config: /etc/redis/redis.conf # config: /etc/sysconfig/redis

Stagerapport 105

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

# pidfile: /var/run/redis.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 redis="/usr/local/bin/redis-server" prog=$(basename $redis) REDIS_CONF_FILE="/etc/redis-server/redis.conf" [ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis lockfile=/var/lock/subsys/redis start() { [ -x $redis ] || exit 5 [ -f $REDIS_CONF_FILE ] || exit 6 echo -n $"Starting $prog: " daemon $redis $REDIS_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval echo -n $"$prog started succesfully " } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval echo -n $"$prog stopped succesfully " } restart() { echo -n "Restarting $prog ..." stop start echo -n $"$prog restarted succesfully " } reload() { echo -n "Restarting $prog ..." killproc $redis -HUP RETVAL=$? echo }

Stagerapport 106

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

force_reload() { restart } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" exit 2 esac

5.5.8 REDIS-SENTINEL INIT SCRIPT

#!/bin/sh # From - http://www.codingsteps.com/install-redis-2-6-on-amazon-ec2-linux-ami-or-centos/ # # redis - this script starts and stops the redis-sentinel daemon #

Stagerapport 107

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

# chkconfig: - 85 15 # description: Redis sentinel is a system designed to help managing Redis instances. # processname: redis-sentinel # config: /etc/redis-sentinel/sentinel.conf # config: /etc/sysconfig/sentinel.conf # pidfile: /var/run/redis-sentinel.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 sentinel="/usr/local/bin/redis-sentinel" prog=$(basename $sentinel) REDIS_SENTINEL_CONF_FILE="/etc/redis-sentinel/sentinel.conf" lockfile=/var/lock/subsys/redis-sentinel start() { [ -x $sentinel ] || exit 5 [ -f $REDIS_SENTINEL_CONF_FILE ] || exit 6 echo -n $"Starting $prog: " daemon $sentinel $REDIS_SENTINEL_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval echo -n $"$prog started succesfully " } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval echo -n $"$prog stopped succesfully " } restart() { echo -n "Restarting $prog ..." stop start echo -n $"$prog restarted succesfully " } case "$1" in start)

Stagerapport 108

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

start ;; stop) stop ;; restart) restart ;; *) echo "Usage $0 {start|stop|restart}" exit 2 esac

Stagerapport 109

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

2. DISTRIBUTED CACHE BENCHMARKS

5.5.9 BENCHMARKS SERVICESTACK VS CSREDIS

1000 strings ServiceStack CsRedis 1000 articles ServiceStack CsRedis

Writes 60 65 Writes 66 130

61 59 68 78

60 67 66 78

61 59 66 77

59 63 68 77

59 58 67 76

58 60 67 75

59 59 65 75

61 61 65 77

60 59 65 75

Gemiddelde 59,8 61 Gemiddelde 66,3 81,8

Reads 60 59 Reads 68 160

58 57 69 84

63 60 68 80

59 59 67 79

61 58 68 80

58 57 69 79

58 58 68 79

58 59 67 78

63 59 69 78

58 59 68 79

Gemiddelde 59,6 58,5 Gemiddelde 68,1 87,6

Stagerapport 110

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

10000 strings ServiceStack CsRedis 10000 articles ServiceStack CsRedis

Writes 592 590 Writes 674 757

598 594 671 760

598 602 674 762

614 600 676 771

604 606 686 776

606 593 686 767

614 598 682 781

602 591 683 758

631 595 693 765

603 605 673 806

Gemiddelde 606,2 597,4 Gemiddelde 679,8 770,3

Reads 584 587 Reads 677 799

580 589 677 807

592 585 689 797

595 596 701 803

581 587 704 819

583 586 691 814

588 585 680 809

592 583 693 793

613 593 685 795

580 584 682 800

Gemiddelde 588,8 587,5 Gemiddelde 687,9 803,6

Stagerapport 111

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.5.10 BENCHMARKS REDIS SERVICESTACK SERIALIZER VS REDIS NEWTONSOFT

SERIALIZER

1000 strings Servicestack NewtonSoft 1000 articles Servicestack NewtonSoft

Writes 59 67 Writes 127 197

58 61 80 97

59 64 79 94

60 66 77 96

59 64 79 98

59 63 79 96

58 64 79 99

58 62 77 96

61 61 77 94

58 63 75 95

Gemiddelde 58,9 63,5 Gemiddelde 82,9 106,2

Reads 58 60 Reads 158 167

58 59 85 127

63 60 79 127

58 62 84 126

58 68 85 128

58 63 81 127

58 60 82 125

57 61 79 124

60 60 79 123

58 61 79 126

Gemiddelde 58,6 61,4 Gemiddelde 89,1 130

Stagerapport 112

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

10000 strings Servicestack NewtonSoft 10000 articles Servicestack NewtonSoft

Writes 591 597 Writes 809 954

589 600 783 954

589 591 760 978

588 592 761 946

588 596 772 964

586 589 772 960

595 591 800 943

595 589 763 954

594 591 764 955

598 603 766 953

Gemiddelde 591,3 593,9 Gemiddelde 775 956,1

Reads 583 590 Reads 822 1250

581 595 788 1254

585 597 787 1256

585 585 790 1252

578 580 830 1257

582 591 801 1268

586 588 801 1244

583 588 794 1245

590 587 795 1261

590 580 825 1258

Gemiddelde 584,3 588,1 Gemiddelde 803,3 1254,5

Stagerapport 113

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.5.11 BENCHMARKS SERVICESTACK VS BEITMEMCACHED

1000 strings ServiceStack BeItMemcached 1000 articles ServiceStack BeItMemcached

Writes 439 363 Writes 665 402

345 294 386 419

350 298 401 395

374 289 391 404

480 330 499 391

350 345 390 444

341 359 431 398

373 334 494 383

349 315 412 379

348 378 387 405

Gemiddelde 374,9 330,5 Gemiddelde 445,6 402

Reads 470 315 Reads 754 364

545 266 452 339

390 244 463 341

413 258 449 328

385 295 474 345

465 298 510 320

451 301 448 325

448 315 449 341

403 315 459 342

402 307 459 338

Gemiddelde 437,2 291,4 Gemiddelde 491,7 338,3

Stagerapport 114

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

10000 strings ServiceStack BeItMemcached 10000 articles ServiceStack BeItMemcached

Writes 3943 3495 Writes 4167 3480

3762 3366 3967 3363

3524 2967 4024 3842

3805 2962 4021 3834

3669 3080 4439 3336

3830 3414 4316 3751

3759 3464 4239 3701

3737 3373 4364 3833

3813 2903 3936 3941

3834 2995 4067 3649

Gemiddelde 3767,6 3201,9 Gemiddelde 4154 3673

Reads 4286 2936 Reads 4920 3025

3926 2756 4538 3464

3951 2706 4600 3367

4206 2836 4810 3472

4200 2678 4937 3264

4299 2889 4966 3124

4360 3007 4871 3224

4226 3009 4978 3542

4186 2748 4566 3386

4163 2491 4666 3249

Gemiddelde 4180,3 2805,6 Gemiddelde 4785,2 3311,7

Stagerapport 115

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.5.12 BENCHMARKS REDIS VS MEMCACHED

1000 strings Redis Memcached 1000 articles Redis Memcached

Writes 273 334 Writes 592 339

313 368 415 375

274 337 350 338

299 378 369 350

299 308 385 360

320 350 361 326

290 310 366 336

316 263 353 341

292 335 368 352

288 331 346 356

Gemiddelde 296,4 331,4 Gemiddelde 390,5 347,3

Reads 277 285 Reads 616 323

309 302 364 302

286 331 368 301

311 283 372 305

313 293 367 301

314 256 366 304

282 272 349 302

361 265 390 303

286 240 327 314

309 269 378 320

Gemiddelde 304,8 279,6 Gemiddelde 389,7 307,5

Stagerapport 116

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

10000 strings Redis Memcached 10000 articles Redis Memcached

Writes 3153 3132 Writes 3977 3292

3113 2910 3518 3468

3099 3364 3631 3736

2915 3343 3602 3829

2975 3297 3851 3660

2959 3320 3636 3346

3040 3493 3831 3249

2965 3331 3895 3591

3271 3239 4030 3601

3322 2917 3567 3639

Gemiddelde 3081,2 3234,6 Gemiddelde 3753,8 3541,1

Reads 3199 2893 Reads 3551 3322

3158 2773 3602 3352

3074 2963 3628 3482

3012 2797 3695 3371

2973 2962 3579 3375

3132 3070 3710 3114

2997 2936 3868 3020

3202 2834 3843 3366

3249 2798 3618 3212

3230 2679 3547 3156

Gemiddelde 3122,6 2870,5 Gemiddelde 3664,1 3277

Stagerapport 117

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.5.13 BENCHMARKS REDIS VS COUCHBASE

1000 strings Redis Couchbase 1000 articles Redis Couchbase

Writes 61 129 Writes 130 128

57 42 78 73

59 42 78 77

58 43 79 75

58 41 82 74

58 43 81 74

59 42 79 74

59 44 78 74

58 44 79 75

59 41 79 75

Gemiddelde 58,6 51,1 Gemiddelde 84,3 79,9

Reads 59 51 Reads 168 172

68 41 82 137

58 42 81 133

59 41 83 132

63 40 82 136

56 40 83 133

63 41 82 133

59 40 82 132

59 39 82 132

59 41 82 133

Gemiddelde 60,3 41,6 Gemiddelde 90,7 137,3

Stagerapport 118

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

10000 strings Redis Couchbase 10000 articles Redis Couchbase

Writes 598 425 Writes 793 752

595 434 801 742

599 431 797 743

597 429 798 746

597 426 796 743

590 427 802 744

591 428 790 743

599 426 797 744

595 425 793 741

587 436 796 741

Gemiddelde 594,8 428,7 Gemiddelde 796,3 743,9

Reads 586 409 Reads 847 1344

586 408 839 1344

592 411 835 1342

594 412 832 1332

590 405 821 1335

587 406 821 1334

589 407 832 1332

586 407 826 1333

584 407 823 1330

588 408 826 1335

Gemiddelde 588,2 408 Gemiddelde 830,2 1336,1

Stagerapport 119

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.5.14 BENCHMARKS REDIS VS NCACHE

1000 strings Redis NCache 1000 articles Redis NCache

Writes 117 126 Writes 132 232

67 125 87 243

68 120 81 240

64 125 81 240

63 120 79 234

61 131 82 247

60 147 81 241

61 133 79 241

67 129 81 253

61 120 83 246

Gemiddelde 68,9 127,6 Gemiddelde 86,6 241,7

Reads 99 114 Reads 167 251

73 115 83 245

73 113 84 249

61 114 87 251

63 111 88 248

63 139 84 278

59 125 83 257

59 117 85 248

60 115 86 271

59 113 91 260

Gemiddelde 66,9 117,6 Gemiddelde 93,8 255,8

Stagerapport 120

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

10000 strings Redis NCache 10000 articles Redis NCache

Writes 606 1200 Writes 811 2310

620 1193 804 2251

611 1201 805 2276

617 1262 821 2288

623 1278 817 2284

624 1209 810 2252

616 1158 828 2315

611 1196 866 2304

622 1148 867 2271

611 1209 848 2316

Gemiddelde 616,1 1205,4 Gemiddelde 827,7 2286,7

Reads 614 1082 Reads 836 2517

608 1090 845 2553

616 1124 861 2531

612 1198 847 2614

607 1123 856 2538

614 1089 848 2509

607 1075 868 2583

614 1081 1028 2532

610 1119 890 2512

608 1071 863 2610

Gemiddelde 611 1105,2 Gemiddelde 874,2 2549,9

Stagerapport 121

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

5.5.15 BENCHMARKS REDIS VS WINDOWS APPFABRIC

1000 strings Redis Windows App Fabric 1000 articles Redis Windows App Fabric

Writes 175 838 Writes 388 832

170 750 184 772

173 744 184 802

175 757 201 780

172 752 217 783

178 742 182 775

174 796 178 886

168 755 180 784

154 683 220 777

156 673 258 779

Gemiddelde 169,5 749 Gemiddelde 219,2 797

Reads 182 693 Reads 456 790

188 677 180 693

174 680 180 703

177 671 221 696

179 677 209 707

177 677 178 705

179 680 183 762

165 676 209 693

165 588 222 699

157 586 220 706

Gemiddelde 174,3 660,5 Gemiddelde 225,8 715,4

Stagerapport 122

Kaho St. Lieven 2013 | Opleiding Elektronica-ICT richting ICT

10000 strings Redis 10000 articles Redis Windows App Fabric

Writes 1786 7536 Writes 2223 7872

1745 6186 2204 7638

1748 6536 2273 7912

1753 6585 2198 7835

1785 7136 2203 7988

1780 6612 2182 7923

1742 6506 2238 7426

1750 6568 2189 7910

1192 6655 2201 7993

1637 7229 2196 7663

Gemiddelde 1691,8 6754,9 Gemiddelde 2210,7 7816

Reads 1769 5210 Reads 2231 7058

1722 5660 2204 7065

1880 5632 2191 7088

1866 5730 2202 7536

1771 5687 2214 6938

1750 5585 2226 7066

1787 5775 2209 6995

1721 5782 2208 7526

1623 5690 2250 7094

1762 5686 2225 7028

Gemiddelde 1765,1 5643,7 Gemiddelde 2216 7139,4