Die Geschichte der Geburt eines Online-Such- und Buchungsdienstes für Urheberrechte reist um die Welt: ein Wort des Entwicklers

Wie alles begann
Ideale Qual
Technologien und wie sie nicht einzigartig sind
Wie lagern und wo?
Nicht nur zum Speichern, sondern auch zum Suchen
Das ist kryptische SEO
Cdn unser alles
Zusammenfassend

Wie alles begann


Ich möchte unsere halbjährige Geschichte der Erstellung eines Onlinedienstes für die Suche und Buchung von Urheberrechtsreisen rund um die Welt teilen. Bei der Erstellung dieses Artikels war es das Ziel, über die Erfahrungen bei der Erstellung eigener Lösungen von Grund auf und über die Probleme und Herausforderungen zu sprechen, denen wir auf dem Weg begegnet sind.

Zunächst, um welche Art von Service es sich handelt und warum es notwendig war, ihn zu erstellen. Unser Team hat lange Zeit an verschiedenen Großprojekten für Geschäftskunden gearbeitet. Dies sind Portale für Banken, Unternehmen, Großbetriebe sowie Dokumentenmanagementsysteme. Die Arbeit mit einem solchen Segment impliziert natürlich die Zufriedenheit eines engen Kreises interessierter Mitarbeiter und endet nicht immer mit einer langen und erfolgreichen Nutzung.

Dafür gibt es mehrere Gründe: mangelndes Verständnis des Projekts in der Anfangsphase, der Wunsch, Geld zu sparen und die umfassendste Ausrüstung zu erhalten, Änderungen der Anforderungen in der Endphase ohne Überarbeitung der Bedingungen und Budgets. Wie Sie sehen, ist es unter solchen Bedingungen sehr schwierig, die Zufriedenheit des Projekts auf beiden Seiten zu erreichen.

Nach all dieser Erfahrung haben wir uns entschlossen, uns auf dem Markt zu versuchen, wo das Feedback des Kunden blitzschnell ist. Sie verstehen das Interesse an dem Produkt so schnell wie möglich und sehen jeden Tag, wie Ihr Service genutzt wird.
Wie sich herausstellte, waren unsere ruhigen Tage vorbei!

Ideale Qual


Das erste, was getan werden musste, war die Idee zu entwickeln, was wir so nützlich anbieten wollen, dass es nicht auf dem Markt ist und das wahrgenommen und erwartet wird. Wir hatten mehrere solcher Proben und in den ersten zwei Monaten waren wir mit Experimenten beschäftigt, um die Zukunft zu finden. Wie Sie verstehen, gab es auch ein Problem mit Technologien, da es notwendig ist, funktionierende Modelle in kürzester Zeit zu erstellen, ihre Funktionsfähigkeit zu überprüfen und sie ständig zu verbessern oder erneut zu wiederholen.

Zu Beginn war das Gepäck an Technologien, das wir hatten, nicht sehr jQuery und C # (die wir in unseren vorherigen Projekten verwendet haben). Mit diesen Tools konnten wir die Herausforderungen nicht schnell und flexibel bewältigen. Glücklicherweise haben wir bereits neue Ansätze für die Client- und Serverentwicklung in Betracht gezogen. Unsere Wahl fiel auf Angular 2 und Node.js. Mit dieser Lösung konnten wir schnell Komponenten und Module erstellen, die wir in kürzester Zeit ändern konnten (an dem Tag, an dem wir sie zwei- oder dreimal wiederholen konnten).

Wir sind zu dem Schluss gekommen, dass jede Komponente so klein wie möglich und in andere Komponenten und Module integrierbar sein sollte. So haben wir im Verlauf der Experimente genügend Vorlagen gesammelt, aus denen verschiedene Arbeitslayouts zusammengestellt werden konnten.

Aber wenn wir die Tools schnell genug herausgefunden haben und im Kampf unsere Fähigkeiten immer mehr gesteigert haben (ich werde sofort feststellen, dass Google Ihnen hilft, aber die Video-Tutorials nicht vergessen), stellte sich eine andere Frage, wo die Daten gespeichert werden sollen. Aber ich werde etwas später darüber sprechen und jetzt zurück zur Idee selbst.

Als Hauptvektor unseres Service, den wir für die Organisation von Reisen angestrebt haben, werden Sie sofort sagen, dass es in unserer Zeit eine Reihe von Websites und Dienstleistungen für Reisen gibt, sowie die gleichen Reisebüros, und ich stimme Ihnen zu. Die Frage ist jedoch, wie man die Einstellung eines durchschnittlichen Touristen ändert, um sich auszuruhen und ihm die Möglichkeit zu geben, maximale Eindrücke zu erhalten und eine individuelle Herangehensweise an seine Geliebte zu spüren.
Wir haben verstanden, dass solche ehrgeizigen Pläne nicht mit einem Dienst oder mit einer einzigen Lösung gelöst werden können, aber wir müssen immer irgendwo anfangen. Nachdem wir uns mit dem Hauptziel etabliert hatten, suchten wir nach dem ersten Baustein, der als Grundlage für unsere zukünftige Lösung dienen wird. Nach langer Suche kamen wir auf die Idee eines Dienstes, über den ich jetzt sprechen möchte.

Was ist das

Kurz gesagt, dies ist UBER für Reisende. Stellen Sie sich vor, Sie sind ein erfahrener Reisender, der an viele interessante Orte auf der ganzen Welt gereist ist und seine Erfahrungen wirklich teilen und etwas Geld verdienen möchte. Und auf der anderen Seite ein Tourist, der einen türkischen Urlaub satt hat, am Strand liegt und isst und trinkt. Und diese Leute müssen irgendwie vereint sein. Deshalb haben wir uns entschlossen, diesen Menschen zu helfen, einander zu finden.
Der Service ist ein Markt, auf dem sich erfahrene Touristen registrieren können, um ihre Touren zu gestalten und sie den Massen zukünftiger Reisender zur Verfügung zu stellen.

Technologien und wie sie nicht einzigartig sind


Wie lagern und wo?


Wie ich bereits schrieb, stellte sich nach Auswahl der Tools zum Erstellen des Dienstes die Frage nach der Auswahl eines Data Warehouse. Natürlich haben wir uns im Laufe der Jahre an relationale Datenbanken und insbesondere an SQL Server gewöhnt. Zu Beginn war jedoch eine Plattform für eine minimale Konfiguration und ein Minimum an Aufwand mit weiterer Unterstützung sowie die Fähigkeit zur Skalierung bei der Entwicklung unseres Service und das Wachstum der Besucher erforderlich.

So wurde im Suchprozess eine Lösung gefunden, die alle unsere Anforderungen abdeckte, nämlich die Firebase-Echtzeitdatenbank. Dieser Service hat uns geholfen, die Probleme der Datenspeicherung, des Hostings, des Authentifizierungsdienstes und des Warehousing zum Speichern statischer Daten zu lösen. Außerdem steht dieser Dienst unter der Leitung von Google, was uns wiederum schöne Boni einbrachte, da er separate Bibliotheken für die Arbeit mit Angular 2 bereitstellte und bequem und schnell war. Aber das Coolste, was wir haben, ist die sofort einsatzbereite RealTime-Datenbank. Unsere ersten Empfindungen waren einfach fantastisch.

Jetzt mussten wir nicht ständig Anfragen an den Service stellen, die Relevanz der Daten auf dem Client überwachen und warten, bis die Daten beim Client eintreffen (Angular hat uns auch geholfen). Wir haben dies alles irgendwo an einem Tag konfiguriert und dann begonnen, unseren Service direkt zu erstellen, ohne von Infrastrukturproblemen abgelenkt zu werden. Ich muss sofort sagen, dass wir während des Entwicklungsprozesses keinen Cent für diesen Service ausgegeben haben, da die Basisversion kostenlos ist und für Entwicklung, Tests und Experimente völlig ausreicht.

Nicht nur zum Speichern, sondern auch zum Suchen


Sobald die erste Beta fertig war, stellte sich beim Filtern der Daten die Frage, und wir erkannten die ersten Nachteile in Firebase. Wie sich herausstellte, wird der Prozess der Datenerfassung für eine große Anzahl von Bedingungen einfach nicht unterstützt. Es ist möglich, Daten mit nur einer Bedingung auszuwählen oder mehrere Werte in einem Feld zu sammeln und danach zu filtern. Dieser Ansatz passte nicht zu uns und wir begannen erneut, nach einer Lösung zu suchen.
Natürlich haben wir Firebase nicht abgelehnt, da dieses eine Minus nicht die Masse der Vorteile dieses Dienstes überlappte. Glücklicherweise hatten wir die Erfahrung mit Google Big Query, die wir im Rahmen unserer Recherchen erhalten haben, und beschlossen, es anzuwenden. Das erste Plus ist, dass es Google ist, das zweite - native und bevorzugte SQL-Abfragen und die geringen Kosten für den kostenlosen Besitz von 1 TB Daten pro Monat.

Wieder wurde alles klar und verständlich, sie schrieben einen Datenversanddienst und schraubten ihn erfolgreich an Cloud Function. Ich habe vergessen zu sagen, dass Firebase sich auch um das Backend gekümmert hat. Sie können Ihre eigenen Trigger auf Nodejs schreiben und sie an jedes Ereignis in der Datenbank sowie an eine http-Anfrage hängen.

Wie Sie sehen, ist der Prozess der Suche nach Lösungen und Ansätzen für uns zu einer täglichen Aufgabe geworden, da wir fast jeden Tag vor neuen Herausforderungen standen, die schnell angegangen werden mussten.

Wir hatten keine Zeit, uns zu entspannen und unseren Service ruhig weiter zu entwickeln, als die Fokusgruppentests begannen, und wir stellten fest, dass Benutzer es gewohnt sind, Filter sehr schnell zu wechseln und sofort das Ergebnis ihrer Arbeit sehen möchten. Solche Anforderungen zwangen uns, Big Query aufzugeben und nach etwas Neuem zu suchen. Da Big Query uns eine Antwortgeschwindigkeit von maximal 2 Sekunden gegeben hat, und dies mit einer minimalen Datenmenge. Hier gibt es natürlich nichts zu beschuldigen, da dieser Dienst für die Verarbeitung großer Informationsmengen und nicht für die schnelle Reaktion auf eine Reihe aufeinanderfolgender Anfragen vorgesehen ist.

Aus diesem Grund haben wir uns für Elastic Search entschieden. Mit diesem Produkt konnten wir eine schnelle Suchmaschine erstellen. Unsere Filterung begann, die Anforderungen unserer Benutzer zu erfüllen. Ich werde hier nicht viel erzählen, da dieses Produkt immer beliebter wurde und es genügend Informationen darüber gibt. Das einzige, was ich beachten möchte, ist, dass Sie für dieses Produkt eine virtuelle Maschine benötigen, die irgendwo gehostet werden muss. Diese Funktion bietet sowohl Google als auch Microsoft. Sie haben also die Wahl. Die Konfiguration mit der Bitnami-Ressource ist genauso einfach. Wir haben uns für Azure entschieden. Diese Wahl war nicht so sehr auf technologische Merkmale zurückzuführen, sondern vielmehr auf Faktoren von Drittanbietern.

Das ist kryptische SEO


Und jetzt läuft der Service, die Plattformen werden entwickelt und alles scheint in Ordnung zu sein. Wir streben eine glänzende Zukunft an. Dies wirft jedoch das Problem der Werbung für unseren Service und das zentrale SEO-Problem auf. Ich hätte nie gedacht, dass diese Frage von den Machern von Angular nicht so geklärt werden könnte. Wie sich herausstellte, ist Single Page Application bei der Bereitstellung dieser Funktion sehr schwach, und um ehrlich zu sein, ist dies überhaupt nicht der Fall. Ja, Sie können statische Daten in Meta-Tags nähen. Wenn Sie die Crowl umgehen oder beim Teilen dieselben Informationen bereitstellen, ist dies irgendwie falsch und ineffektiv. Nachdem wir im Internet gesurft hatten, stießen wir auf einen so wunderbaren Service, der Teil von Angular 4, Angular Universal, ist. Nachdem wir die Beschreibung gelesen hatten, stellten wir fest, dass dies das ist, was wir brauchen, und dass wir die Entwickler des Frameworks vergeblich beschimpften.

Ein Epos begann damit, dieses Glück mit unserem Projekt zu verbinden. Ich stelle fest, dass zu diesem Zeitpunkt bereits etwa 10 große Module geschrieben wurden und etwa 12 npm-Pakete von Drittanbietern verwendet wurden. Die erste Konfiguration eines sauberen Projekts verlief dank der Handbücher im Internet perfekt, und alles schien zu starten. Darüber hinaus haben wir den Serverteil auf derselben Cloud-Funktion von Firebase gedreht. Nun müssen wir den Kampfcode ausprobieren, und dann gab es Probleme. Erstens sollten, wie sich herausstellte, alle npm-Pakete von Drittanbietern Angular 4 unterstützen. Im Code auf der Serverseite können Sie das Variablenfenster, das Dokument usw. nicht verwenden. Nun, das Debuggen all dieses Glücks ist einfach nicht realistisch.

Ich werde nicht alle unsere Qualen mit diesem Dienst beschreiben, da es sehr und schmerzhaft war. Ich werde eins sagen, wir haben es nicht überwunden, ich weiß es nicht oder habe es nicht vollständig verstanden, oder es ist nur so, dass es noch feucht und nicht produktiv einsetzbar ist. Im Allgemeinen liegt es an Ihnen, zu entscheiden, wer erfolgreich sein kann, aber wir haben uns entschlossen, hier aufzuhören. Als Ergebnis wurde ein Dienst geschrieben, der alle http-Anforderungen abhört und eine index.html-Anforderung zurückgibt, aber zuvor die erforderlichen Meta-Tags hineinwirft. Infolgedessen stellte sich heraus, dass es gut war und seit 3 ​​Monaten der Flug normal war. Übrigens hosten wir alles auch auf Azure für die gleichen Faktoren von Drittanbietern.

Cdn unser alles


Und auch hier wieder etwas Zeit der Stabilität und relativ leiser Arbeit. Und niemand hat gedacht, dass uns die Überraschung von Facebook erwartet. Eines schönen Tages stellte sich heraus, dass das Teilen in FB nicht funktioniert. Zuerst dachten wir, dass dies auf die Verschärfung der Sicherheitsrichtlinien in FB und dann auf die IP-Blockierung zurückzuführen ist, fanden aber keinen Grund. Zur Unterstützung von FB und Firebase kontaktiert, aber jeder gegen den anderen getreten.

Das einzige, was wir festgestellt haben, ist, dass das Problem in den URLs zu den Bildern liegt, die wir im Firebase-Store gespeichert haben, und dass die URL dort, wie ich Ihnen gleich sage, dort sehr spezifisch ist. Wir haben uns entschlossen, den gesamten statischen Inhalt auch auf Azure zu übertragen. Ich sage Ihnen, dass diese Entscheidung richtig war, da die Upload-Geschwindigkeit für Fotos gestiegen ist und Sie all dies flexibler und transparenter verwalten können.

Zusammenfassend


Im Moment sind wir bereits im 3. Monat produktiv, wir verbessern und erweitern ständig die Funktionalität. Für die Versionskontrolle verwenden wir natürlich Git. Wir werden die Builds schrittweise automatisieren und bereitstellen. Wir bekommen ungefähr 450 neue einmalige Besuche pro Tag, es gibt Sprünge von bis zu 1000 Benutzern. Und alles funktioniert.

Was ich aus all dem zusammenfassen möchte, was gesagt wurde:

  1. Sie müssen nicht versuchen, alle Probleme zu lösen, die aufgrund eines Dienstes oder einer Technologie in Ihren Projekten auftreten.
  2. Versuchen Sie, universelle Module für mehr Flexibilität in der Zukunft zu entwickeln.
  3. Die Wahl eines Cloud-Dienstanbieters ist eine rein persönliche Angelegenheit, da im Allgemeinen alle die gleichen Dienste anbieten. Die Frage bleibt im Preis und Ihren Vorlieben.
  4. Entwerfen Sie Ihre Lösung so, dass Sie zwischen verschiedenen Dienstanbietern und Technologien migrieren können, oder überlegen Sie sich zumindest eine Strategie für einen möglichen Umzug.
  5. Hab keine Angst zu experimentieren.

Source: https://habr.com/ru/post/de414975/


All Articles