
Am 28. Juli veranstalteten unser Instagram-Account und YouTube eine Live-Übertragung mit Alexander Vysotsky, einem führenden PHP-Entwickler in Badoos Londoner Büro, der im Anti-Spam-Team arbeitet. Sasha sprach darüber, wie Highload-Projekte in PHP erstellt werden, sein Leben in London und natürlich über Badoo.
Mein Name ist Alexander Vysotsky, ich arbeite als führender PHP-Entwickler bei Badoo. Wir entwickeln Dating-Apps Badoo und Bumble, die weltweit über 500 Millionen Nutzer haben.
Wir haben mehrere Büros in verschiedenen Ländern, aber die meisten Entwickler befinden sich in Moskau und London. Insgesamt hat das Badoo-Entwicklungsteam rund 300 Mitarbeiter. Wir haben 20 Open Source-Projekte und viele interne Tools, über die wir in unserem Blog über Habré oft sprechen.
Heute möchte ich Ihnen sagen, wie es ist, als Backend-Entwickler bei Badoo unter Bedingungen von zwei Releases pro Tag, einer echten Hochlast und einer Million Codezeilen zu arbeiten, wie Sie sich an das Leben und Arbeiten im Ausland anpassen und Ihre Familie zusammenhalten können.
Wie ich nach Badoo gekommen bin
Meine Heimatstadt ist Saratow, wo ich auch eine Fachausbildung erhalten habe: Ich habe das Fach- und Aufbaustudium an der Fakultät für Informatik und Informationstechnologien der SSU abgeschlossen. Zum Zeitpunkt seines Abschlusses an der Graduiertenschule gelang es ihm, als Backend-Entwickler in verschiedenen Bereichen zu arbeiten: vom Tourismussektor bis zu Spielen.
Mitte 2017 endete das Hauptprojekt bei der Arbeit, und vor mir stellte sich die Frage, was als nächstes zu tun ist: Suchen Sie nach etwas Neuem in Saratow, ziehen Sie nach Moskau oder St. Petersburg oder gehen Sie zu ausländischen Unternehmen? Zu diesem Zeitpunkt wusste ich bereits über Badoo Bescheid und bewarb mich um eine offene Stelle im Londoner Büro. Ich hatte jedoch nicht genug Erfahrung und Wissen, um ein Angebot zu erhalten. Gleichzeitig erhielt ich zwei Stellenangebote aus Deutschland und den Niederlanden. Zusammen mit meiner Frau haben wir beschlossen, für eine deutsche Firma zu arbeiten. Eineinhalb Jahre lebten wir in Leipzig - einer der größten Städte Deutschlands - wo ich an touristischen Lösungen arbeitete.
Der Wunsch, bei Badoo zu arbeiten, verschwand jedoch nicht und ich bewarb mich ein Jahr später erneut um eine offene Stelle. Nach mehreren Telefoninterviews und einem persönlichen Interview bekam ich ein Angebot. Anfang 2019 zog ich nach London.
Beide Umzüge - nach Leipzig und London - waren ein ernsthafter Test. Ich befand mich außerhalb der üblichen Umgebung: Es gab keine Freunde, Verwandten oder Eltern, mit denen ich es gewohnt war, jeden Tag zu kommunizieren. Es war nicht einfach für mich und für meine Frau, unsere Familie als Ganzes. Wir suchten nach einem Ausweg aus diesem Staat und versuchten, uns so schnell wie möglich in die neue Gesellschaft zu integrieren.
In Deutschland war die Sprache das offensichtliche Hindernis: Wir haben immer Englisch gelernt, aber hier mussten wir uns mit Deutsch befassen. Es war sehr anstrengend, aber nach 1,5 Jahren in Leipzig haben wir die Sprache gut gelernt und jeden Tag geübt. In London trat dieses Problem nicht auf, außerdem hatten wir bereits die Erfahrung, in einem fremden Land zu leben. Badoo leistete maximale Unterstützung bei der Suche nach einer Wohnung im Umgang mit den Steuerbehörden. Dies trug zur Integration in das lokale Leben bei.
Einer der schwierigsten Momente für einen Russen beim Umzug sind Steuern. In England wird eine progressive Skala verwendet: Der Steuersatz steigt je nach Einkommensniveau. Ein weiteres problematisches Thema ist die Medizin. Jemand sagt, dass alles in Ordnung mit ihr ist, jemand stimmt nicht zu. Ich habe eine positive Erfahrung gemacht.
Eine andere Geschichte war mit der Suche nach Wohnraum. Gute Optionen werden sehr schnell auseinander genommen. Bevor Sie eine Wohnung zur Miete erhalten, müssen Sie außerdem einen Scheck durchlaufen. In meinem Fall gab es sogar Anrufe nach Deutschland bei unseren früheren Vermietern: Sie wurden gefragt, wie gut ich als Mieter sei.
Für mich ist es auch wichtig, dass meine Frau das Leben an einem neuen Ort mag. Sie wollte schon immer den Beruf einer Designerin bekommen und bereitet sich jetzt auf die Zulassung vor. Kurse gefunden, die sie mag; Gleichzeitig verschärfte sie ihre Sprache und bestand den IELTS-Test, um den Bachelor-Abschluss in Innenarchitektur zu erhalten. In London gibt es eine Vielzahl von Bildungseinrichtungen, aber Sie müssen bedenken, dass die Bildungskosten für Ausländer um ein Vielfaches höher sind als für einheimische.
Als nächstes werde ich einige Fragen aus dem Chat beantworten.
Was hat dazu beigetragen, sich jedes Mal an einen neuen Ort anzupassen?
Die Hauptunterstützung liegt immer in der Familie. In unserem Fall haben sich meine Frau und ich gegenseitig unterstützt, und dies hat dazu beigetragen, alle anfänglichen Schwierigkeiten zu überwinden. Außerdem habe ich jedes Mal, wenn ich Glück mit dem Team hatte: Ich habe sehr coole Kollegen, die immer in Wort und Tat unterstützen, ihre Erfahrungen teilen, zuerst können sie mit Ihnen gehen und das Problem lösen. Im Allgemeinen sind eine gute Familie und gute Kollegen Gold wert.
Lohnt es sich, freiberuflich tätig zu sein, um in einem großen Unternehmen mit einem niedrigeren Gehalt zu arbeiten, wenn Sie noch nie zuvor eine solche Berufserfahrung gesammelt haben?
Die Frage ist vielmehr nicht das Gehalt, sondern die Prozesse, die mit dem Übergang zu einem großen Unternehmen verbunden sind. Wenn Sie freiberuflich tätig sind, legen Sie einen Arbeitstag für sich selbst fest und erstellen Workflows, mit denen Sie Dinge erledigen können. In einem großen Unternehmen ist alles anders: harte Fristen, viel mehr Kommunikation - sowohl zwischen Kollegen in einem Team als auch zwischen Teams. Sie müssen darüber nachdenken, ob dieses Tempo und Format der Arbeit für Sie richtig ist, und auf dieser Grundlage eine Entscheidung treffen.
Was das Gehalt betrifft, muss man in die Zukunft schauen. Wenn Sie jetzt ein großes Gehalt freiberuflich aufgeben und zu einem kleineren, zu einem Unternehmen wechseln, kann das Gehalt später dank der Erfahrung in der Branche stärker werden.
Kleiner Haftungsausschluss: Sie können unsere Website tech.badoo.com besuchenwo wir aktuelle Stellenangebote veröffentlichen. Vielleicht stoßen Sie auf etwas, das Ihnen gefällt, und hinterlassen eine Anfrage.
Was sind einige der Vorteile von Badoo im Vergleich zu kleineren Unternehmen?
Es ist besser, dies auf unserer Website zu lesen : Dort sind mehr aufgeführt, als ich mich erinnern kann. Die wichtigsten Punkte, über die man sich nur freuen kann, sind freiwillige Krankenversicherung, Fitnessausgleich, Frühstück, Mittag- und Abendessen im Unternehmen sowie hochwertige Arbeitsmittel.
Stimmt es, dass Badoo nicht anstellt, um in England zu arbeiten? Ich kann keine explizite Antwort finden.
Vor der Pandemie hatten wir sowohl in Moskau als auch in London freie Stellen. In der gegenwärtigen Umgebung werden Umzüge und Geschäftsreisen zwischen Büros natürlich vorübergehend eingefroren, obwohl die Rekrutierung fortgesetzt wird. Siehe Updates auf der Website: Es zeigt immer an, in welchem Büro eine freie Stelle offen ist. Das Unternehmen hält sich dabei an die maximale Transparenz.
Mussten Sie remote arbeiten? Ist es schwieriger geworden? Wie hast du interagiert?
Ja, wir arbeiten immer noch remote. Anfangs war es schwierig, weil meine Kollegen und ich nicht immer pünktlich zusammenfielen: Jemand anderes „kam nicht zur Arbeit“, jemand war bereits „gegangen“. Eine Synchronisation zwischen verschiedenen Teams ist erforderlich. Kommunikationsprobleme sind schwieriger zu lösen. Anstatt persönlich Fragen zu stellen, musste ich schreiben oder anrufen, was viel länger dauert.
Für die Interaktion haben wir eine große Anzahl von Chats und Videokonferenzen, die wir verwenden. Jetzt ist es einfacher geworden - daran gewöhnt.
Wie kann man Anstrengung, Ausdauer, Selbstmotivation und Aufschub kontrollieren?
Es ist kein Geheimnis, dass die meisten IT-Unternehmen aufgrund der Pandemie von zu Hause aus zur Arbeit gewechselt sind. Es war schwierig für mich, auf anderen Schienen wieder aufzubauen, aber ich habe ein paar Punkte für mich herausgegriffen.
Erstens ist eine strenge Kontrolle der Arbeitszeit erforderlich. Sie können alle Kollegen darüber informieren, dass Sie von 9 bis 18 arbeiten und in allen Messenger verfügbar sind und außerhalb dieser Zeit nicht auf Anfragen reagieren. Jeder behandelt dies mit Verständnis. Wenn Sie von zu Hause aus arbeiten, ist es schwierig, Beruf und Familie zu trennen, aber es ist sehr wichtig, eine psychologische Stimmung und Beziehungen aufrechtzuerhalten.
Zweitens sind Selbstmotivation und Aufschub wichtig. Viele Artikel über Habré sagen, dass Aufschub normal ist, aber schlecht, wenn es viel davon gibt. Ich verwende die folgende Technik: Wenn ich auf ein großes Problem stoße, teile ich es in viele kleine auf. Und dann scheint die neue beängstigende Funktion nicht mehr beängstigend zu sein und kann problemlos veröffentlicht werden.
PHP und Highload bei Badoo
Ich werde zu Fragen über die Arbeit übergehen. Ich arbeite im Anti-Spam-Team. Wie der Name schon sagt, scheint es, dass wir uns nur mit Anti-Spam befassen, aber das ist weit davon entfernt. Unser Ziel ist es, die bestmögliche Erfahrung für die Verwendung unserer Anwendungen zu bieten. Die Aufgaben des Benutzerschutzes sind für uns sehr wichtig, dafür werden viele Ressourcen und Anstrengungen aufgewendet.
Zusammenfassend lässt sich sagen, dass wir uns gegen böswillige Benutzer einsetzen: diejenigen, die Spam versenden, sich an Betrug beteiligen und die Benutzererfahrung beeinträchtigen. Wir setzen ML aktiv ein. Natürlich kann ich nicht auf Details eingehen, um Spammern das Leben nicht zu erleichtern, aber hier sind einige Beispiele.
Wir haben ein Spam / Scam-Erkennungsmodell. Wir haben ein Tool zur Analyse des mobilen Verkehrs für ein paralleles Team entwickelt. Außerdem verwendet unser Unternehmen neuronale Netze: zur Überprüfung von Gestenfotos und beim Senden obszöner Fotos im Messenger. Vor kurzem haben unsere Kollegen einen sogenannten "Dick Pic Detector" eingeführt, um vor unangemessenen Inhalten in privaten Nachrichten zu schützen: Der Benutzer kann wählen, ob er solche Inhalte sehen möchte.
Wie geht Badoo mit Spam um? Einfach wenn oder ML schon?
Ich habe irgendwo einen Witz gesehen, dass ML nur ein großer Haufen von if / else ist. Aber das ist bei uns natürlich überhaupt nicht der Fall.
Badoo hat mehrere Verwendungsmöglichkeiten für ML, da es Projekte erheblich verbessern kann. Wie ich bereits sagte, verwenden wir beispielsweise die Überprüfung von Benutzerfotos, und ML hilft dabei: Es wird festgestellt, dass eine Person jetzt tatsächlich ein Foto aufgenommen hat und das getan hat, was von ihm verlangt wurde. Neuronen sind cool.
Wie implementieren Sie ML? PHP, eine andere Sprache, eine Art Framework, völlig eigene Entwicklung?
Wir haben sehr coole Leute im Datenteam. Der Blog hat einen coolen Bericht von Alexander Krasheninnikov - leider ist er bereits mein ehemaliger Kollege -, der erzählt, was für ein Team es ist, welche Probleme es löst, wie es Badoos Arbeit verbessert und uns allen hilft. Das Datenteam hat ein eigenes ML-Framework erstellt, das sehr einfach zu verwenden ist und allen anderen Teams im Unternehmen zur Verfügung steht. Wir können sagen, dass sie bereits die gesamte Arbeit für uns erledigt haben. Sie haben eine sehr coole Implementierung, eine ausgezeichnete Dokumentation und einen sehr einfachen Ansatz für die Arbeit mit dem Framework.
Was waren die größten Herausforderungen bei Badoo?
Ich kann keine bestimmte Aufgabe oder ein bestimmtes Projekt herausgreifen, das am schwierigsten wäre. Es gibt interessante und sehr interessante Projekte. In meiner Praxis sind dies alles Projekte im Zusammenhang mit maschinellem Lernen. Als ich in der Graduiertenschule war, habe ich dieses Thema angesprochen, und dieser Bereich beeindruckt mich. Wir haben für das Performance Marketing-Team ein Projekt zum Thema Verkehrsanalyse durchgeführt - es war sehr cool, wir haben viele nützliche Erkenntnisse gefunden.
Warum benutzt du PHP?
PHP ist ein großartiges Tool zur Lösung von Webentwicklungsproblemen und zur schnellen Entwicklung eines skalierbaren Projekts. Die Einstellung zu dieser Sprache in der Gemeinschaft ist jedoch nicht eindeutig, und dies ist auf ihren Ruf zurückzuführen. Seit der Einführung von PHP gibt es die Überzeugung, dass es sehr einfach ist, schlechten Code darin zu schreiben. Meiner Meinung nach ist die niedrige Einstiegsschwelle kein Nachteil. Im Gegenteil, es ermöglicht Ihnen, eine breite Palette von Menschen in die Entwicklung einzubeziehen. Außerdem macht es wirklich gute Arbeit bei der Entwicklung von Webanwendungen, und mit jeder neuen Version verbessert sich die Sprache.
PHP 7 hat in Bezug auf Produktivität und Entwicklung einen großen Schritt nach vorne gemacht. Wir haben einen großartigen Artikel in unserem Blog über Habré darüber, wie der Übergang zu dieser Version es uns ermöglicht hat, einen erheblichen Teil der Ressourcen freizugeben.
Die Popularität von PHP hat in letzter Zeit abgenommen, und das ist natürlich - andere Tools und Sprachen scheinen mit PHP zu konkurrieren, und viele Entwickler wechseln zu ihnen. Es ist jedoch üblich, Tools für eine bestimmte Aufgabe auszuwählen, und PHP bewältigt die Aufgabe.
Was denkst du über PHP 8, hast du vor zu migrieren?
Wir überwachen aktiv jede neue PHP-Version. Natürlich werden wir alle Funktionen der neuen Version nutzen - natürlich, nachdem wir sichergestellt haben, dass unser Code kompatibel ist, und der Übergang zu PHP 8 mehr Vorteile bietet als die Zeit, die wir für den Übergang selbst aufwenden werden. Wir werden über den Übergang entscheiden, wenn PHP 8 herauskommt.
Wie gesagt, als wir zu PHP 7 gewechselt sind, haben wir viele Server freigegeben, die wir für andere Aufgaben verwendet haben. Das heißt, der Übergang zu einer neuen Version kann große Vorteile bringen.
Verwendet Badoo PHP-Kompilierung?
Nein.
Erzählen Sie uns mehr über Badoos selbstgeschriebenes Framework. Auf welcher Basis wird es implementiert und wie ist es eher?
Dies geschieht durch das Plattformteam - die Leute, die "Backend für Backend" erstellen und den Großteil der Backend-Entwickler unterstützen. Sie geben uns viele coole Sachen. Ich habe bereits teilweise darüber gesprochen: Zum Beispiel implementieren sie die gleiche Warteschlangenfunktion, die im Unternehmen weit verbreitet ist. Sie bieten auch einen Cloud-Service für unsere Anforderungen.
Ich würde nicht sagen, dass der Rahmen etwas Bestimmtem ähnelt. Ich habe mit Laravel und Symfony gearbeitet - natürlich gibt es einige Teile, und wir können in unserem Projekt Module verwenden, die Open Source sind. Ich denke jedoch nicht, dass sich unser Git-Repository in seinen Ansätzen stark von anderen modernen Frameworks unterscheidet. Wir verwenden Paketmanager, um Abhängigkeiten von Drittanbietern abzurufen, wir verwenden das automatische Laden und wir verwenden Module, um Codeteile zu kapseln.
Warum verwendet Badoo einen Monolithen und keine Microservices?
Dies ist eine ziemlich heilige Frage, die Gemeinde ist darüber in zwei Lager aufgeteilt. Es ist kein Geheimnis, dass wir eine monolithische Architektur verwenden, und während des Bestehens des Projekts haben wir gelernt, mit den Nachteilen dieses Ansatzes umzugehen und alle seine Vorteile zu nutzen. Darüber hinaus verfügen wir über eine Reihe von Diensten (in Go, PHP, C ++), die wir in unserer täglichen Arbeit aktiv nutzen.
Wenn wir die Frage als "sollten wir alles aufgeben und alle verfügbaren Ressourcen verwenden, um den vorhandenen Monolithen für eine Microservice-Architektur neu zu schreiben" verstehen, werde ich das mit Nein beantworten. Wir haben geschäftliche Herausforderungen, die die vorhandene Lösung erfolgreich bewältigt. Bei Bedarf sind wir bereit für Änderungen, aber wie gesagt, wir wählen das Werkzeug entsprechend der jeweiligen Aufgabe aus.
Wie skalieren verschiedene Teile eines Monolithen unter Last?
Gute Frage zur Nachverfolgung von Monolithen und Mikrodiensten. Wir haben in unserem Blog eine großartige Präsentation über die Leistung und wie unser Backend aus architektonischer Sicht aufgebaut ist - ich werde es Ihnen kurz sagen. Wir haben ungefähr 600 Server, die alle Anfragen von Clients bearbeiten, und sie sind für unser Monorepository verantwortlich. Mit diesem Ansatz haben wir eine gewisse Flexibilität bei der Skalierung, fügen neue Autos hinzu, geben den Code ein - und sie sind einsatzbereit.
Wie nahtlos ist die Bereitstellung in einer monolithischen Umgebung?
Die Antwort auf diese Frage kann in zwei Teile unterteilt werden. Das erste ist die technische Implementierung unserer CICD-Pipeline, die von meinem ehemaligen Kollegen Yuri Nasretdinov in seinem Vortrag bei HighLoad ausführlich beschrieben wurde (" 5 Möglichkeiten, PHP-Code unter Hochlastbedingungen bereitzustellen "). Ich empfehle zuzuschauen. Kurz gesagt, wir haben mehrere hundert Server, die Benutzeranforderungen bedienen. Während der Bereitstellung werden nur die Änderungen in das Repository übertragen und der Symlink atomar gewechselt.
Der zweite Teil stellt sicher, dass die Bereitstellung die Produktion für uns nicht unterbricht. Vor der Veröffentlichung wird jeder Code mithilfe eines Einheiten-, Integrations- und UI-Tests sowie eines statischen Analysators auf offensichtliche Probleme überprüft. Wir haben eine große und professionelle QS-Abteilung, die es uns ermöglicht, zweimal täglich erfolgreich zu veröffentlichen.
Bei einem so kurzen Veröffentlichungszyklus ist es für uns sehr wichtig, die Qualität unseres Produkts auf einem hohen Niveau zu halten: Wir möchten keine Bugs / Fatals in die Produktion einführen. Daher steht das Testen von Funktionen, die in die Produktion übernommen werden, an erster Stelle. Jeder Back-End-Entwickler ist daran interessiert, dass seine Funktion im Back-End ohne zusätzliche Aktionen seiner Abteilung sowie des Front-End- und des mobilen Teams gestartet wird. Es kann vorkommen, dass Sie ein Ticket für die Entwicklung eines Backend-Features haben und es in der Produktion freigeben. In Wirklichkeit wird es jedoch erst nach einer Weile verwendet. Und dann kommen QS-Ingenieure zu Ihnen und fragen, warum es nicht funktioniert. Auf der Backend-Seite decken wir die Funktionalität daher mit der maximalen Anzahl von Tests, Mocks und QAPs ab, um 100% sicher zu sein, dass alles möglich istWas wir rollen, funktioniert zu 100%.
Eine Rübe, jeder drängt an einen Ort?
Ja, es gibt eine Rübe, und alle Backend-Ingenieure drängen darauf. Wir haben eine interne Regel für die Benennung von Zweigen, die in irgendeiner Weise mit der jeweiligen Aufgabe zusammenhängen. Natürlich können Sie den Master nicht direkt pushen, der Zweig wird nach einer erfolgreichen Codeüberprüfung, nach allen Überprüfungen und Komponententests und nachdem der QS-Ingenieur, der mit Ihnen an der Aufgabe gearbeitet hat, gesagt hat, dass alles in Ordnung ist.
Verwenden Sie DDD oder andere Architekturmuster?
DDD ist domänengesteuertes Design. Es ist kein architektonisches Muster, sondern eine Methodik. Ich würde nicht sagen, dass wir einen bestimmten Ansatz haben, wir verwenden eine Kombination aus mehreren.
Über Muster: Im Backend werden verschiedene Entwurfsmuster verwendet, um Probleme zu lösen. Ich möchte dies im Detail hervorheben. Wir verwenden Event-Bus-Implementierungen, wir haben viele Warteschlangen, wir senden Millionen von Ereignissen, die von den entsprechenden Verbrauchern verarbeitet werden. Zu den aktiv verwendeten Mustern gehört auch das Modulmuster: Der größte Teil unseres Codes ist in separate, verbundene Instanzen aufgeteilt, die über eine eingeschränkte offene API interagieren.
Verwenden Sie Ausnahmen oder versuchen Sie zu vermeiden?
Wir gebrauchen. Und wir versuchen zu vermeiden.
Ist Ihre API ein Monolith?
Ja.
Wie testest du die API?
Wir haben Unit-Tests und ein ganzes Framework, um eine große Anzahl von Tests parallel und mit minimalem Zeitaufwand durchzuführen. Sie können mehr darüber in dem Artikel von Vladimir Yants in unserem Blog lesen , er hat dieses Thema gut und ausführlich beschrieben. In Bezug auf UI-Tests verwenden wir Calabash und Selenium, um zu testen, ob die UI korrekt funktioniert.
Testgetriebene Entwicklung, wenn zuerst Tests, dann Code - üben Sie nicht?
Bei uns kann jedes Team bei der Entwicklung seinen eigenen Ansatz verwenden, und ich weiß, dass einige Kollegen dies praktizieren. Ich weiß, dass es funktioniert, aber ich übe es nicht selbst.
Wie denkst du über DDD?
Wie gesagt, wir kompilieren aus mehreren Ansätzen. Wenn wir über meine persönliche Einstellung sprechen, unterstütze ich jeden Ansatz, mit dem Sie Probleme effektiv lösen können. Es lohnt sich, in DDD zu investieren: Damit können Sie Anwendungen auf einem neuen Qualitätsniveau erstellen.
Sagen Sie uns, war es so, dass die Produktion keine hohe Last aushalten konnte? Wie sind Sie damit umgegangen?
Es war nicht in meiner Erinnerung. Wir haben erfahrene Ingenieure, unser Produkt befindet sich seit über 15 Jahren in der Entwicklung und das Unternehmen verfügt über umfangreiche Erfahrung in der Entwicklung von Hochlasten. Wir sind bestrebt, die Leistung unserer Anwendungen zu maximieren.
PHP und MySQL - Was tun, um die Backend-Leistung zu optimieren?
Es berührt den im Unternehmen verwendeten Stack und die Leistung, daher werde ich die Antwort auch in zwei Teile aufteilen.
Über den Stack: Aufgrund der Tatsache, dass Badoo eine große Anzahl von Abteilungen und Teams hat, verwenden wir die größtmögliche Anzahl von Technologien - von PHP, MySQL, Nginx, Go, C ++ bis Tarantool, LUA und Scala. Jedes Team wählt ein Werkzeug, um die Aufgabe effektiv zu lösen. Da wir unter Hochlastbedingungen arbeiten und Zehntausende von Anfragen pro Sekunde verarbeiten, wird das Problem der Leistung unseres Backends kritisch.
Erwähnenswert sind jetzt die Tools, die intern erstellt und in Open Source veröffentlicht wurden. Das erste Tool ist Pinba (PHP ist kein Engpass mehr). Es ist ein Tool zum Sammeln von Statistiken und Überwachen der Leistung einer Anwendung, ohne deren Leistung zu beeinträchtigen, und zum Präsentieren der gesammelten Daten auf menschenfreundliche Weise.
Das nächste ist Codeisok: ein Tool zum Verwalten von Git-Repositorys und zum Durchführen von Codeüberprüfungen. Wir nutzen unsere interne Arbeit aktiv und wenden die besten Methoden zur Codeüberprüfung an (Sie können sie auch in unserem Blog nachlesen) , bevor die Funktion beherrscht wird, damit der effizienteste Code die Produktion erreicht.
Ein weiteres Tool, mit dem wir die Leistung jedes einzelnen Codeteils verfolgen können, ist LifeProf: Es ermöglicht uns, alle Anforderungen automatisch zu profilieren. Alle diese Tools (und mehr) finden Sie in unserem Github-Repository.
Verwenden Sie ORM oder direkte Speicherinteraktion? Warum?
Ich habe bereits erwähnt, dass wir einen eigenen Rahmen haben. Wir verwenden unsere eigene ORM-Implementierung.
Wie ist das Zusammenspiel der Projektmodule organisiert? Klasse zu Klasse oder etwas kniffligeres?
Gute Frage. Jedes Modul verfügt über einen Einstiegspunkt (Front Controller), der eine einheitliche und verständliche API nach außen bietet - für andere Module oder für andere Funktionen. Wir legen nicht die gesamte interne Implementierung für den Rest des Projekts offen, sondern lassen nur das, was wir geben möchten, draußen.
Welche DB-spezifischen Brötchen werden mit ORM verwendet?
Ich verstehe die Frage nicht ganz, aber ich werde versuchen zu beantworten.
Ich habe bereits gesagt, dass unsere Hauptdatenbank MySQL ist, die meisten Daten sind darin gespeichert. Wir verwenden auch Exasol, Presto, Tarantool und Aerospike für bestimmte Aufgaben. Das heißt, wir haben eine große Anzahl von Speichern für jede Aufgabe. Wir beschränken uns nicht auf die Auswahl eines Werkzeugs: Wenn der Einsatz von Technologie rentabel ist, setzen wir sie ein. MySQL ist für unsere Anwendung von zentraler Bedeutung, und wir verwenden eine Vielzahl von Replikations- und Shardings, um die Last effizient zu halten.
Wie funktionieren Entwicklertests? Alles lokal im Docker oder etwas Schwierigeres auf virtuellen Servern auslösen?
Eine andere Situation, in der ich nicht genau antworten kann.
Wir verwenden Docker nicht bei der Entwicklung in PHP (aber Administratoren verwenden es), wir haben eine gemeinsame Entwicklungsumgebung. Unser Plattformteam ist unter anderem damit beschäftigt, unsere Entwicklungsumgebung für die Entwicklung funktionsfähig zu halten. Dort führen wir alle Tests durch und legen die Funktionen fest, die wir für die Produktion bereitstellen werden. Das heißt, wir haben eine vorkonfigurierte Umgebung.
Ich verstehe immer noch nicht, worauf ML läuft: PHP, Python, noch etwas?
Früher haben wir Python für das ML-Framework verwendet, aber jetzt haben sie zu Spark gewechselt: Dies hat die Leistung erheblich gesteigert.
Wie verteilt man die Last auf 600 Servern? Verstehe ich richtig, dass dies ein Monorepa auf jedem Server im Docker ist?
Monorepa auf jedem Server, wir gleichen es auf eine ziemlich übliche Weise aus - mit Nginx.
Verwenden Sie Codegeneratoren? Für welche Aufgaben?
Wir benutzen es ziemlich oft. Bei der Entwicklung, wenn Sie Modelle gemäß einer Beschreibung in den Konfigurationen generieren müssen oder wenn es eine Klasse gibt, die Funktionen gemäß einer bestimmten Vorlage implementieren muss.
Wie funktioniert die Datenbankreplikation für MySQL?
Ich kann nur oberflächlich antworten.
Es ist kein Geheimnis, dass wir Rechenzentren in Europa und den USA haben, und es ist notwendig, die Datenkonsistenz zwischen ihnen aufrechtzuerhalten. Wir verwenden die Replikation zwischen Core-Repositorys, um die Informationen an jedem Standort auf dem neuesten Stand zu halten. Aufgrund der Tatsache, dass es zwischen Rechenzentren zu einer großen Replikationsverzögerung kommen kann, verwenden wir verschiedene Arten von Caches für Aufgaben, bei denen die Datenrelevanz nicht kritisch ist.
Wie unterstützen Badoo-Ingenieure die russischsprachige PHP-Community? Konferenzen, Meetups, Blogs, informelle Treffen?
Badoo veranstaltet und nimmt aktiv an einer Vielzahl von Fachveranstaltungen teil. Dies ist eingebettet in die Unternehmenskultur und in die Kultur unserer Ingenieure. Entwickler tauschen bei internen und externen Meetups, Meetings und Konferenzen ständig Best Practices und Wissen aus.
Wir haben Badoo PHP Meetup: zweimal im Jahr in unserem Moskauer Büro. An den letzten Sitzungen nahmen rund 250 Teilnehmer teil. Mein Kollege Vladimir Yants, den ich bereits erwähnt habe, entwickelt informelle Treffen in Moskau - BeerPHP Moskau. Er hat bereits Anhänger in St. Petersburg, Saratow und anderen Städten. Das Format ist natürlich von ähnlichen BeerJS-Meetups entlehnt, aber es ist immer noch sehr cool: Kommunizieren Sie in einem informellen Umfeld mit Gleichgesinnten, Kollegen und nur Leuten aus der Branche.
Die Ingenieure von Badoo sind regelmäßig Mitglied des Programmkomitees der einzigen PHP-Konferenz in Russland, PHP Russland. In diesem Jahr ist der Online-Teil dank unseres Unternehmens international und für alle Teilnehmer kostenlos geworden.
Wir haben auch Blogs über Habré und Medium , in denen wir alle Entwicklungen teilen (nicht nur in PHP).
Nimmst du Juns oder ist die minimale Mitte?
Wie gesagt, Sie müssen eine Anfrage hinterlassen. Während des Interviews wird klar, ob Sie jetzt über genügend Wissen und Erfahrung verfügen, um im Unternehmen zu arbeiten, oder ob Sie relevante Erfahrungen und Kenntnisse an anderer Stelle sammeln und dann wie ich zurückkehren sollten.
Planen Sie ein Büro in den USA?
Wir haben ein Büro in den USA, in dem Bumble gehostet wird - in Austin, Texas. Aber es gibt dort kein Engineering-Team, und es ist noch nicht bekannt, ob wir expandieren werden.
, soft/hard- ?
Ich habe bereits gesagt, dass alle offenen Stellen auf unserer Website tech.badoo.com sind . Ich rate jedem, sich nicht zu schämen, keine Angst zu haben, die Anforderungen zu beachten und Bewerbungen zu hinterlassen.
Es ist schwer zu sagen, welche spezifischen Erwartungen ein Unternehmen an einen Kandidaten haben könnte. Ich würde sagen: Wenn Sie beim Lesen der Beschreibung das Gefühl haben, dass Sie für diese Stelle nicht geeignet sind, müssen Sie sich zu 100% bewerben. Relevante Erfahrungen oder Kenntnisse können von der Person durch mehrere Interviewrunden gelernt werden. Meiner Meinung nach müssen Sie auf jeden Fall einen Antrag stellen.
Von Hardskills - natürlich müssen Sie Erfahrung und Verständnis für die Funktionsweise von PHP und MySQL haben: Dies sind die Haupttechnologien, die wir verwenden, unser Stack, wenn es um Back-End-Entwicklung geht. Andere Abteilungen haben ihren eigenen Stapel.
Softskills ist ein breites Thema. Meiner Meinung nach geht es bei vielen Entwicklungen nicht darum, Code zu schreiben, sondern mit Menschen zu kommunizieren. Es ist sehr wichtig, die richtigen Fragen zu stellen. Wenn Sie wissen, wie das geht, ist das Problem zu 50% gelöst. Es gibt immer Probleme mit Missverständnissen, aber je weniger es gibt, desto besser für Sie, für das Unternehmen und das Produkt. Das heißt, die Fähigkeit, gut zu kommunizieren, muss auf jeden Fall in einem Team arbeiten. Es ist auch wichtig, dass die Mitarbeiter wissen, wie sie die Verantwortung für die Fertigstellung des Projekts (Feature, Teil der Funktionalität) übernehmen können.
Was ist vorher passiert?
- Ilona Papava, Senior Software Engineer bei Facebook - wie man ein Praktikum bekommt, ein Angebot bekommt und alles über die Arbeit in einem Unternehmen
- Boris Yangel, Yandex ML-Ingenieur - wie man sich als Data Scientist nicht den dummen Spezialisten anschließt
- Alexander Kaloshin, LastEO LastBackend - wie man ein Startup startet, in den chinesischen Markt eintritt und 15 Millionen Investitionen erhält.
- , Vue.js core team member, GoogleDevExpret — GitLab, Vue Staff-engineer.
- , DeviceLock — .
- , RUVDS — . 1. 2.
- , - . — .
- , Senior Digital Analyst McKinsey Digital Labs — Google, .
- «» , Duke Nukem 3D, SiN, Blood — , .
- , - 12- — ,
- , GameAcademy — .
