Nikita Galushko, Entwickler des Online-Shops Lamoda, teilte beim Besuch des Slurm-Schulungszentrums seine Eindrücke vom Kafka-Kurs mit und erläuterte, wie diese Technologie eingesetzt wird und welche Probleme in der Forschungs- und Entwicklungsabteilung (Forschung und Entwicklung) gelöst werden.
"Wie schnell werden wir den Netzwerkkanal erreichen, den Kafka nutzt - in zwei Jahren oder weniger?"
Lamoda ist einer der größten Online-Shops in Russland und der GUS. Damit Käufer die Website problemlos nutzen und schnell versenden und liefern können, sind 340 Mitarbeiter bei Lamoda mit IT-Systemen beschäftigt: Entwickler, QS-Ingenieure, Analysten, DevOps-Spezialisten, Produktmanager, Designer. Lassen Sie uns herausfinden, wie sich die Zahnräder in diesem System drehen.
Erzähl mir was von dir. Was machst du bei Lamoda und wie lange arbeitest du schon dort?
Wie ich gerne sage: "Ich drücke die Knöpfe und sie zahlen mir Geld dafür." Ich drücke jetzt seit ungefähr sechs Jahren Knöpfe. Die ganze Zeit habe ich in Go geschrieben. Ich bin vor nicht allzu langer Zeit, seit Oktober 2020, bei Lamoda, aber ich habe es bereits geschafft, meine Tentakel in vielen Serviceprojekten freizugeben.
Ich arbeite in der Abteilung RnD (Forschung und Entwicklung). In dieser Abteilung schreiben Sie eine Woche lang einen Service für Kafka und entscheiden, wie eine verteilte Transaktion zwischen Kafka und PostgreSQL durchgeführt werden soll. In der nächsten Woche schreiben Sie einen Codegenerator für Aerospike. Das ist ein sehr interessanter Job.
Verstehe ich richtig, dass F & E stark mit Analytik verbunden ist?
Ja, wir arbeiten eng mit Datenwissenschaftlern zusammen. Sie führen Analysen durch, trainieren und erstellen Modelle und kommen dann zu uns mit der Bitte, diese Modelle in den Betrieb einer Anwendung oder Website einzubetten. Zum Beispiel ein Modell, das Benutzern eine personalisierte Liste von Empfehlungen anzeigt oder vorschlägt, welche Größe von Kleidung oder Schuhen am wahrscheinlichsten zu einem Kunden passt.
Welche Aufgaben mögen Sie an Ihrer Arbeit? Was ist für Sie in der Forschungs- und Entwicklungsabteilung interessant?
Das ist wahrscheinlich Freiheit. Sie sind nicht auf eine Wissensdomäne, einen Dienst oder eine kleine Gruppe von Diensten beschränkt. In F & E können Sie Änderungen am Service in Go und am nächsten Tag Änderungen in Java vornehmen. Für einige kann dies ein Nachteil sein, da es bei diesem Ansatz schwierig ist, sich auf einen Dienst zu konzentrieren. Für mich ist dies jedoch eine Gelegenheit, mich in verschiedenen Bereichen zu versuchen, zu sehen, welche Ansätze die Entwickler zur Lösung verschiedener Probleme verwendet haben, und etwas Neues für mich selbst zu lernen.
Wir haben kürzlich damit begonnen, einen Codegenerator zum Parsen von Aerospike-Ergebnissen zu entwickeln. Da er Rohdaten liefert, müssen Sie diese ständig von Hand analysieren. Und dies sind potenzielle Fehler und eine Verschwendung wertvoller Zeit: Sie haben etwas vergessen oder etwas nicht überprüft, und das Ergebnis entspricht nicht Ihren Erwartungen. Deshalb haben wir darüber nachgedacht und beschlossen, unseren eigenen Codegenerator zu schreiben. Bisher funktioniert es im Testmodus, aber ich hoffe, dass wir es bald öffnen werden.
Macht Lamoda oft Open Source-Projekte?
Lamoda hat ein relativ bekanntes Open-Source-Projekt namens Gonkey . Sie können mehr darüber in unserem Artikel lesen .
Gonkey ist eine standardisierte Reihe von Lösungen, mit denen Autotests einfach in der Yaml-Markup-Sprache geschrieben werden können. Dies ist praktisch, da solche Tests sowohl von Entwicklern als auch von Testern geschrieben werden können, wodurch der Prozentsatz der Testabdeckung erhöht wird.
Jetzt entwickelt sich dieses Tool im Unternehmen nicht so schnell, wie wir es uns wünschen, aber wir planen, in Zukunft mehr Zeit dafür zu investieren: Pakete schließen, die auf Github geöffnet werden, Fragen beantworten, verbessern.
Höchstwahrscheinlich benötigen Sie dafür einen breiten Wissensschatz, um doppelt so viel wie gewöhnlich zu lernen. Ist es so?
Ich würde sagen, dass Sie nur einen breiten Ausblick haben müssen.
Oberflächlich?
Nicht sicher so. Es gibt so etwas wie einen T-förmigen Entwickler. Er versteht sehr gut, sogar ausgezeichnet, in einem Bereich, aber gleichzeitig ist er in einer Reihe anderer Bereiche mehr oder weniger versiert. Ich habe bereits gesagt, dass ich jetzt in Java schreibe, aber immer noch 99% des Codes, den ich in Go schreibe. Wenn Sie den Go-Stack sehr gut kennen und gleichzeitig wissen, wie man sich umschaut, ist dies nicht nur gut, wenn Sie in der Forschung und Entwicklung arbeiten, sondern im Allgemeinen. Sie können einige Ideen und Ansätze aus anderen Technologien und Sprachen lernen.
Ich kenne Leute, die eine Weile in Python geschrieben und dann zu Go gewechselt haben - sie mochten, wie diese Sprache mit der Fehlerbehandlung umgeht. Jetzt versuchen sie, den gleichen Ansatz für Projekte zu entwickeln, die in Python schreiben.
Wahrscheinlich hat jeder Entwickler, der entwickeln möchte, keine andere Wahl - Sie müssen in verschiedenen Bereichen upgraden. Sie werden nicht für immer sitzen können, um nur einen hochspezialisierten Bereich zu verstehen. Wenn Sie irgendwo arbeiten, müssen Sie sich weiterentwickeln.
Nach meinem Verständnis sind die Aufgaben in Forschung und Entwicklung vielfältig. Musstest du dabei etwas lernen?
Lernen und Entwickeln mit mir, seit ich mich in der 10. Klasse des Lyzeums mit Programmieren vertraut gemacht habe. Es macht mir Spaß, wenn ich etwas Neues lerne oder wenn ich anderen von etwas Neuem erzähle. Vor Lamoda habe ich an VKontakte gearbeitet und mich auf die gleiche Weise entwickelt, Artikel gelesen, Kurse besucht und Reden von Konferenzen gesehen.
Ich möchte nicht rennen, um Bücher zu lesen und mich selbstlos zu entwickeln - jeder entscheidet für sich. Auch wenn Sie ein Beispiel für eines meiner früheren Werke nehmen: Wir haben alles in Go geschrieben, und parallel dazu habe ich nach Rust geschaut. Es war damals noch nicht so beliebt und Artikel zum Thema "Go versus Rust" aus dieser fernen Zeit waren für mich sehr interessant. Gleichzeitig brauchte ich es nicht für die Arbeit.
Wenn wir über die Arbeit bei Lamoda sprechen, was mussten Sie im letzten Jahr außer Kafka upgraden?
Arbeiten mit Kubernetes und Schreiben von Steuerkarten. Ich habe übrigens mit Ihnen einen Kurs über Kubernetes besucht, weil ich vorher noch nicht mit ihm gearbeitet hatte. Normalerweise handelte es sich entweder um virtuelle Maschinen oder um physische Hardware, und alles ging entweder über die Administratoren, oder Sie hatten selbst Zugriff auf die Einführung des Deb-Pakets. Deshalb musste ich Kubernetes beherrschen: nicht auf der Ebene "durch kubectl, um den Zustand des Pod-a zu sehen", sondern auf der Ebene, das Ruderdiagramm richtig zu schreiben und zu verstehen, wie es im Inneren funktioniert.
Lassen Sie uns über Kafka sprechen, während wir uns mit Kursen befassen. Warum hast du den Kafka-Kurs besucht?
Ich sah ein Banner auf der Website: " Kafka-Kurs kommt bald ." Und ich dachte: "Wir müssen gehen!"
Wie gesagt, ich liebe es einfach, neue Dinge zu lernen. Sie müssen nicht sieben Zoll in der Stirn sein, um eine Nachricht in Kafka auf der Mindeststufe zu senden oder zu lesen. Aber im Allgemeinen wird Lamoda Kafka schon lange und fest verwendet. Daher war ein tiefes Eintauchen in diese Technologie für mich unvermeidlich.
Was ist Kafka für dich?
Für mich ist dies ein verteiltes, fehlertolerantes Protokoll mit einer einfachen Interaktionsschnittstelle, die eine unglaublich große Datenmenge durch sich selbst pumpen kann.
Wie wird Kafka in Lamoda verwendet?
Es scheint mir, dass es sehr schwierig ist, einen Dienst zu finden, der Kafka in Lamoda irgendwie nicht nutzt. Wir haben Event-Bus darauf implementiert Ist so ein Veranstaltungsbus für den ganzen Lamoda. Jemand schreibt einige Ereignisse, und jeder andere Teilnehmer, der mit diesem Bus verbunden ist, kann sie lesen und irgendwie darauf reagieren.
Wenn wir über neue Projekte sprechen, haben wir kürzlich einen Dienst zum Sammeln von Analysedaten aus xlog-Backends gestartet (dies ist der interne Name). Auch über Kafka, da es einen hohen Durchsatz des gesamten Systems erfordert.
Kafka wird auch benötigt, um mit ClickHouse zu arbeiten, das über eine Kafka-Engine verfügt. Das heißt, wir schreiben nur an Kafka und ClickHouse liest und schreibt Daten in sich selbst. Dies ist sehr praktisch, da wir an einem der Projekte arbeiten, bei denen Sie häufig und häufig Einträge in ClickHouse vornehmen müssen. Und wie wir wissen, weiß ClickHouse nicht, wie man das sofort macht - es benötigt einen geeigneten Proxy. Jetzt hat der Markt eine Lösung von Yandex und VKontakte, aber da Lamoda bereits über gute Fachkenntnisse in Kafka verfügt, haben wir uns entschlossen, diese für die Kommunikation mit ClickHouse zu verwenden.
Wir verwenden es auch aktiv für alle Arten von Analysen.
Wie nutzt das F & E-Team Kafka? Wenn Sie sagen, dass Kafka Protokolle für Sie sind, verstehe ich dann richtig, dass Sie Dienste damit entwickeln, dh Sie arbeiten mit Kafka Streams?
Wir haben einen eigenen Wrapper über der Bibliothek für die Arbeit mit Kafka, der eine Art Abstraktion bietet. Tatsächlich hat Go Kanäle: Entwickler lesen aus dem Kanal und schreiben dort. Sie denken vielleicht nicht einmal darüber nach, ob es Kafka ist oder nicht.
Welche Probleme haben Sie und Ihr Team mit Kafka? Wie haben Sie versucht, sie zu lösen?
Jetzt haben wir eine Frage, wie schnell wir den Netzwerkkanal erreichen, den Kafka nutzt - in zwei Jahren oder früher? Und dahinter stellt sich eine andere Frage: Welche Komprimierung sollte aktiviert werden und für welche Themen in Kafka, um diese Geschichte zu verschieben?
Herkömmlicherweise ist derselbe Analysedatenerfassungsdienst der erste Kandidat für die Komprimierung. Wir können jedoch nicht einfach die Komprimierung aktivieren und aktivieren, da dies eine Art Kompromiss zwischen der CPU-Auslastung bei Herstellern und Verbrauchern darstellt.
Jetzt versuche ich, ein Dokument mit Tests und Analysen vorzubereiten. Ihr Kurs hat mir übrigens sehr geholfen, da es eine separate Lektion zum Benchmarking von Kafka gibt. In diesem Dokument möchte ich darüber nachdenken, ob jetzt die Komprimierung für diesen Dienst aktiviert werden muss. Wenn ja, welche soll einbezogen werden, da es unterschiedliche Komprimierungsalgorithmen gibt. Es scheint mir, dass dies das offensichtlichste Thema für Verbesserungen ist.
Gibt es derzeit Brennprobleme mit Kafka?
Als wir ClickHouse für die Zusammenarbeit mit Kafka eingerichtet haben, gab es ein Problem, dass die Beschreibungsrechte in der von uns verwendeten Gruppe nicht ganz richtig eingestellt waren.
Es sieht weniger beängstigend aus als ein Plan, auf Bandbreite zu stoßen.
Ich werde Sie auch fragen, was ich kürzlich gelernt habe. KIP500 wurde von Kafka 2.8 veröffentlicht, um ZooKeeper aufzugeben. Und so wie ich es verstehe, ruhte Kafka auf der Anwesenheit von ZooKeeper, seinen Grenzen. Sie versprechen, dass sich die Anzahl der Partitionen auf zwei Millionen erhöht, wenn ZooKeeper verlassen wird. Löst das irgendwie dein Problem?
Wenn Sie direkt antworten, dann nein, es löst sich nicht, weil wir nicht auf die Arbeit von Kafka stoßen, sondern auf den Netzwerkkanal, den wir zuvor verwenden. Sie kommt problemlos mit der Datenmenge zurecht, die wir an sie senden - der Kanal ändert sich hiervon nicht.
Wenn wir über den KIP500 sprechen, haben sie den ersten Schritt zur Aufgabe von ZooKeeper getan, aber bisher sieht es nicht nach einer zuverlässigen Lösung aus: Es lohnt sich wahrscheinlich nicht, ZooKeeper abrupt aufzugeben und für einige mehr oder weniger geladene Produktionssysteme auf 2.8 umzusteigen.
Der Punkt ist, dass Ops normalerweise mit Kafka zu tun haben und verstehen müssen, wie aufkommende Probleme gelöst werden können. Jetzt wissen sie: Wenn etwas passiert ist, müssen sie in Kafka und in ZooKeeper etwas anderes tun. Und wenn er nicht da ist, funktioniert der Plan zur Lösung der Probleme nicht, und Sie müssen Fachwissen in dieser Angelegenheit entwickeln.
Ich habe richtig verstanden: Sie stoßen auf das Netzwerk und die horizontale Skalierung von Kafka hilft nicht, das heißt, ist es nur ein Netzwerkproblem?
Im Allgemeinen wird Kafka so erstellt, dass Sie auf das Netzwerk oder etwas anderes stoßen, jedoch nicht auf dessen Leistung. Ich erinnere mich genau, was im Kurs darüber gesagt wurde, und die Lehrer erklären ausführlich, warum dies so ist. Aber wir werden nicht darüber sprechen, damit diejenigen, die interessiert sind, den Kurs sehen können.
Bei der großen Aufgabe ist alles klar - Bandbreite. Und um dieses Problem zu lösen, sind Sie zum Kurs gegangen, um sie aufzuheitern und etwas ins Team zu bringen. Ist das ein Zufall oder absichtlich passiert?
Zufall, weil ich ursprünglich den Kurs gesehen habe, nicht nur um zu lernen, wie man in Kafka schreibt. In der Tat müssen Sie für eine gute und korrekte Replikation die richtigen Bestätigungen festlegen. Der Kurs befasst sich mit den Innenseiten des Systems und seiner Funktionsweise.
Wenn es sich um einen Kurs handelt, gibt es keine Unterteilung in Entwickler und Administratoren. Haben Sie alle Themen durchgesehen oder durch den Administrator gescrollt?
Ich habe alle Themen durchgearbeitet, weil alles für mich interessant ist. Es macht mir Spaß, neue Dinge zu lernen. Normalerweise mache ich mir Notizen und kehre nach einer Weile zu diesen Notizen zurück, lese sie noch einmal durch und werfe etwas weg. Wenn etwas unklar ist, gehe ich, um einen Teil des Kurses zu überarbeiten und einen Teil der Zusammenfassung neu zu schreiben.
Hast du dein Praktikum gemacht? War es für Sie schwierig, sie zu implementieren, insbesondere diejenigen, die Administratoren sind?
Ich bin durchgekommen, aber noch nicht alle. Nein, es war alles gut genug geplant, wie und was zu tun ist und welches Ergebnis zu erwarten ist. Es war interessant für mich.
Zunächst wird eine Java-Anwendung für einige praktische Arbeiten verwendet. Ich war daran interessiert, nicht nur diesen Job zu machen, sondern einige Zeit damit zu verbringen, den Code in Java zu lernen, der mit Kafka funktioniert. Sie müssen etwas tiefer und breiter schauen, wenn Sie solche praktischen Aufgaben erledigen.
Das heißt, Sie betrachten Technologie.
Ja. Bei der Arbeit an Partitionen ging es um Replikation. Und ich dachte, was würde passieren, wenn ich es etwas anders machen würde. Ich habe mir die Zeit genommen, um herumzuspielen und zu überprüfen, was passiert, wenn ich einen Knoten ausschalte. Und wenn zwei? Was ist, wenn ich etwas anderes mache? Es ist gut, dass es einen Stand zum Üben gibt, Sie müssen nichts von sich selbst heben. Sie müssen keine Zeit damit verschwenden.
Sagen Sie uns, was für Sie am interessantesten war? Was haben Sie darüber herausgefunden, warum waren Sie sehr überrascht?
Zum Beispiel, dass Kafka tatsächlich eine In-Memory-Warteschlange ist. Wir sind daran gewöhnt, dass Datenbanken nicht nur auf die Festplatte schreiben, sondern auch fsync aufrufen, damit das Betriebssystem Daten auf die Festplatte löscht. Denn nur das Aufrufen von write garantiert nicht, dass die Daten geschrieben werden.
Kafka macht das nicht: Es ruft nur Schreiben auf, einen Systemaufruf, und das war's. Er sagt einfach: "Sie sind das Betriebssystem, Sie entscheiden, wann Sie es zurücksetzen möchten." Tatsächlich wird die Zuverlässigkeit von Kafka durch Replikation sichergestellt. Das wusste ich nicht. Ich dachte, Kafka ruft fsync auf und speichert ehrlich alle Daten auf der Festplatte. So gerissen ist sie.
Es war auch interessant, über die Probleme mehrerer Rechenzentren zu hören.
Ihre Bandbreitenaufgaben. Was haben Sie aus dem Kurs herausgenommen, um zukünftige Herausforderungen zu meistern?
Wie man die Leistung von Kafka misst und wie es mit komprimierten Daten funktioniert. Kafka dekomprimiert sie nicht, sondern schreibt sie auf die Festplatte und gibt sie den Verbrauchern so, wie sie sind. Dies machte deutlich, dass es notwendig ist, die CPU-Kosten nicht nur für den Produzenten zu betrachten, der in Kafka schreibt, sondern auch für den Verbraucher, der daraus liest. Nun, und wie man es richtig bewertet.
Oder war für Sie etwas Schwieriges im Kurs? Oder war die Praxis besonders schwierig?
Es war genau so: Ich habe mir mehrmals ein Video angesehen. Genau überarbeitet über die Neuausrichtung der Verbrauchergruppe. Beim ersten Betrachten war nicht ganz klar, wie dies geschieht. Ich spreche nicht von einem einfachen Ausgleich, sondern von einem inkrementellen. Dies musste überarbeitet und neu gelesen werden.
Das Thema ist an sich komplex. Sie haben das Video gesehen und es scheint aus der Ferne klar zu sein, aber Sie möchten alle Prozesse klar verstehen, also müssen Sie es überarbeiten. Nur mit einem Bleistift sitzen, um zu zeichnen - dann merkt man, dass alles klar geworden zu sein scheint.
Abschließend werde ich fragen: Was haben Sie in Ihren Plänen für Ausbildung und Arbeit?
Ich fing an zu bloggen. Ich habe eine Domain gekauft und sie kostenlos auf DigitalOcean erhöht - sie verteilen statische Inhalte kostenlos. Das Bloggen gibt mir einen Anreiz, etwas zu lernen, es aufzuschreiben und mit anderen zu teilen. Sie verstehen das Thema, wenn Sie es jemandem erzählen können, damit er es auch versteht.
Und der Blog gibt nur die Fähigkeit des Nacherzählens. Jetzt beschäftige ich mich mit der Effizienz von GIN-Indizes. In Kürze wird es einen Artikel zu diesem Thema geben, der auf dem letztjährigen GolangConf-Vortrag basiert.
Sie müssen immer selbst nachsehen: Wenn Sie die Kraft haben, lesen Sie den Artikel über die Funktionsweise von Go.