请选择 进入手机版 | 继续访问电脑版

ITIL,DevOps,ITSS,ITSM,IT运维管理-ITIL先锋论坛

 找回密码
 立即注册

扫描二维码登录本站

QQ登录

只需一步,快速开始

查看: 2305|回复: 0

奔驰在为未来打造汽车时的 DevOps 实践

[复制链接]
发表于 2018-11-15 09:51:44 | 显示全部楼层 |阅读模式
本帖最后由 adminlily 于 2018-11-15 09:54 编辑 / d+ \$ x8 ?0 i/ L
, @5 w. |- y" U; w5 l
: @9 I! Q$ W$ A7 q! k. k7 y0 \4 x* \4 y

, E) h0 G9 e/ n6 R- q
0?wx_fmt=jpeg.jpg
/ J: K  s8 ]/ S3 y
; T- L  `5 ?* u5 V: f
Siva Mandadi 是来自奔驰北美研发中心的用户交互部门的一名 DevOps 工程师,他在 JFrog 用户大会上分享中介绍了奔驰通过 DevOps 落地,加速打造未来汽车的实践。本文根据视频资料整理而来,原视频地址:

+ y2 m+ M$ u4 Q+ }) g" c- C

9 _* s% ]& C+ O0 ^) j& f
https://www.youtube.com/watch?v=zw0QsPgD5Ug

5 T+ X) `- {- h
/ g! e# h3 q$ S+ \# K( V; R; W& a
背景介绍
" j7 ]4 ~9 M" j( R: i: x
; n5 V/ Z7 \8 \6 L7 U" b' T  D# z
奔驰对于未来汽车的定义涵盖了很多方面,包括车载音乐、导航、自动驾驶等等,涉及到的实现技术也是多方面的,如机器学习、物联网等前沿技术。这些技术表现在实际应用上,便有了一种“未来感”。举个例子,未来汽车可以根据天气情况,切换车内的主题,比如颜色、音乐等,让车主时刻都保持舒适的状态;或者,如果车主开车回家,在离家还有半小时车程的时候,可以通过车给家里的厨房电器发消息,开始准备煮一顿可口的饭菜。

1 _4 Q4 ^, D9 |, i) ?
# d" B# ~' L$ @6 }# [% P$ Q6 |& [# x
最开始,整个用户交互部门(视频主讲人所在部门)大约有 300 名工程师,他们来自不同国家,分布在美国、德国和印度等不同地域;团队每天大约会执行 60 次构建任务;每周有超过 1000 个、约 1TB 数据量的自研件产生;平均 CI 构建时长为 6 小时。

, r, E) Y0 D$ P' h5 `+ [. w5 F
4 W; ^, n# U% C0 A/ Z: N
0?wx_fmt=jpeg.jpg
5 `6 w4 d2 y3 b# v9 L9 Q! Y7 Z

* f, Z1 z* `' L! I7 F

& b3 Z8 }1 P+ D" x, v/ T) M
面临的挑战

  I0 B5 \* a" ~2 F: f! s% w* i

3 X: }0 q% t: J: s! B
随着业务的发展,团队面临着巨大的挑战,主要是在工件的存储与共享、依赖管理、编排、持续构建和仓库不同等方面:
0 O7 t* V  m: x( d
+ }: |0 `& O, K
  • 自研件存储:每周会产生超过 1000 个自研件,需要耗费近 ITB 存储空间,随着时间推移现有的存储资源很快就出现枯竭。

    " w0 r, c: R, b" ?- @9 ^' R9 Z0 h( Z4 R1 z6 @) @

# V2 s& L' ]6 X" ~/ Z
  • 自研件共享:团队成员分布在世界各地,上传和下载的速度成为瓶颈,开发与 QA 人员通常会抱怨下载速度太慢。比如印度和德国的开发者需要上传,美国这边的 QA 需要下载进行测试就会遇到这种情况。
    & F8 b1 m7 G* q, w" z5 ]6 R% X
    ) a7 B  ^: v, }% z0 U, l
/ Z  o& S) b' v0 S' a
  • 依赖管理:庞大研发团队的依赖管理也是一个非常头疼的问题,某些功能依赖的软件包在不同的模块中存在着不同的版本,而维护复杂的依赖关系是非常有挑战的一件事情。团队主要使用 Java 和 C++ 开发,并且使用了 maven、conan 作为依赖管理工具。

    0 o$ X- Y4 V+ K) V" ^- _
    ) j# i# _* v% D% a8 w/ w) h
! T$ V% R8 q4 Y' J; s
  • 持续集成:持续集成对于这样一个大团队是必须的,每一次的提交都必须通过持续集成(CI)确保提交不会带来任何问题。团队使用了 Jenkins 和 Bamboo 做一些持续集成相关的事情,值得一提的是使用了 Docker Container 作为 Jenkins Agent,通过配置文件根据负载动态创建 Build Agent。然而,由于 Docker 镜像非常大,而且处于不同的地域,导致整个过程也效率较低。

      ~) T$ ~) B. s: a
: J5 s8 l; B. u" l! F1 i" [

' e6 H# p/ X- w/ D; L$ \( e3 a9 i
0?wx_fmt=jpeg.jpg
5 Y/ w6 L1 B7 m1 [7 F& D3 d

3 y5 b' M8 U7 P- j6 S* C* v

. V7 E' l% r- g7 ]& O

" v! [8 ~- o* s# ]/ }, G% q' @" B- j
在遇到上述挑战的同时,在 CI 构建阶段,下载依赖的时候达到 5-6 个小时,这也是难以接受的,并且由于 Artifact 非常大,也会使得整个系统运行缓慢。一种解决方案就是使用 NAS 存储。但是依然存在一些新的挑战:

6 N$ |! T* r, g0 G9 I. D
% M. l; `# \' ?7 s
  • 价格昂贵。
    1 W4 g3 O" c2 `! _4 i' h. r/ k

    : J7 L5 A& m3 R* R' a

) f; R: F8 a: W& I, L% X
  • NAS 存储虽然能在一定程度上解决问题,但是相关的设备和维护费用非常昂贵。

    " i. b5 Q' e) S7 {3 a) D: V8 U
    . J! D7 M  z) O8 [% p
/ B  m. F/ U: `  ^" w
  • 构建次数的限制:由于构建的自研件增长非常快,然而存储空间是相对有限的,所以,实际情况下需要限制 10 次构建。

    : G6 j: o, d" o* B! r! d$ X  \
    * z# ?& U) u2 f

: J) L; Z! ?5 p
  • 共享:共享的问题依然难以解决,尤其是跨地域的共享。
    1 o6 s- p0 Z( ]

2 ]" s1 x; W$ G% }" h
0?wx_fmt=jpeg.jpg

# F. y( v8 v* j+ W

' T0 L* X0 V' s1 G9 F* d9 t
- {+ a& z2 K+ ?3 P$ C6 \- {
1 c; r  }4 _* k( f# v% C( A
解决方案
  S) m% e7 ~. V4 H; f
1 N" n, V$ U1 b
在对挑战进行分析之后,认为有如下两种可选的解决方案。一种是增加存储,另外一种方式是采用 Nexus,但需要高可用架构和 REST API 的支持。
, F/ a. W7 a  E1 H& @# {

. ~2 I" Q( j" Z( e' `2 z9 _1 Q
0?wx_fmt=jpeg.jpg

" ]1 d7 P7 z" X
2 C9 K  Z$ `. X+ M$ c! e; k* N
3 j+ J9 o0 p( j: M0 a9 _1 m
这两种选择无疑都需要一个强大的 DevOps 工具。对于跨国研发团队来说,高可用是非常重要的特性,多语言的仓库也是必须的,增加存储显然难以解决根本问题。Nexus 有多语言支持,但是在高可用和 REST API 方面都需要额外的维护。在调研了众多相关产品之后,奔驰的研发团队认为 JFrog Artifactory 是非常不错的选择。2 ]% _# T3 w# G: ]3 r
" P4 j7 h' @% L0 V! W' M

( `8 ~' t2 z: f1 b; b0 B5 ?$ }
0?wx_fmt=jpeg.jpg
( I; k$ ?2 a* H: E
. x$ [* w6 f5 n+ P

: @. N. [$ d5 x& n/ R
JFrog Artifactory 提供了非常丰富的功能,比如统一的仓库、一致的 UI、企业级高可用支持、基于 YAML 的预定义配置、丰富的 REST API 支持以及良好的客户支持等等。Artifactory 对开源工具均可以无缝对接,尤其是 Jenkins,因此用户原有的习惯几乎不需要改变,使用之后,整个 DevOps 环境有了很显著的变化。
! d6 M+ V& t& \8 W+ V0 X

0 i- _9 ^8 I( l
除此之外,Artifactory 还有诸多非常强大的特性,如 DevOps 全生命周期元数据记录、AQL(Artifactory Query Language) 查询语言、跨语言的服务正向和反向依赖解析、结合 Xray 的漏洞扫描及影响力分析等等。
; I$ u' o0 f+ E/ \( j  f
/ w: ~9 ], B. f1 d+ ~
0?wx_fmt=jpeg.jpg
- T  e7 R4 N! F' i
* X: }. r+ [; s7 h6 Q6 n* l
奔驰通过 Artifactory 实现了统一的依赖管理和集中式的软件包仓库,结合其强大的正反向依赖解析,轻松解决了依赖关系不清晰的问题。Artifactory 的异地同步复制解决了软件包上传和下载的性能瓶颈问题,由于具有缓存机制,使得虽然每天的构建频率增长十倍,但是构建时间却大幅下降。在自研件存储方面,通过 Artifactory 的存储优化节省了大量存储空间,且通过自动清理机制,减少了很多管理成本,也降低了人为操作的风险。

2 t* U' L  A4 y- Z- h( Q7 N

3 N2 N' A0 `+ R4 M& g/ o
全球分布的研发中心和人员的角色变更,使得权限的管控变得异常复杂,由于 Artifactory 集中管理了所有语言的二进制包,奔驰在使用 Artifactroy 后轻松地实现了对各地研发人员的细粒度权限管控,在团队内共享也可以很方面地控制相关权限,确保始终满足最小权限模型的要求。

1 H% r$ V" G3 S9 L  M, L& Y

3 m) x& r! p9 \' R
0?wx_fmt=jpeg.jpg
2 E1 d# W0 A5 z& P+ h

) p+ r$ G- m, Q9 l8 G/ R
7 ~3 F7 k% @4 A
从数据我们可以看出,每日构建的次数增长了 10 倍,每周产生的工件也增长了 10 倍,但是存储只增加了 2 倍,存储优化十分显著。最明显的效果是 CI 构建的时间减少了 3600%,这是非常惊人的。当然,这些都是直观的效果,还有一些是潜在的收益,比如新人熟悉整个项目的时间更短了、开发的周期更短、权限控制更加准确,相应地安全性也大幅提升。2 ^; \2 c0 v$ z- l0 o- h

! f' O- R" e+ c# b7 a9 p
/ g% a. E2 H8 q/ ]: m. k! m* o
总结
3 O" ?7 B0 `3 s6 t) S7 g
" _8 Q7 e% A  }% F3 U3 n8 V6 Z
奔驰所面临的挑战在很多企业中都存在,尤其是大型的跨国开发团队。企业级的高可用,多语言的集中式仓库,跨地域的复制分发以及强大的依赖管理功能都是必须要满足的需求,JFrog Artifactory 在奔驰的实践中提供了切实可行的解决方案,实现了 DevOps 的平稳落地,具有借鉴意义。

0 u$ f% V5 m3 ]! S

9 ~7 Y" ?* W. N8 h1 [
作者:付辉  JFrog 资深工程师

, [( k" Y. k* E6 @+ ?* l, J, x  B2 V
* |9 e$ ?1 ?4 k8 `  b$ {




上一篇:基于DevOps、微服务以及Kubernetes的高可用架构探索与实现问题
下一篇:"华为DevOps交付模式下的软件测试 "
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

参加 ITIL 4 基础和专家认证、长河ITIL实战沙盘、DevOps基础级认证、ITSS服务经理认证报名
ITIL(R) is a registered trademark of AXELOS Limited, used under permission of AXELOS Limited. The Swirl logo is a trademark of AXELOS Limited, used under permission of AXELOS Limited. All rights reserved.

QQ|ITIL ( 粤ICP备11099876号 )|appname

GMT+8, 2022-12-3 01:12 , Processed in 0.097275 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表