Redis ist 10!
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Subtitle |
| |
Title of Series | ||
Number of Parts | 94 | |
Author | ||
License | CC Attribution 4.0 International: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor. | |
Identifiers | 10.5446/45648 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
| |
Keywords |
FrOSCon 201929 / 94
7
10
12
14
15
16
17
20
22
23
26
27
28
29
30
31
32
33
36
37
38
39
41
44
45
48
52
53
55
56
57
58
60
61
62
64
66
67
74
76
77
78
79
81
83
84
93
00:00
HTTPTape driveWordXMLUMLLecture/Conference
01:05
Perspective (visual)OutlookWEBComputer scienceLebensdauerAtomic nucleusMicrosoftLINUXLaptopPostgreSQLScratchHand fanDatabaseSoftwareOperating systemMach's principleVersion <Informatik>MikrokernelComputer animation
05:29
Bus (computing)DatabasePHPTOUR <Programm>Finite-Punktmengen-MethodeInequality (mathematics)LINUXLecture/Conference
07:31
Buffer overflowCommon Language InfrastructureNumberVertex <Computergraphik>HASKELLDirection (geometry)LISPNoSQL-DatenbanksystemProject <Programm>LeadAnbindung <Informatik>Raster graphicsLecture/ConferenceXMLUML
08:45
Bildbasiertes RenderingAnbindung <Informatik>Mobile appFunktionalitätLecture/Conference
10:29
APIDirection (geometry)Programming languageTape driveCache (computing)Computer animation
12:37
Graph (mathematics)ACIDHigh availabilityDatabaseFederal Department for Media Harmful to Young PersonsString (computer science)Data typeFunktionalitätServer (computing)CouchDBDatabaseAnbindung <Informatik>PlatteCodeInstallable File SystemAbsolute valueIn-Memory-DatenbankUser profileFacebookProgramming languageSeries (mathematics)Information retrievalAssembly languageVolumetric flow rateLecture/Conference
19:05
Different (Kate Ryan album)High availabilityACIDDatabaseDatabaseServer (computing)Set (mathematics)Process (computing)Instanz <Informatik>Asset <Informatik>High availabilityEigenvalues and eigenvectorsSierpinski triangleComplete metric spaceEckeHigh availabilityOpen sourceFunktionalitätSQLComputer animation
21:48
String (computer science)Server (computing)String (computer science)Data typeGeordnete MengeClefXMLDiagram
22:53
NeWSDirection (geometry)Set (mathematics)FunktionalitätMetric systemNumberHausdorff spaceGeordnete MengeData typeLecture/Conference
24:34
Server (computing)Network socketServer (computing)UNIXAnbindung <Informatik>Route of administrationMilitary operationSocket-SchnittstelleNormaleClient (computing)DatabaseData typeProgram flowchartLecture/Conference
26:42
Graph (mathematics)FactorizationSource codeHauptspeicherBenchmarkZugriffFocus (optics)DatabaseImplementationVelocityServer (computing)Volumetric flow rateData typeMassXMLProgram flowchart
28:15
Graph (mathematics)Print <4->Set (mathematics)DemosceneVelocityImplementationData typeServer (computing)Machine codeDefault (computer science)Computer programmingCodeProgramming languageDatabaseLecture/ConferenceJSONXML
30:15
DebuggereMuleGraph (mathematics)GenderSingle-precision floating-point formatComputer fontLagCodeComputer animation
31:31
Machine codeDebuggerGraph (mathematics)GenderSingle-precision floating-point formatUser interfaceCodeSet (mathematics)Print <4->Set (mathematics)Social classArray data structureVariable (mathematics)Graph (mathematics)Vertex (graph theory)Instanz <Informatik>Error messageComputer animation
32:58
Single-precision floating-point formatGenderDebuggerGraph (mathematics)Print <4->CodeInstanz <Informatik>Data typeComputer animation
34:47
DebuggerGenderTransmitterSimulationDemosceneAnbindung <Informatik>Direction (geometry)UpdateServer (computing)Client (computing)Version <Informatik>Query languageSet (mathematics)Computer animation
36:48
DEBUG <Programm>Machine codeDebuggerPrincipal ideal domainHTTPTerminal equipmentServer (computing)Kernel (computing)Graph (mathematics)Thread (computing)Configuration spaceMaximum (disambiguation)Server (computing)Data typeGraph (mathematics)Set (mathematics)SAP <Marke>Computer animation
38:04
DebuggerQuery languageDEBUG <Programm>DemosceneGraph (mathematics)Proxy serverOutlookMultiplicationInstanz <Informatik>Scheduling (computing)DatabaseGraph (mathematics)Direction (geometry)Proxy serverOpen sourceClefMilitary baseXMLLecture/ConferenceComputer animation
40:13
Proxy serverMachine codeDatabaseDirection (geometry)Graph (mathematics)Computer programServer (computing)CountingVersion <Informatik>World Wide WebLecture/ConferenceComputer animation
42:07
Machine codeWEBMicrosoftMachine codeRun-time systemSeries (mathematics)Point cloudWeb serviceHigh availabilityTwitterWindows AzureGoogleServer (computing)Source codeSubsetScheduling (computing)Query languageCodeLecture/Conference
48:47
Operating systemPlatteCache (computing)Absolute valueCluster analysisHash functionSoftware as a serviceServer (computing)BlogSimultaneous localization and mappingVirtual machineLecture/Conference
55:28
openSUSELecture/ConferenceXMLComputer animation
Transcript: German(auto-generated)
00:07
Guten Morgen. Schön, dass ihr da seid. Wir haben schon nach elf. Bevor es losgeht, einfach mal die Gründe gefragt, wer hat denn Redes schon mal benutzt und wer setzt es momentan ein? Ja, sehr gut. Wir sind relativ, ich sag mal, eine überschaubare Truppe. Das
00:27
heißt, wenn zwischendurch Fragen bestehen, die Antworten bedingen, die kürzer als eine Stunde sind, würde ich euch bitten, ganz einfach zwischendurch kurz die Hand zu heben. Ich wiederhole dann die Frage und längere Fragen, oder ich sag mal, Fragen,
00:40
die vielleicht ein bisschen ausführlicher Antwort bedingen, bitte am Schluss. Dann wird dann auch der liebe, wer ist das denn? Michael Marco? Nee, sondern Sebastian auch mit dem Mikro durch die Gegend laufen. Wir zeichnen hier auf, deswegen ist Mikro wichtig. Okay, fangen wir einfach mal an. Dieser Vortrag ist meinem Sohn gewidmet, der kann leider heute hier nicht hier sein. Deswegen, ja, Luca, wenn du den Stream
01:01
sehen solltest, ist für dich. Okay, vielleicht erstmal ein paar Worte zu mir selbst. Christoph Zimmermann, ich bin Techie durch und durch. Ich habe mal vor langen Jahren über Betriebssysteme promoviert. Da habe ich auch Linux kennengelernt. Das war so Anfang der 90er Jahre. Wir waren damals in Dublin dabei, einen experimentellen
01:20
Mikrokernel zu bauen und wir suchten halt eine Entwicklungsumgebung zum Testen und entwickelnde Software. Und da gab es diesen Kern von diesen Linus Torwalds, der war damals noch in der Version Punkt 9. Porto, wie wir dann hinter live gegangen sind mit dem System, war das dann Punkt 9.5, also vor der kernel Version 1. Ja, und seitdem benutze ich
01:42
Linux. Ich bin Tech Support bei der Fralog. Da machen wir auch den Maustüröffnertag. Sendung mit der Maus, wem sagt das was? Fans seit 40 Jahren, ne? Okay, ganz kurz, Sendung mit der Maus ist ein relativ bekanntes Format des WDRs. Der WDR macht seit sieben
02:02
oder acht Jahren den sogenannten Türöffnertag, wo Türen geöffnet werden, die sonst verschlossen bleiben. Feuerwehren, Kochstudios, Kinos, Müllverbrennungsanlagen, Heizkraftwerke, etc., machen ihre Türen auf. Als Bestandteil des, wie gesagt, sogenannten Türöffnertages, man muss sich registrieren, wir machen es als Fralog seit
02:24
fünf Jahren und wir müssen meistens schon die Warteliste im August zumachen. Das Ganze findet am 3. Oktober 2019, dieses Jahr, in Frankfurt im Gallus statt. Es gibt noch, glaube ich, seit gestern Abend drei Plätze, das heißt, wer in Frankfurt wohnt oder bei Frankfurt ein Kinder hat, den er mal open source nahebringen möchte, das ist
02:46
Türöffnertag. Das Ganze läuft viel folgt, also ganz einfach zwei Sätze noch dazu, vielleicht hat hier jemand Interesse. Es werden Gruppen gebildet von Kindern, die am Laptop die erste Erfahrung mit Impress sammeln können, es wird mit Scratch programmiert, es wird mit Linux Musik gemacht. Die Idee ist ganz einfach,
03:02
den Kindern innerhalb von fünf bis sechs Stunden open source nahe zu bringen. Auch als Gegenentwurf quasi zur Microsoft Produkt-Schulung, die ja auch leider häufig als sogenannte Informatik angeboten wird. Er lacht, er weiß wovon ich rede. Deswegen, wie gesagt, wenn Interesse besteht, kurz anmelden und es sind ein paar Plätze
03:22
frei. Daneben bin ich Arch-Depository, Arch-User-Depository, Package-Maintainer, das ist ein Hobby, was ich nebenher mache. Arch ist eine Distro. Es gab gestern eine Art Staffroom, den ich auch selbst betreut habe. Daneben alles, was mit Software Lebenszyklus zu tun hat, insbesondere Design-Methodologien, Security, aber auch
03:43
sowas, wie mache ich der Software sicherer? Das ist auch so eine Art Hobby von mir. Daneben mache ich noch einiges im Bereich Social-Engineering, kognitive Psychologie, also quasi menschliche Seite der IT-Security. Und wenn dann noch Zeit bleibt, bin ich für eine Firma Redis Labs, Solution-Architekt für den
04:01
Bereich Dach-Aber und deswegen stehe ich unter, auch heute auf der Bühne, Community-Lesung. Das heißt, das gesamte Community-Management im Dachumfeld, also Deutschland, Österreich, Schweiz, steht vor euch im Prinzip. Kurze Übersicht, über was wir heute reden. Für wenige, die Redis noch nicht kennen, ganz kurze Übersicht. Was ist es? Wie ist die generelle
04:22
Architektur aufgebaut? Welche Features gibt es? Und dann werde ich mal die Applikationsperspektive etwas genauer beleuchten. Da gibt es dann auch eine Demo, wo ich einfach mal vorführen werde, wie denn Redis so tickt und was man mit Redis jenseits des Cachings, wo es wahrscheinlich die meisten von euch hier kennen, so machen kann. Das Ganze wird dann abgeschlossen mit einer
04:42
Zusammenfassung, einen kurzen Ausblick, was so für Redis 6 auf dem Programm steht. Fangen wir einfach mal an. Zehn Jahre Redis. Wer kann mir denn sagen, wann es den ersten Commit gab? Ja, das Datum. Michael, volle Punktzahl. Einfach so eine Idee. Am 21. März 2009 gab es den ersten Commit. Ein gewisser
05:07
Salvatore Sanfilippo war Ende 2008 auf der Suche nach einer Datenbank für ein Web Reporting Projekt, das gewisse Charakteristika aufweisen sollte, nämlich so was wie Realtime-Fähigkeit. Er hat sich Memcached
05:21
ihm ein bisschen genauer angeschaut, kam aber aus einigen Gründen nicht Frage. Er hat einen Blick auf Postgres geworfen, aber die Performance, die er brauchte, Postgres klar als relationale Datenbank, war halt nicht so ganz oben auf der Liste. Und da hat er angefangen, ursprünglich mal ein Key-Value-Store selbst zu schreiben. Vergleiche mit Memcached die, der sich aber im Laufe der Jahre relativ schnell zu einer multimodalen
05:42
Datenbank entwickelt hat. Was das ist genau ist, werde ich gleich mal drauf genauer eingehen. Ich selbst nutze die Datenbank seit 2011. Das war der fünfte Commit oder so. Und zwar war ich damals auf der Suche für meine FPM-Instanz nach dem Opcode-Cache. Also ganz
06:00
klassisch da, wo Redis als Key-Value-Store irgendwoherherkommt. Ich habe mir Memcached die angeguckt, hatte bei, also sorry, FPM sagt ihm was, als App-Server für, also FPM ist einer der, glaube ich, populären App-Server für PHP. Und ich war damals, weil es auf einer Hardware-Architektur lief, die 32 Bit hat,
06:21
ein Kern, 512 MB, und drauf steht CYXL 325. Das ist ein NAS-Enclosure, was unter, wenn es ausgeliefert wird von CYXL aus, unter einem proprietary Linux läuft. Und da lief mir dann auch Archim am Weg und seitdem laufen auf der Maschine, sie ist immer noch in Betrieb, in dieser Minimal-Konfiguration, fünf
06:43
Engine X-Instanzen, paar Next-Clouds, ein Tor Relay und auch was anderes. Unter anderem aber auch Redis, also wie gesagt als PRP-Opcode-Cache. Der Footprint von Redis auf der Architektur liegt gerade mal bei gut 100K. Das ist einfach mal so eine Hausnummer und deswegen wird, hier läuft Redis sehr häufig über den Weg im Kontext
07:03
von Embedded Systems. Ich kann leider den Namen nicht nennen, aber jemand, der in der Schweiz wohnt und da Busse durchgegenfahren sieht, die so gelb sind, auf jedem Bus läuft eine Redis-Instanz, die sich um Fahrkarten kümmert, die sich um Logistik kümmert und so weiter und so fort. Die benutzen aber auch Redis im Backend als Primary Database
07:21
in ihren Rechenzentren. Okay, wie gesagt, deswegen man trifft es häufig gerade im Embedded Umfeld, weil halt der Footprint so extrem klein ist. Paar Zahlen. Redis hat so circa 162 Klienten in circa 48 Pyrami-Sprachen, dürfte damit die NoSQL-Datenbank
07:43
sein, die die meisten Klientenanbindungen hat. Es gibt Klienten selbst für Haskell und Lisp sowieso und natürlich auch die gängigen Pyrami-Sprachen. Also allein für Java gibt es drei, Lattice, Jaddis und Vertex. Mir ist letztens noch ein zweiter Rust-Client über
08:02
den Weg gelaufen. Eigen kenne ich klar, weil ich programiere gerade selbst in Rust, ich habe es gerade gelernt und deswegen ist natürlich ein Redis-Anbinder auch ganz wichtig. Aber wie gesagt, für die meisten gängigen Pyrami-Sprachen gibt es mehr als eine Ableitung, die unterschiedliche Semantiken mitbringen. Jaddis ist eine relativ einfache Anbindung, wenn man mal im Java-Umfeld bleibt. Während, ich sage mal,
08:23
Lattice schon als Spring, als Aufsatz von Spring schon relativ viel Semantik mitbringt, die aber auch nicht unter Umständen eine etwas starne Lernkurve aufweist. Das Ganze hat mehr als 6.500 Commits auf GitHub. Salvatore ist immer noch der Main Maintainer, ist immer noch der Project Lead
08:42
auf GitHub. Das heißt, er gibt auch die Richtung von dem Projekt vor. Er ist zwar bei Redis Labs angestellt als Technical Board Advisor, aber die Projekt-Roadmap, die gehört ihm. Da lässt er sich auch nicht von Redis Labs reinreden, was für mich sehr, sehr wichtig ist, weil das Ganze ist unter einer BSD-Lizenz. Das heißt,
09:02
man kann mit der Code-Basis machen, was man möchte und das soll also auch so bleiben. Deswegen, wie gesagt, die Unabhängigkeit oder die streckte Trennung von Redis Labs, die zwar das Ganze mitfinanziert, klar logisch, aber die IPs sind immer, die sind weiterhin noch bei Salvatore, Sanfilippo. Es gibt mehr als 100
09:23
Bibliotheken, die aufbauend auf den Klientenanbindungen unterschiedliche Funktionalität realisieren. Ich habe, seid mal in den Marken, ich habe selbst letztes Jahr angefangen, den Python-Klienten um Streams zu erarbeiten. Was Streams sind, gehe ich gleich noch genauer drauf ein. Das Ganze hat dann AnimeCurvy akzeptiert, AnimeCurvy ist der Main-Main-Tainer des
09:42
Standard-Python-Klienten und seit November letzten Jahres gibt es halt auch Streams in der Python-Variante. Also ich selbst als Community-Manager steuere halt auch noch als der Community etwas dazu. Ich laufe halt nicht durch die Gegend, ich laufe vor dir, sondern tue auch was. Das
10:00
Ganze Projekt hat 26.000 GitHub-Stars, mehr als 26.000 GitHub-Stars, so eine Art Währung, was die Popularität der Code-Basis angeht. Wir haben mehr als 244 Kontributoren, hoffentlich vielleicht nach diesem Wochenende einige von euch, die einfach mal gucken, was man da eventuell noch hinzufügen kann, ein bisschen sowas beisteigen können. Und es gibt eine relativ aktive
10:21
Community auf Stack-Overflow und anderen Plattformen, mit Fragen aber auch Antworten. Kommen wir da einfach mal dazu, was Redis heute ist. Wie gesagt, viele von euch, wer hat es als ersten Use-Key nicht als Cache
10:40
eingesetzt? Darf man fragen, was du damit gemacht hast? Okay, ja, okay,
11:07
klasse. Danke für den Hinweis, ganz kurz zusammengefasst, es ging bei der
11:20
Antwort darum, JWT-Tokens zu speichern und als Nicht-Caching- Hintergrund. Genau, und das Ganze auch zu validieren, ganz zusammengefasst, für den Stream und die Aufzeichnung, alles gut. Ne, weil die meisten kennen es, ich habe, wie gesagt, ich bin das beste Beispiel, ich habe es für eine PHP-Op-Cache ursprünglich
11:41
mal gesucht, bin so eingesetzt. Aber seit circa drei Jahren gibt es die sogenannten Module. Man konnte Redis vorher schon mit Lua-Skripten, d.h. man konnte nativ Lua-Skripte auf dem Server ausführen. Module sind jetzt die nächste Ergänzung zu, ich sage mal, einem Server, der schon relativ mächtig ist, was
12:00
NoSQL-Funktionalität angeht, aber auch, ich sage mal, sich mehr und mehr Richtung applikationsspezifischer NoSQL-Datenbank erweitert. Wir haben zum einen die nativen Datenschritte, und da würde ich gleich noch ein bisschen genauer drauf eingehen, was die sind. Aber die Module sind meistens in C programmiert. Mittlerweile gehen auch mehr und mehr Leute dazu über, die in Rust zu programmieren.
12:20
Genau genommen, wenn man ein Modul programmiert, braucht man eine Programmiersprache, die eine ganz wichtige Eigenschaft hat. Sie muss C beidem unterstützen. Sofern das der Fall ist, kann man eigentlich jede Programmiersprache benutzen, Go, Rust und wie sie alle heißen, oder auch C++, um Module zu schreiben, sofern, wie gesagt, diese Eigenschaft erfüllt ist. Aus Performancegründen wird
12:40
man meistens irgendwas C, Go oder Rust-artiges benutzen, einfach, weil diese Programmiersprachen die Eigenschaften haben, sehr unterum, wenn man es richtig macht, sehr einen performanten Code zu erzeugen. Eine ganz wichtige Eigenschaft, diese Module, was machen die? Die definieren einen neuen Datentyp, der entsprechend dann
13:00
auf der Klientenseite auch reflektiert wird durch eine entsprechende klientenbasierte Anbindung. Werde ich gleich noch genau darauf eingehen. Es gibt Standardmodule, die zum Teil von Redis Labs kommen, zum Teil auch von der Community. Die fangen so an bei JSON, was aus Redis eine, ich sag mal, dokumentbasierte Datenbank macht, vergleichbar von der Funktionalität her in Ansätzen
13:21
mit Mongo beispielsweise oder CouchDB. Das heißt, Payload in JSON und entsprechend auch Indizierung etc. ganz wichtig. Redis hat eine ganz wichtige Eigenschaft. Wenn in der Dokumentation String steht, heißt das, das sind Binary Safe Strings. Deswegen jeder Datentyp kann eigentlich in String reingepackt
13:41
werden, kann am Schluss zugeordnet werden. Ich kenne sehr viele Projekte, die da so was ablegen wie MP3s, aber auch JPEGs. Der Server, den kümmert es eigentlich nicht, was in dem Payload drinsteht. Der sorgt sich nur für die performante Speicherung und das Retrieval. Insbesondere fast Redis die Daten nicht an, wie das vielleicht andere
14:01
Datenbanken tun. Es sei denn, man gibt dem Modul explizit diese Funktionalität mit. Beispielsweise bei Redis Search, was eine Volltextsucher auf Strings ermöglicht. Da ist natürlich im Rahmen von Stemming, Indizierung etc. pp schon eine Analyse des Textes angesagt. Deswegen wird da natürlich meistens entweder UTF-8 oder
14:20
ASCII verwendet. Time Series ist so das letzte Modul, was gelauncht wurde. Das verwandelt Redis quasi in eine Influx DB. Von der Funktionalität her gesehen. Die API ist natürlich ein bisschen verschieden, aber die Funktionalität ist vergleichbar mit einer Influx. Dann Streams. Streams ist kein Modul, sondern Datentüt. Da will ich gleich
14:40
noch genauer drauf eingehen. Vergleichbar, ich sag mal, von der Funktionalität her in Ansätzen mit Kafka. Diejenigen, die schon mal mit Kafka gearbeitet haben, Hyperskalierer, Message Bus, Applikationssemantik im Sinne von Consumer Groups. Wir skalieren auf Senkenseite und so weiter und so fort. Und genau das machen wir mit Streams auch. Daneben gibt es noch Graf. Graf ist immer mal
15:02
stolz, falsche Wort, aber hat schon zu einigen, ich sag mal, zu einiger Disruption im Graf-Damenbankenumfeld geführt, weil diese Module haben eine ganz wichtige Eigenschaft. Das gilt natürlich für Graf ebenfalls. Die Funktionalität ist vergleichbar mit entsprechenden anderen
15:20
applikationsspezifischen Datentypen wie Mongo, wie Influx. Aber die nativen Vorteile, die Redis mitbringt, nämlich in der Primary Data Store und damit auch geringer Latenz und sehr hoher Durchsatz, ist auch bei diesen modulespezifischen oder applikationspezifischen Datenbanken gegeben.
15:41
Graf verimplementiert, also Graf-Datenbanken sagen jedem was? So ein bisschen? Nein, vielleicht sagen wir uns ganz kurz mal erklären, was ein Graf-Datenbank ist. Ich werde es gleich noch demonstrieren am Beispiel einer einfachen Graf-Datenbank. Eine Graf-Datenbank implementiert einen Graf. Bestes Beispiel, soziale Netzwerke. Wenn man ein Profil hat, möchte man natürlich wissen,
16:02
welche Freunde dieses Profil hat, bzw. welche Freunde der Inhaber des Profils hat und vor allen Dingen welche Freunde diese Freunde haben, weil so kann man als sozialer Netzwerke-Ambieter relativ schnell feststellen, wofür sich so Leute interessieren. Meistens sind Freundschaften
16:20
auf gemeinsamen Interessen begründet, unter anderem neben Nasenfaktor und Humor und so etc., pp. Bestes Beispiel, der Deutsche Hasenzüchter-Verein. Die Leute züchten Hasen, deswegen sind sie im Verein. Die meisten sind vielleicht auch, wenn sie nicht ganz Spindelfeind sind, irgendwie Freunde oder liken sich oder following zumindest oft soziale Netzwerke.
16:42
So verdienen Facebook und Freunde ihr Geld. So funktionieren soziale Netzwerke. Und die ganz wichtige Eigenschaft, durch diese Abhängigkeiten, wer mit wem befreundet ist, hat man im Prinzip einen ungerichteten Graf. Das ist so die Eigenschaft. Von der Datenstruktur, die dahinter steht. Und ein anderes
17:00
typisches Beispiel ist mir letztens immer im Weg gelaufen, organisiertes Verbrechen. Macht sich keiner ein Bild von. Organisiertes Verbrechen hat eine ganz wichtige Eigenschaft. Es ist nur relativ schwer automatisiert zu durchschauen, wenn man wissen möchte. Typisches Beispiel, irgendwo wird in die Bank eingebrochen. Wenn in die Bank eingebrochen wird,
17:20
bedingt das so Vorbereitung, weil ein Bank-Einbruch wird geplant. Wer wann mit welchem Wagen wo auftaucht. Wer in die Bank einbricht, wer schmierig steht und so weiter und so fort. Die Planung bedingt aber auch, dass irgendwo so was wie Geld herkommt, weil Fluchtautos Kosten halt nur mal Geld. Die kann man mieten oder die kann man kaufen.
17:42
Typischerweise sind bei einem Bank-Einbruch mindestens eine Handvoll Leute eher mehr von Nöten, die die verschiedenen Aufgaben wahrnehmen. Ähnlich wie hier bei der Frostkone, obwohl das mit Bank-Einbruch nichts zu tun hat. Aber ihr wisst, was ich meine. Diese Sachen automatisiert zu erkennen, ist relativ schwierig.
18:00
Es sei denn, man korreliert die Fakten. Also wer beispielsweise mit welcher Kreditkarte wann welchen Betrag abgehoben hat und wofür dieser ausgegeben wurde. Als Beispiel jetzt mal. Und wenn man das tut, kann man und das ist so Gegenstand der Forschung innerhalb der Kriminalistik in Ansätzen feststellen oder auch zum Teil Voraussagen, wann wo eingebrochen werden wird.
18:23
Und genau da, die Grafenstudie, die Datenschritte, die dahinterstehen, ist ebenfalls ein Graf. Ein großer Kunde der Redis Lab setzt das in Starten genau für diesen Zweck ein. Ich fand das ein ziemlich spannendes News Case. Und wie gesagt, das bedingt halt einen Graf, der dahintersteht.
18:41
Wenn wir jetzt mal uns mal ganz einfach Redis Server mal genau, also Redis mal genauer angucken. Was bringt der die Datenbank im No-Syclum für ganz einfach so mit? Obwohl es eine In-Memory-Datenbank ist, gibt es natürlich auch so was wie Persistenz in zwei verschiedenen Ausprägungen. Es gibt Schnapp Shots, die die ganz einfach den Hauptsprecherinhalt
19:01
komprimiert auf die Platte oder auf ein Dateisystem ablegen. Und dann gibt es sowas wie Append Only Files, die logstrukturartig sämtliche Modifikationen innerhalb der Server Instanz nachziehen. Das ist so die Idee hinter diesen zwei Persistenz Ansätzen. Bereits die Open Source Variante kann natürlich auch geclustert werden.
19:20
Wenn man die Codebasis klont, findet man in diesem Verzeichnis ein Miniscript, wo drin steht, wie man ein Minimalkluster auf derselben Maschine quasi implementiert aus verschiedenen Redis Instanzen relativ einfach kreieren kann. Hochverfügbarkeit wird im gibt es gibt auch zwei Ausprägungen hierbei. Entweder man kann explizit
19:40
über Redis.conf, das ist die Konfigurationsdatei, die hinter dem Server steht, einem Master verschiedene Replikas zuordnen. Oder es gibt auch sowas wie Sentinels ist auch relativ gut beschrieben auf Redis.io, wie das funktioniert. Die Idee hinter Sentinels ist, wir haben eine Menge von Master Prozessen und wir haben Replikas. Sentinels sind
20:01
separate Prozesse, die kontinuierlich die Master Funktionalität überwachen. Sollte ein Master ausfallen, wird automatisch ein ein Quorum gebildet zwischen den verbleibenden Prozessen und es wird ein und es wird ein Replika zu einem neuen Master befördert und es wird ein neuer und es wird ein neuer Replikam gelegt. Das alles konfigurierbar.
20:21
Der Takeaway ist, selbst mit der Open-Source-Variante sind Enterprise-Features möglich. Das bedingt ein bisschen Hand anlegen, aber die Funktionalität ist da. Und natürlich je nach Ausprägung, wir decken eigentlich alle drei Ecken des Dreiecks, des CAP-Dreiecks, abbruches Theorien, wenn das jemand sagt.
20:41
Also eine Datenbank, beispielsweise eine Datenbank, also ganz in zwei Sätzen, dieses CAP-Theorien sagt eigentlich aus, dass eine Datenbank, es gibt dieses berühmte Dreieck aus Partitionier, aus Partitionierungstoleranz, Verfügbarkeit und Konsistenz.
21:02
Der Herr Blankenich, der kennt das. Und das CAP-Theorien sagt ganz einfach aus, dass eine Datenbank sich irgendwo in diesem Dreieck befindet, aber nicht alle Dreiecken gleichzeitig abdecken kann. Man muss halt immer Kompromisse machen. Und Redis bringt da jetzt alles mit von hochverfügbar bis hin zu vollständiger Asset Compliance, je nachdem, welche Anforderungen so der Use-Case hat. Jeder Use-Case verlangt
21:21
volle Asset-Kompatibilität im Sinne von klassischen Transaktionen, wie man es aus dem SQL-Umfeld her kennt. Sowas wie Transaktionen in ganz normalen Datenbanken. Wie gesagt, das ist dann, Redis bringt eigentlich alle Mechanismen mit, die man so braucht, um sich seine eigene Verfügbarkeit,
21:41
Atomarität, Konsistenz etc. im Applikationsabhängig quasi zu implementieren. Das ist so die Idee dahinter. Kommen wir mal zu den Datentypen, die der Server unterstützt. Ich habe ein paar Eigenschaften schon genannt. Strings, da kommt Redis ursprünglich mal her. Das war so der klassische, der ganz klassische Key-Values-Dar-Ansatz.
22:02
Im Laufe der Jahre kamen so Bitmaps dazu, Bitfields. Es gibt Hashes, das sind Schlüssel, die aus mehreren Strings bestehen können. Es gibt Listen, wie man es auch aus verschiedenen Poamensprachen erkennt. Es gibt Mengen in zwei Ausprägungen, nämlich ungeochnete Mengen und geordnete Mengen. Geordnete Mengen heißt, wir haben pro Mengen-Element
22:21
einen sogenannten Score. Und dieser Score hat eine ganz wichtige Eigenschaft. Der muss nicht numerisch sein. Dadurch kann man Mengen ordnen. Und genau dieser Datentyp wird von dem Server bereits nativ unterstützt. Bestes Beispiel Recommendation Lists, wenn man ein
22:40
Shopping-Card implementiert. Man möchte natürlich schon, ich sage mal, Vorschläge geben, wenn man irgendwas aussucht. Was haben denn so andere Leute gekauft? Und sowas macht man im Prinzip über sortierte Mengen. Nämlich man listet die die Vorschläge gemäß Ihres Scores auf. Und dieser Score wird durch zwei Metriken
23:00
beeinflussen, nämlich wie viele Leute sich entsprechendes anderes Element angucken und eventuell sogar kaufen. Und die Implementierung, das ist so eine der Standardaufgaben, die ich bei Workshops stelle, implementiert man einen Recommendation Engine mit Redis. Und die meisten Leute brauchen dafür 10 oder 15 Zahlen. Das war es für die für diese Minimal API,
23:20
weil die Funktionalität steckt schon in diesen geordneten Mengen drin. Der Rest ist Zucker auf Klientenseite. Ja, und andere Datentypen umfassen sowas wie geospatiale Indizes, also Koordinatensystemen mit anderen Worten, aber auch sowas wie probabilistische Datenschrotturen, die Redis schon von Hause aus mitbringt. Zwei Beispiele. HyperLockLock dient dazu,
23:41
festzustellen, ob ein Element in einer gegebenen Menge mit einer gewissen Wahrscheinlichkeit enthalten ist. Und jetzt kommt der Knackpunkt, ohne die Menge vollständig überhaupt sprechen abzulegen. Hatten gewissen Charme, wenn man so in Richtung CDNs denken konnte, Delivered Networks. Interessanterweise setzt ein relativ großer Videodienst,
24:00
fängt mit N an, hört mit X auf. Redis genau in diesem Use Case ein, nämlich nachzugucken, ob Content, den er gerade streamen möchte, bereits lokal irgendwo vorhanden ist oder ob der von Upstream geholt werden muss. Und genau das machen die mit HyperLockLocks. Und es gibt noch ein zweiter Ausprägung, das sind
24:21
Bloomfilter, die gehen dieselbe Richtung und Streams. Ich habe es eben schon erwähnt, quasi unsere Antwort auf Kafka beziehungsweise auf einen hyperskalierbaren Messagebus. Wenn man sich jetzt mal anguckt, wie so generell so ein Redis Server aufgebaut ist. Wir haben natürlich den Server,
24:40
der kommuniziert entweder über einen Port oder über ein Unix Socket, also ein Domain Socket. Portnummer? Sehr gut. Das ist so der Standard Port ganz genau, wo auf dem Redis läuft. Und die unterste Schicht
25:00
ist meistens bei den meisten Klientenbibliotheken eine Schicht namens HireRedis. Das ist eigentlich nur ein C-Wrapper um diese Kommunikationsinfrastruktur, nämlich um Sockets im allgemeinen Fall. Darauf aufbauend haben wir sowas wie sprachspezifische Anbindungen,
25:21
die sich auf diese HireRedis Schicht stützen und auf diese sprachspezifischen Anbindungen stützen sich dann modulespezifische Bibliotheken. Bestes Beispiel, sowas wie Redis Search. Der Python Client ist genauso aufgebaut. Der Python Client implementiert,
25:40
für Redis Search implementiert den Datentyp, den Redis Search zur Verfügung stellt als nativen Python Datentyp mit den gewissen Operationen, die der Server unterstützt. Sowas wie Dokument einfügen, Dokument indizieren, suchen, aber auch sowas wie Dokument löschen aus der Datenbank.
26:01
Und unten drunter läuft die ganz normale RedisPy Standup-Bibliothek, wie man sie von dem Standup-Python Client herkennt. Der wiederum stützt sich auf HireRedis. Das ist so die Standardarchitektur, die man bei circa 90 Prozent auch der modulespezifischen Sprachanbindung findet.
26:20
Das ist so die Idee dahinter. Und gerade weil HireRedis da in dem Umfeld sehr, sehr weit verbreitet ist, findet man es halt auch als requirement bei den meisten Modulimplementierung auf klärenden Seite. Gibt es bisher Fragen, die man kurz beantworten kann? Okay, dann gucken wir doch einfach mal, wie es so
26:41
geschwindigkeitsmäßig aussieht. Ich gehe da jetzt gar nicht so in Detail drauf ein, aber die NoSQL-Performance ist vielleicht nicht unbedingt so gut zu erkennen. Aber der Takeaway ist hier, ob es eine Cassandra, ob es eine M-Cache, die ist, Redis ist schneller, zum Teil auch im Längen. Die Sachen kann man sich auf GitHub und andere Webpages relativ gut angucken.
27:01
Genügend Leute haben entsprechende Benchmarks ausgeführt und, wie gesagt, einfach mal googeln. Zum Vergleich Streams, da haben wir verglichen genau Kafka und Redis. Man sieht natürlich, dass also Kafka, für die, die es nicht kennen, macht, macht ein Gerüttelmaß
27:20
der Partitionsdaten, werden auf Platte abgelegt. Genau das ist das, was man hier sieht. Deswegen im Idealfall fünfmal schneller zu sein, ist nicht so kompliziert, wenn man den Fokus wirklich auf Speicher hat. Das ist so die Idee dahinter. Und Grafis gibt einen Benchmark vom vorigen Jahr, der auch von von Tiger bestätigt wurde.
27:41
Wir sind um Faktor drei schneller als damals schon die schnellste Graf Datenbank am Markt, die aber, glaube ich, sogar Closed Source war. Das ist halt so, ich sage mal, der Main Takeaway hier ist wirklich bedingt dadurch, dass sämtliche Werte im Hauptspeicher abgelegt werden, der eine entsprechende geringe Latenz hat,
28:01
was den Zugriff angeht, aber auch entsprechend Durchsatz und der Server relativ schlank ist, was die Implementierung angeht, dieser Datentypen, erreicht man da entsprechende Geschwindigkeiten. Dieselbe Philosophie findet man auch bei den Modul Implementierungen. Die meisten Module, die mir bis jetzt mal im Weg gelaufen sind,
28:20
haben eine ganz wichtige Eigenschaft. Wo es auch immer geht, nutzen sie nativ vorhandene Datentypen, weil diese Datentypen haben eine Eigenschaft. Die Implementierung im Server ist A vorhanden und B auf Effizienz getrimmt. Das ist so die Philosophie hinter Redis. Wenn es geht, schlanker Code,
28:41
minimale Implementierung, Geschwindigkeit. Das ist so die Philosophie hinter diesem Datenbank, hinter diesem NoSQL-Server. Okay, gucken wir uns einfach mal an, wie sowas generell funktioniert. Ich stütze mich auf Python. Ich hoffe, es hängen damit nicht so viele Leute ab. Das Ganze ist relativ, ich sage mal,
29:01
nicht unbedingt Python spezifisch. Derjenige, der die Programmiersprache schon mal ungefähr gesehen hat, sollte mit dem Code was anfangen können. Was hier gemacht wird, es wird eine Verbindung zu Redis aufgebaut. Das ist redis.redis. Redis ist die Standardmodul von Python, was ich eben schon kurz beschrieben habe. Die Code-Response ist Python 3 geschuldet,
29:21
weil die String-Behandlung zwischen Python 3 und Python 2 ein bisschen anders ist. Und ich habe einfach jetzt mal Python 3 genommen. Deswegen sollte man da per Default sagen, die Code-Response ist, ich vermute mal, anime-curvy wird das umstellen. Nächstes über nächstes Jahr, wenn Python 2 irgendwann mal verschwindet, in Anführungsstrichen.
29:40
Wir setzen einen Schlüssel namens Hello auf den World und holen dann den Dat und holen dann diesen diesen Schlüssel wieder zurück aus der Datenbank und drücken ihn aus. Und das war es auch schon. Einfach mal, ich sage mal, ein kleiner Kurzschnipsel, um mal zu zeigen, wie einfach doch eine Programmierung gegen Redis ist. Was ich jetzt mal zeigen werde
30:00
und jetzt wird es ein bisschen jetzt wird es ein bisschen praktischer. Ich werde euch jetzt einfach mal zeigen, wie man eine Graph-Datenbank und Redis anlegt. Und zwar werde ich das ebenfalls in Python machen, aber nicht auf Folien, sondern am lebenden System. Das setzen wir einfach mal hin. Ihr werdet mich jetzt nicht sehen, aber ich rede trotzdem weiter.
30:22
Das ist so, da bin ich jetzt schon wieder im falschen. Machen wir es hier mal zu. Ich hoffe, jeder kann das einigermaßen sehen. Ja, kann das jeder? Ist der Font groß genug? Sonst, ich kann ja auch größer machen. OK, ich werde jetzt nicht zahle für zahle durchgehen.
30:42
Es sei denn, es gibt Fragen. OK, interessant, weil ich habe es letztes Mal probiert ohne und dann.
31:01
Genau, danke für den Hinweis. Der Hinweis war, braucht man wirklich die Code Response? Und da gab es die Rückmeldung aus dem Publikum. Nein, braucht man nicht unbedingt. Seltsamerweise. Da müssen wir noch mal in die Spezifik reingucken, weil ich hatte es irgendwann mal probiert und habe da eine halbe Stunde lang suchen müssen, wie ich es hintergekommen bin, dass genau an diesem Beco Response lag.
31:23
Lass uns da mal nach dem Foto reingucken. Vielleicht gibt es dann eine relativ einfache Lösung. Ich möchte jetzt gar nicht zwischen Code zu zahle für zahle durchgehen, aber mal ganz kurz, was hier so passiert. Print Race ist einfach eine Hilfsfunktion,
31:41
die ein Result Set ausgeben. Ein Result Set ist im Prinzip eine Menge von einem Query, der darüber aussagt, im Sinne von Ich habe einen Graf und gib mir doch mal die Knoten zurück und die Beziehungen zwischen den Knoten, die sogenannten Edges, die eine Eigenschaft aufweisen. Ein Result Set ist eine Menge
32:01
von diesen Knoten und Print Race bricht jetzt diese Knotenmenge runter in einzelne Records und diese Records bestehen aus Feldern und genau die werden ausgegeben. Wenn man sich mal hier anguckt, was hier so generell passiert, es wird eine Relicent Stunt auf klärter Seite aufgemacht. Das ist Teil 15.
32:21
Dann wird ein bereits vorhandener Graf nur um sicher zu sein gelöscht. Wenn er nicht da ist, passiert nicht allzu viel außer einer entsprechende Fehlermeldung, die via Returns zurückgegeben wird. Dann wird ein neuer Graf angelegt. Das ist relativ einfach. Race-Graph gleich Graph und der soll dann auch Social heißen und der soll auf der Verbindung, die in Variable R gespeichert ist,
32:41
abgelegt werden. Ganz wichtig hier, Relicent Graph ist der Person Klient für das Graf Modul und es werden drei Klassen importiert, nämlich einen Knoten, eine Edge, also quasi eine Verbindung zwischen zwei Knoten und der Graf an sich. Und das war es aber auch schon. Und genau diese Datentypen
33:01
werden auf Serverseite durch das Modul implementiert. So funktioniert das generell bei allen Modulen. Der Rest vom Code ist relativ schnell erklärt. Es werden Knoten angelegt. Jeder Knoten hat eine Eigenschaftliste und hat einen Namen. In dem Fall in Teile 19 heißt der Knoten Person.
33:23
Und die zugehörten Eigenschaften sind so was wie Name, Alter, Geschlecht und Status. Und das wird für, ich sage mal, für drei Personen gemacht. Und dann gibt es weitere Knoten, nämlich in dem Fall,
33:40
es wird ein Knoten kreiert, der heißt Country und der Name von dem Knoten ist Japan. Und dann gibt es eine ganz wichtige Eigenschaft, die John mit Japan verbindet, nämlich dass John Japan besucht hat. Und genau das wird durch diese Edge modelliert. Nämlich die Edge hat die Eigenschaft
34:02
gesucht. Und die Property, also ebenfalls, ich sage mal, Text, die man analog zu den Knoten einer Edge mitgeben kann, ist der Grund, warum das Land besucht wurde. In dem Fall hier Pleasure. Das Ganze wird für drei weitere Personen gemacht. Pearl hat Australien
34:22
aufgrund einer Geschäftsreise besucht. Das ist dieser zweite Abschnitt, Teile 26 bis 31. Und Mary hat Deutschland ebenfalls geschäftlich besucht. Sobald dieser Graf auf klärenden Seite konstruiert wurde, gibt es ein Statement in Teile 40 namens Redis Graf Commit. Damit wird der Graf
34:40
quasi dem, der Server Instanz gegenüber committet. Und damit kann er auch schon abgefragt werden. Und genau das passiert ab Teile 42. Nämlich, ich möchte einfach mal die Ergebnismenge haben von Personen, die ein bestimmtes Land aus welchem Grund besucht haben. Ich iteriere in Teile 42 über den Grund.
35:02
Das ist in Teile 44, 45 ist die Query, die genau diese, die genau diesen Graf so abfragt, nämlich ich möchte ein Match auf der Person, auf dem Land haben. Ich möchte als Ergebnismenge den Namen, das Alter, den Status und den Landnamen
35:21
und den Namen des Landes zurückbekommen. Und der Purpose, den ich, den ich dann ganz einfach mitgebe, quasi als einziges Abfrageelement ist, der ist der Grund, warum man Land besucht wurde. So einfach geht das. Wir verwenden da beziehungsweise das Modul verwendet da eine Graf, einen Graf Query Standard
35:40
namens Cypher, ursprünglich mal von Neo4j, implementiert mittlerweile Standard in dem Umfeld und natürlich möchte man nicht am Standard vorbei programmieren. Deswegen die erste Version des Graf Moduls deckte ca. 75% der Cypher Syntax ab.
36:01
Es wird ein Update Ende des Monats Anfang September geben. Das ist dann die Version 2.0, die eine fast vollständige, also ich glaube, eine Kommande Filz noch von Cypher ebenfalls implementiert haben wird. Und damit haben wir eigentlich Cypher mehr oder weniger ich sag mal im Sack, was die Clienten Anbindung angeht. Ja, und dann wird hier
36:21
ganz einfach noch die Ergebnismenge ausgegeben über diese Hilfsfunktion. Und diese Query findet genau in Teil 46 statt, wo man ganz einfach diesen String, den man in den Vorzeilen konstruiert hat. Aber ganz einfach in Richtung Server schiebt und dann die Ergebnismenge in den Saal zurückbekommt.
36:42
Und wenn ich das jetzt mal ausführe, ich hoffe, das funktioniert noch so. Nein, natürlich nicht. Warum? Der Server läuft noch nicht. Dann sollte man dann sollte man vorher mal einschalten. So einfach geht das. Man sagt ganz einfach Redis Server und gibt einen Konferenzteil
37:00
mit denjenigen, die Redis kennen, die wissen, was das ist. Und ganz wichtig hierbei ist der Server. Sagt dir, er hat das Graph Modul geladen und hat damit auch diesen applikationsspezifischen Datentyp jetzt am Start. Und darunter ganz wichtig Word Accept Connections. Das heißt, jetzt sollte es
37:20
auch wirklich funktionieren. Und wie wir sehen, das ist die Ergebnismenge. Nochmal ich iteriere über den Grund der Reise und ich habe hier die Ergebnismenge ist tatsächlich. John hat Japan aufgrund
37:41
von Urlaub besucht und die beiden anderen waren auf Geschäftsreise unterwegs. Und das ist eigentlich so, ich sag mal, die die Einfachheit oder dieses Beispiel demonstriert die Einfachheit, wie man A Grafen konstruiert und B abfragt. Weil das waren jetzt 45 Zeilen oder sowas, inklusive Hilfsfunktion etc. pp. Und so einfach
38:01
geht das im Prinzip. Das ist so die Idee hinter den gesamten Modulen bzw. den Datentypen, die die die Module Applikation spezifisch oder orientiert implementieren. Bevor es dann in die Fragerunde reingeht. Kurzer Ausblick. Redis 6 sollte noch
38:20
dieses Jahr an Start gehen. Es wird ein deutlich verbessertes Sicherheitskonzept am Start haben, basierend auf Access Control Lists. Das Wire Protokoll wurde bereits in Teilen von fünf verbessert. Wir reden hier von zwei nach drei. Das heißt, die Effizienz wird auch noch mal gesteigert
38:41
auf Off-Server-Seite. Details dann auf der entsprechenden auf der entsprechenden GitHub-Seite. Es wird wahrscheinlich erst nächstes Jahr ein Cluster geben, ein Proxy geben, den man halt in einem Open Source Cluster einsetzen kann, der dafür sorgt, dass die, dass die einzelnen
39:00
Cluster Instanzen quasi von einem Endpunkt aus angesprochen werden können. Das heißt, man muss nicht unbedingt Klienten-Libraries haben, die cluster-aware sind. Das ist so die Idee hinter dieser Proxy-Implementierung. Dann wir haben Redis Labs hat Anfang des Jahres im April bereits als Tech Preview gelauncht. Es wird Redis Gears geben.
39:21
Redis Gears ist so eine Infrastruktur, die es ermöglicht, mehrere Module miteinander zu kombinieren. Also bestes Beispiel durch die Kombination von Timestamps in Graph kann man dann Graphen erzeugen, die impliziten Timestamps mitbringen. Das heißt, damit sollte dann auch die Versionierung von Graphen kein großes Thema mehr sein. Plus Gears wird dann noch so was haben wie Filter, Mapper,
39:41
Scheduler und so weiter und so fort. Der Tech Preview Code ist auf GitHub. Guckt ihn euch an. Und er ist rudimentär ansatzfähig. Ich würde ihn vielleicht natürlich unbedingt für Produktionen benutzen. Aber man kann schon mal einfach mal gucken, was denn so Redis Gears so mitbringt und wo die Reise so hingeht. Zusammenfassend ja, mit einer, glaube ich, der populärsten NoSQL-Databases
40:02
oder In-Memory-Databases. Deutliche Entwicklung vom Key-Value-Store Richtung Multimodaler Datenbank. Und die Exzensibilität hört bei weitem nicht nur bei Lua auf, sondern geht Richtung Mulude, insbesondere wenn man sich mal Gears anguckt, hin zu einem relativ,
40:21
ich sag mal, performanten NoSQL-DB-Ökosystem. Weil insbesondere diese Module halt zum Teil sehr applikationsspezifische Datenbankentypen oder Datenbanken ermöglichen, wie wir es gerade bei Graph gesehen haben. Ganz kurz, die Folien werden online gestellt
40:41
seitens FrostCon. Ganz kurz ein paar Pointer. Diejenigen, die Redis schon mal benutzt haben, Redis.io, vollständige Kombination in inklusive Klientenbibliotheken. Salvatore hat einen Blog, antires.com, wo er auch mal so ein bisschen Blick hinter die Kulissen erlaubt, gewisse Designentscheidungen begründet.
41:00
Letztes Beispiel wahrscheinlich, warum das Wire Protocol in Version 2, in Version 3 auf jeden Fall rückwärts kompatibel zu Version 2 sein wird. Es gibt eine Community Dokumentation, inklusive Module unter redislabs.com Community. Es gibt natürlich auch einen Quickstart, bekannt wahrscheinlich von diesen schwarz-gelben Büchern,
41:21
gibt es natürlich auch auf Redis. Kostnichts kann man sich so runterladen. Eine letzte Sache, die Redis Labs powert oder sponsert, ist eine University. Kostnichts, man muss kein Kunde sein. Man geht einfach auf university.redislabs.com, ist das Geschenk der Firma und die Community, die natürlich auch aktiv am Server mitarbeitet. Man legt sich einen Count an, man weht den Kurs aus,
41:41
man belegt den Kurs, man folgt dem Kurs Content, dem Kurs Inhalt, man macht die Hausarbeiten, man legt eine Abschlussprüfung ab und dann gibt es ein Zertifikat. Und was ich ebenfalls plane, ist ein Workshop,
42:00
ein Redis Workshop auf der diesjährigen PyCon. Das heißt, wer im Oktober nach Berlin fährt, einen Blick auf das Programm werfen, da sollte dann hoffentlich in den nächsten paar Wochen, wenn nicht einfach mal eine Mail an die Organisatoren schreiben, sagen, ich möchte dahin. Die Idee ist, einen halben Tag
42:20
für Hands-on-Redis-Programmierung von Python aus darzustellen, inklusive demodulten Stellen, die ich ganz kurz hier angeschnitten habe, für Graf beispielsweise, aber dann auch mal Hands-on zu programmieren mit Time Series, mit anderen Modulen, je nachdem, wo Bedarf besteht. Die Idee ist ganz einfach,
42:41
Leuten, Python-Programmierern, Redis näherzubringen im Rahmen der diesjährigen PyCon. Das ist so die Idee. Und wie gesagt, wenn Interesse besteht, ich bin auf jeden Fall noch bis heute Nachmittag hier, sprecht mich an, sollte aus irgendwelchen Gründen die Sache nicht auf der Schedule auftauchen, schickt eine Mail an die Veranstalter, sagt, ihr wollt den Workshop haben, weil ich glaube,
43:01
das PyCon-Programm wird demnächst erst finalisiert. Deswegen alles gut. Ok, kommen wir dann mal zu den Fragen. Ja. Kannst du noch mal was zum Jason-Modul sagen? Was bringt mir das? Wenn ich das einsetze. Ja.
43:22
Jason. Wer weiß nicht, was Jason ist. Ganz wichtig. Bevor ich die Frage beantworte. Ok, jeder weiß, was Jason ist. Du hast ein Jason-kompatibel, du hast ein Jason-basiertes Dokument, das kippst du rein und dann hast du im Prinzip eine Query-Language am Start, die entsprechend indizieren und Dokumente, die du finden kann.
43:42
Das ist insbesondere interessant, wenn du analog zum Mongo oder Couch-Base sowieso Jason-Payloads bereits hast, aber dir ist, sag mal, Couch-Base oder Mongo nicht so die Performance bringen, die du eigentlich brauchst in deinem No-Secret-Real-Time-Umfeld. Das ist so die Idee hinter Jason.
44:00
Momentan setzen wir da auf JS Query als Query-Sprache. Wir werden aber mit Redis Gears und dieser ganzen Modulinfrastruktur auch eine Volltext-Indizierung anbieten auf dieser Re-Jason-Basis. Das ist so die Idee hinter dem zweiten Halbjahr diesen Jahres bis zur Q1 nächsten Jahr.
44:20
Das heißt, guckt euch an. Wie gesagt, die Quellcodes sind auf GitHub und spielt einfach mal damit rum und guckt, ob es passt. Nächste Frage. Wie viel Zeit haben wir eigentlich noch? So 10 Minuten oder so? Perfekt. Danke. Wir sind ja hier auf der FR-OSCON.
44:42
Vor einem Jahr, knapp einem Jahr, ging mal so ein Aufschrei durch die Free-Software-Community, dass Redis da irgendeine Common-Clause einführt. Ich habe das nicht so genau verfolgt, weil ich das zurzeit nicht einsetze betrieblich. Was bedeutet denn das für eine kleine Firma? Common-Clause heißt ganz einfach.
45:01
Damals hieß Common-Clause, Redis Labs hat, das ist ganz wichtig, Common-Clause, aber auch Redis Software Available License, RSAL, bezieht sich ausschließlich auf einige Module. Und der Hintergrund war ganz einfach, AWS und Freunde nehmen den Quellcode, committen nicht zurück und machen damit Kohle.
45:21
Mal ganz einfach formuliert. Ganz wichtig hierbei ist, es bezieht sich nur auf eine Untermenge der Module. Der Server an sich ist BSD. Das war so, das ist so und das wird auch so bleiben. Das heißt, wenn Amazon, Azure und so weiter und so fort, die die Code Pass nehmen wollen, damit Geld verdienen wollen,
45:42
bitteschön. Ist zwar jetzt nicht, ich sag mal so ideal zielführend, weil, wie gesagt, von AWS kommt relativ wenig zurück. Google und Microsoft sind ein bisschen mehr, wir sind ein bisschen weiter unterwegs, aber es bezieht sich nur auf einzelne Module. Und was RSAL aussagt
46:00
ist eigentlich für diese Module. Ihr dürft mit dem Quellcode weitermachen, was ihr wollt, mit Ausnahme. Ihr dürft den nicht kommerziell als Cloud Anbieter einsetzen. Das war es aber schon. Das heißt, selbst wenn ihr so was plant, wir Redis Labs Partner mit Microsoft, Partner mit Google, es sind Deployments möglich.
46:21
Allerdings sollten wir dann vorher reden. Nämlich genau das, was nämlich genau das, was AWS nicht getan hat. Das war so, ich sag mal in zwei Sätzen, die Idee hinter RSAL. Und der Punkt war ganz einfach, sehr viele Leute haben es missverstanden, nämlich gesagt, um Gottes Willen, Redis wird proprätär. Es gab da insbesondere ein Talk auf der diesjährigen Fostamp von Ihnen, wie heißt er gleich noch?
46:41
Chris Lamb. Chris Lamb, ganz genau, sorry. Ja, der, ich sag mal, eher unglücklich war, weil ich glaube, der war nicht zielführend, weil da wiederum Leute der Meinung waren, siehe auch Twitter hier vom Simon Phipps. Redis ist proprätär. Nein, ist es nicht. Es ist weiterhin BSD. Alles gut. Ja, beantwortet die Frage nicht so ganz.
47:03
Ich bin natürlich kein AWS. Das ist mir egal, was mit AWS ist. Aber wir sind eine Firma, wir verdienen auch Geld und haben ja einen Web Service. Na, das ist natürlich schwierig, ob wir einen Web Service haben, natürlich unser Produkt im Web verfügbar. Wie ist die Definition von einem Web Service,
47:21
von einem Cloud Service? So Gegenfrage. Welche von diesen Modulen setzt ihr ein, die unter Aura Service? So, damit ist die Frage beantwortet, weil ihr nehmt den Server Code, ihr nehmt Redis Open Source, ihr kompiliert das, ihr setzt das in eurem Ökosystem ein. Das war's.
47:40
Der Server ist hiervon nicht betroffen. Ja, und aber die Module sind auch interessant. So, jetzt müssen wir genau angucken. Es stehen nur einige Module wie Time Series und, glaube ich, Graf unter Aura Service. Das sind ja die Interessanten. Wenn ihr dann platen, also was heißt Cloud Service? Cloud Service heißt, eure Kunden gehen in eure Umgebung
48:01
und mieten Redis Instanzen, die genau diese Module einsetzen. So, dann sollten wir ein Produkt bauen, wo da zum Beispiel eine Time Series drin ist. Also, wir sind kein Cloud Service. Die werden da nicht selber programmieren. Aber in unserem Produkt ist da irgendwie eine Time Service drin.
48:23
Entschuldigung. Dann fallen wir dann unter die Klausel oder nicht? Das ist ja auch so ein bisschen die Diskussion gewesen, dass das so eine Gummiklausel ist, was man jetzt eigentlich nicht weiß. Natürlich verdienen wir damit Geld.
48:40
So, der Punkt ist, es ist beziehungsweise primarkt auf Cloud Anbieter. Man müsste jetzt einfach mal in den genauen Use-Case reingucken. Also typisches Beispiel, bietet ihr diese Dienstlässungen als Software as a Service an. Dann würde ich sagen, sollten wir vorher reden, wenn ihr dagegen, ich sag mal, das einfach nur in eurem Ökosystem einbaut, sollte es da eigentlich keinen großen Diskussionsbedarf geben.
49:02
Aber im Zweifelsfall, get in touch with Redis Labs. Danke. Nächste Frage. Ich hab die ersten fünf Minuten nicht mitbekommen, deswegen weiß ich nicht, ob das da Thema war. Redis ist in-memory und es wird immer benutzt als Cache. Oder auch häufig benutzt als Cache.
49:21
Daher kommst du ruhig mal her. Genau. Und jetzt kann man es ja, wie wir gesehen haben, für viel mehr Sachen benutzen. Absolut. Wo ich ein bisschen Angst habe, ist, wie sicher sind meine Daten da? Wenn das in-memory liegt und nicht direkt im Speicher landet, wie groß ist mein,
49:41
also hab ich ein größeres Datenverlustrisiko, muss ich irgendwie besondere Vorsichtsmaßnahmen treffen? Denn in vielen Fällen ist mir die Performance egal. Okay. Ich hab's eben schon kurz erwähnt. Es gibt zwei Persistenzen, die Redis unterstützt. Du kannst einen Snapshot auf Platte speichern oder du kannst kontinuierlich ein sogenanntes Append-Only-File mitlaufen lassen.
50:02
Ist im Prinzip eine Logging-Struktur. Und diese Sachen in Redis.conf siehst du die Konfigurationsoptionen. Damit hast du eine Persistenz von deinen Daten gegeben. Entweder der Server loggt kontinuierlich mit, welche Daten wie verändert werden zu welchen Zeitpunkten. Oder er macht einmal konfigurierbar
50:20
einen Snapshot, den er auf Platte ablegt. Damit hast du eigentlich die Mechanismen am Start, die du brauchst. Und ich verstehe das richtig. Wenn ich den Snapshot mache, dann wird alle paar Minuten ein Snapshot gemacht. Konfigurierbar, ja. Und wenn ich diese Log-Struktur benutze, dann muss ich mir keine Gedanken mehr machen,
50:41
weil dann ist alles sofort im Log, wenn ich Daten ändere. Auch ebenfalls konfigurierbar. Das heißt, selbst wenn es zum Serverausfall kommt und das Betriebssystem zumindest noch einen F-Sync macht oder einen Sync, bevor es irgendwie die Grätschen macht, die Datenchen auf der Platte. Weil wir verlassen uns da auf F-Sync und Freunde.
51:01
Und sobald unser Verhandler das Betriebssystem mitspielt, dann sind die Daten da, wo sie sein sollen, persistent. Und sobald der Server, er guckt nach, ist konfigurierbar, ist in einem bestimmten Direktorie eine Dampumpunkt-RDB vorhanden. Wenn ja, wird die beim Serverstart automatisch geladen. Brauchst du um nicht Sorgen zu machen. Und dann hast du im Prinzip wieder in den alten Stand.
51:22
Perfekt, danke. Weitere Fragen? Hier vorne. Aber vielleicht, um es noch anzuknüpfen, die Default-Konfiguration ist schon so, erst wenn 500 Keys geschrieben wurden, so kenne ich dieses Standard-Setup, dann wird irgendwie dieser Schreibvorgang gemacht. Und genau dieser Parameter ist konfigurierbar, zu welchem Zeitpunkt dann wirklich
51:41
Batchweise oder wirklich Keyweise geschrieben werden soll, richtig? Das ist genau. Die meisten Leute sagen halt, okay, jede Minute, alle 30 Sekunden. Du kannst aber auch sagen, nach allen fünf Schreibvorgängen. Das ist also, beides ist möglich. Redis.com hat ca. 90% erklärenden Text.
52:01
Der Rest sind tatsächlich Konfirmationsparameter. Guck ganz einfach in die Kommentare rein. Bezüglich Persistenz, es gibt ja auch noch diesen Redis-Cluster. Ja. Vielleicht kannst du da auch noch kurz zwei, drei Sätze sagen, wie sieht da mit der Persistenz aus? Der Redis-Cluster, ja, besteht aus...
52:20
Der Redis-Cluster besteht aus einzelnen, ich sag mal, Redis-Instanzen. Was heißt jetzt Cluster? Cluster heißt... Dieser Cluster hat eine ganz wichtige Eigenschaft, der ist shared nothing. Das heißt, und setzt natürlich auch clusterfähige Client-Mobile-Taken voraus, ganz wichtig. Das heißt, der Cluster
52:40
guckt sich einen Schlüsselnamen an, macht darüber einen Hash und identifiziert mit diesem Hash, mit diesem CRC16 die Redis-Instanz in dem Cluster, wo die Daten geschrieben werden. Und jetzt hängt es davon ab, wie genau diese Redis-Instanz konfiguriert wurde für die Persistenz. Weil wenn die ausfällt, sind die Daten, die sie verwaltet, ebenfalls weg. Hauptspeichermäßig gesagt,
53:00
es sei denn, du persistierst sie vorher. Das ist eine reine Scharling, ganz genau. Das heißt, was typischerweise Leute machen, die sich eine Open-Source-Cluster zurecht stricken, die setzen Chef, Puppet, Sword und wie sie alle heißen oder Ansible ein, kreieren verschiedene Redis-Instanzen auf verschiedenen Knoten. Wurde in Maschinen oder anders wie.
53:21
Die eine ganz wichtige Eigenschaft haben, nämlich der Persistenzanstellung ist überall gleich. Damit sollte ein Shard in die Grätsche gehen oder die VM, die einen Shard powert, in die Grätsche gehen, haben sie auf jeden Fall die Daten, die der Shard verwaltet, auf der Platte stehen. Das ist so die Idee dahinter.
53:40
Und so funktioniert es generell. Anschlussfrage dazu, kann man auch Quorum machen, dass man auf zwei Shards zum Beispiel das gleichzeitig schreibt? Und dann, wenn einer ausfällt, hat man eben auch den anderen? Oder ist das wirklich ein Nothing-Nothing-Nothing? Genau, das ist so der nächste Schritt. Ich habe es eben kurz erwähnt. Es gibt eine... Der einfachste Fall ist,
54:01
du hängst mehrere Replikas in einen Master. Das heißt, jede schreibende Änderung auf den Master wird auf die Replikas repliziert, alles gut. Daneben gibt es noch etwas ausgefeilteres, was Sentinel heißt. Die Sentinels unterscheiden zwischen, ich glaube, ich hatte sie eben kurz erwähnt, unterscheiden zwischen Master und Replikas und monitoren einen Cluster konstant
54:22
und stellen fest, gibt es eine Netzwerkseparierung zwischen einzelnen Cluster-Knoten. Sollte das der Fall sein, versuchen sie, ein Quorum zu etablieren und dann einen entsprechenden Subcluster zu kreieren. Und propagieren dann auch eine Replika in diesem Untercluster zu einem neuen Master.
54:42
Und das ist so die Kombination aus Riftverfügbarkeit und Clustering. Redis.io, da ist es genau beschrieben, wie es en detail technisch funktioniert. Nächste Frage. Okay. Ich habe jetzt noch T-Shirts. Das bedingt aber die richtige Beantwortung von zwei Fragen. Ich habe zwei T-Shirts. Also ich habe mehr T-Shirts, aber das sind die größten, die ich dabei habe.
55:01
Wann war der erste Commit von Redis? Größe? XL? XXL? Kommst du gleich vorbei. Okay. Zweite Frage. Welche Eigenschaften müssen Module aufweisen, damit sie an den Redis-Server angebunden werden können?
55:20
Ja. Kommt ihr beiden gleich nach vorne, ich hoffe, ihr habt eure Größe dabei. Vielen Dank!