Clara
COGNATIV
Ingénieur DevOps Senior (Recrutement Mondial)
À propos du poste
Nous exploitons une plateforme distribuée de surveillance vidéo par caméra et d'alertes basées sur l'IA. Le système couvre l'ensemble du spectre des infrastructures modernes et héritées : une flotte de microservices et de workers Java hébergée sur AWS, un pipeline d'inférence de vision par ordinateur soutenu par GPU, une couche de streaming et de présence en temps réel, ainsi que des milliers de « boîtiers média » edge déployés sur le terrain qui ingèrent les flux de caméras, diffusent de la vidéo HLS et transmettent les événements vers le cloud.
C'est un rôle axé sur la fiabilité. Votre mission principale est de maintenir en bon état un parc opérationnel large et mixte à grande échelle : objectifs de service significatifs, alertes fiables, capacité adéquate, reprise après sinistre testée et réponse rapide et calme aux incidents. Les pipelines de livraison sont importants, mais ici ils existent au service de la fiabilité, pas l'inverse. Nous n'embauchons pas un ingénieur DevOps axé sur les pipelines et le libre-service qui considère les opérations comme une préoccupation secondaire. Nous embauchons un Ingénieur DevOps Senior qui est responsable de la disponibilité et de la qualité opérationnelle, et qui peut écrire le logiciel pour rendre cette disponibilité mesurable et automatique.
Si vous pensez en termes d'objectifs de niveau de service (SLO), de budgets d'erreur et de post-mortems sans blâme, et que vous êtes le plus heureux lorsque vous transformez un système bruyant et fragile en un système calme et prévisible sous votre responsabilité, ce poste est pour vous.
Ce que vous maintiendrez fiable : Vous serez responsable de la santé opérationnelle de tous les éléments suivants
Comment nous travaillons, et ce que nous attendons de cette embauche :
Ces principes reflètent les leçons que nous prenons au sérieux. Le bon candidat opère déjà de cette manière :
- L'observabilité doit être fiable. Les alarmes qui sonnent faussement sont pires que pas d'alarmes du tout. Vous êtes responsable de la qualité des alertes de bout en bout : rapport signal/bruit élevé, alarmes qui attrapent de manière fiable les incidents qu'elles sont censées attraper, et le jugement de désactiver une alarme trompeuse jusqu'à ce qu'elle soit correctement corrigée plutôt que de laisser une alarme bruyante sonner. Nous avons ressenti le coût des alertes peu fiables et voulons quelqu'un qui comble cet écart et le maintient fermé.
- La gestion des changements est collaborative, jamais unilatérale. Tout changement d'infrastructure qui affecte un service est effectué conjointement avec l'ingénieur qui possède et comprend ce service. Les changements de mise à l'échelle, de nombre d'instances, de topologie et de configuration sont revus avec ce propriétaire avant d'être déployés. Les hypothèses sur une instance unique par rapport à plusieurs instances, en particulier, ne sont jamais modifiées sur la base d'une supposition.
- Suivi plutôt qu'activité. Nous mesurons les résultats, pas l'effort ou les heures. Lorsqu'une chose est demandée, nous nous attendons à ce qu'elle soit menée à une résolution correcte et durable dans un délai raisonnable, et non laissée à moitié résolue pendant des mois. Trouvez ce qui est réellement nécessaire, concentrez-vous dessus et terminez-le.
- Préférer la bonne solution à un correctif rapide. Résolvez la cause racine. Ne la masquez pas et ne passez pas à autre chose.
- Modèles de vision par ordinateur / IA : services d'inférence basés sur les images fonctionnant sur des instances EC2 GPU (classe g4dn, AMIs AWS Deep Learning), alimentés par des images de caméra provenant de S3 et d'un bus d'événements Kafka (Amazon MSK), avec Redis (ElastiCache) pour l'état. Les sorties transitent par un pipeline d'alertes (OutgoingInferenceMessage vers SNS/IoT vers des workers de notification).
- Services Python : la couche d'inférence IA/alertes et les outils de support.
- Services Java hérités : environ 140 services et bibliothèques Java 8 (REST APIs, workers SQS/SNS, fonctions Lambda) fonctionnant sur Jetty 9.4, déployés sur Elastic Beanstalk, ECS et Lambda.
- Appareils Edge ("boîtiers média") : appliances Ubuntu 22.04 / Docker Compose gérées à distance via le tunneling sécurisé AWS IoT Core, avec des tunnels Cloudflare pour l'egress. Inclut un effort de migration actif de CentOS 7 vers une pile conteneurisée.
- Backbone de données et de messagerie : PostgreSQL (RDS) sur de nombreux schémas, TimescaleDB pour l'analytique, Redis, DynamoDB, Amazon MSK (Kafka), SQS/SNS et Kinesis.
Ce que vous ferez : Fiabilité et opérations (le cœur du poste)
- Gérer les objectifs de service. Définir les SLI et SLO pour les services importants, gérer les budgets d'erreur et les utiliser pour orienter la priorisation et les décisions de taux de changement. Faire de la fiabilité un chiffre mesurable, pas une impression.
- Rendre l'observabilité fiable. Gérer la qualité des alertes de bout en bout : rapport signal/bruit élevé, alarmes qui attrapent de manière fiable les incidents qu'elles sont censées attraper, et la discipline de désactiver une alarme trompeuse jusqu'à ce qu'elle soit correctement corrigée. Construire les tableaux de bord et les métriques personnalisées, les exportateurs et l'instrumentation (CloudWatch, OpenTelemetry) nécessaires pour voir le système clairement.
- Diriger la réponse aux incidents. Gérer les incidents avec calme, réduire le temps moyen de rétablissement (MTTR) et produire des post-mortems sans blâme avec des actions qui sont réellement clôturées. Améliorer et gérer la rotation des gardes et sa santé.
- Planifier la capacité et les performances. Prévoir et dimensionner correctement le calcul (en particulier les GPU), le débit et le partitionnement de Kafka/MSK, la charge de RDS/TimescaleDB et Redis. Détecter la saturation avant les clients.
- Gérer la continuité des activités et la reprise après sinistre. Sauvegardes, réplication, basculement et récupération pour RDS, MSK, Redis et la flotte edge. Définir les RPO/RTO et les prouver avec des journées de jeu régulières et testées, pas des suppositions.
- Maintenir la flotte edge en bon état. Diagnostic et récupération à distance via AWS IoT, mise à jour automatique des conteneurs via des timers systemd, et la migration continue de CentOS 7 vers la pile média conteneurisée (Ubuntu 22.04).
- Automatiser le travail répétitif (toil). Écrire du vrai logiciel (Python, Golang, Bash) pour automatiser le travail opérationnel, auto-réparer les pannes courantes et rendre la fiabilité reproductible au lieu d'héroïque.
- Gérer les changements en production en toute sécurité. Appliquer une gestion des changements collaborative et revue ; protéger le système contre les changements risqués et unilatéraux (topologie, nombre d'instances, mise à l'échelle et configuration).
Livraison et plateforme (au service de la fiabilité)
- Maintenir les pipelines CI/CD sains et sécurisés : CircleCI avec des builds Bazel/Gradle, authentification AWS basée sur OIDC, builds de conteneurs vers ECR, et déploiements EB/ECS/Lambda, optimisés pour que les releases soient sûres, observables et réversibles.
- Maintenir Terraform pour le parc AWS (calcul, réseau, IAM, bases de données, messagerie, surveillance), en suivant nos conventions basées sur les modules et l'état sauvegardé par S3.
- Renforcer la sécurité et la conformité : principe du moindre privilège IAM, Secrets Manager/KMS, gestion TLS et des certificats (y compris les certificats des appareils IoT), CloudTrail et AWS Config.
Prérequis
- La certification AWS est obligatoire. Une certification AWS Certified DevOps Engineer – Professional ou AWS Certified Solutions Architect – Professional actuelle est fortement préférée.
- 10+ années d'expérience en ingénierie de fiabilité de site (Site Reliability Engineering) ou en opérations de production à grande échelle. Nous ne nous attendons pas à une maîtrise de tous les domaines ci-dessous dès le premier jour. Nous attendons une profondeur réelle dans plusieurs domaines et la capacité d'apprendre rapidement les autres.
- Pratique démontrée des SLO/budgets d'erreur. Vous avez défini des SLI et des SLO, fonctionné avec un budget d'erreur et utilisé celui-ci pour prendre de réelles décisions.
- Solides compétences en observabilité de production. Maîtrise des métriques, logs, alertes et tableaux de bord (CloudWatch, OpenTelemetry et/ou Prometheus/Grafana/Datadog), et capacité à construire l'instrumentation lorsqu'elle n'existe pas.
- Expérience avérée en commandement d'incidents. Vous avez dirigé des incidents, géré une rotation de garde et rédigé des post-mortems qui ont modifié le comportement d'un système.
- Expérience en planification de capacité et en performance sur le calcul, les bases de données et un système de messagerie ou de streaming (Kafka/MSK idéal).
- Responsabilité de la reprise après sinistre : sauvegardes, réplication, basculement et RPO/RTO testés.
- Capacité d'ingénierie logicielle pour l'automatisation. À l'aise pour écrire du Python, du Golang et du Bash pour construire des outils de fiabilité, pas seulement pour configurer des outils prêts à l'emploi.
- Maîtrise de Terraform (ou équivalent IaC) et solide administration Linux (shell plus utilitaires GNU Linux), à l'aise du cloud au bare-metal/edge.
- Expérience des opérations de bases de données avec PostgreSQL (les séries temporelles sont un plus).
- Un état d'esprit axé sur la fiabilité : vous instrumentez avant de deviner, et vous écrivez le runbook.
Atouts appréciés
- Exploitation de charges de travail GPU et service de modèles de vision par ordinateur ou ML en production (CUDA, AMIs Deep Learning, mise à l'échelle de l'inférence).
- Apache MSK / Kafka et opérations de streaming de données (Kinesis, Kinesis Video Streams).
- Gestion de AWS IoT Core à grande échelle : provisionnement des appareils, certificats, tunneling sécurisé.
- Gestion d'une flotte d'appareils edge / sur site (images de référence, mise à jour à distance, systemd).
- Exploitation et modernisation de systèmes hérités (Java 8, Jetty, CentOS).
- Ingénierie du chaos / pratique des journées de jeu, et modélisation de la capacité.
- Familiarité avec Bazel dans un monorepo ; Cloudflare, Cognito/Auth0, API Gateway.
