Credits: Technologievektor erstellt von pikisuperstar — www.freepik.com

Als Entwickler befinden wir uns oft in Situationen, in denen wir etwas bauen müssen, aber nicht die Zeit haben, uns so zu entwickeln, wie wir es gerne h?tten. Und wir k?nnen die Timelines nicht immer nach hinten verschieben, denn ? Time to Market “ spielt manchmal eine entscheidende Rolle für den Erfolg des Produkts. Also, was machen wir? Wir machen Abstriche, gehen kalkulierte Risiken ein, lassen den Puristen in Ihnen los (Best Practices, Unit-Test-Coverage und bla bla bla). Ich denke, es w?re für die meisten von euch auch schrecklich ?hnlich.

Die heutige Geschichte handelt davon, wie wir in ca. einer Woche in einem Drei-Personen-Team ein hochskaliges , fehlertolerantes , verteiltes Bestenlisten-/Scoring-System aufgebaut haben.

In diesem Blog wird es in erster Linie diese Lerneimer geben

  1. Technisch : Wie baut man eigentlich ein solches System, Themen wie verteiltes Systemdesign, Skalierbarkeit, Resilienz, Verfügbarkeit sollen abgedeckt werden.
  2. Arbeiten gegen die Zeit : Wie Sie in kurzer Zeit liefern, welche Kompromisse Sie eingehen, wie Sie Entscheidungen schneller treffen.
  3. Entwicklungslebenszyklus : Sie erhalten auch einen kleinen Einblick in den Produktentwicklungslebenszyklus, was für die Entwicklung guter Software erforderlich ist.

Kapitel 1: Die Anforderungen

Alles begann, als unser Produktteam sagte, dass die T20-Weltmeisterschaftssaison ist und wir ein Quiz-System für unsere Benutzer erstellen m?chten, um kurzfristige Vorhersagen zu treffen.

Der Anwendungsfall war, dass Benutzer zu Beginn eines Overs aufgefordert werden, ein Szenario vorherzusagen, für das sie 20/30 Sekunden Zeit haben. Und am Ende wird der Moderator überreichen, was unter all den vorhergesagten Szenarien tats?chlich passiert ist. Und die Bewertung würde basierend darauf funktionieren, wer richtig geantwortet hat und wie viel Zeit für die Beantwortung ben?tigt wurde.

Also haben wir sofort nach Erhalt der Anforderung eine Aufwandssch?tzung vorgenommen und das passte eindeutig nicht zu unserem Budget, also haben wir Funktionen gestrichen, die wir bei v0 überspringen konnten. Dies ist wichtig, da Sie in einer engen Frist m?glicherweise weniger Funktionen ausgeben m?chten als unausgegorene Funktionen.

Dies wird in erster Linie ein Backend-orientierter Blog sein. Entschuldigung, ich kann nicht erkl?ren, wie diese sch?nen Benutzeroberfl?chen erstellt wurden.

Kapitel 2: Design

Als n?chstes wurde offensichtlich das System entworfen, das im Volksmund als High-Level-Design bekannt ist. Das war für mich der schwierigste Teil und der lustigste Teil. Wir haben kein umfangreiches Low-Level-Design durchgeführt und alle Modellierungsaufrufe w?hrend der Implementierung im Handumdrehen angenommen.

Schritt 1: Ma?stabssch?tzung

Bevor wir etwas begannen, machten wir eine grobe Sch?tzung, welche Art von Verkehr uns treffen würde. Angesichts der Gr??e unseres Systems sch?tzten wir, dass sich vielleicht 50.000 Menschen an dem Quiz beteiligen werden. Also haben wir uns zum Ziel gesetzt, für 100.000 Benutzer zu bauen . Aber die meisten Leute würden wahrscheinlich in den ersten 10 Sekunden in einem 30-Sekunden-Fenster antworten. Das gibt uns ungef?hr ein Ziel-QPS von 20k.

Meine Faustregel lautet, dass bei einem neuen System das System immer für die doppelte Anzahl der erwarteten Benutzer ausgelegt ist. Damit Ihr System skaliert, falls Sie am Ende mehr Benutzer haben. Und die Benutzer wachsen im Allgemeinen mit der Zeit, sodass Sie das System nicht st?ndig ?ndern müssen. Das hei?t aber nicht, dass man an die Stelle der eigentlich ben?tigten Infrastruktur die doppelte Infrastruktur setzt. Meistens h?tte ich Autoscaling in meinen Systemen aktiviert, so dass sich das System bei Verkehrsspitzen selbst skaliert.

(Wir haben auch andere Sch?tzungen bezüglich der Speicherung im Cache gemacht, diese aber übersprungen, um den Artikel kurz zu halten)

Schritt 2: APIs im gro?en Ma?stab identifizieren

Nach der Sch?tzung haben wir schnell identifiziert, was die hochskalierten APIs sind und wo die Verarbeitung hoch sein k?nnte, damit wir selektiv ein skalierbares Design für diese erstellen k?nnen. Der Rest der APIs in geringem Umfang interessierte uns nicht und wir verbrachten nicht viel Zeit damit.

Dies sind also die hochskalierten APIs, die wir identifiziert haben

  1. Holen Sie sich die Benutzerbewertung und den Rang
  2. Rangliste abrufen
  3. Bestenliste berechnen (meist Datenverarbeitung nicht API)
  4. Benutzerantwort posten

Schritt 3: Designüberlegungen

Unmittelbar nachdem ich die Anforderung gesehen hatte, waren mir zwei Dinge sehr klar.

  1. Wir werden aus den offensichtlichsten Gründen eine asynchrone und verteilte Verarbeitung für die Berechnung von Punktzahlen und Bestenlisten ben?tigen . Wenn Sie planen, die Punktzahlberechnung synchron auf einem einzigen Knoten für 1 Million Benutzer oder darüber hinaus auszuführen, viel Glück für Sie ??. Die Idee ist einfach, wir teilen eine gro?e Aufgabe in kleinere Aufgaben auf und führen sie auf verschiedenen Knoten aus, und lassen sie dies in ihrem eigenen Tempo tun. Und wir wollen auch, dass dieser Prozess fehlertolerant ist .
  2. Cache wird unser Freund sein, wenn es darum geht, die R?nge eines Benutzers und die Bestenliste zu lesen. Vor allem aus zwei Gründen, der Geschwindigkeit und der einfachen Skalierung . Ein Cache ist für einfache Lesevorg?nge viel schneller als DB und im Allgemeinen ist es einfacher, Redis/Memcached/Hazelcast- Cluster zu skalieren als Postgres .

Schritt 4: Entwerfen Sie das System

W?hrend ich diesmal die Designentscheidungen traf, entschied ich mich für Technologien, die ich kannte und die ich nicht wagen wollte, die beste Technologie für diesen Anwendungsfall zu finden. Zum Beispiel war ich mit Redis vertraut , daher war es für den Cache die offensichtliche Wahl. Auch wenn ich die Bestenliste h?re, wird sie automatisch in nach Redis sortierte Sets in meinem Kopf übersetzt. Und für die asynchrone Verarbeitung bleibt Kafka nach wie vor meine erste Wahl. Mit der richtigen Zeit würde ich wahrscheinlich ein bisschen mehr erkunden, aber für dieses Mal würde ich nicht in die Wildnis wandern, um die beste Technologie zu finden, weil ich keine ZEIT hatte!!!!

A. Benutzerantwort-API posten

Diese API erm?glichte es unseren Benutzern, Antworten für das Quiz einzureichen. Die gr??te Herausforderung hierbei war, dass dies viele gleichzeitige Schreibvorg?nge erzeugen würde , was die Belastung unserer Datenbank stark erh?hen würde. Also mussten wir zwei Dinge tun

  1. Belastung der DB verringern
  2. Generieren Sie eine Art Gegendruck oder lassen Sie die DB-Betreiber in ihrem eigenen Tempo arbeiten, damit die DB nicht überfordert wird

Meine L?sung zum Verringern der Schreiblast besteht darin, Batching durchzuführen . Wenn ich also 10 Schreibvorg?nge ausführen müsste, würde ich sie stapeln, um eine einzelne Abfrage zu erhalten, und dann 1 DB-Schreibvorgang ausführen.

Und Gegendruck schreit fast Nachrichtenwarteschlangen .

Wenn wir also beides kombinieren, haben wir uns folgende L?sung einfallen lassen…

Nicht ausflippen, erlaube mir zu erkl?ren, was los ist

  1. Benutzerantworten werden vom Antwortempf?nger empfangen und ein 202 HTTP-Statuscode wird zurückgegeben. Das ist, als würde man sagen, ich habe Ihre Anfrage erhalten und werde sie bearbeiten, aber Sie machen weiter und tun, was Sie getan haben. Dies ist der erste Schritt bei der asynchronen Verarbeitung, damit wir den Aufrufer nicht blockieren .
  2. Der Antwortempf?nger stellt die Benutzerantwort in eine Nachrichtenwarteschlange, die wiederum aus Gründen der Skalierbarkeit/Verfügbarkeit/Redundanz partitioniert ist . Sie k?nnen Partitionierung ziemlich leicht verstehen, wenn Sie Kafka bereits kennen. Falls nicht, betrachten Sie es einfach als eine M?glichkeit, Ihre Nachrichten in Ihrer Warteschlange in mehrere kleinere isolierte Warteschlangen zu verteilen, die sich technisch auf verschiedenen Knoten befinden k?nnen. Wenn Sie DB-Sharding kennen, ist dies dasselbe, jedoch haupts?chlich für Nachrichtenwarteschlangen. Fühlen Sie sich frei , um mehr über Kafka lesen hier .
  3. Nun werden diese Rohantworten vom Batcher empfangen. Und dann erstellt es Stapel von 10 Nachrichten und leitet sie an die n?chste Verarbeitungsstufe weiter.
  4. Der DB-Writer nimmt die Stapel auf und führt Einfügeabfragen in die DB durch. Der Gegendruck wird haupts?chlich vom DB-Writer eingeführt, er nimmt Nachrichten in seinem eigenen Tempo auf, da der Nachrichtenkonsument Pull-basiert war . Und so verhindern wir eine DB-überlastung. Und da es mit Batches arbeitet, anstatt 100 DB-Abfragen auszuführen, haben wir nur 10 DB-Abfragen ausgeführt.

Dies l?st 30% unseres Problems, lass uns zum n?chsten übergehen.

B. Score- und Leaderboard-Berechnung

Jetzt ist der Elefant im Raum das Hauptproblem, die Bestenlistenberechnung. Wenn Sie dieses System sehen, ist es kein traditionelles Quizsystem, bei dem wir die richtige Antwort im Voraus kennen. Daher k?nnen wir die Punktzahlen und die Bestenliste nicht wirklich berechnen, sobald jemand antwortet. Wir müssen die Punktzahl und den Rang aller Benutzer berechnen, nachdem der Moderator die richtigen Antworten abgegeben hat. Also ein riesiges Stück Arbeit auf einen Schlag. Ziemlich offensichtlich, dass weder unsere Nodes noch unser DB-Server das richtig synchron verarbeiten k?nnenMode. Also, was machen wir? Wir kehren für die asynchrone Verarbeitung wieder zu den Nachrichtenwarteschlangen unseres Freundes zurück. Cool, damit wir die Punktzahlen asynchron berechnen k?nnen, aber was ist mit der Bestenliste? Das muss immer verfügbar sein, oder? Und was ist mit dem Rang? Solange die Punktzahlen für alle Benutzer nicht berechnet wurden, k?nnen Sie nicht wirklich R?nge setzen, oder? Und die Berechnung des Rangs speziell k?nnte ein schwieriges Problem sein.

Wer wird uns jetzt davor bewahren? Mach dir keine Sorgen, mein Freund, erinnerst du dich, dass ich Redis kurz erw?hnt habe, als ich über Cache sprach? Sie haben ein wundersch?nes Ding namens sortiertes Set (was für eine erstaunliche Kreation, danke Redis Labs ??). In einem sortierten Set k?nnen Sie Schlüssel mit einer Punktzahl hinzufügen, und Redis ordnet sie entsprechend in O(log(N)) an . Das wird unser Ranking-Problem l?sen ??. Es erm?glicht uns auch, Bereichsabfragen auszuführen, z. B. mir die Top 5 zu geben oder mir den Rang für einen bestimmten Schlüssel zu geben, und all dies geschieht in O(log(N)). Genau das brauchen wir hier.

Die Elemente werden einer Hash-Tabelle hinzugefügt, die Redis-Objekte Scores zuordnet. Gleichzeitig werden die Elemente zu einer Skip-Liste hinzugefügt, die Scores zu Redis-Objekten zuordnet (so werden die Objekte in dieser "Ansicht" nach Scores sortiert) — Sortierte Satzinterna

Bammmmmm das Leaderboard-Problem ist auch gel?st.

Okay, es ist nicht einfach, ich war nur froh, dass ich schnell eine praktikable L?sung bekommen habe. Kommen wir nun zurück zu unserem Zeichenbrett.

Sieht ein bisschen einschüchternd aus, nein? Erlaube mir zu erkl?ren

  1. Sobald der Moderator die richtige Antwort abgibt, wird eine Trigger-Nachricht für die Punktzahlberechnung gesendet, die die gesamte Verarbeitungspipeline in Gang setzen soll .
  2. Der Batcher empf?ngt die Trigger-Nachricht und generiert ein Paar aus DB-Offset und Limit-Objekt, je nachdem, wie viele Personen richtig geantwortet haben. Wenn beispielsweise 10 Personen richtig geantwortet haben und die Batchgr??e 5 betr?gt, werden zwei Objekte (Batches) generiert. Batch 1 {Offset: 0, Limit: 5}, Batch 2 {Offset: 5, Limit 5}. Warum tun wir das? Damit wir Stapelverarbeitung oder paginierte DB-Abfragen ausführen k?nnen und die DB nicht unbegrenzt aufrufen. Wenn ich also 1 Million Datens?tze aus der DB holen müsste und das auf einen Schlag mache, würde das an vielen Stellen zu vielen Problemen führen. Also zerlegen wir das in kleinere Teile und führen kleinere, aber mehrere Abfragen aus, die eine geringere Anzahl von Zeilen zurückgeben würden.
  3. Der Benutzer-Batch-Prozessor empf?ngt nun diese Batch-Nachrichten und führt entsprechend DB-Abfragen aus. Der Prozessor, der die Nachricht {offset: 0, limit: 5} empf?ngt, erh?lt die ersten 5 Benutzer-IDs von der DB (wird auch eine weitere Batch-Operation ausführen, aber das ist hier etwas schwer zu erkl?ren, also überspringen). Danach verabschieden wir uns von der Stapelverarbeitung und wechseln zur Stream-Verarbeitung . Denn der Batch-Prozessor stellt nun 5 Benutzer-IDs in die Warteschlange, die vom n?chsten Prozessor verarbeitet werden.
  4. Jetzt erh?lt der Benutzer-Score-Rechner individuelle Benutzer-IDs und führt die Bewertungslogik aus, um individuelle Benutzer-Scores zu berechnen. Führen Sie dann 1 DB-Update durch, um die Benutzerbewertung zu ?ndern. Anschlie?end aktualisiert es die Punktzahl für diesen bestimmten Benutzer in der sortierten Menge, und Redis weist intern den Rang zu oder aktualisiert ihn. Und sobald diese Phase die Verarbeitung abgeschlossen hat, haben wir die Punktzahlen aller Benutzer in unserer Datenbank und den Rang + Punktzahl aller Benutzer in unserem Redis. Und da wir den Rang aller in der sortierten Menge haben, k?nnten wir einfach eine Reichweitenabfrage durchführen, um die Bestenliste mit blitzschneller Geschwindigkeit zu erhalten .

Das meiste unseres Problems ist jetzt gel?st, da wir, um die Benutzerbewertung und den Rang zu erhalten, einfach eine Redis-Abfrage durchführen konnten und DB nicht erreichen konnten. Dadurch sind auch unsere Reaktionszeiten schnell .

Damit ist die prim?re Entwurfsphase abgeschlossen. Es gab auch DB, API-Design und andere Dinge, die ich hier überspringe.

Kapitel 4: Implementierung

Die Fertigstellung des Designs l?ste 70 % unserer Probleme, und wir wussten, dass wir dies knacken k?nnen, also würden wir schnell mit der Entwicklung beginnen.

In einer idealen Welt würde ich einen neuen Dienst erstellen, eine neue Sprache wie Go ausprobieren, um eine bessere und schnellere parallele Verarbeitung zu erzielen und andere Dinge. Aber angesichts des Zeitplans war es nicht das Richtige. Wir sind bei unserem NodeJS-Kerndienst geblieben und haben alles dort abgelegt. Microservice- Puristen k?nnten nach dieser Aussage verlieren, aber in einem Wettlauf gegen die Zeit müssen Ihre Chefs manchmal in den Hintergrund treten. Unter den vielen Kompromissen war dies einer der wichtigsten Anrufe, die wir angenommen haben.

Abgesehen davon mussten wir auch auf Unit- und Integrationstests verzichten , deren Schuld uns immer noch verfolgt. Aber wir füllen die Tests nach der Ver?ffentlichung nach und nach auf.

Ich denke, nachdem Sie das oben gepostete detaillierte Design gesehen haben, sollten Sie in der Lage sein, Ihr eigenes zu implementieren, daher werde ich dieses Mal keinen Code-Deep-Dive machen ??

Kapitel 5: Bereitstellung und überwachung

Nach ein paar Bugfixes und QA-Sign-off waren wir startklar. Arbeit richtig gemacht? Nein, mein Freund, wir mussten für dieses Stück noch eine starke überwachung einrichten . Da es in sehr kurzer Zeit entwickelt wurde, war ich zumindest etwas unsicher. Bei diesem Dienst hatten wir standardm??ig die Ablaufverfolgung über LightStep aktiviert . Abgesehen von Traces hatte ich also eine dedizierte überwachung von Traffic, Fehlerraten, Latenz-Dashboards und Alerts für alle APIs eingerichtet. Und nach dem Go-Live haben ich und meine Teamkollegen einen Anruf erhalten und das System mindestens eine Stunde lang ein- und ausgeschaltet , von der RAM- und CPU-Auslastung bis hin zu Fehlerprotokollen . Geben Sie der Beobachtbarkeit also immer das gleiche Gewichtund überwachung auch. Es gab kleine Probleme im Produktionssystem, die wir nur aufgrund der überwachung frühzeitig erkennen konnten.

Kapitel 6: Retrospektive

Das System funktioniert, aber nach einer Verschnaufpause ist es wichtig, eine Retrospektive zu machen und Dinge zu identifizieren, die wir verpasst haben, und daran zu arbeiten. Ich bin sicher, wir haben eine Menge Sachen verpasst und viele Ecken gekürzt und haben einen gro?en Spielraum für Verbesserungen. Hier sind zum Beispiel ein paar…

Dinge, die wir besser machen k?nnten

  1. Wir haben dafür die bereits vorhandene Postgres-DB verwendet, da der Treiber, das ORM und die unterstützende Infrastruktur bereits vorhanden waren. Aber ich würde wahrscheinlich ein bisschen auf die Datenbankl?sungen eingehen.
  2. NodeJS ist gro?artig, aber ich denke, Go w?re eine bessere L?sung dafür. Das h?tten wir erforschen k?nnen.
  3. Ich habe versucht, eine Abfrage zu schreiben, um den Score nur in der DB zu berechnen, und bin kl?glich gescheitert. Ich k?nnte das wahrscheinlich schreiben und k?nnte auch eine Stapelverarbeitung für die Score-Berechnung durchführen, wodurch die DB-Operationen noch weiter reduziert werden.
  4. Umfangreiche Last- und Leistungstests konnten wir nicht durchführen, was ein Muss ist.
  5. Wir h?tten zwei verschiedene Phasen für das DB-Score-Update und das Redis-Sorted-Set-Update schreiben k?nnen, das w?re eine sauberere Implementierung.

Abschiedsnotizen

Wir haben in dieser kurzen Zeit unser Bestes gegeben. Auch die Umsetzung weicht leicht vom ursprünglichen Design ab. Aber es ist in Ordnung, Kompromisse werden st?ndig da sein. Obwohl wir die Kernfunktionalit?t in ungef?hr einer Woche fertiggestellt haben, gab es kleine Patches, die wir nach dem Posten durchführen mussten.

Ich hoffe, du konntest heute ein oder zwei Dinge über Systemdesign und Softwareentwicklung lernen ??

Credits

Gru? an meine gro?artigen Teamkollegen Akash Raj und Aashirwad Kashyap , wir haben alle zusammengearbeitet, um dies in nur etwa einer Woche zu bauen.

Danke fürs Lesen!

Ich bin Aritra Das, ich bin Entwickler und es macht mir gro?en Spa?, komplexe verteilte Systeme zu bauen. Z?gern Sie nicht, mich auf Linkedin oder Twitter zu kontaktieren , wenn es um Technik geht.

Viel Spa? beim Lernen…

Suggested posts

Erstellen Sie Ihre eigene Suchmaschine von Grund auf

Was liegt der modernen Suche zugrunde? Einfache Konzepte.

Erstellen Sie Ihre eigene Suchmaschine von Grund auf

Wie oft durchsuchen Sie t?glich das Internet? 5, 20, 50? Wenn Google Ihre bevorzugte Suchmaschine ist, k?nnen Sie hier Ihren Suchverlauf einsehen. Obwohl die Suche unseren t?glichen Aktivit?ten und unserer Interaktion mit der Welt zugrunde liegt, verstehen nur wenige von uns, wie sie funktioniert.

6 Hauptvorteile von Entwicklern aus Osteuropa

6 Hauptvorteile von Entwicklern aus Osteuropa

Verstehen, warum ausl?ndische Unternehmen Entwickler aus Russland, der Ukraine und Wei?russland einstellen wollen Seit mehr als 6 Jahren leite ich Rocketech Software Development mit einem Partner mit Hauptsitz in Singapur und einem vollst?ndig verteilten Team. Wir entwickeln IT-Produkte und entwickeln zwei Serviceformate: Outstaff und Dedicated Team.

Related posts

Ruxandra Tiple – über die Notwendigkeit, in deiner Wahrheit zu leben

Ruxandra Tiple – über die Notwendigkeit, in deiner Wahrheit zu leben

Wir h?ren st?ndig diese S?tze: ?Leben nach Ihren eigenen Bedingungen“ oder ?Leben nach Ihrer Wahrheit“, aber was bedeuten sie? Was bedeutet es wirklich zu leben? Leben ist nicht gleichbedeutend mit Leben – Essen, Schlafen, Sex und Arbeiten. Das mag für viele Leute der Fall sein, aber die Wahrheit ist, dass es sich nur um einen Winterschlafmodus handelt.

TüR-VERGNüGEN

TüR-VERGNüGEN

Sie sitzen zu Hause mit überraschungsg?sten fest, haben keine Snacks zu Hause, k?nnen aber auch nicht nach drau?en gehen, um Snacks zu kaufen, kalte Getr?nke und G?ste alleine zu Hause lassen? Oder ben?tigen Sie als Senioren mit gesundheitlichen Problemen dringend Medikamente sowie Tee, Kekse für den Abendsnack? Oder gibt es ein kleines Kind, dessen Eltern im Büro sind und ihn nicht alleine in den Schreibwarenladen gehen lassen, um Stifte, Farben, Bücher für seine Schularbeiten zu kaufen? Oder sind Sie ein cooles Kind der neuen Generation, das st?ndig vor dem Laptop-Bildschirm sitzt, aber nicht nach drau?en gehen m?chte, um etwas zu kaufen? Sie müssen in Ihrem Leben mit ?hnlichen Situationen wie den oben genannten Szenarien konfrontiert gewesen sein. Haben Sie jemals gespürt, wie einfach das Leben w?re, wenn es eine Web-App g?be, die alles liefern k?nnte, was Sie wollen, von Snacks, Medikamenten, Lebensmitteln, Schreibwaren,etc? Sie müssen denken, dass es heutzutage ein sehr verbreitetes Thema ist, es gibt eine Vielzahl von Apps auf dem Markt, die sich um dieses Thema von Delivering Stuff drehen.

eJPT Review – Meine allererste Pentesting-Zertifizierung

eJPT Review – Meine allererste Pentesting-Zertifizierung

Einleitung: Da ich seit über einem Jahr in der Cybersecurity-Community bin, habe ich festgestellt, dass man viel lernt, wenn man solche Beitr?ge liest und wichtige Entscheidungen trifft, wie die Wahl seiner ersten Zertifizierung oder einer Roadmap, um eine bestimmte Rolle in der Sicherheit zu erreichen oder überall in der IT habe ich beschlossen, über meine Zertifizierungen und die Erfahrungen zu schreiben, die ich von nun an wagen werde, um der Community etwas zurückzugeben, damit Leute wie ich davon profitieren k?nnen Jahr Elektronik- und Kommunikationsstudent. Die Pandemie hat wirklich eine sehr wichtige Rolle in meinem Leben gespielt, da sie mir geholfen hat, mich umzusehen, um zu sehen, was mir gef?llt, und da erfuhr ich von Cybersicherheit und wusste sofort, dass ich mich dort sehen m?chte.

Leitfaden — SolChicks Public Sale (26. November um 12:00 UTC)

Leitfaden — SolChicks Public Sale (26. November um 12:00 UTC)

Hallo Intersola-Gemeinde! Heute freuen wir uns sehr, Ihnen mitteilen zu k?nnen, dass wir uns eine Zuteilung in der Public Sale IDO für SolChicks gesichert haben! Wir werden am Freitag, den 26. November um 12:00 UTC hier auf der Intersola einen ?ffentlichen Verkauf für $CHICKS-Token veranstalten. SolChicks ist ein führendes NFT-basiertes Fantasy-Spiel zum Verdienen, das von demselben Weltklasse-Team pr?sentiert wird, das uns Klassiker wie Maplestory, PUBG, Dungeon Fighter & Tera gebracht hat.

MORE COOL STUFF

Wie gro? ist Nicholas Braun aus ?Succession“?

Wie gro? ist Nicholas Braun aus ?Succession“?

Fans von ?Succession“ k?nnen nicht umhin, Greg alias Nicholas Brauns ungew?hnlich gro?e Gr??e zu bemerken. überragt er seine Darsteller wirklich?

Warum Lady Gaga bei dieser Performance ein kugelsicheres Kleid trug

Warum Lady Gaga bei dieser Performance ein kugelsicheres Kleid trug

Bei der Amtseinführung von Pr?sident Biden macht Lady Gagas kugelsicheres Kleid eine Aussage, ob Sie ihr zustimmen oder nicht.

Der Dolly-Parton-Song von 1972, den einige Country-Radiosender nicht spielen wollten, weil sie ihn "zu sexuell" fanden

Der Dolly-Parton-Song von 1972, den einige Country-Radiosender nicht spielen wollten, weil sie ihn "zu sexuell" fanden

Mehrere der frühen Songs des Country-Stars Dolly Parton wurden verboten, im Radio zu spielen. Dieses Lied wurde nicht gespielt, weil es "zu sexuell" war.

Christine Browns Gewichtsverlust: Das hat der ?Sister Wives“-Star über ihre Reise erz?hlt

Christine Browns Gewichtsverlust: Das hat der ?Sister Wives“-Star über ihre Reise erz?hlt

Als die Fans die Beziehung zwischen Christine und Kody Brown im Laufe der Jahre beobachteten, ist der beeindruckende Gewichtsverlust der Mutter von sechs Kindern offensichtlich.

Probieren Sie unser Mini-Kreuzwortr?tsel aus

Probieren Sie unser Mini-Kreuzwortr?tsel aus

Unser Mini-Kreuzwortr?tsel wird w?chentlich aktualisiert und kombiniert unsere beliebtesten HowStuffWorks-Lesungen mit cleveren Hinweisen!

Was funktioniert am besten: W?schepads, Pulver- oder Flüssigwaschmittel?

Was funktioniert am besten: W?schepads, Pulver- oder Flüssigwaschmittel?

W?sche waschen ist schon schlimm genug, ohne sich Gedanken über die Wahl des richtigen Waschmittels machen zu müssen. Was ist also am besten? Oder ist es sogar egal?

Die wahre Geschichte des blauen Volkes von Kentucky

Die wahre Geschichte des blauen Volkes von Kentucky

Die Familien Fugates und Combs im l?ndlichen Kentucky verloren die genetische Lotterie, die beide ein seltenes rezessives Merkmal teilten, das ihre Haut bei der Heirat blau aussehen lie?. Was war die Ursache dafür? Und was ist mit den Familien passiert?

K?nnte der kalifornische Kondor "Jungfraugeburt" die Art retten?

K?nnte der kalifornische Kondor "Jungfraugeburt" die Art retten?

Zwei vaterlose m?nnliche Küken werden in einem Programm aufgezogen, um den kalifornischen Kondor vor dem Aussterben zu retten. Wie sind solche ?jungfr?ulichen“ Geburten m?glich?

Wie man wirklich, wirklich weit in Super Mario Odyssey springt

Wie man wirklich, wirklich weit in Super Mario Odyssey springt

Durch die Kombination der Kr?fte von Mario und Cappy erhalten Sie in Super Mario Odyssey viel zus?tzliche Wartezeit, perfekt, um diese extra langen Lücken zu schlie?en - und dorthin zu gehen, wo Sie nicht ?sein sollen“. Falls Sie ein Video nicht ansehen m?chten, teile ich es unten in Diashows auf.

M?chten Sie dieses neue koffeinkatalysierte Gel genauso viel essen wie ich?

M?chten Sie dieses neue koffeinkatalysierte Gel genauso viel essen wie ich?

Die Forscher entwickelten ein essbares Polymergel unter Verwendung von Koffein als Stimulus für die chemische Reaktion, die das Material erzeugt. Schlie?lich haben Wissenschaftler genau das geliefert, wonach Sie gefragt haben: ein essbares Polymergel aus Koffein.

Into the Badlands ist vorbei und ich bin bereits im Kampfsport-Rückzug

Into the Badlands ist vorbei und ich bin bereits im Kampfsport-Rückzug

Einfach so sind alle sechs Folgen von AMCs Into the Badlands (bereits?!) Zu Ende gegangen - und damit einige der faszinierendsten, elegantesten K?mpfe auf dem Bildschirm, die jemals in einem amerikanischen Fernsehprogramm produziert wurden. Ich werde die Pause mit Gebeten an die Kabelfernsehgottheiten füllen und AMC auffordern, offiziell eine zweite Staffel grünes Licht zu geben.

Der Besitzer von Sebrings zweitplatziertem Team war so aufgeregt, dass er das Rennen im Fernsehen "Fucking Ace" nannte

Der Besitzer von Sebrings zweitplatziertem Team war so aufgeregt, dass er das Rennen im Fernsehen "Fucking Ace" nannte

12 Stunden Sebring-Sieger Tequila Patrón ESM übernimmt die Zielflagge. Das Nein.

Cardi B und Offsets Tochter Kulture zeigt sch?ne neue Z?pfe auf Instagram

Cardi B und Offsets Tochter Kulture zeigt sch?ne neue Z?pfe auf Instagram

Die 3-j?hrige Tochter von Cardi B und Offset, Kulture, zeigte auf Instagram ihre neue geflochtene Frisur.

Selena Gomez gibt Cara Delevingne einen Kuss auf die Wange für Kiss Cam bei Knicks Game

Selena Gomez gibt Cara Delevingne einen Kuss auf die Wange für Kiss Cam bei Knicks Game

"Sie macht so viel Spa? und ist einfach extrem abenteuerlustig", sagte Selena Gomez zuvor über ihre Freundin Cara Delevingne

Jamie Dornan sagt, dass er die Superman-Rolle an Henry Cavill verloren hat und sich Marvel für eine Superhelden-Rolle gen?hert hat

Jamie Dornan sagt, dass er die Superman-Rolle an Henry Cavill verloren hat und sich Marvel für eine Superhelden-Rolle gen?hert hat

Jamie Dornan gab bekannt, dass er für die Rolle des Superman vorgesprochen hat, aber gegen Henry Cavill verloren hat; und er hat mit Marvel darüber gesprochen, der MCU beizutreten.

Meghan Markle erinnert sich an ihren von Andie MacDowell inspirierten Haarschnitt aus der Kindheit: "Ich war besessen"

Meghan Markle erinnert sich an ihren von Andie MacDowell inspirierten Haarschnitt aus der Kindheit: "Ich war besessen"

?Jeder hat vergessen, mir zu sagen: ?Du hast ethnische Haare‘“, sagte Meghan Markle in der Ellen Degeneres Show, als sie auf ihren Haarschnitt aus ihrer Kindheit zurückblickte, der von Andie MacDowell in Four Weddings and a Funeral inspiriert wurde.

Languages

野花在线观看免费观看大全-野花视频在线观看免费观看8
国足最新出线概率0.08% 北京冬奥火炬宣传片获金花环奖 速度与激情9 得知母亲出事男子在地铁痛哭 国足战澳大利亚大名单:4归化在列 周冠宇成为中国首位F1车手 安娜贝尔 尚气与十环传奇 胡锡进谈中美元首会晤 红色通缉令 尚气与十环传奇 印度首都准备封城 房价上涨城市创七年新低 拐点来了? 24岁救人牺牲消防员获批为烈士 扫黑风暴 我要我们在一起 意大利错失直接晋级世界杯资格 中美元首会谈重点内容 中国共产党第三个历史决议全文发布 灵媒 意大利错失直接晋级世界杯资格 俄方回应卫星碎片危及国际空间站 中美元首是否达成新共识?中方回应 男子写80页PPT拯救爱情却离婚 动保组织向上饶信州区申请信息公开 许家印为恒大注入超70亿续命资金 动保组织向上饶信州区申请信息公开 千与千寻 意大利错失直接晋级世界杯资格 两个女人 浦发银行回应近3亿存款莫名被质押 罗永浩吐槽苹果文案没文化 大连现超级传播者26人在同一传播链 扫黑风暴 安娜贝尔 中美元首会谈重点内容 长津湖 图兰朵 24岁救人牺牲消防员获批为烈士 房价上涨城市创七年新低 拐点来了? 五个扑水的少年 大连一密接者擅自点外卖聚餐被调查 男子写80页PPT拯救爱情却离婚 #耿直真香哥黑化卖惨# 动保组织向上饶信州区申请信息公开 扫黑风暴 失控玩家 扫黑风暴 许家印为恒大注入超70亿续命资金 外交部回应拜登重申不支持台独 加拿大一枝黄花到底是什么? 中国医生 男子体检血中抽出2升油浆 红色通缉令 大连现超级传播者26人在同一传播链 国际人士热议中共十九届六中全会 俄方回应卫星碎片危及国际空间站 怒火·重案 得知母亲出事男子在地铁痛哭 嘉南传 中美元首是否达成新共识?中方回应 浦发银行回应近3亿存款莫名被质押 斗破苍穹 蜘蛛侠:英雄归来 扫黑风暴 林丹世界排名被正式移除 男子体检血中抽出2升油浆 大连现超级传播者26人在同一传播链 扫黑风暴 林丹世界排名被正式移除 国足战澳大利亚大名单:4归化在列
柘城县| 高邑县| 宝山区| 南充市| 望谟县| 桂林市| 视频| 康平县| 遂川县| 剑河县| 樟树市| 怀远县| 额尔古纳市| 长沙县| 阳江市| 临澧县| 厦门市| 彰武县| 隆安县| 郎溪县| 新巴尔虎右旗| 博客| 龙山县| 石台县|