Einführung in Redis Streams

Redis
Redis Streams ist ein neues Feature, das Log-ähnliche Datenstrukturen auf abstrakte Weise modelliert und mit Redis 5.0 eingeführt wurde. Einfach gesagt, ist ein Stream in Redis eine Liste, in der Einträge angehängt werden. Jeder Eintrag hat eine eindeutige ID und besteht aus Schlüssel-Werte-Paaren. So können Nachrichten tatsächlich komplexe Strukturen haben, anstatt stringifizierte Versionen von JSON-Objekten zu sein. Im Gegensatz zu Pub/Sub-Nachrichten, die nach dem fire-and-forget Prinzip funktionieren, bewahren Redis-Streams Nachrichten auf Dauer. Das macht Redis Streams ideal um z.B. Chat-Systeme, message broker oder message queues zu implementieren.

Stream Grundlagen

Die grundlegenden Stream-Operationen sind natürlich Lesen und Schreiben. Um Nachrichten in einen Stream zu schreiben, gibt es den XADD-Befehl:

XADD mystream * key1 value1 key2 value2

Dieser Befehl fügt eine Struktur wie die folgende in einen Stream namens “mystream” hinzu:

{
"key1": "value1“,
"key2": "value2"
}

Wie eingangs erwähnt, hat jede hinzufügte Nachricht eine eindeutige ID, die das zweite Argument der XADD-Operation ist. In unserem Fall haben wir * übergeben, damit Redis die ID automatisch generiert. In den meisten Anwendungsfällen reicht das völlig aus. Man könnte die ID aber auch selbst angeben.

Daten aus Streams abrufen

Nachdem wir mit XADD einen Stream erstellt und Nachrichten hinzufügt haben, können wir jetzt Daten aus dem Stream abrufen. Dabei gibt es verschiedene Zugriffsmethoden. Im ersten Beispiel abonnieren wir mit dem XREAD-Befehl einen Stream und warten auf neue Nachrichten:

XREAD BLOCK 0 STREAMS mystream $

Auf den ersten Blick mag das wenig einleuchtend sein, also zerlegen wir den Befehl kurz in seine Komponenten:

  • XREAD ist der Befehl zum Abrufen von Einträgen.
  • BLOCK 0 bedeutet, dass der Client endlos blockiert, wenn keine Einträge vorhanden sind. Geben wir hier anstatt 0 beispielsweise 1000 an, tritt nach 1000 Millisekunden ein Timeout auf, wenn nichts eingeht.
  • STREAMS ist eine Direktive, mit der wir eine Liste von Streams gefolgt von einer Liste von IDs angeben, von denen wir lesen wollen. In unserem Beispiel lesen wir von einem Stream mit der Pseudo ID $, die weiter unten erklärt wird.
  • mystream ist der Name des Streams, von dem wir lesen wollen.
  • $ ist eine Pseudo-ID, die jede neue Nachricht liefert, die ankommt nachdem der Befehl abgeschickt wurde. Das bedeutet, wir möchten alle vorherigen Einträge im Stream ignorieren und konzentrieren uns nur auf Nachrichten, die von nun an eintreffen.

Da wir im Moment keine neuen Nachrichten einliefern, blockiert der Befehl endlos, wenn wir ihn jetzt abschicken.

Wir ändern obigen Befehl nun folgendermaßen ab, um alle Nachrichten aus unserem Stream zu lesen:

XREAD STREAMS mystream 0

Wie wir sehen, müssen wir beim XREAD-Befehl nur die STREAMS Direktive angeben, um Ergebnisse zu erhalten. 0 ist wieder eine Pseudo-ID, die sozusagen den Beginn eines Streams angibt.

Wenn wir nur eine bestimmte maximale Anzahl von Nachrichten lesen wollen, erweitern wir obigen Befehl um die COUNT Option:

XREAD COUNT 2 STREAMS mystream 0

Das sind auch schon die Grundlagen um mit XADD Nachrichten in einen Stream zu schreiben und mit XREAD Nachrichten aus Streams zu lesen.

In einem folgenden Blogpost werden wir uns anschauen, wie man Clients schreibt, die alle Nachrichten lesen können. Auch wenn diese nicht verbunden waren, als die Nachrichten im Stream ankamen. Und weitere Features wie den XRANGE-Befehl und Consumer Groups.

Eric Lippmann
Eric Lippmann
Lead Senior Developer

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er sich für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

RequestTracker: Optimize Session Handling

To provide features like login or persistence to the user, stateless protocols like HTTP depend heavily on sessions. Almost every web application is using it.

An easy job you would say? Of course! But what about high availability setups with hundreds of concurrent users? And sessions need to be shared between application servers so that that users do not lose their current login session.

RT’s vanilla way is to put this in MySQL which produces queries on every request. Second bad thing is the created GET_LOCK query which slows down the environment after a while.

Better way is to use files because file sessions are extremely fast. No network overhead and not greatly influenced by differential IO. But then you have to share sessions between application servers and you should say good bye to that idea because we do not live in an ideal world and shared file systems are terribly slow.

What Next?

I opt for Redis. Meanwhile available on every system, fast as the LHC in Geneva and rock-solid like carbon. Redis is so adorable simple that you only can fall in love with this single-core-minimal-footprint-key-value-store thingy. But I’ll stop hallowing now.

RequestTracker uses Apache::Session::* default implementation and we choose the NoSQL module from there which provides access to Apache Cassandra and Redis.

Configuration Examples

# Annouce Redis to RequestTracker
Set($WebSessionClass, "Apache::Session::Redis");

# Single server
Set(%WebSessionProperties,
  server => '127.0.0.1:6379'
);

# Sentinel
Set(%WebSessionProperties,
  sentinels => [ '127.0.0.1:26379' ],
  service => 'mymaster',
  sentinels_cnx_timeout => 0.1,
  sentinels_read_timeout => 1,
  sentinels_write_timeout => 1
);

You can find more information in the product documentation.

Conclusion

It’s just a glimpse, but there a lot of ways to bring RequestTracker to enterprise level with more than 300 concurrent users and millions of tickets and attachments. Of course, highly available and scaled in every direction. You only need to ask us how to do!

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Der erste Entwurf für den Webinarkalender 2016 ist online!

NETWAYS Webinare Auch in diesem Jahr wollen wir wieder mit diversen Webinaren durchstarten und neben Icinga 2 natürlich unsere anderen Kernkompetenzen wie unter anderem Puppet, Foreman und unsere Hosting-Angebote nicht außen vor lassen.
Über das Jahr verteilt haben wir bereits diverse Themen fixiert – mehr werden aber natürlich noch folgen! Aktuell geplant sind die Folgenden Themen und Termine:

Titel Zeitraum Registrierung
Icinga Director: Konfiguration leicht gemacht 03. März 2016 – 10:30 Uhr Anmelden
Docker Hosting 10. März 2016 – 10:30 Uhr Anmelden
Foreman: Provisionierungswege 31. März 2016 – 10:30 Uhr Anmelden
ELK: Grundlagen der zentralen Logdatenverwaltung 15. April 2016 – 10:30 Uhr Anmelden
Foreman: Klassen und Parametrisierung in Puppet 20. Mai 2016 – 10:30 Uhr Anmelden
Foreman: Berechtigungen 28. Juli 2016 – 10:30 Uhr Anmelden
Foreman: Docker Integration 05. Oktober 2016 – 10:30 Uhr Anmelden

Wer sich einen Überblick über die bisherigen Webinare verschaffen möchte, kann dies natürlich gerne in unserem Webinar-Archiv tun.

Christian Stein
Christian Stein
Lead Senior Account Manager

Christian kommt ursprünglich aus der Personalberatungsbranche, wo er aber schon immer auf den IT Bereich spezialisiert war. Bei NETWAYS arbeitet er als Senior Sales Engineer und berät unsere Kunden in der vertrieblichen Phase rund um das Thema Monitoring. Gemeinsam mit Georg hat er sich Mitte 2012 auch an unserem Hardware-Shop "vergangen".

Reminder für das morgige Logstash Webinar

Logstash Wie so oft vor einem Webinar möchte ich auf das morgige Logstash Webinar zum Thema Windows und Linux Logmanagement hinweisen. Neben einer kurzen Einführung, was genau Logstash eigentlich ist und wie die Lösung funktioniert, wollen Thomas und ich darauf eingehen, wie bspw. Linux und Windows Logmeldungen eingebunden werden können.
Das Webinar findet morgen, den 07. November um 10:30 Uhr statt. Wer teilnehmen möchte, kann sich natürlich kostenfrei registrieren.
Darüber hinaus sind bereits drei weitere Webinare bis zum Jahresende geplant:

Webinar Thema Termin und Registrierung
Puppet: Windows Configuration Management 12. Dezember 2014 – 10:30 Uhr
Icinga Web 2: Modernes Web-Framework der nächsten Generation 25. November 2014 – 10:30 Uhr
NETWAYS: Jahresrückblick 2014 18. Dezember 2014 – 10:30 Uhr

Wer sich noch einmal vergangene Webinare ansehen möchte, kann dies über unser Webinar-Archiv tun.
Wir freuen uns schon auf morgen!

Christian Stein
Christian Stein
Lead Senior Account Manager

Christian kommt ursprünglich aus der Personalberatungsbranche, wo er aber schon immer auf den IT Bereich spezialisiert war. Bei NETWAYS arbeitet er als Senior Sales Engineer und berät unsere Kunden in der vertrieblichen Phase rund um das Thema Monitoring. Gemeinsam mit Georg hat er sich Mitte 2012 auch an unserem Hardware-Shop "vergangen".

NETWAYS Webinar Kalender Update

netwaysAuch wenn mein letzter Blog-Post bzgl. unserer Webinare schon eine ganze weile her ist, erweitern wir natürlich regelmäßig unseren Kalender um diverse Themen. Neu hinzugekommen ist jetzt ein weiteres Logstash Webinar am 11. November 2014 um 10:30 Uhr, wobei es inhaltlich diesmal schwerpunktmäßig um die Integration von Windows und Linux Logmeldungen geht und eine spätere Auswertung über das Webfrontend.
Darüber hinhaus möchte ich gleich die Gelegenheit nutzen um alle die sich noch nicht angemeldet haben auf die nächsten Icinga 2 Webinare hinzuweisen. Diese Woche am 25. September um 10:30 Uhr zeigen Markus und ich wie Icinga 2 und Graphite optimal zusammenarbeiten können.
Wer sich zusätzlich für das Cluster-Feature von Icinga 2 interessiert, ist für das zugehörige Webinar zur integrierten Hochverfügbarkeit am 07. Oktober 2014 um 14:00 Uhr natürlich gerne eingeladen.
Um den Überblick nicht zu verlieren, gibt es noch einmal eine kurze Übersicht (natürlich auch auf unserer Webinar-Seite zu finden):

Titel Zeitraum
Icinga 2: Integration von Graphite 25. September 2014 – 10:30 Uhr
Icinga 2: Integrierte Hochverfügbarkeit 07. Oktober 2014 – 14:00 Uhr
Logstash: Windows und Linux Log Management 11. November 2014 – 10:30 Uhr

Wie immer freuen wir uns auf eine rege Teilnahme!

Christian Stein
Christian Stein
Lead Senior Account Manager

Christian kommt ursprünglich aus der Personalberatungsbranche, wo er aber schon immer auf den IT Bereich spezialisiert war. Bei NETWAYS arbeitet er als Senior Sales Engineer und berät unsere Kunden in der vertrieblichen Phase rund um das Thema Monitoring. Gemeinsam mit Georg hat er sich Mitte 2012 auch an unserem Hardware-Shop "vergangen".

Reminder für das morgige Logstash-Webinar

logstash_01 Ich möchte noch einmal alle Logfile-Archivierer (und natürlich jene die es werden wollen) auf das morgige Logstash Webinar hinweisen. Unser Ziel wird es sein, die Architektur und Funktionsweise zu vermitteln. Dabei wird ein großer Schwerpunkt auf unserer Live-Demo liegen, in der wir Kibana, Elastic-Search und sogar einige Konfigurationen anschauen werden.
Starten wird das Webinar morgen Früh um 10:30 Uhr.
Wer sich vorab einige andere Webinare ansehen will, dem sei einerseits unser Webinar-Archiv nahelegt oder gleich unser erstes Logstash Webinar.
Wer bereits für die Zukunft planen möchte, kann sich ebenfalls für die beiden nächsten geplanten Webinare registrieren:

Icinga Web 2 Icinga Web in neuem Design
25. Februar 2014 – 10:30 Uh
Icinga 2 Entwicklungsstand 2014
05. März 2014 – 10:30 Uhr

Wie immer werden wir das Video und die Präsentation schnellstmöglich in unserem Webinar-Archiv online zur Verfügung stellen.
Cebit BlogWer eine persönliche Beratung zu Logstash wünscht, kann sich entweder über unser Kontaktformular bei uns melden oder uns auf der CeBIT im Open Source Park, Halle 6, an Stand E16 (310) besuchen. Um uns schneller zu finden, gibt es natürlich auch eine Wegbeschreibung.
Bis morgen im Webinar!

Christian Stein
Christian Stein
Lead Senior Account Manager

Christian kommt ursprünglich aus der Personalberatungsbranche, wo er aber schon immer auf den IT Bereich spezialisiert war. Bei NETWAYS arbeitet er als Senior Sales Engineer und berät unsere Kunden in der vertrieblichen Phase rund um das Thema Monitoring. Gemeinsam mit Georg hat er sich Mitte 2012 auch an unserem Hardware-Shop "vergangen".

NETWAYS startet mit 3 Webinaren in 2014!

Auch 2014 ist NETWAYS wieder aktiv mit Webinaren vertreten. Starten werden wir Mitte Februar 2014, um einen Vorgeschmack auf die CeBIT zu ermöglichen.
Aktuelle Themen sind:

Logstash Open Source Log-Management
20. Februar 2014 – 10:30 Uhr
Icinga Web 2 Icinga Web in neuem Design
25. Februar 2014 – 10:30 Uh
Icinga 2 Entwicklungsstand 2014
05. März 2014 – 10:30 Uhr

Logstash
Ziel der Webinare ist es, unter anderem das Thema Logstash weiter zu vertiefen. Hierbei handelt es sich um eine schlanke Open Source Lösung, welche es ermöglicht Logs von hunderten von Systemen zu erfassen und in einem Webfrontend mit wenigen Klicks auszuwerten. Die Skalierbarkeit spielt hierbei ebenfalls eine entscheidende Rolle, da durch die schlanke Architektur das Setup auf mehrere Komponenten aufgeteilt werden kann.
Das Webinar hierzu findet am 20. Februar 2014 um 10:30 Uhr statt. Zur Registrierung.
Natürlich darf auch im neuen Jahr Icinga 2 nicht fehlen. Hierzu sind gleich zwei Webinare geplant.
Icinga Web 2
Zuerst wollen wir natürlich das neue und verbesserte Icinga Web 2 vorstellen, welches nicht nur in der Performance deutlich optimiert wurde, sondern auch ein komplett neues Design bekommt, um noch intuitiver zu werden. Weitere Infos gibt es auf unsere Webinarseite und während des Webinars.
Dieses findet am 25. Februar 2014 um 10:30 Uhr statt. Zur Registrierung.
Icinga 2
Als letzten Punkt wollen wir vor der CeBIT noch den aktuellen Entwicklungsstand zu Icinga 2 zeigen und auf alle bisher eingebauten Änderungen eingehen. Anhand einer Demo veranschaulichen wir dann die Unterschiede zu Nagios / Icinga und die Neuheiten von Icinga 2. Zum Schluss gibt es dann noch einen Ausblick auf den nächsten Milestone mit Version 0.0.8.
Das Webinar findet am 05. März 2014 um 10:30 Uhr statt. Zur Registrierung.
Wer unsere bisherigen Webinare verpasst hat, hat die Chance sich über unseren YouTube-Channel alle Webinar-Videos anzusehen. Eine detaillierte Übersicht findet sich inklusive der Slides in unserem Webinar-Archiv.
Wir freuen uns wieder auf eine rege Teilnahme!
Übrigens: Wer eine persönliche Beratung wünscht, kann gerne mit uns Kontakt aufnehmen.
Cebit BlogAlternantiv bietet sich natürlich auch ein Besuch auf unserem CeBIT Stand an. Vertreten sind wir, wie jedes Jahr, im Open Source Park. Diesmal in Halle 6, an Stand E16 (310). Um uns schneller zu finden, gibt es natürlich auch eine Wegbeschreibung.

Christian Stein
Christian Stein
Lead Senior Account Manager

Christian kommt ursprünglich aus der Personalberatungsbranche, wo er aber schon immer auf den IT Bereich spezialisiert war. Bei NETWAYS arbeitet er als Senior Sales Engineer und berät unsere Kunden in der vertrieblichen Phase rund um das Thema Monitoring. Gemeinsam mit Georg hat er sich Mitte 2012 auch an unserem Hardware-Shop "vergangen".

Erinnerung an das heutige Logstash Webinar

Logstash Ich möchte noch einmal auf unser Webinar um 10:30 Uhr zum Thema “Logstash: Logfile-Archivierung leicht gemacht” hinweisen. Wer also teilnehmen möchte, sollte sich schnell noch über unsere Webinarseite registrieren.
Um die Wartezeit so angenehm wie möglich zu gestalten, empfiehlt sich natürlich noch das Webinarvideo zum Thema “Warum Monitoring und warum Icinga 2?” vom Mittwoch:


Weitere Webinare findet man zusätzlich noch in unserem Webinararchiv.
Blerim und ich freuen uns schon darauf!

Christian Stein
Christian Stein
Lead Senior Account Manager

Christian kommt ursprünglich aus der Personalberatungsbranche, wo er aber schon immer auf den IT Bereich spezialisiert war. Bei NETWAYS arbeitet er als Senior Sales Engineer und berät unsere Kunden in der vertrieblichen Phase rund um das Thema Monitoring. Gemeinsam mit Georg hat er sich Mitte 2012 auch an unserem Hardware-Shop "vergangen".