Kir Shatrov: Shopify a commencé avec Rails et ici, ils aiment sincèrement ce cadre.

Lors de la conférence RubyRussia, Kir Shatrov parlera de l'architecture Shopify. Comment l'une des applications Rails les plus grandes et les plus lourdes au monde prend-elle en charge la croissance de l'entreprise pendant 10 ans sans passer aux microservices, Elixir et autres alternatives populaires? Dans une interview traditionnelle avant la conférence, Kira a été interrogée par Anatoly Zaitsev, développeur d'Evrone.

image

Dites-moi comment vous avez commencé votre carrière?

Comme beaucoup, je programmais à l'école. J'ai fait des sites WordPress pour 200 $ de type familier. J'ai découvert Ruby on Rails et j'ai réalisé que les tâches qui prennent des heures et des jours en PHP peuvent être résolues beaucoup plus rapidement. Il m'a semblé que ça valait le coup de sauter dans ce train: j'ai acheté un livre sur Rails et j'ai commencé à apprendre pas à pas. De nombreuses étapes n'ont pas fonctionné et j'ai abandonné les cours. Il est revenu un an plus tard, a essayé de suivre les tutoriels en ligne, puis tout a fonctionné. Ce n'est qu'alors que j'ai compris quel était le problème: pendant que le livre était écrit, traduit, imprimé et apporté dans les magasins, un an ou même un an et demi s'est écoulé. Rails a beaucoup changé pendant cette période. Naturellement, les instructions ne fonctionnaient plus. Et quand j'ai pu lire des documents en ligne et en anglais, je suis facilement entré dans Rails et j'ai fait les premiers projets de loisirs.

Puis j'ai rencontré Oleg Balbekov, le fondateur de la conférence RailsClub, maintenant appelée RubyRussia. Je suis donc arrivé à Evrone, où j'ai travaillé pendant près de quatre ans et grâce à des collègues chics et intelligents, j'ai pu bien grandir. Evrone a beaucoup aidé au démarrage: il y avait une opportunité d'ouvrir l'open source, de grandir. Ensuite, j'ai travaillé chez Evil Martians, fait des projets d'une autre envergure - EBay, Groupon, Gett. Les martiens ont une culture et des expériences open source inhabituelles, ce qui est loin d'être dans toutes les équipes. Entre les projets ou directement sur les projets, les gens ont la possibilité de s'engager dans l'open source. C'est ainsi qu'il s'avère que développer Autoprefixer , AnyCable et pas seulement. En conséquence, il y a quelque chose à raconter lors des conférences. J'ai parlé à RailsClub en Russie, à RailsConf aux États-Unis et à un grand nombre d'autres événements importants et peu nombreux. Et parce que je jouais tellement, j'ai été remarqué et invité à travailler chez Shopify.

Dites-moi comment vous avez déménagé au Canada et comment Shopify vous a aidé dans le processus.

Cela n'a pas fonctionné tout de suite, il y a eu des difficultés de réinstallation: à ce moment-là, au Canada, le gouvernement a déclenché une grève et il n'y avait tout simplement personne pour demander ou réorienter les visas, mais tout était permis. C'était en 2013-2014, Shopify manquait vraiment de développeurs et ils ont commencé à transporter des ingénieurs du monde entier vers eux. Ce processus est actuellement en cours. Aujourd'hui, l'échelle est telle que, avec le gouvernement canadien, Shopify a développé un programme qui vous permet d'obtenir un visa de travail en trois semaines. Selon ce schéma, une centaine de personnes se déplacent chaque année. Dans le même temps, non seulement des intervenants open source et bien connus peuvent se mettre au travail. Nous avons besoin de développeurs qui s'intègrent dans l'équipe et écrivent du bon code.

Il s'avère que pénétrer dans Shopify est possible sans un énorme bilan, si vous faites votre travail correctement et professionnellement?

Oui. Il est également important de pouvoir parler de votre travail. Quelqu'un dira: "J'ai corrigé un bug et mis à jour la version Ruby, ajouté une nouvelle fonctionnalité." Et vous pouvez dire la même chose, mais du point de vue du développement commercial, résoudre ses problèmes. Même lors des entretiens avec de telles entreprises, il est important de savoir quelles innovations vous avez introduites au travail, comment vous avez participé à la communauté: non seulement a écrit du code, mais, par exemple, a été bénévole, a aidé à organiser une conférence Ruby.

Que faites-vous exactement chez Shopify en ce moment?

Les tâches sont différentes. Bien sûr, j'écris du code. Mais une grande partie de mon temps est consacrée à l'organisation des processus. Par exemple, fin novembre, il y aura le Black Friday. Pour tous ceux qui travaillent dans le commerce électronique, c'est le plus grand événement de l'année. Nous commençons à nous préparer en août: nous devons nous mettre d'accord avec différentes équipes sur la sortie de nouvelles fonctionnalités, pour convenir avec les vendeurs et les fournisseurs. Et après le vendredi noir, nous entrons dans la phase où nous commençons à faire quelque chose de nouveau. Ensuite, je dois mettre le chapeau de l'architecte.

J'ai décidé moi-même que je suis à l'aise de faire différentes choses et d'essayer de nouvelles choses, pas seulement d'écrire du code. Mais je connais des gens qui aiment surtout programmer, et ils ne voudraient pas communiquer avec les participants d'une trentaine d'équipes et participer à l'organisation des processus. Tout est flexible dans Shopify; au sein de l'entreprise, les gens peuvent trouver ce qu'ils aiment faire.

Shopify est une excellente plateforme. Combien de clients avez-vous?

Le chiffre officiel est de 800 000 magasins actifs. Ce n'est pas seulement une inscription (il y en a beaucoup plus), ce sont des entreprises vivantes.

Qu'est-ce que Shopify en tant que plateforme offre aux clients?

Notre objectif est les petites et moyennes entreprises. Les petites entreprises n'ont souvent qu'une idée: elles ne savent toujours pas comment elles vont vendre. Il faut résoudre de nombreux problèmes: comptabilité des marchandises, organisation des paiements et des livraisons, sélection des partenaires pour tout cela. Notre tâche est de faire gagner du temps aux entrepreneurs afin qu'ils s'occupent le moins possible des problèmes courants. Nous prenons ce travail sur nous-mêmes.

Si vous vivez dans un pays où Shopify dispose d'une assistance complète, cela signifie que vous n'avez pas besoin de choisir un système de paiement, car il existe Shopify Payments. Entrez simplement vos informations fiscales et tout fonctionnera. La même situation avec l'envoi de marchandises: vous imprimez un autocollant, le collez sur le colis et l'envoyez. Pas besoin d'acheter des marques, de payer les frais de port, Shopify s'intègre automatiquement aux e-mails. Il existe des services d'entrepôt: vous pouvez envoyer vos marchandises à l'entrepôt Shopify et des algorithmes complexes calculent dans quel entrepôt les stocker, comment assurer la livraison aux clients en une journée. Cela permet aux petites entreprises de rivaliser avec Amazon et EBay.

Pendant un certain temps, j'ai travaillé sur le portage du projet sur votre plateforme. Ce magasin avait son propre inventaire, des marchandises et une clientèle. Tout fonctionnait très bien: il y a export / import, même les paiements tiers sont connectés en deux clics. Vous avez une énorme infrastructure. Dois-je bien comprendre que la plupart des bibliothèques (shopify api, shopify app, shopify co) sont écrites en Ruby and Rails?

Oui.

Ruby est souvent blâmé pour les mauvaises performances de grandes quantités de données. Lorsque vous devez évoluer, Ruby manque souvent. Pourquoi Shopify utilise-t-il cette pile technologique particulière?

L'entreprise a commencé avec un gars nommé Toby, qui aimait les snowboards. Il y a douze ans, il a décidé d'écrire son propre magasin pour la vente de ces snowboards. Il n'était pas intéressé à faire cela en PHP, Java et XML. Puis, l'ami David lui a montré son nouveau cadre sympa, qui vous a permis de créer rapidement des applications Web. Le cadre s'appelait Ruby on Rails et Toby y a construit son propre magasin de snowboard. Il aimait le langage et les idées du cadre, Toby a été l'un des premiers contributeurs à Rails. A cette époque, Rails n'avait même pas de dépôt git centralisé! Les gens viennent d'échanger de nouvelles versions. Tobias Lutke et David Heinemeyer Hansson ont donc commencé à travailler sur Rails. Et bientôt Toby s'est rendu compte qu'il était beaucoup plus cool de lancer non pas votre propre magasin de snowboard, mais toute une plate-forme pour d'autres magasins.

Tobias Lyutke est notre fondateur, il en est toujours le PDG. On le retrouve au bureau, toutes ces quinze années qu'il a travaillé sur Shopify. L'entreprise a commencé avec Rails et emploie des personnes qui aiment sincèrement ce cadre. Ils voient à quelle vitesse ils ont pu construire sur Rails ce qu'ils voulaient. Ils voient à quelle vitesse les développeurs peuvent faire quelque chose, expérimenter et livrer à la production.

Je ne pense pas que l'entreprise ait jadis sérieusement envisagé des options pour passer à autre chose. À mon avis, les applications Web reposeront toujours sur la base de données. Allez quelque part, prenez quelque chose, reformatez-le, collez le modèle, mettez-le dans le cache, puis donnez le résultat. Cela prend la plupart du temps. Rails est idéal pour le rendu des pages en 100-300 millisecondes. Bien sûr, si vous devez effectuer un rendu pour 8-10, vous devrez choisir quelque chose de plus rapide, par exemple, Go. La société possède un département qui s'occupe de l'infrastructure, de la mise à l'échelle et de la recherche des directions de croissance avec nos technologies actuelles.

Comment résolvez-vous les problèmes de mise à l'échelle et de charges élevées?

Nous avons une pile très typique: Rails, MySQL, Memcache, Redis. Vous avez sûrement travaillé avec cela sur de nombreux projets. Quelque part en 2014, alors que l'entreprise avait 10 ans, nous avons réalisé que tout ce dont nous avions besoin ne rentre pas dans une seule base de données. Vous pouvez acheter du matériel plus puissant pour le serveur MySQL et vous développer verticalement, mais il y a une limite à tout.

Ensuite, nous avons décidé que le sharding aiderait à croître horizontalement. Comme le SaaS, où les données d'un magasin ne se chevauchent pas avec les données d'un autre, nous pouvons organiser le sharding tout simplement. Vous n'avez jamais à faire de jointure entre deux magasins différents. Avec notre modèle de partage, des milliers de magasins de tailles et de charges différentes vivent sur le même fragment. Shard inclut non seulement l'essence de la base de données, mais aussi son Redis, son Memcache, etc. En raison de l'isolement complet entre les fragments, nous divisons l'ensemble de Shopify en centaines de petits Shopify. Tout le monde peut être hébergé dans une région distincte, un centre de données, un fournisseur, dans une juridiction distincte. Si vous avez 100 fragments et que quelque chose est tombé sur l'un d'eux, cela n'affectera que 1% des clients. C'est très peu par rapport à la situation où, quand une ressource tombe, tout tombe sur tout le monde.

Il s'agit d'une mise à l'échelle horizontale utilisant le sharding. Et partager non seulement une, la ressource la plus importante (base de données), mais l'isolement de tous les composants que les magasins utilisent. D'autres problèmes intéressants apparaissent. Par exemple, sur certains éclats, il y a plus de magasins, où il y a beaucoup de trafic, mais sur certains moins. Sur un peu plus de charge, mais sur moins. Nous devons résoudre les problèmes d'équilibrage des magasins à l'intérieur du fragment.

Migrez-vous un magasin d'un fragment à un autre?

Lorsque vous devez résoudre de tels problèmes - oui. Nous avons un réglage, que je décrirai en détail dans le rapport. Il y aura une histoire sur la façon dont nous sommes arrivés à ce régime, comment fonctionne le partage, comment cette approche peut être appliquée non seulement à notre entreprise, mais aussi à d'autres. Nous avons nous-mêmes dû développer un outil pour la migration des magasins entre les fragments et les centres de données. Fondamentalement, la migration est nécessaire pour le rééquilibrage.

Et puis ça devient vraiment intéressant. Il y a cinq ans, nous avons investi dans une approche où une instance Shopify autonome peut être exécutée de manière isolée. Nous avons maintenant des clients qui ont besoin d'avoir une plateforme dans une certaine juridiction. Cette architecture nous permet de construire une instance isolée à un seul point.

Yukihiro Matsumoto arrive à la conférence. Qu'aimeriez-vous lui demander?

Tout d'abord, je décrirai le contexte afin que ma question soit plus claire. Pour autant que je sache, le développement Ruby est quelques individus individuels, moins de dix personnes, parmi eux pas plus de cinq clés. La plupart sont des Japonais qui font cela depuis très longtemps. Certains d'entre eux peuvent à eux seuls implémenter une fonctionnalité aussi importante, comme les annotations de guilde ou de type. Tout est lié à ces gens. Et si une personne parrainée par Cookpad ou Heroku implémente une fonctionnalité clé d'une certaine manière, alors c'est exactement ce que ce sera. Mais il y a un facteur bus.

À mon avis, les plus grandes avancées dans Ruby qui ont eu lieu au cours des deux dernières années ont été initiées par de grandes entreprises, car de gros problèmes ne peuvent pas être résolus seuls. Par exemple, Stripe emploie des personnes qui développent des langages de programmation typés et leur donne un an pour effectuer des recherches. Il s'avère donc que Sorbet, qui n'est pas seulement une méthode de vérification de type, mais tout un paradigme, il peut être mis à l'échelle, sa documentation est basée sur l'expérience de centaines de personnes à l'intérieur de Stripe. Et il existe de nombreux exemples de ce type. Oracle sponsorise Truffle et plusieurs personnes travaillent pour créer la machine virtuelle de prochaine génération, en réutilisant certaines des machines virtuelles qui ont été développées pendant des décennies par des dizaines de personnes intelligentes au sein d'Oracle.

Je voudrais demander à Matz combien il croit en la résolution réaliste de gros problèmes Ruby avec un petit groupe de contributeurs individuels. Dans quelle mesure un tel modèle peut rivaliser avec des exemples de problèmes résolus avec l'aide d'un sponsor majeur.

Nous discuterons lors de la conférence!

Rappelons qu'il se tiendra le 28 septembre à Moscou, tous les détails et inscription sur le site .

Nous sommes soutenus par:

Organisateur - Evrone
Associé commandité - Toptal
Partenaire Gold - Gett
Partenaires Silver - Valarm , JetBrains , Bookmate et Cashwagon
Partenaire Bronze - InSales

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


All Articles