Ingénierie de la fiabilité du site à Starship | par Martin Pihlak | Images des technologies des vaisseaux spatiaux


Photo de Ben Davis, Instagram slovaeck_

Pousser des robots autonomes dans les rues de la ville est une tâche ardue. Certains de ces programmes s’exécutent sur le robot lui-même, mais la plupart s’exécutent en fait dans le backend. Des facteurs tels que le contrôle à distance, la recherche d’itinéraires, la comparaison des robots avec les clients, la gestion de la santé de la navigation et les relations clients et entreprises. Tout cela est nécessaire pour fonctionner 24h/24, 7j/7, sans interruption et se développer vigoureusement pour s’adapter à la tâche.

SRE chez Starship est chargé de fournir une infrastructure cloud et des services de plate-forme pour l’exécution des opérations passées. Nous sommes basés sur Messieurs à nos Microservices et fonctionnant au top AWS. MongoDb c’est un énorme référentiel pour beaucoup de choses dans le passé, mais nous l’aimons aussi PostgreSQL, en particulier lorsqu’une frappe forte et une confirmation de transaction sont requises. Pour les messages asynchrones Kafka est un système de messagerie que nous aimons et utilisons pour tout autre chose que l’envoi de jeux vidéo à partir de robots. Avoir l’air fiable Prométhée et Grafana, Loki, sur la gauche et Jaeger. Le CICD est dirigé par Jenkins.

Une bonne partie du temps SRE est utilisée pour réparer et réparer les équipements Kubernetes. Kubernetes est notre principale plate-forme de livraison et il y a toujours quelque chose à améliorer, qu’il s’agisse simplement de mettre à jour les mises à jour, d’ajouter des points de pod déroutants ou d’améliorer l’utilisation de Spot. Parfois, c’est comme poser des briques – il suffit de mettre une charte Helm pour fournir des fonctionnalités. Mais souvent, les “briques” doivent être soigneusement sélectionnées et soigneusement vérifiées (avec un bon Loki pour le contrôle des prix, et l’élément Service Mesh à côté) et parfois sa fonctionnalité est inexistante et doit être enregistrée dès le début. Lorsque cela se produit, nous nous tournons souvent vers Python et Golang ainsi que Rust et C en cas de besoin.

Les données et les archives sont un autre excellent outil géré par SRE. Starship a commencé avec un seul MongoDb monolithique – une méthode qui a bien fonctionné jusqu’à présent. Cependant, au fur et à mesure que l’entreprise se développe, nous devons réexaminer cette conception et commencer à penser à soutenir des milliers de robots. Apache Kafka fait partie d’un problème plus vaste, mais nous devrions également considérer le sharding, les composants de cluster et la conception de la petite base de données du microservice. En plus de cela, nous développons des outils et des spécifications pour surveiller les bases de données existantes. Exemples: augmentez la surveillance de MongoDb avec un projet côte à côte pour vérifier le volume de trafic, activer la prise en charge du stockage PITR, modifier les tests de basculement et de récupération réguliers, compiler les métriques de re-sharding Kafka, démarrer le stockage des données.

Enfin, l’un des objectifs les plus importants de l’ingénierie de fiabilité du site est de réduire le temps nécessaire pour réduire la production de Starship. Bien que SRE soit parfois appelé à faire face à des dommages structurels, le travail le plus efficace est effectué pour empêcher l’arrêt et assurer un rétablissement rapide. Cela pourrait être un très gros sujet, allant des armes K8 puissantes aux opérations techniques et aux processus commerciaux. Il y a beaucoup d’intérêt !

Une journée dans la vie de SRE

Arrivée au travail, parfois entre 9 et 10 (parfois en télétravail). Prenez une tasse de café, consultez les messages et e-mails Slack. Jetez un œil aux informations qui ont été tournées la nuit et voyez s’il y avait quelque chose d’intéressant là-bas.

Trouvez que les connexions MongoDb sont en panne la nuit. En creusant dans les métriques Prometheus et Grafana, constatez que cela se produit pendant que les sauvegardes sont en cours. Pourquoi est-ce soudainement si difficile, nous avons utilisé un stockage de sauvegarde pendant de nombreuses années ? Il semble que nous forcions les sauvegardes à économiser sur les réseaux et les coûts de stockage et cela ruine l’intégralité du processeur disponible. Il semble que la charge sur la base de données ait légèrement augmenté pour rendre cela visible. Cela se produit sur le nœud de veille, pas sur la conception tactile, mais toujours le problème, si l’original échoue. Ajoutez l’élément Jira pour résoudre ce problème.

Lors de vos déplacements, modifiez le code du sondeur MongoDb (Golang) pour ajouter des conteneurs d’histogrammes afin de mieux comprendre la distribution de la latence. Exécutez les tuyaux Jenkins pour commencer une nouvelle exploration.

À 10 heures pour une session Standup, partagez vos mises à jour avec l’équipe et découvrez ce que les autres ont fait – configuration d’une surveillance de serveur VPN, à l’aide des logiciels Python et Prometheus, configuration de ServiceMonitors sur des services externes, résolution des problèmes de connectivité MongoDb, test pour Canary et Flagger.

Après la réunion, continuez à vous préparer pour la journée. L’une des choses que j’avais prévu de faire aujourd’hui était de mettre en place une autre équipe Kafka sur le site de test. Nous exécutons Kafka sur Kubernetes, il devrait donc être simple de télécharger les fichiers YAML existants et de les convertir en un nouveau lot. Ou, à la réflexion, devrions-nous utiliser Helm à la place, ou peut-être existe-t-il un meilleur pilote Kafka maintenant ? Non, n’y allez pas – plus de magie, je veux améliorer mon comportement. YAML vert oui. Après une heure et demie, la nouvelle équipe déménage. La préparation était facile; seuls les navires init qui enregistrent les annonceurs Kafka dans le DNS nécessitent un changement de configuration. La création de notifications logicielles nécessite un petit modèle bash pour configurer des comptes sur Zookeeper. L’une des choses qui était sur le point d’être réglée était de configurer Kafka Connect pour gérer le processus de modification de la base de données – il semble que les entrées de test ne s’exécutent pas en mode ReplicaSet et Debezium ne pourra pas trouver l’oplog à partir de là. Répétez ceci et continuez.

Il est maintenant temps de se préparer pour l’événement Wheel of Tragedy. Chez Starship, nous faisons cela pour mieux comprendre les systèmes et partager des solutions. Cela fonctionne en décomposant une partie du système (souvent à l’essai) et en incitant une autre personne traumatique à essayer de résoudre le problème et de réduire le problème. Dans ce cas, j’ai configuré une propriété de test avec non remplir le microservice pour calculer le processus. Présentez ceci comme le travail de Kubernetes appelé ” haymaker ” et cachez-le pour qu’il n’apparaisse pas immédiatement dans le maillage Linkerd (oui, mauvais 😈). Ensuite, lancez le jeu “Wheel” et découvrez toutes les opportunités que nous avons dans les médias sociaux, les métriques, les notifications et plus encore.

Au cours des dernières heures de la journée, arrêtez toutes les distractions et essayez de vous développer. J’ai également configuré un composant Mongoproxy BSON en tant que flux asynchrone (Rust + Tokio) et je souhaite savoir comment cela fonctionne avec des données réelles. Il semble y avoir une erreur quelque part dans l’intestin de l’analyseur et je dois ajouter plus de journalisation pour comprendre cela. Trouvez la meilleure bibliothèque à suivre à Tokio et excitez-vous …

Avis de non-responsabilité : le scénario décrit ici est basé sur des faits. Tout ne s’est pas passé en un jour. Certaines réunions et interactions avec des collègues ont été modifiées. Nous recrutons.



Source link

Leave a Reply

Your email address will not be published.