Suchergebnisse auf ListenNotes.comListen Notes ist eine Suchmaschinen- und Podcast-Datenbank. Die Technologie ist eigentlich sehr langweilig. Keine KI, Deep Learning oder Blockchain.
"Wenn Sie die Implementierung von AI ankündigen müssen, verwenden Sie Real AI nicht" :)
Nachdem Sie diesen Artikel gelesen haben, können Sie mein Projekt wiederholen oder einfach etwas Ähnliches tun. Sie müssen nicht viele Entwickler einstellen. Denken Sie daran,
als Instagram 57,5 Millionen US-Dollar sammelte und für 1 Milliarde US-Dollar zu Facebook ging , hatten sie nur
13 Mitarbeiter - und das sind nicht nur Entwickler. Der Kauf von Instagram erfolgte Anfang 2012. Jetzt ist das Jahr 2019, und heute ist es mehr denn je einfach, mit einem winzigen Ingenieurteam etwas Sinnvolles zu schaffen - selbst von einer Person.
Wenn Sie Listen Notes noch nicht gesehen haben, versuchen Sie es jetzt:

Rückblick
Beginnen wir mit den Anforderungen oder Merkmalen des Projekts.
Listen Notes bietet zwei Funktionen:
- Website für Podcast-Hörer. Hier finden Sie eine Suchmaschine, eine Datenbank mit Podcasts, Wiedergabelisten zum späteren Anhören , gespeicherte Clips aus Podcasts und Benachrichtigungen, wenn das angegebene Schlüsselwort in einem neuen Podcast im Internet erwähnt wird.
- Suchen Sie nach Podcasts und APIs für Entwickler. Wir müssen die Verwendung der API verfolgen, Geld von Abonnenten erhalten, Kundenunterstützung bieten und vieles mehr.
Alles funktioniert unter AWS, nur 20 Server in Produktion (Stand 5. Mai 2019):
Server mit Listen NotesAnhand des Hostnamens können Sie leicht erraten, was jeder Server tut.
- Production-Web dient dem Web-Verkehr für ListenNotes.com.
- Production-API dient der Traffic-API. Wir unterstützen zwei Versionen der API (Stand: 4. Mai 2019): v1api (veraltet) und v2api (neu)
- Production-DB startet PostgreSQL (Master und Slave)
- Production-es startet den Elasticsearch-Cluster.
- Der Produktionsmitarbeiter startet eigenständige Verarbeitungsaufgaben, um die Podcast-Datenbank immer auf dem neuesten Stand zu halten und einige magische Funktionen bereitzustellen (z. B. Rangfolge der Suchergebnisse, Empfehlungen für Episoden / Podcasts usw.).
- Production-lb ist ein Load Balancer. Der Einfachheit halber führe ich auch Redis und RabbitMQ auf diesem Server aus. Ich weiß, dass das nicht perfekt ist. Aber ich bin nicht die perfekte Person. :) :)
- Production-Pangu ist ein Produktionsserver, auf dem ich manchmal einmalige Skripte ausführe und Änderungen teste . Was ist ein Pangu ?
Die meisten Server können horizontal skaliert werden. Deshalb nenne ich sie
Produktion-etwas1 ,
Produktion-etwas2 usw. ... Es ist sehr einfach,
Produktion-etwas3 und
Produktions-etwas4 zum Cluster hinzuzufügen.
Backend
Das gesamte Backend ist in Django / Python3 geschrieben. Das Betriebssystem ist Ubuntu.
UWSGI wird verwendet, um den
Webverkehr zu bedienen. Ich habe
nginx vor uWSGI-Prozessen installiert, es funktioniert auch als Load Balancer.
Das Haupt-Data Warehouse ist
PostgreSQL , mit dem ich seit vielen Jahren über umfangreiche Erfahrung in Entwicklung und Betrieb verfüge. Mit bewährter Technologie schlafen Sie nachts ruhig.
Redis wird für verschiedene Zwecke verwendet (z. B. Caching, Statistik ...). Es ist leicht zu erraten, dass
Elasticsearch irgendwo verwendet wird . Ja, ich verwende es, um Podcasts zu indizieren und Suchanfragen zu bearbeiten, wie die
meisten langweiligen Unternehmen .
Sellerie wird für die Offline-Verarbeitung verwendet, während
Sellerie Beat zum Planen von Aufgaben vorgesehen ist, die Cron-Jobs ähneln, aber etwas besser sind. Wenn Listen Notes in Zukunft populär wird und Sellerie und Beat Probleme mit der Skalierung verursachen, werde ich wahrscheinlich zu zwei Projekten wechseln, die ich für den vorherigen Arbeitgeber durchgeführt habe:
ndkale und
ndscheduler .
Supervisord verwaltet die Prozesse auf jedem Server.
Warten Sie, was ist mit Docker, Kubernetes und der Architektur ohne Server? Nichts dergleichen. Mit der Erfahrung lernen Sie, nicht zu viel zu tun. Tatsächlich habe ich 2014 bei einem früheren Job ein bisschen mit Docker zusammengearbeitet: Was für ein durchschnittliches Startup im Wert von einer Milliarde Dollar gut war, scheint für ein kleines Ein-Personen-Unternehmen unnötig.
Frontend
Die Weboberfläche wird hauptsächlich mit
React +
Redux +
Webpack +
ES erstellt . Ziemlich normal in diesen Tagen. Bei der Bereitstellung in einer Produktionsumgebung werden JS-Pakete auf
Amazon S3 heruntergeladen und über
CloudFront ausgegeben.
Auf ListenNotes.com werden die meisten Webseiten zur Hälfte auf der Serverseite (
Django-Vorlage ) und zur Hälfte auf der Clientseite (
React ) gerendert. Die Webseitenvorlage stammt vom Server, und auf der Clientseite wird die interaktive Webanwendung hauptsächlich gerendert. Aufgrund meiner Faulheit und einiger potenzieller SEO-Vorteile sind jedoch mehrere Webseiten auf dem Server vollständig vorbereitet.
Audio-Player
Ich verwende eine stark modifizierte Version des
React-Media-Players . Es funktioniert
auf der Website als
integrierter Player auf Twitter und als integrierter Player auf Websites von Drittanbietern:
Eingebauter Player auf Websites von DrittanbieternAPI
Wir bieten Entwicklern eine einfache und robuste
Podcast-API . Das Erstellen einer API ähnelt dem Erstellen einer Website. Hier ist der gleiche Django / Python-Stack für das Backend und ReactJS für die Schnittstelle (z. B. API-Symbolleiste, Dokumentation ...).
Listen API Toolbar
Listen API-DokumentationFür die API müssen wir nachverfolgen, wie viele Anfragen der Kunde im aktuellen Abrechnungszyklus verwendet, und eine Gebühr erheben. Es ist leicht vorstellbar, dass Redis hier aktiv genutzt wird :)
Devops
Maschinenvorbereitung und Codebereitstellung
Ansible wird für die Bereitstellung verwendet. Im Wesentlichen habe ich eine Reihe von Yaml-Dateien geschrieben, um anzugeben, welche Konfigurationsdateien und welche Software auf jedem Servertyp vorhanden sein sollte. Ich kann einen Server mit allen richtigen Konfigurationsdateien und der gesamten installierten Software per Knopfdruck bereitstellen. Hier ist die Verzeichnisstruktur für diese Ansible-Yaml-Dateien:
Ich könnte die Verzeichnisse besser benennen. Aber das ist jetzt genugAnsible hilft auch bei der Bereitstellung von Code in der Produktion. Grundsätzlich habe ich ein Wrapper-
Skript deploy.sh , das unter macOS funktioniert:
./deploy.sh Produktion HEAD Web
Dieses Skript akzeptiert drei Argumente:
- Umwelt : Produktion oder Inszenierung.
- Die Version des Listennotes-Repositorys : HEAD bedeutet "nur die neueste Version bereitstellen". Wenn das SHA-Commit angegeben ist, wird eine bestimmte Version des Codes bereitgestellt. Dies ist besonders nützlich, wenn ich nach einer fehlerhaften Bereitstellung ein Rollback durchführen muss.
- Servertyp : Web, Worker, API oder alle. Ich muss nicht auf allen Servern gleichzeitig bereitstellen. Manchmal nehme ich Änderungen am Javascript-Code vor, dann muss ich ihn nur im Web bereitstellen, ohne die API oder die Worker zu berühren.
Der Bereitstellungsprozess wird hauptsächlich von Ansible-Yaml-Dateien organisiert und ist natürlich äußerst einfach:
- Wenn dies auf meinem Macbook Pro eine Bereitstellung für Webserver ist, werden Javascript-Pakete erstellt und in S3 hochgeladen.
- Auf Zielservern klont git das Listennotizen-Repository in einen Ordner namens timestamp, sucht nach einer bestimmten Version und installiert gegebenenfalls neue Python-Abhängigkeiten.
- Auf den Zielservern verweist eine symbolische Verknüpfung auf den oben genannten Ordner namens timestamp. Anschließend starten wir die Server mithilfe von Supervisorctl neu.
Wie Sie sehen können, verwende ich diese ausgefallenen CI-Tools nicht. Nur die einfachsten und zuverlässigsten Werkzeuge, die wirklich funktionieren.
Überwachung und Alarmierung
Überwachung und Warnungen werden
von Datadog durchgeführt . Ein einfaches Dashboard zeigt einige allgemeine Metriken. Alles hier soll mein Selbstvertrauen stärken, wenn ich mich mit Servern in der Produktion beschäftige.
Datadog Dashboard für Listen Notes, Stand Dezember 2017Datadog ist mit PagerDuty verbunden. Wenn etwas schief geht, sendet mir PagerDuty eine Benachrichtigung per Telefon und SMS.
Ich verwende
Rollbar auch , um den Status des Django-Codes zu verfolgen und unerwartete Ausnahmen zu erkennen, indem ich per E-Mail und Slack benachrichtigt werde.
Slack ist sehr aktiv. Ja, dies ist ein Unternehmen mit einer Person, daher wird es nicht für die Kommunikation benötigt, sondern für die Überwachung interessanter Ereignisse auf Anwendungsebene. Neben der Integration von Datadog und Rollbar in Slack integriert der Slack-Backend-Webcode auch
eingehende Slack-Web-Hooks , um Sie über die Benutzerregistrierung oder einige interessante Aktionen (z. B. Hinzufügen oder Löschen von Elementen) zu informieren. Dies ist eine sehr verbreitete Praxis in Technologieunternehmen. Wenn Sie Bücher über die frühen Jahre von Amazon oder PayPal lesen, werden Sie feststellen, dass beide Unternehmen über einen ähnlichen Benachrichtigungsmechanismus verfügten: Immer wenn sich ein Benutzer registrierte, ertönte ein Klingelton, um alle Mitarbeiter im Büro zu benachrichtigen.
Seit dem Start Anfang 2017 hatte Listen Notes keine ernsthaften Ausfallzeiten (mehr als 5 Minuten), außer
dies . Ich bin immer sehr vorsichtig und praktisch bei der Arbeit mit DevOps. Für Server wird ein schwerwiegender Overhead bereitgestellt, wenn die Besucherzahlen aufgrund des Einstiegs in die Presse oder aufgrund eines anderen Ereignisses stark ansteigen.
Entwicklung
Ich arbeite für
WeWork in San Francisco. Einige fragen sich vielleicht, warum sie nicht einfach von zu Hause aus oder in ungezwungenen Cafés arbeiten. Nun, ich schätze Produktivität sehr und bin bereit, Geld in sie zu investieren. Ich glaube nicht, dass ein Durcheinander zu Hause zur Entwicklung von Software (oder zu Arbeiten im Bereich Wissen / Kreativität) beiträgt. Ich arbeite selten mehr als 8 Stunden am Tag (sorry
996 Leute ). Ich möchte, dass jede Minute zählt. Daher brauche ich ein gutes und relativ teures Privatbüro. Anstatt zum Nachteil der Zeit Geld zu sparen, optimiere ich die Zeit, um sie profitabel zu nutzen und Geld zu verdienen.
Mein Büro bei WeWorkIch arbeite an einem MacBook Pro. In
Vagrant +
VirtualBox läuft eine nahezu identische Infrastruktur. Für die Entwicklungsumgebung verwendet Vagrant denselben Satz von Ansible-Yaml-Dateien wie oben beschrieben.
Ich unterstütze die Philosophie eines
monolithischen Endlagers . Daher gibt es nur ein Listennotes-Repository mit DevOps-Skripten, Frontend- und Backend-Code. Es wird als privates Repository auf GitHub gehostet. Die gesamte Entwicklung erfolgt in der Hauptbranche. Ich benutze selten Brunchs.
Ich schreibe Code und starte Dev-Server (Django Runserver und Webpack Dev Server) mit
PyCharm . Ja, ich weiß, es ist langweilig. Dies ist schließlich kein Visual Studio Code oder Atom oder eine coole IDE. Aber für mich funktioniert PyCharm einwandfrei. Alte Schule, was kannst du tun?
Mein PycharmVerschiedenes
Es gibt unzählige nützliche Tools und Services, mit denen ich Listen Notes als Produkt und Unternehmen erstelle:
Bleib ruhig und wichse nicht ...
Wie Sie sehen, leben wir in einer großartigen Zeit, um unser Geschäft zu starten. Es gibt so viele handelsübliche Tools und Services, die Zeit und Geld sparen und Ihre Produktivität steigern. Jetzt ist der beste Zeitpunkt in der Geschichte, um mit einem winzigen Team (oder nur mit den Anstrengungen einer Person) mithilfe einfacher und langweiliger Technologien etwas Nützliches für die Menschheit zu schaffen.
Im Laufe der Zeit werden Unternehmen immer kleiner. Sie müssen nicht mehr Tonnen von Vollzeitbeschäftigten einstellen. Um die gesamte Arbeit zu erledigen, können Sie SaaS-Services und Auftragnehmer zum Bestellen verwenden.
Grundsätzlich ist das Haupthindernis bei der Erstellung eines Projekts übermäßiges Denken. Was ist wenn das, was wenn das? Junge, niemand braucht dich. Jeder ist mit seinen eigenen Angelegenheiten beschäftigt. Niemand interessiert sich für Sie und Ihr Projekt, bis Sie beweisen, dass Sie Aufmerksamkeit verdienen. Selbst wenn Sie den Start sperren, wird es niemand bemerken. Groß denken, klein anfangen, schnell handeln. Es ist absolut normal, langweilige Technologie zu verwenden und mit etwas Einfachem (sogar Hässlichem) zu beginnen, wenn Sie das Problem wirklich lösen.
Jetzt gibt es so viele Menschen mit einem
Frachtkult . Ignoriere das Geräusch. Bleib ruhig und wichse nicht.