Checkliste für die Backend-Softwarearchitektur: So erstellen Sie ein Produkt von Grund auf neu

Sie wachen eines Morgens auf, um eine Tasse Kaffee und Voilà zu trinken. Der Eureka-Moment ist da. Sie haben endlich Ihr Geschäftsmodell herausgefunden und alles passt zusammen. Sie wissen, dass Investoren es lieben werden, und Sie können es kaum erwarten, mit dem Bau des Produkts zu beginnen. Der First-Mover-Vorteil liegt bei Ihnen.

Diese Momente sind selten, aber wenn sie eintreten, müssen Sie zum richtigen Zeitpunkt loslegen. Alles, was Sie brauchen, ist die richtige Anleitung, um herauszufinden, was Sie tun sollten und was nicht. Dies ist keine Zeit zum Experimentieren, es ist die Zeit zum Ausführen. Es ist jetzt DEINE Zeit!

HINWEIS - Das Folgende bezieht sich auf das Erstellen von Softwarearchitekturen von Grund auf. Wenn Sie also daran interessiert sind, die Einzelheiten der beteiligten Technologien zu kennen, fahren Sie fort. Ansonsten teilen Sie bitte mit denen, die dies auf jeden Fall lieben werden: P.

Woher dieser Leitfaden kam

Ich habe selbst an einer Handvoll Frühphasenprodukten gearbeitet, und um ehrlich zu sein, habe ich Fehler gemacht. Ich wünschte mir immer, es gäbe eine Checkliste, die ich beim Aufbau eines Produkts von Grund auf befolgen könnte.

Es gibt so viele Dinge beim Aufbau einer Architektur von Grund auf neu, dass Sie bestimmte Teile völlig vergessen werden. Und sie werden in späteren Phasen des Produktzyklus zurückkommen, um Sie zu beißen.

Ich habe mich schließlich entschlossen, diese Checkliste mit Dingen zu erstellen, die Sie berücksichtigen sollten, bevor Sie zum ersten Mal auf diese Bereitstellungsschaltfläche klicken.

Hier ist also ohne weiteren Aufbau die Checkliste, die Sie beim Erstellen einer Backend-Architektur für ein Produkt von Grund auf durchgehen sollten.

Wählen Sie die richtige Sprache und das richtige Framework (für Ihr Projekt).

Die Auswahl der richtigen Sprache und des richtigen Frameworks für Ihr Produkt ist schwierig, und dafür gibt es keine besondere Silberkugel. Mein Rat ist, eine Sprache zu wählen, mit der Sie sich am besten auskennen und die Feinheiten von In und Out kennen.

Trotzdem ist es selten, weil es nur sehr wenige Leute gibt, die Javascript Ninjas oder Python Panthers sind oder was auch immer für funkige Namen da draußen sind.

Wählen Sie also eine Sprache, die in der Branche wirklich gute Unterstützung bietet, wie Javascript, Python, Java oder Go, um nur einige zu nennen. Sie können jede Sprache auswählen, wählen Sie einfach die Sprache aus, die für Sie am bequemsten ist.

Und denken Sie daran: Sie erstellen ein MVP (Minimum Viable Product) und sind dabei, einen POC (Proof of Concept) zu erstellen. Holen Sie Ihr Produkt also so schnell wie möglich heraus. Sie müssen sich nicht auf Probleme beschränken, die möglicherweise aus der neuen Sprache in der Stadt stammen. Um diese Probleme zu vermeiden, wählen Sie eine häufig verwendete, gut dokumentierte Sprache.

Zuletzt können Sie zu einem späteren Zeitpunkt skalieren. Wenn Sie sich in der Phase der Erstellung von POCs befinden, erstellen Sie diese einfach und erledigen Sie sie. Aber wenn Sie etwas wirklich Spezifisches bauen und es speziell dafür eine Sprache und ein Framework gibt, sollten Sie sich definitiv für diese Technologie entscheiden.

In den meisten Fällen können die Probleme, die wir zu lösen versuchen, problemlos mit einer der oben genannten Sprachen und ihren jeweiligen Rahmenbedingungen gelöst werden. Wählen Sie einfach eine aus und starten Sie Ihr Produkt.

Eine gute Ressource, um Ihnen bei der Entscheidung zu helfen -

//content.techgig.com/top-5-programming-languages-for-backend-web-development/articleshow/67337449.cms

Implementieren Sie Authentifizierungs- und Autorisierungs-Microservices

Es gibt viele Möglichkeiten, einen Benutzer zu authentifizieren und zu autorisieren. Sie können Session Tokens, JWT (JSON Web Tokens) oder OAuth ausprobieren, um nur einige zu nennen. Jede Option hat ihre eigenen Vor- und Nachteile. Schauen wir uns einige davon genauer an.

JSON-Web-Token

JWTs sind schnell und einfach zu implementieren. Dies liegt daran, dass die Token niemals irgendwo auf Ihrem System gespeichert werden. Sie werden nur verschlüsselt, verschlüsselt und an den Benutzer gesendet. Die Validierung eines JWT ist also schneller als jede andere Methode.

Da sie jedoch nicht auf dem System gespeichert sind, können Sie ein Token nicht vor Ablauf seiner tatsächlichen Ablaufzeit ablaufen lassen. Dies kann in bestimmten Fällen ein Problem sein.

Finden Sie also die Vor- und Nachteile jedes Authentifizierungssystems heraus und wählen Sie dasjenige aus, das Ihren Anforderungen am besten entspricht. Ich persönlich bevorzuge JWTs (aber das ist meine eigene Wahl).

Genehmigung

Vergessen Sie niemals, die Autorisierung der Benutzer zu implementieren. Sie möchten nicht, dass angemeldeter Benutzer1 die Details von Benutzer2 ändert. Dies kann zu purem Chaos in Ihrem System führen.

Identifizieren Sie die zu autorisierenden Endpunkte und implementieren Sie sie sofort. Sie möchten nicht, dass der Status Ihrer Datenbank auf diese Weise beschädigt wird. Denken Sie an den Unterschied zwischen 401 und 403.

Das Folgende sind bestimmte Endpunkte, die Sie beim Erstellen Ihres Authentifizierungssystems unbedingt berücksichtigen sollten (ich habe einen in Django mit JWT erstellt). Es kann bestimmte Ergänzungen / Löschungen für Ihren Anwendungsfall geben, aber diese sollten Sie in Betracht ziehen.

Viele Frameworks bieten sie sofort an, aber berücksichtigen Sie sie, bevor Sie sie selbst erstellen. Überprüfen Sie die Authentifizierungsklassen und Berechtigungsklassen im Django Rest Framework auf weitere Informationen.

Schauen Sie sich diese Django REST Framework-Ressource an -

//www.django-rest-framework.org/tutorial/4-authentication-and-permissions/

Erstellen Sie ein abstraktes Basismodell, das von jedem anderen Modell in Ihrer Datenbank geerbt wird

Erinnern Sie sich an das DRY-Prinzip - Wiederholen Sie sich nicht? Es sollte bis ins Mark in Software Engineering befolgt werden.

Aufbauend auf dem obigen Denkprozess gibt es bestimmte Spalten in Ihrer Datenbank, die in jeder Tabelle vorhanden sind. Daher ist es besser, eine abstrakte Klasse für sie zu erstellen, damit andere Modellklassen von ihnen erben können.

Lassen Sie uns diesen Code durchgehen und was er bedeutet:

  • id - Obwohl es hier nicht geschrieben ist, wird es automatisch vom Django-Framework erstellt. Aber wenn es bei Ihnen nicht vorhanden ist, schreiben Sie es in diese Klasse. Es ist nur ein automatisch inkrementiertes Feld, das als Primärschlüssel in Ihrer Datenbankbeziehung verwendet werden kann.
  • created_at - Dies bedeutet, dass das Feld / die Zeile in Ihre Tabelle eingefügt wurde und vom Framework selbst ausgefüllt wird. Sie müssen es nicht explizit festlegen.
  • update_at - Dies bedeutet, dass das Feld / die Zeile zuletzt in Ihrer Tabelle geändert / aktualisiert wurde und erneut vom Framework selbst ausgefüllt wird.
  • deleted_at + is_deleted - Dies ist also ein kontroverses Feld. Ich habe keine genaue Antwort darauf, ob es dort sein sollte oder nicht - denn um ehrlich zu sein, wird im Internet nie etwas gelöscht. Wenn dieses Feld ausgefüllt ist, wird angezeigt, dass die Zeile aus dem System gelöscht wurde (obwohl die Daten für zukünftige Referenzen im System verbleiben und aus der Datenbank entfernt und in Sicherungen gespeichert werden können).
  • uuid - Es hängt davon ab, ob Sie dies in Ihre Tabelle aufnehmen möchten oder nicht. Wenn Sie den Primärschlüssel Ihrer Tabelle einem externen System aussetzen müssen, ist es besser, diesen als das automatisch inkrementierte Ganzzahlfeld verfügbar zu machen. Sie fragen sich vielleicht warum ...? Warum sollten Sie einem externen System mitteilen, dass Sie 10378 Bestellungen in Ihrer Tabelle haben? Aber es ist wieder eine persönliche Entscheidung.

Richten Sie einen Benachrichtigungs-Microservice ein

Jedes Produkt muss dem Benutzer Erinnerungen und Benachrichtigungen für Engagement- und Transaktionszwecke senden. Also wird jedes Produkt dies brauchen.

Sie sollten auf jeden Fall in Betracht ziehen, einen Microservice zu erstellen, der Ihren Endbenutzern Benachrichtigungsdienste (wie Push-Benachrichtigung, E-Mail und SMS) bereitstellt.

Dies sollte insgesamt ein separater Microservice sein. Erstellen Sie dies nicht in Ihrem Authentifizierungs-Microservice oder Ihrem Anwendungsdienst (der eigentlichen Geschäftslogik).

Es gibt viele Bibliotheken / Dienste von Drittanbietern, mit denen sie für Ihre Anwendung erstellt werden können. Nutzen Sie sie und bauen Sie darauf auf.

Denken Sie daran, alle 3 Funktionen zu erstellen:

  • Push-Benachrichtigungen (APNS + FCM),
  • E-Mails (zum Starten einfach einen SMTP-Client integrieren)
  • und SMS

HINWEIS - Verfügen Sie über zwei Kanäle zum Senden von SMS, Transaktions- und Werbekanälen. Senden Sie niemals eine Werbe-SMS auf einem Transaktionskanal, da die Wahrscheinlichkeit besteht, dass Sie von einem gut informierten und motivierten Benutzer verklagt werden.

Eine einfache Möglichkeit, Ihren SMTP-Client in Ihrer Anwendung zu konfigurieren, besteht darin, dies in Ihren Einstellungen zu verwenden:

Ich habe dies in Django getan, aber Sie können dasselbe in Ihrer gewählten Sprache und Ihrem gewählten Rahmen tun.

Richten Sie die Fehlerprotokollierung ein

Verwenden Sie eine Middleware, um Fehler zu protokollieren, die auf Ihrem Produktionssystem auftreten. Ihr Produktionssystem wird nicht von Menschen überwacht, die dort sitzen, um die Anwendungsprotokolle rund um die Uhr anzuzeigen. Sie benötigen also ein System, das diese internen Serverfehler an einer zentralen Stelle protokolliert. Dann können Sie sie täglich überprüfen oder einen Webhook erstellen, damit Sie zum richtigen Zeitpunkt benachrichtigt werden und sich um sie kümmern können.

Es gibt viele Fehlerprotokollierungs-Tools von Drittanbietern auf dem Markt. Wählen Sie einfach eine, die Ihren Anforderungen entspricht. Ich benutze meistens Sentry / Airbrake.

Erwägen Sie die Konfiguration von Webhooks, wie oben erwähnt. Sie informieren Ihre Benutzer über Fehler, und Sie können diese Fehler beispielsweise veröffentlichen, sobald sie auf bestimmten Slack-Kanälen auftreten. Anschließend können Sie diese Kanäle regelmäßig überprüfen und anhand ihres Schweregrads korrigieren.

Offizielle Homepage von Airbrake - //airbrake.io/

Sentrys offizielle Homepage - //sentry.io/welcome/

Implementieren Sie die Anforderung - Antwort - und Anwendungsprotokollierung

Szenario - Ein Benutzer wird von Ihnen unterstützt und gibt an, dass er den Transaktionsbeleg für den auf Ihrer Website getätigten Kauf nicht erhalten hat. Was wirst du tun?

Wenn Sie die Anwendungsprotokollierung in Ihr System integriert haben, machen Sie sich keine Sorgen. Was meine ich damit? Es ist immer besser, ein Beispiel zu zeigen, als zu versuchen, es mit Worten zu erklären. Hier ist es also:

Ich habe mich angemeldet, um die E-Mail an die angegebene email_id zu senden. Ich kann in den Anwendungsprotokollen überprüfen, ob die E-Mail tatsächlich an den Client gesendet wurde, indem ich überprüfe, ob ein solches Protokoll im System vorhanden ist. Stellen Sie sicher, dass Sie umfassende Protokolle in Ihr System einfügen, damit Sie die Reise der Anforderung verfolgen können.

Darüber hinaus ist es eine gute Idee, ein asynchrones System einzurichten, das solche Anforderungs- / Antwort- und Anwendungsprotokolle von Ihrem System auswählt und an einem zentralen Ort ablegt. Dort können sie so verarbeitet werden, dass sie leichter zu interpretieren sind.

Der ELK-Stack ist hierfür eine gute Option: ElasticSearch - Logstash - Kibana.

Mehr zum ELK-Stack - //www.elastic.co/what-is/elk-stack

HINWEIS - Beachten Sie beim Protokollieren von Anfragen und Antworten Folgendes:

  • Kennwörter nicht protokollieren.
  • Protokollieren Sie keine Token (die Zugriffstoken, die für die Authentifizierung verwendet werden).
  • OTPs nicht protokollieren

Führen Sie die Drosselung Ihrer APIs und die Ratenbegrenzung auf Ihren Anwendungsservern ein

Szenario - Sie haben gerade Ihren Dienst gestartet und das Produkt auf Social Media-Plattformen vermarktet. Ein Black-Hat-Hacker hat es herausgefunden und wollte nur mit Ihrem System spielen. Daher planten sie einen DOS-Angriff (Denial of Service) auf Ihr System.

Um dem entgegenzuwirken, können Sie zusätzlich zu Ihren Load Balancern für Ihre Anwendungsserver eine Ratenbegrenzung festlegen, die auf verschiedenen Faktoren basiert. Dies verhindert DOS-Angriffe und verhindert, dass der böswillige Benutzer Ihre Server angreift.

Szenario - Der API-Endpunkt / otp / validate, der 4-stellige OTPs zur Authentifizierung des Benutzers verwendet und Token zurückgibt, die für authentifizierte APIs verwendet werden sollen. Ein böswilliger Benutzer erhält die mobile_Nummer für einen Ihrer Clients und trifft den API-Endpunkt mit einem Brute-Force-Angriff, der die IPs ändert, einem DDOS-Angriff (Distributed Denial of Service). Der Ratenbegrenzer kann den Benutzer nicht stoppen, da sich die IP-Adresse bei jeder Anforderung ständig ändert.

Um dies zu verhindern, können Sie die APIs auch basierend auf dem Benutzer drosseln. Sie können konfigurieren, wie viele Anforderungen ein bestimmter Benutzer an einen API-Endpunkt stellen kann. Für die OTP-Validierung beträgt eine gute Anzahl 5 Anforderungen pro 10 Minuten. Dadurch wird verhindert, dass der böswillige Benutzer einen Brute-Force-DDOS-Angriff auf die oben genannte API ausführt.

Drosselung in Djangos REST-Framework -

//www.django-rest-framework.org/api-guide/throttling/

Richten Sie die asynchrone Kommunikation vom ersten Tag an ein und konfigurieren Sie sie

Szenario - Sie müssen dem Benutzer eine Begrüßungs-E-Mail senden, wenn er sich in Ihrer Anwendung registriert. Der Front-End-Client trifft auf die Register-API. Sie erstellen den Benutzer nach der Validierung im Back-End. Dadurch wird der Vorgang zum Senden einer Begrüßungs-E-Mail gestartet.

Das Senden dieser Begrüßungs-E-Mail dauert einige Sekunden. Aber warum sollte der mobile Client für einen solchen Prozess stecken bleiben? Dies kann im Hintergrund geschehen, ohne dass der Benutzer ohne besonderen Grund auf der Registrierungsseite hängen bleibt. Jede Sekunde ist wertvoll und Sie möchten nicht, dass der Benutzer diese wertvollen Sekunden verliert.

Senden Sie die E-Mail einfach über eine asynchrone Aufgabe. Verwenden Sie dazu Mitarbeiter, Aufgaben, Nachrichtenbroker und Ergebnis-Backends.

Ein gutes Beispiel dafür aus der Python-Welt ist der Sellerie-Arbeiter. Legen Sie einfach die Aufgabe, die ausgeführt werden muss, in einen Nachrichtenbroker (Rabbit MQ / SQS usw.). Sellerie hört sich das an und sendet die Aufgabe an den vorgesehenen Arbeiter. Dieser Worker verarbeitet dann die Anforderung und legt das Ergebnis in einem Ergebnis-Backend ab, das ein Cache-System / Datenbanksystem sein kann. (Redis / PostgreSQL zum Beispiel).

Sie können diese Aufgaben und Warteschlangen mit vielen Bibliotheken von Drittanbietern überwachen. Ein gutes Beispiel dafür ist Sellerieblume, die all dies überwacht.

Weitere Informationen zu RabbitMQ finden Sie hier - //www.rabbitmq.com/

Und Sellerie - //docs.celeryproject.org/en/stable/django/first-steps-with-django.html

Und schließlich Sellerieblume - //flower.readthedocs.io/en/latest/

Richten Sie Cron-Jobs ein

Szenario - Sie haben gerade Ihr Produkt gestartet und müssen Ihren Benutzern Empfehlungen zu neuen Produkten auf Ihrer Plattform senden. Sie senden diese jedes Wochenende auf der Grundlage ihrer Kaufhistorie.

Die obige Aufgabe kann einfach mit einem Cron-Job ausgeführt werden. Es ist in jedem Framework einfach zu konfigurieren. Wichtig ist, dass Sie die Cron-Jobs nicht direkt in die Crontab-Datei Ihres Servers einfügen. Sie sollten das Framework damit umgehen lassen.

Dies liegt daran, dass der Deployment Engineer / Devops Engineer aus Sicherheitsgründen die einzige Person sein sollte, die auf dieses System zugreifen kann. Obwohl Sie es nicht so implementieren müssen, ist es gut, von Anfang an etwas zu haben.

In der Django-Welt können Sie Sellerie-Beat verwenden, um Ihre Crones mithilfe von Sellerie-Arbeitern zu konfigurieren.

Weitere Informationen zu Celery Beat finden Sie hier - // docs.celeryproject.org/en/latest/userguide/periodic-tasks.html

Verwalten Sie Ihre Geheimnisse richtig (Parameterdatei)

Es gibt viele Möglichkeiten, Parametergeheimnisse in Ihren Produktionsservern zu verwalten. Einige von ihnen sind:

  • Erstellen einer Geheimdatei, Speichern in einem privaten S3-Bucket und Abrufen derselben während der Bereitstellung Ihrer Anwendung.
  • Festlegen der Parameter in Umgebungsvariablen während der Bereitstellung Ihrer Anwendung (erneutes Speichern in s3)
  • Stellen Sie die Geheimnisse in einen geheimen Verwaltungsdienst (z. B. //aws.amazon.com/secrets-manager/) und verwenden Sie sie, um die Geheimnisse in Ihrer Anwendung abzurufen.

Sie können jede dieser Methoden entsprechend Ihrem Komfort und Anwendungsfall auswählen. (Sie können auch verschiedene geheime Dateien für lokale, Staging- und Produktionsumgebungen aufbewahren.)

Versionieren Sie Ihre APIs vom ersten Tag an

Dies sollten Sie ab Tag 1 unbedingt berücksichtigen. Sie werden nie wissen, wie häufig sich Ihre Geschäftsmodelle ändern können, und Sie müssen Vorwärts-Rückwärts-Kompatibilität in Ihrer Anwendung haben. Sie sollten daher Ihre APIs versionieren, um sicherzustellen, dass alles für alle reibungslos funktioniert.

Sie können verschiedene Apps für verschiedene Versionen verwenden und nginx für Ihre Anwendung damit beauftragen. Oder Sie können die Versionierung in der Anwendung selbst haben und die Routen auf Ihrem Anwendungsserver damit umgehen lassen. Sie können eine beliebige Methode zur Implementierung auswählen. Der wichtigste Punkt ist, dass die Versionierung von Anfang an aktiviert ist.

Entscheiden Sie sich für Hard- und Soft-Update-Versionsprüfungen für Ihre Front-End-Clients

Was ist der Unterschied zwischen Hard- und Soft-Updates?

Harte Updates beziehen sich darauf, wenn der Benutzer gezwungen ist, die Client-Version auf eine höhere Versionsnummer als die auf seinem Handy installierte zu aktualisieren.

Soft-Updates beziehen sich darauf, wenn dem Benutzer die Aufforderung angezeigt wird, dass eine neue Version verfügbar ist, und er kann seine App auf die neue Version aktualisieren, wenn er dies möchte.

Harte Updates werden nicht empfohlen, aber es gibt Zeiten, in denen Sie sie erzwingen müssen. In jedem Fall sollten Sie auf jeden Fall überlegen, wie Sie dies für Ihre Anwendungen implementieren.

Sie können dies tun, indem Sie es im Play Store oder App Store implementieren oder konfigurieren. Eine andere Möglichkeit besteht darin, eine API in Ihrer Backend-Anwendung zu erstellen, die bei jedem Start der mobilen App aufgerufen wird. Dies sendet zwei Schlüssel: hard_update -> true / false und soft_update -> true / false, abhängig von der Benutzerversion und den in Ihrem Backend-System festgelegten Hard- und Soft-Update-Versionen.

Ein guter Ort zum Speichern dieser Versionen ist Ihr Cache (Redis / Memcache), den Sie im laufenden Betrieb ändern können, ohne Ihre Anwendung bereitstellen zu müssen.

Führen Sie vom ersten Tag an die kontinuierliche Integration (CI) ein

Szenario - Einer der Praktikanten in Ihrem Projekt ist nicht kompetent genug, um Code auf Produktionsebene zu schreiben. Möglicherweise haben sie etwas geändert, das eine kritische Komponente in Ihrem Projekt beschädigen könnte. Wie können Sie sicherstellen, dass in solchen Fällen alles in Ordnung ist?

Führen Sie eine kontinuierliche Integration ein. Bei jedem Commit werden Linters und Testfälle ausgeführt und bei Verstößen gegen Regeln wird ein Verstoß ausgeführt. Dies blockiert wiederum das Zusammenführen von Pull-Anforderungen, bis alle Flusenregeln und Testfälle bestanden sind. Es ist schön, etwas zu haben, und es hilft auch auf lange Sicht. Denken Sie also daran.

Es gibt viele Optionen auf dem Markt. Sie können entweder eine selbst implementieren (Jenkins CI / CD) oder TravisCI, CircleCI usw. für dieselbe verwenden.

Lesen Sie TravisCI hier - //travis-ci.org/

Und CircleCI - //circleci.com/

Docker-Unterstützung aktivieren (persönliche Präferenz)

Erstellen Sie eine Docker-Datei und eine docker-compose.yml für Ihre Anwendung, damit jeder die Anwendung von Anfang an mit Docker ausführt. Einer der Hauptgründe für die Verwendung eines solchen Ansatzes ist die Konsistenz in Ihrer lokalen / Staging- / Produktionsumgebung, sodass kein Entwickler dies jemals wieder sagen kann:

Aber es lief auf meiner Maschine.

Es ist nicht schwierig, es ab Tag 1 einzusetzen. Verwenden Sie Docker zunächst nur für Ihre lokale Umgebung, damit die Einrichtung Ihrer Anwendung reibungslos verläuft. Denken Sie jedoch daran, wie Sie es mit und ohne Docker in der Produktion ausführen können.

Hier finden Sie weitere Informationen zu Docker Hub - //hub.docker.com/

Verwenden Sie ein APM-Tool

Ein Anwendungsüberwachungstool ist ein Muss, wenn Sie die APIs, Transaktionen, Datenbankverbindungen usw. Ihrer Anwendung überwachen möchten.

Szenario - Die Festplatte Ihres Cron-Servers ist fast voll und es können keine Cron-Jobs ausgeführt werden. Da auf der Disc kein Platz gefunden werden kann, laufen Ihre Crones nicht. Wie können Sie benachrichtigt werden, wenn dies geschieht?

Es gibt viele APM-Tools, mit denen Sie dies überwachen können. Sie können sie entsprechend dem Zeitpunkt konfigurieren, zu dem Sie benachrichtigt werden müssen. Sie erhalten Benachrichtigungen auf dem Medium Ihrer Wahl, wenn ein solches Chaos auf Ihrem System auftritt - und vertrauen Sie mir, dass es die ganze Zeit passiert. Also sei besser darauf vorbereitet. New Relic ist eine gute Option.

Lesen Sie hier mehr über New Relic - //newrelic.com/

Verwenden Sie ElasticSearch, um anwendungsweite Suchvorgänge in Ihren Client-Apps durchzuführen

Laut Wikipedia

Elasticsearch ist eine Suchmaschine, die auf der Lucene-Bibliothek basiert. Es bietet eine verteilte, mandantenfähige Volltextsuchmaschine mit einer HTTP-Weboberfläche und schemafreien JSON-Dokumenten. Elasticsearch wurde in Java entwickelt.

Am Anfang werden Sie versucht sein, herkömmliche Datenbankabfragen zu verwenden, um Ergebnisse in dieser Suchleiste für die Client-App zu erhalten. Warum? Weil es einfach ist.

Herkömmliche Datenbanken sind jedoch nicht für solche performanten Abfragen gedacht. Finden Sie einen guten Zeitpunkt heraus, um Ihre Suche auf ElasticSearch zu migrieren und eine Datenpipeline in Ihr System einzuführen. Es versorgt die elastische Suche mit Daten und verbindet dann die Suche von ElasticSearch mit dem Anwendungsserver.

Hier ist ein guter Überblick über Elasticsearch, um Ihnen den Einstieg zu erleichtern.

Und die ElasticSearch Docs - //www.elastic.co/guide/index.html

Fügen Sie eine Firewall in Ihren Produktionsserver ein

Sie sollten dies auf jeden Fall tun - es ist ein Muss. Fügen Sie eine Firewall in Ihren Produktionsserver ein und schließen Sie alle Ports mit Ausnahme derjenigen, die für APIs (https-Verbindungen) verwendet werden sollen. Leiten Sie die API-Endpunkte mithilfe eines Reverse-Proxy-Webservers wie NGiNX oder Apache weiter. Kein anderer Port sollte für die Außenwelt zugänglich sein als die von NGiNX zugelassenen.

Warum sollten Sie NGiNX verwenden:

  • //www.nginx.com/resources/wiki/community/why_use_it/
  • //blog.serverdensity.com/why-we-use-nginx/
  • //www.freecodecamp.org/news/an-introduction-to-nginx-for-developers-62179b6a458f/

Einpacken

Die oben genannten Punkte basieren auf meinen eigenen Vorlieben und ich habe sie im Laufe der Jahre entwickelt. Hier und da wird es leichte Unterschiede geben, aber die Konzepte bleiben gleich.

Und am Ende tun wir dies alles, um ein reibungsloses System zu schaffen, das so schnell wie möglich in der Produktion läuft, nachdem Sie auf die Idee gekommen sind.

Ich habe versucht, mein gesamtes Wissen, das ich im Laufe der Jahre erworben habe, aufzuschreiben, und ich könnte mich an einigen Stellen irren .Ich f Sie denken , Sie können bessere Informationen bieten , bitte Kommentar frei fühlen. Und wie immer teilen Sie uns bitte mit, wenn Sie dies für hilfreich halten.