Quels sont les problèmes et défis d'ingénierie résolus par Stripe?

Greg Brockman

Greg Brockman, ancien CTO @ Stripe

Mise à jour il y a 234w · Voté par

Patrick Collison, travaille chez Stripe et

Darragh Buckley, Gofor @ Stripe

C'est un peu fou quand on y pense, mais contrairement à toutes les autres parties du Web, les paiements sur Internet d'aujourd'hui ressemblent en grande partie à ce qu'ils étaient il y a quinze ans. Quelques jardins murés, tels que Amazon ou l'App Store, ont montré ce qu'il était possible de faire lorsqu'un écosystème de paiement performant était en place. Mais personne n’a encore apporté d’information semblable à Internet en général.

C'est là qu'intervient Stripe. En mettant en place une meilleure infrastructure de paiement, nous souhaitons permettre plus d'activités et de transactions. Notre objectif est d’élargir l’économie de l’Internet - le simple fait de remplacer les fournisseurs de paiement traditionnels serait probablement un grand succès commercial, mais ce n’est pas un objectif aussi intéressant.

Tous nos défis d'ingénierie découlent de cela. Nous sommes en gros divisés en six équipes d'ingénierie, construites autour des principaux défis auxquels nous sommes confrontés.

Produit: En ce qui concerne les produits, notre principal défi consiste à repenser entièrement les paiements en ligne (et les outils associés). D'une certaine manière, toutes les équipes de Stripe soutiennent les produits que nous présentons au monde.

Bon nombre de ces problèmes ne sont pas spécifiques aux paiements. Notre API est une partie importante de notre produit et la plupart des API Web peuvent être assez déroutantes et difficiles à utiliser. Afin de faire mieux, nous avons dû créer un certain nombre de nouvelles normes sur la manière de créer une API (telles que de meilleures façons de créer des Webhooks, la gestion des versions, la journalisation et la documentation). Il y a quelques détails supplémentaires à ce sujet dans [1].

Plus généralement, de nombreux problèmes de produits se résument à des problèmes de modélisation de domaine nuancés. Les paiements sont complexes et il est difficile de choisir des abstractions qui allient puissance et flexibilité, simplicité et clarté. Dans d'autres groupes d'ingénierie, vous avez tendance à choisir et à tirer parti des logiciels existants. dans le groupe de produits, vous devez créer une pile plus profonde d’abstractions et d’outils.

Plus que d'autres groupes, les décisions d'ingénierie prises dans le groupe de produits doivent équilibrer les facteurs non techniques. La mise en œuvre des produits peut être difficile en soi, mais il est encore plus difficile de choisir quoi mettre en œuvre en premier lieu - les problèmes et la hiérarchisation des priorités sont sans fin. Vous devez équilibrer l'expérience utilisateur, l'esthétique, les considérations juridiques et financières, ainsi que le sens général de ce qui est le plus important. Les propriétés que vous souhaitez dans votre magasin de données sont peut-être claires, mais les limites d'un nouveau produit risquent d'être beaucoup plus floues.

Leggi:  Est-il courant que les hôtes AirBnB se chargent hors ligne? Prennent-ils le dépôt de garantie et le nettoyage des invités en espèces / par chèque?

Ops (opérations financières [2]): Comme tout ingénieur en logiciel peut en témoigner, il est difficile de rédiger du code qui fonctionne généralement bien. Écrire un logiciel exempt de bogues est presque impossible. Mais lorsque vous écrivez du code qui déplace des millions de dollars par jour, comme le fait notre équipe des opérations, vous devez en quelque sorte écrire du code de manière à anticiper ses propres bogues et à échouer en toute sécurité.

Il s'agit d'une contrainte très différente du développement Web traditionnel, où vous pouvez simplement ignorer des erreurs individuelles et espérer que l'utilisateur aura plus de chance lors du prochain essai. Par contre, ce n'est pas tout à fait comme écrire du code pour la navette spatiale, où une erreur pourrait entraîner la mort. Nous devons déterminer comment agir rapidement tout en conservant des propriétés de sécurité importantes. Même si nous pouvons tolérer certains bogues, nous devons nous assurer que chacun de ces problèmes est découvert et traité avant d’affecter les utilisateurs.

Le groupe ops consacre une grande partie de son temps à la création de cadres robustes. Lorsque vous concevez la bonne abstraction, une seule personne doit réfléchir aux problèmes difficiles et tout le monde peut l'utiliser sans avoir à trop réfléchir. Par exemple, Siddarth Chandrasekaran et j’ai conçu un cadre qui permet à un implémenteur de modéliser des actions système complexes comme une série de transitions d’états simples et individuelles. Cela nous permet de gérer la planification, l'isolation des pannes et la réduction des bogues (l'impact de tout bogue étant limité à une transition d'état unique) en un seul endroit.

Sys (systèmes): L’une des conséquences du traitement des paiements est que la charge de nos systèmes sera toujours bien inférieure à celle d’autres entreprises de taille équivalente - autrement dit, la valeur en dollars par bit parcourant nos systèmes est incroyablement élevée. En conséquence, nos principaux problèmes sont la disponibilité et la cohérence, et nous devons repousser beaucoup plus longtemps les problèmes de dimensionnement auxquels la plupart des entreprises sont confrontées. Cela a un effet très positif, nous permettant de passer beaucoup plus de temps à écrire de la logique métier au lieu de procéder à des optimisations de bas niveau.

Le contrepoint est que nous nous soucions de la disponibilité d’une manière différente de celle des autres entreprises. Comme vous pouvez le voir dans [3], nous oscillons généralement entre quatre et cinq neuf heures de disponibilité. Nous avons dû créer notre propre couche d'équilibrage de charge hautement disponible sur EC2, car celui-ci n'a pas les propriétés de disponibilité souhaitées. Nous avons également dû créer notre propre système de traitement des événements, surnommé affectueusement Monster [2], afin d'obtenir la garantie absolue que nous ne perdons jamais d'événements et que les basculements se produisent toujours sans intervention humaine. Nous n'acceptons jamais les temps d'arrêt pour la maintenance, ce qui signifie que nous devons construire notre propre infrastructure de migration sans temps d'arrêt.

Leggi:  Why do people need multiple computers to mine bitcoin?

Cela dit, notre croissance a été folle et nous nous trouvons désormais sur le territoire où les performances commencent à avoir un impact sur la disponibilité. Evan Broder Monster a récemment été porté sur Storm, où nous travaillons actuellement pour environ un million d'événements 50 (environ le maximum que mon implémentation d'origine pouvait gérer). Jim Danz a traqué et éliminé les goulots d'étranglement. Nelson Elhage conçu et mis en œuvre notre structure de partage nous permettant d’échelonner nos bases de données horizontalement.

Nous couvrons également la sécurité sous sys - comme vous pouvez l’imaginer, la sécurité est au cœur de tout ce que nous faisons. Une grande partie de notre infrastructure de sécurité, telle que Apiori, notre coffre-fort pour cartes de crédit, a été pilotée par Andy Brody.

risque: Dans le travail de sécurité typique, vous passerez le plus clair de votre temps à vous défendre contre un adversaire théorique - en réalité, votre surface d’attaque est si large que même un tel système ne pourra pas voir autant d’attaques sophistiquées. En revanche, nous constatons des attaques ciblées de fraudeurs contre Stripe et nos utilisateurs chaque jour. Beaucoup de ces attaquants sont assez intelligents et fortement motivés (le fait de réussir un stratagème se traduit directement par de l'argent sur leur compte bancaire). Par conséquent, nous construisons et adaptons en permanence nos systèmes pour éloigner les fraudeurs sans dégrader l'expérience des bons utilisateurs.

Quelques personnes, dont Michael Manapat, ont construit notre infrastructure d’apprentissage automatique. Steve Woodrow considérablement amélioré nos systèmes d’introduction instantanée. Cependant, dans les cas critiques, une interaction humaine sera toujours nécessaire. Nous avons une équipe d'analystes des risques et Anurag Goel a passé beaucoup de temps à créer des interfaces leur permettant de surveiller facilement les comptes et les schémas de transaction.

Outils: Pour construire tout ce dont nous avons besoin, nous devons être capables d’agir rapidement (sans casser des choses). Un excellent outillage est le seul moyen d'y parvenir. Nous travaillons dur pour optimiser la productivité des développeurs et minimiser le temps entre l'écriture du code et sa mise en production.

Notre flux de travail de développeur (beaucoup de gens ont travaillé sur cela, mais Andreas Fuchs responsable actuel est la suivante: chaque ingénieur reçoit une machine de développement EC2, qui possède sa propre base de données de développement actualisable. Tout le monde écrit du code localement à l'aide de son éditeur favori, et ce code est synchronisé de manière transparente avec leur machine de développement, où le service sur lequel ils travaillent est automatiquement rechargé. Après un push, notre suite de tests se termine en quelques minutes. Après cela, un développeur peut déployer le code en production instantanément en utilisant Carl Jacksondéploie le serveur, Henson.

Leggi:  What screams 'I make terrible financial decisions!'?

Données: Nous disposons des données les plus intéressantes sur le commerce en ligne. À bien des égards, nous pouvons voir l'évolution de la forme d'Internet dans nos systèmes - les entreprises les plus innovantes et à la croissance la plus rapide utilisent Stripe, et nous pouvons voir directement à quel point notre quête pour rendre le Web meilleur est un succès.

L'ingestion et la digestion de nos données constituent un défi assez difficile et, par conséquent, une grande partie de notre travail sur les données jusqu'à présent a été la construction de notre infrastructure de données. Colin Marc Zerowing intégré, un système permettant de stocker nos données de production dans HDFS, où elles peuvent être interrogées via Impala ou traitées avec Avi Bryantest échaudé. Steven H. Noble maintient Tiller, un outil dont il est le co-auteur chez Shopify, ce qui facilite la création de tableaux de bord dynamiques. Nous commençons tout juste à penser à constituer une équipe d'analystes, qui nous aidera à mieux comprendre nos montagnes de données.

La réponse courte est que nous avons beaucoup plus de défis que notre équipe d'ingénieurs 25 pourrait espérer résoudre seuls. Nous élargissons donc rapidement l’équipe dans le monde entier - voir [5] pour plus de détails.

1 Comment une bonne API de paiement est-elle conçue?
[2] Au début de l'histoire de Stripe, Darragh Buckley et j’utilisais tous les deux les opérateurs pour faire référence à ce que nous faisions: son utilisation signifiait opérations financières, la mienne, opérations de serveurs. À un moment donné, nous avons réalisé que nous utilisions [email protected] des buts croisés, à quel point nous avons basculé pour cela. Il a gagné.
3 Statut du système de bande
4 Il y a un monstre dans mon placard: Architecture d'un système de traitement d'événements géré par MongoDB
5 Stripe: Jobs

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.