Il cessione di Tinder a Kubernetes. Nota da: Chris O’Brien, Dirigente specialistico
Chris Thomas, dirigente esperto Jinyong Lee, ingegnere informatico senior an avvertenza di: Cooper Jackson, ingegnere del programma
Motivo
Ormai coppia anni fa, Tinder ha marcato di smuovere la sua spianata verso Kubernetes. Kubernetes ci ha offerto l’opportunita di calcare Tinder Engineering richiamo la containerizzazione e le operazioni low-touch di traverso l’implementazione immutabile. La prodotto, la distribuzione e l’infrastruttura dell’applicazione sarebbero definite maniera combinazione.
Stavamo di nuovo cercando di attaccare le sfide di sequenza e stabilita. Quando il ridimensionamento e diventato pericoloso, abbiamo addensato sofferto durante diversi minuti nell’attesa in quanto le nuove istanze EC2 diventassero online. L’idea di fissare i container e di servire il traffico per pochi secondi in cambio di con pochi minuti ci e piaciuta.
Non e ceto semplice all’epoca di la nostra migrazione all’inizio del 2019, abbiamo raggiunto la quantita analisi all’interno del nostro cluster Kubernetes e abbiamo seguace a vedere varie sfide an origine del corpo di maneggio, delle dimensioni del cluster e del DNS. Abbiamo risolto interessanti sfide attraverso la emigrazione di 200 servizi e l’esecuzione di un cluster Kubernetes riguardo a gradinata a causa di un completo di 1.000 nodi, 15.000 pod e 48.000 container per esecuzione.
A andarsene da gennaio 2018, abbiamo attraversato varie fasi dello sforzo migratorio. Abbiamo incominciato containerizzando tutti i nostri servizi e distribuendoli in una serie di ambienti di staging ospitati da Kubernetes. a muoversi da ottobre, abbiamo seguace a rimandare metodicamente tutti i nostri servizi legacy verso Kubernetes. Dentro marzo dell’anno successivo, abbiamo rivolto la nostra spostamento e la basamento Tinder allora funziona soltanto riguardo a Kubernetes.
Ordinare immagini attraverso Kubernetes
Esistono ancora di 30 repository di legge sorgente durante i microservizi con osservanza nel cluster Kubernetes. Il manoscritto sopra questi repository e messaggio per diverse lingue (ad es. Node.js, Java, gradinata, Go) insieme oltre a ambienti di runtime verso la stessa punta.
Il complesso di compilazione e progettato durante fare verso un “situazione di pubblicazione” del tutto personalizzabile attraverso ciascun microservizio, che sopra gamma e eletto da un file Docker e da una sequela di comandi di shell. Mentre i loro contenuti sono completamente personalizzabili, questi contesti di compilazione sono tutti scritti seguendo un istruito di serie. La uniformazione dei contesti di build consente a un unico metodo di build di governare tutti i microservizi.
Aspetto 1–1 Processo di composizione uniformato corso il scatola Builder
Al perspicace di ottenere la massima coerenza tra gli ambienti di runtime, nel corso di la eta di incremento e verifica viene consumato lo stesso fascicolo di compilazione. Cio ha comandato una gara unica qualora avevamo stento di elucubrare un atteggiamento durante garantire un ambito di stabile coerente sopra tutta la ripiano. Di conclusione, tutti i processi di pubblicazione vengono eseguiti all’interno di unito proprio scatola “Builder”.
L’implementazione del contenitore Builder ha richiesto una sfilza di tecniche Docker avanzate. Attuale involucro Builder eredita ID fruitore ambiente e segreti (ad es. Aspetto SSH, credenziali AWS, ecc.) mezzo richiesto durante accedere ai repository privati ??di Tinder. Accoppiamento directory locali contenenti il ??codice principio verso avere un atteggiamento semplice di registrare artefatti di raccolta. Codesto avvicinamento migliora le prestazioni, giacche elimina la quantita di artefatti creati entro il contenitore Builder e la congegno host. Gli artefatti di build memorizzati vengono riutilizzati la prossima volta senza oltre figura.
Attraverso alcuni servizi, dovevamo suscitare un diverso recipiente all’interno del Builder in far esaudire l’ambiente di compilazione con l’ambiente di runtime (ad modello, l’installazione della libreria bcrypt di Node.js genera artefatti binari specifici della ripiano). I requisiti del periodo di composizione possono ritardare tra i servizi e il Dockerfile fine e fatto al slancio.
Struttura e trasferimento del cluster di Kubernetes
Dimensionamento del cluster
Abbiamo risoluto di usare kube-aws verso il provisioning automatizzato dei cluster circa istanze Amazon EC2. All’inizio stavamo eseguendo tutto mediante un pool di nodi sommario. Abbiamo velocemente identificato la indigenza di separare i carichi di fatica durante diverse dimensioni e tipi di istanze, verso utilizzare massimo le risorse. Il argomentazione periodo in quanto l’esecuzione di un gruppo subordinato di pod unitamente thread pesantemente contemporaneamente produceva risultati di prestazioni piuttosto prevedibili verso noi che farli coesistere con un gruppo antenato di pod a thread individuale.
Abbiamo optato per: