Ik heb op dit moment een applicatie op twee identieke tomcat servers draaien die achter een loadbalancer zitten. Er moet wat functionaliteit bijkomen waarin acties van een gebruiker bijgehouden moeten worden die sessie-overschrijdend moet zijn (dus als de sessie weg is, moet de actie nog steeds bewaard blijven voor een x-periode (denk aan enkele uren)). Wellicht dat er in de toekomst nog andere vergelijkbare dingen in opgeslagen moeten worden.
Er is op dit moment geen database en ik zou voor dit doeleinde een database ook overkill vinden (de users zitten in een extern (read-only) systeem wat ik bevraag tav user-gerelateerde dingen). Ik wil gewoon key-value pairs op kunnen slaan in een cache-achtig systeem. En liefst met extra's zoals een expiration time.
De eisen die ik heb:
Verder probeer ik bij mijn besluitvorming tot het kiezen van een oplossing ook te bepalen wat beter is: alle data repliceren over de verschillende nodes of een iets als een consistent hashing manier. Zoals ik al zei mag er incidenteel data verloren gaan, dus replicatie is niet persee nodig. Aan de andere kant: ik vermoed niet dat het om zulke hoeveelheden zal gaan dat het een voordeel gaat zijn als de data verspreid opgeslagen wordt. Adviezen hieromtrent worden ook gewaardeerd.
Ik ben wat gaan googelen wat momenteel goede oplossing zijn voor een Java applicatie op tomcat en heb de volgende dingen gevonden:
Memcached
Heb ik ervaring mee vanuit het verleden (maar binnen PHP) en werkt in principe prima. Maar misschien zijn er betere oplossingen?
Redis
Wordt vaak met memcached vergeleken en komt er dan vaak positiever uit. Is bijvoorbeeld flexibeler qua opslaan van verschillende typen data wat ik een leuke plus vind. Performance lijkt hetzelfde? Wat ik niet goed kon vinden is hoe ze verschillen met betrekking tot een cluster-architectuur.
JCS
Lijkt een optie, maar kon ik helaas weinig over vinden in relatie tot de bovengenoemde twee. Veel informatie leek bovendien erg oud. Las aardig wat geklaag, maar dat is misschien outdated?
Hazelcast
Lijkt ook een optie, maar kon wederom weinig vergelijkingen vinden en heb dus geen beeld hoe goed dit performt en in gebruik is, ivm de bovenstaande.
EHcache
Lijkt redelijk vergelijkbaar met redis en memcached, maar het feit dat ik er veel minder over vond vind ik een nadeel. Een actieve community achter een product vind ik wel een grote pre
Met dit topic hoop ik wat reacties met ervaringen en suggesties te krijgen om zo tot een goed besluit te kunnen komen.
Er is op dit moment geen database en ik zou voor dit doeleinde een database ook overkill vinden (de users zitten in een extern (read-only) systeem wat ik bevraag tav user-gerelateerde dingen). Ik wil gewoon key-value pairs op kunnen slaan in een cache-achtig systeem. En liefst met extra's zoals een expiration time.
De eisen die ik heb:
- Beide servers in het cluster moeten over dezelfde data beschikken
- Als het cluster groeit - naar, pak 'm beet 6 nodes - dan moet dit geen probleem zijn
- Hoef op dit moment geen grote hoeveelheden data op te slaan. Verwacht ook niet dat dit in de toekomst wel zo is, maar als het schaalbaar is in die zin is dat meegenomen.
- Als er eens een keer data verloren gaat is dat jammer maar niet onoverkomelijk. De eis in die zin is dus dat ik geen oplossing hoef die dit garandeert terwijl dit ten koste gaat van bijvoorbeeld performance.
- Ik stop deze functionaliteit ook het liefst een in een cluster oplossing zodat er altijd eentje uit kan vallen. Het meest voor de hand liggende is dan dat het op dezelfde machines wordt geinstalleerd als de tomcat instances.
Verder probeer ik bij mijn besluitvorming tot het kiezen van een oplossing ook te bepalen wat beter is: alle data repliceren over de verschillende nodes of een iets als een consistent hashing manier. Zoals ik al zei mag er incidenteel data verloren gaan, dus replicatie is niet persee nodig. Aan de andere kant: ik vermoed niet dat het om zulke hoeveelheden zal gaan dat het een voordeel gaat zijn als de data verspreid opgeslagen wordt. Adviezen hieromtrent worden ook gewaardeerd.
Ik ben wat gaan googelen wat momenteel goede oplossing zijn voor een Java applicatie op tomcat en heb de volgende dingen gevonden:
Memcached
Heb ik ervaring mee vanuit het verleden (maar binnen PHP) en werkt in principe prima. Maar misschien zijn er betere oplossingen?
Redis
Wordt vaak met memcached vergeleken en komt er dan vaak positiever uit. Is bijvoorbeeld flexibeler qua opslaan van verschillende typen data wat ik een leuke plus vind. Performance lijkt hetzelfde? Wat ik niet goed kon vinden is hoe ze verschillen met betrekking tot een cluster-architectuur.
JCS
Lijkt een optie, maar kon ik helaas weinig over vinden in relatie tot de bovengenoemde twee. Veel informatie leek bovendien erg oud. Las aardig wat geklaag, maar dat is misschien outdated?
Hazelcast
Lijkt ook een optie, maar kon wederom weinig vergelijkingen vinden en heb dus geen beeld hoe goed dit performt en in gebruik is, ivm de bovenstaande.
EHcache
Lijkt redelijk vergelijkbaar met redis en memcached, maar het feit dat ik er veel minder over vond vind ik een nadeel. Een actieve community achter een product vind ik wel een grote pre
Met dit topic hoop ik wat reacties met ervaringen en suggesties te krijgen om zo tot een goed besluit te kunnen komen.