分析Netflix公司产品Spinnaker的微服务实践

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Netflix 是业界微服务和 DevOps 组织的楷模,有大规模生产级微服务的成功实践。微服务有些公司甚至比 Netflix 做得更早,但 Netflix 大概是大规模生产级微服务做得最杰出的。

image.png

Netflix 是业界微服务和 DevOps 组织的楷模,有大规模生产级微服务的成功实践。微服务有些公司甚至比 Netflix 做得更早,但 Netflix 大概是大规模生产级微服务做得最杰出的。


Netflix在开源社区有着非常大的贡献,发布了很多开源工具去做部署、打包等各种功能。Spinnaker 是 Netflix的一个开源项目,来做混合云环境部署,能够实现跨云平台的部署任务的编排。

在 Netflix 使用 Spinnaker 每天发布 4000 次变更到亚马逊的机器上。谷歌云也在用 Spinnaker 去做部署。他们构建时也是用 Jenkins,其中有一个过程叫 bake,bake 是把应用打包成一个镜像,然后把这个镜像用 deploy 去做部署。Netflix 的 DevOps实践非常值得关注,他们也有很多项目和开源工具都值得一看。


本文主要分析Spinnaker其开发模式、持续集成、部署实践。

服务架构

Spinnaker 是由多个微服务组成的。Deck是前端页面;GateAPI网关Spinnaker UI和所有api调用程序都通过Gate与Spinnaker进行通信;Orca是编排引擎处理所有临时操作和管道;CloudDriver是负责对云提供商的所有变更调用,并索引/缓存所有已部署的资源;Front50用于保存应用程序,管道,项目和通知的元数据;Rosco生成镜像,它为各种云提供商生成不可变的VM映像;Igor用于通过Jenkins和Travis CI等系统中的持续集成作业来触发管道,并且它允许在管道中使用Jenkins / Travis阶段;Echo负责消息通知;Fiat负责用户权限管理;KayentaSpinnaker提供自动化的金丝雀分析;HalyardSpinnaker生命周期配置管理工具。

image.png



代码仓库管理

Spinnaker的微服务是每个微服务都创建一个代码库。大家可以访问Github上面spinnaker的仓库,里面每个微服务都有对应一个仓库管理代码。进入项目查看分支策略,主干分支开发,版本分支发布。

image.png



持续集成

使用的工具为GitHub Actions,这个ci文件中只有一个作业branch-build,主要是运行gradle构建。


image.png


.github/workflows/build.ymlCI文件内容如下:当master分支和version-*tag有提交时自动触发。通过env配置了gradle构建的参数。

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

应用部署

Spinnaker安装部署是一件令人头疼的事情,因为很多资源文件都是需要外面获取的。当我们把所需要的资源文件导入到国内后,其实就没有那么痛苦了。至少现在30分钟内部署一个spinnaker已经很现实了。(如果不算从阿里云镜像的pull时间,一个脚本5分钟内部署一个实例)

我们来看下这个版本文件,这里面记录了spinnaker产品所有的微服务版本信息。而halyard部署Spinnaker其实也是读取的这个文件,根据文件内容获取所需的资源。

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

这是一个Yaml格式的文件, 顶部的version指的是Spinnaker的版本号;services下面包含每个服务的信息(版本,提交)。dependencies是spinnaker部署时所需要的依赖服务。我们来分析下每个服务中的version字段的作用,这个字段的作用很大。通过此字段指定Docker镜像标签和服务分支中配置文件的获取。

echo:
    version: 2.11.2-20200401121252

echo是spinnaker其中的一个微服务,负责消息通知。halyard会读取version-2.11.2标签中halconfig目录下的echo.yml配置文件,会下载gcr.io/spinnaker-marketplace/echo:2.11.2-20200401121252镜像。其他服务以此类推。

最后,我们执行hal deploy apply一键部署发布Spinnaker。


对于微服务模式的项目,很多细节可以借鉴Spinnaker的模式。例如:我们也可以在gitlab仓库中创建一个对应版本号的yaml文件,里面包含当前版本中每个微服务的镜像标签。准备发布的时候在Jenkins上面选择版本分支,然后根据版本分支中的版本号读取gitlab仓库中对应版本的yaml文件,然后一键部署。当需要回滚的时候,输入上个版本号同样的过程进行回滚。

目录
相关文章
|
23天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
56 1
|
12天前
|
Cloud Native API 微服务
微服务引擎 MSE 及云原生 API 网关 2024 年 11 月产品动态
微服务引擎 MSE 及云原生 API 网关 2024 年 11 月产品动态。
|
13天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 11 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
22天前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
18天前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
18天前
|
算法 NoSQL Java
微服务架构下的接口限流策略与实践#### 一、
本文旨在探讨微服务架构下,面对高并发请求时如何有效实施接口限流策略,以保障系统稳定性和服务质量。不同于传统的摘要概述,本文将从实际应用场景出发,深入剖析几种主流的限流算法(如令牌桶、漏桶及固定窗口计数器等),通过对比分析它们的优缺点,并结合具体案例,展示如何在Spring Cloud Gateway中集成自定义限流方案,实现动态限流规则调整,为读者提供一套可落地的实践指南。 #### 二、
42 3
|
20天前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
64 5
|
17天前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
31 1
|
18天前
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
35 2
|
18天前
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
37 1
下一篇
DataWorks