Analizar la práctica de microservicios del producto Spinnaker de Netflix

Netflix es un modelo de organizaciones de microservicios y DevOps en la industria y tiene prácticas exitosas en microservicios de nivel de producción a gran escala. Algunas empresas han realizado microservicios incluso antes que Netflix, pero Netflix es probablemente el más destacado de los microservicios de nivel de producción a gran escala.

Netflix ha hecho una gran contribución a la comunidad de código abierto y ha lanzado muchas herramientas de código abierto para implementación, empaquetado y otras funciones. Spinnaker es un proyecto de código abierto de Netflix para implementación en un entorno de nube híbrida, que puede realizar la orquestación de tareas de implementación en plataformas de nube. Use Spinnaker en Netflix para publicar 4000 cambios en las máquinas de Amazon todos los días. Google Cloud también está utilizando Spinnaker para la implementación. También usan Jenkins al compilar, y hay un proceso llamado hornear. Bake empaqueta la aplicación en un espejo y luego implementa el espejo con deploy. La práctica de DevOps de Netflix es muy digna de atención, y también tienen muchos proyectos y herramientas de código abierto que vale la pena revisar.

Este artículo analiza principalmente el modelo de desarrollo, la integración continua y las prácticas de implementación de Spinnaker.

Arquitectura de servicio

SpinnakerEstá compuesto por varios microservicios. DeckEs la página de front-end; Gatela APIpuerta de enlace Spinnaker UIy todos los apiprogramas de llamadas se Gate与Spinnakercomunican a través ; Orcael motor de orquestación maneja todas las operaciones y canalizaciones temporales; CloudDriveres responsable de todas las llamadas de cambio al proveedor de la nube e indexa / almacena en caché todos los recursos implementados; se Front50usa para guardar la aplicación Metadatos para programas, pipelines, proyectos y notificaciones; Roscogeneran imágenes, que generan imágenes de VM inmutables para varios proveedores de nube; se Igorutilizan Jenkins和Travis CIpara activar pipelines esperando trabajos de integración continua en el sistema, y ​​permite que las Jenkins / Travisetapas se utilicen en el pipeline ; EchoResponsable de notificación de mensaje; FiatResponsable de la gestión de autorización de usuario; Kayentapara Spinnakerproporcionar análisis automatizado canario, sino que Halyardes una Spinnakerherramienta de gestión de la configuración del ciclo de vida.

Analizar la práctica de microservicios del producto Spinnaker de Netflix

Gestión de almacén de códigos

Los microservicios de Spinnaker son crear una base de código para cada microservicio. Puede visitar el almacén de Spinnaker en Github, donde cada microservicio tiene un código de gestión de almacén correspondiente. Ingrese al proyecto para ver la estrategia de la sucursal, el desarrollo de la sucursal principal, la versión de la sucursal.

Analizar la práctica de microservicios del producto Spinnaker de Netflix

Integración continua

La herramienta utilizada es GitHub Actions. Solo hay un trabajo en este archivo ci branch-build, que es principalmente para ejecutar la compilación de gradle.

Analizar la práctica de microservicios del producto Spinnaker de Netflix

.github/workflows/build.ymlEl contenido del archivo CI es el siguiente: Se activa automáticamente cuando hay una masterbifurcación y se version-*tagconfirma. Por envla configuración de los gradleparámetros de la construcción.

name: Branch Build

on:
  push:
    branches:
    - master
    - version-*

env:
  GRADLE_OPTS: -Dorg.gradle.daemon=false -Xmx2g -Xms2g

jobs:
  branch-build:
    # Only run this on repositories in the 'spinnaker' org, not on forks.
    if: startsWith(github.repository, 'spinnaker/')
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      # Install Java 8 for cross-compilation support. Setting it up before
      # Java 11 means it comes later in $PATH (because of how setup-java works)
      - uses: actions/setup-java@v1
        with:
          java-version: 8
      - uses: actions/setup-java@v1
        with:
          java-version: 11
      - uses: actions/cache@v1
        with:
          path: ~/.gradle
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
          restore-keys: |
            ${{ runner.os }}-gradle-
      - name: Build
        run: ./gradlew -PenableCrossCompilerPlugin=true build --stacktrace

Despliegue de aplicaciones

La instalación e implementación de Spinnaker es un dolor de cabeza, porque muchos archivos de recursos deben obtenerse del exterior. Cuando importamos los archivos de recursos necesarios a China, en realidad no es tan doloroso. Al menos ahora es muy realista desplegar un spinnaker en 30 minutos. (Si no cuenta el tiempo de extracción de la imagen de Alibaba Cloud, un script implementará una instancia en 5 minutos)

Echemos un vistazo a este archivo de versión, que registra toda la información de la versión del microservicio de los productos Spinnaker. De hecho, driza despliega Spinnaker para leer este archivo y obtener los recursos necesarios en función del contenido del archivo.

version: 1.19.4
timestamp: '2020-04-03 08:01:05'
services:
  echo:
    version: 2.11.2-20200401121252
    commit: 5e2b673d1d658f88a3ae7741ab99cc0fd4a9df48
  clouddriver:
    version: 6.7.3-20200401190525
    commit: 77c774d185de42bb83dffde1f813f719f712994b
  deck:
    version: 3.0.2-20200324040016
    commit: 7c228ce82928f73a0f3051c4233242a6f87e0bec
  fiat:
    version: 1.10.1-20200401121252
    commit: aaebd07d8134d48630b056d6877a799a09ed282b
  front50:
    version: 0.22.1-20200401121252
    commit: ef1e7feff41797beb2d1695c1c3c0face550fe4b
  gate:
    version: 1.15.1-20200403040016
    commit: 365aa9fc5b1351207731c4445d7bbb79885d6da1
  igor:
    version: 1.9.2-20200401121252
    commit: 576235bcfce0c48bc139e9c94fe98b3467d3d170
  kayenta:
    version: 0.14.0-20200304112817
    commit: 85f590de74db46d54f016d88862418c990a17747
  orca:
    version: 2.13.2-20200401144746
    commit: 8460456e8380d370d1678b06acd015900a94f515
  rosco:
    version: 0.18.1-20200401121252
    commit: 9a20165e9c0d33e538d0038d5d02cb480e27f8c3
  defaultArtifact: {}
  monitoring-third-party:
    version: 0.16.2-20200228142642
    commit: 94c6e9cd3006347efe3101c0e6d8f98ce65f9053
  monitoring-daemon:
    version: 0.16.2-20200228142642
    commit: 94c6e9cd3006347efe3101c0e6d8f98ce65f9053
dependencies:
  redis:
    version: 2:2.8.4-2
  consul:
    version: 0.7.5
  vault:
    version: 0.7.0
artifactSources:
  debianRepository: https://dl.bintray.com/spinnaker-releases/debians
  dockerRegistry: gcr.io/spinnaker-marketplace
  googleImageProject: marketplace-spinnaker-release
  gitPrefix: https://github.com/spinnaker

Este es un archivo en formato Yaml. La parte superior se versionrefiere al número de versión de Spinnaker, la servicesparte inferior contiene la información (versión, envío) de cada servicio. dependenciesEs un servicio dependiente requerido para la implementación de spinnaker. Analicemos versionel rol del campo en cada servicio , este campo es muy útil. Utilice este campo para especificar la etiqueta de imagen de Docker y la adquisición del archivo de configuración en la rama de servicio.

echo:
    version: 2.11.2-20200401121252

Echo es uno de los microservicios de Spinnaker, responsable de la notificación de mensajes. Halyard leerá el archivo de configuración en el directorio de la version-2.11.2etiqueta y descargará el espejo. Otros servicios se pueden deducir por analogía.halconfigecho.ymlgcr.io/spinnaker-marketplace/echo:2.11.2-20200401121252

Finalmente, realizamos la hal deploy applyimplementación con un clic para lanzar Spinnaker.

Para el proyecto del modelo de microservicio, se pueden aprender muchos detalles del modelo de Spinnaker. Por ejemplo: también podemos crear un archivo yaml correspondiente al número de versión en el almacén de gitlab, que contiene la etiqueta espejo de cada microservicio en la versión actual. Al prepararse para el lanzamiento, seleccione la rama de versión en Jenkins y luego lea el archivo yaml de la versión correspondiente en el almacén de gitlab de acuerdo con el número de versión en la rama de versión, y luego impleméntelo con un clic. Cuando necesite revertir, ingrese el mismo proceso que el número de versión anterior para revertir.

¿Quiere saber más sobre la actualización del curso de mejores prácticas en la plataforma Spinnaker, haga clic en el enlace en la parte inferior y gracias por su apoyo!

https://edu.51cto.com/sd/1546e

Supongo que te gusta

Origin blog.51cto.com/11064706/2535131
Recomendado
Clasificación