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

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

 找回密码
 微信、QQ、手机号一键注册

扫描二维码登录本站

QQ登录

只需一步,快速开始

搜索
查看: 1417|回复: 0

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

[复制链接]
发表于 2018-11-15 09:51:44 | 显示全部楼层 |阅读模式
本帖最后由 adminlily 于 2018-11-15 09:54 编辑   q; ]( Q( E5 {% y4 Q

/ _' ^7 Q# E, b/ |7 P
$ X, o/ A- @1 J* n# C* i! B& v

! l, J6 x* |# s: b
0?wx_fmt=jpeg.jpg

! e1 y) g. q* D) e) I7 A5 W  Q+ b

+ s1 o' I* F' ~7 w$ ]
Siva Mandadi 是来自奔驰北美研发中心的用户交互部门的一名 DevOps 工程师,他在 JFrog 用户大会上分享中介绍了奔驰通过 DevOps 落地,加速打造未来汽车的实践。本文根据视频资料整理而来,原视频地址:

8 a  e/ I- k: @% w
. f) i7 v  ~& n" H5 _
https://www.youtube.com/watch?v=zw0QsPgD5Ug
8 k6 B; R, X- {( T
0 s3 q: E2 P' M, C9 L) ^  _  J
背景介绍
  A2 \0 S( b: Z9 M2 _

- c; M. l7 X$ g( ~
奔驰对于未来汽车的定义涵盖了很多方面,包括车载音乐、导航、自动驾驶等等,涉及到的实现技术也是多方面的,如机器学习、物联网等前沿技术。这些技术表现在实际应用上,便有了一种“未来感”。举个例子,未来汽车可以根据天气情况,切换车内的主题,比如颜色、音乐等,让车主时刻都保持舒适的状态;或者,如果车主开车回家,在离家还有半小时车程的时候,可以通过车给家里的厨房电器发消息,开始准备煮一顿可口的饭菜。
3 B8 x( S7 d; W0 y

3 J4 d; B  k% ]: u$ k( g
最开始,整个用户交互部门(视频主讲人所在部门)大约有 300 名工程师,他们来自不同国家,分布在美国、德国和印度等不同地域;团队每天大约会执行 60 次构建任务;每周有超过 1000 个、约 1TB 数据量的自研件产生;平均 CI 构建时长为 6 小时。

; z2 p* w1 n  Z8 d

% [8 Q/ A: N; |  U# T6 L
0?wx_fmt=jpeg.jpg

: D9 T. a6 Q' ~5 t' D7 ]
" B/ Q" m3 Z0 b8 D; W
, ^" \" y" _, @3 ^" t" }- |/ P
面临的挑战

7 q0 D' }. o$ ^( @, U
: Q; P. k1 z% G# \) M
随着业务的发展,团队面临着巨大的挑战,主要是在工件的存储与共享、依赖管理、编排、持续构建和仓库不同等方面:
' E2 M8 _. L- K. a0 Y. N

/ \2 M+ O# U1 _
  • 自研件存储:每周会产生超过 1000 个自研件,需要耗费近 ITB 存储空间,随着时间推移现有的存储资源很快就出现枯竭。

    9 S2 O2 L3 C3 |- R+ N/ Q- I1 S: H1 h$ C+ M- y
( R% }  s$ B5 c1 b% X0 X
  • 自研件共享:团队成员分布在世界各地,上传和下载的速度成为瓶颈,开发与 QA 人员通常会抱怨下载速度太慢。比如印度和德国的开发者需要上传,美国这边的 QA 需要下载进行测试就会遇到这种情况。

    1 i& a; @" ]7 d: m8 W( F5 ]8 r9 ^, b1 r& ]. R0 ^

/ }$ q0 \5 g$ r' h1 l: @7 C
  • 依赖管理:庞大研发团队的依赖管理也是一个非常头疼的问题,某些功能依赖的软件包在不同的模块中存在着不同的版本,而维护复杂的依赖关系是非常有挑战的一件事情。团队主要使用 Java 和 C++ 开发,并且使用了 maven、conan 作为依赖管理工具。

    , _- W" d. J6 }  t
    7 h0 M8 u: d$ Z* W* B, o
. A$ c3 p  a0 A, @' W
  • 持续集成:持续集成对于这样一个大团队是必须的,每一次的提交都必须通过持续集成(CI)确保提交不会带来任何问题。团队使用了 Jenkins 和 Bamboo 做一些持续集成相关的事情,值得一提的是使用了 Docker Container 作为 Jenkins Agent,通过配置文件根据负载动态创建 Build Agent。然而,由于 Docker 镜像非常大,而且处于不同的地域,导致整个过程也效率较低。

    " [+ |+ X" c  m* N+ y. T: g
; Q# ~6 v" a+ i, C- t2 b  H
7 u: G+ s2 Z- i/ P! \" N8 _2 Y7 T
0?wx_fmt=jpeg.jpg
3 G" X; b# u. o

4 d# H3 S* m. Z& {4 ~7 U2 C

1 w; m: a+ Q: \/ W* V

+ [( G% t6 A: t; H+ N
在遇到上述挑战的同时,在 CI 构建阶段,下载依赖的时候达到 5-6 个小时,这也是难以接受的,并且由于 Artifact 非常大,也会使得整个系统运行缓慢。一种解决方案就是使用 NAS 存储。但是依然存在一些新的挑战:

# d  o1 c1 f( F( c; R# D

  B* z" c  s2 O
  • 价格昂贵。
    " ^& g8 m: n0 n+ f6 ~. m2 C, i* U
    7 \: U& g3 w% }# ]
# b3 O0 L' E$ u! h3 ]7 {4 \2 |
  • NAS 存储虽然能在一定程度上解决问题,但是相关的设备和维护费用非常昂贵。

    6 r4 ]& S1 @! h7 b
    + d1 Q- E8 `1 X' O% @! B: ]/ h
" N2 i" F* J2 w# \0 V4 A4 W/ u' i) S
  • 构建次数的限制:由于构建的自研件增长非常快,然而存储空间是相对有限的,所以,实际情况下需要限制 10 次构建。
    5 v8 ]$ v1 L* [* z& V% M

    7 U+ Z% Q* Z3 N
4 _- G" C8 c: I2 e% T
  • 共享:共享的问题依然难以解决,尤其是跨地域的共享。

    / {2 O0 j& t9 J8 v
" y$ _  }+ I% C$ A" N5 f
0?wx_fmt=jpeg.jpg

( h  C! W# ~3 Y; Y# _! P! z

( B; ^) O# v* B: N- D
0 a* l: D6 g* a) u! o0 N% o: i! h' h# U9 B
3 {  D) [- R% ^  B2 ?: K. A
解决方案

; U) q3 f9 q4 r: ]; |

2 r% P( \; m1 ^6 W% V& I& @
在对挑战进行分析之后,认为有如下两种可选的解决方案。一种是增加存储,另外一种方式是采用 Nexus,但需要高可用架构和 REST API 的支持。

" l. `6 `( p; C$ `( R( q
1 C4 L$ D* ~2 @+ E+ C6 v
0?wx_fmt=jpeg.jpg
$ V* E, o( W' B2 X& s# L

, Z- j/ B5 F! g

" A4 e0 G& v- u$ y: A- x
这两种选择无疑都需要一个强大的 DevOps 工具。对于跨国研发团队来说,高可用是非常重要的特性,多语言的仓库也是必须的,增加存储显然难以解决根本问题。Nexus 有多语言支持,但是在高可用和 REST API 方面都需要额外的维护。在调研了众多相关产品之后,奔驰的研发团队认为 JFrog Artifactory 是非常不错的选择。5 U' m% w# e  s4 U$ t  O3 ]
5 O  A% V% T+ G* [  o
% L" y, x" Y" o# L  F- G
0?wx_fmt=jpeg.jpg
' R0 s4 C7 e% ?
0 Q. w/ K. `( `
9 U* w  n( i$ ~% e) |2 @
JFrog Artifactory 提供了非常丰富的功能,比如统一的仓库、一致的 UI、企业级高可用支持、基于 YAML 的预定义配置、丰富的 REST API 支持以及良好的客户支持等等。Artifactory 对开源工具均可以无缝对接,尤其是 Jenkins,因此用户原有的习惯几乎不需要改变,使用之后,整个 DevOps 环境有了很显著的变化。
) r0 [( j8 m. L* ~, Q
3 J* F6 q2 ]& I- q. K2 t
除此之外,Artifactory 还有诸多非常强大的特性,如 DevOps 全生命周期元数据记录、AQL(Artifactory Query Language) 查询语言、跨语言的服务正向和反向依赖解析、结合 Xray 的漏洞扫描及影响力分析等等。
9 Y3 O8 \% L0 L! v
# t: v. R* S0 O, {
0?wx_fmt=jpeg.jpg
: M3 H6 U: o4 k9 R& Q# A1 }4 J

/ v% u. ?9 Z2 E, f! e" V6 Y
奔驰通过 Artifactory 实现了统一的依赖管理和集中式的软件包仓库,结合其强大的正反向依赖解析,轻松解决了依赖关系不清晰的问题。Artifactory 的异地同步复制解决了软件包上传和下载的性能瓶颈问题,由于具有缓存机制,使得虽然每天的构建频率增长十倍,但是构建时间却大幅下降。在自研件存储方面,通过 Artifactory 的存储优化节省了大量存储空间,且通过自动清理机制,减少了很多管理成本,也降低了人为操作的风险。

2 A8 P* f4 t) Z

) e5 @' O6 k9 z/ K
全球分布的研发中心和人员的角色变更,使得权限的管控变得异常复杂,由于 Artifactory 集中管理了所有语言的二进制包,奔驰在使用 Artifactroy 后轻松地实现了对各地研发人员的细粒度权限管控,在团队内共享也可以很方面地控制相关权限,确保始终满足最小权限模型的要求。
/ T1 I  e; u3 c1 ]+ f

2 _+ j( E0 E- f4 s0 }4 z+ [
0?wx_fmt=jpeg.jpg

4 ~! P* I2 G/ ~

3 ^2 \7 p" c. C% M6 |5 e) W1 M
! @: l- m: B" @8 x0 i# e
从数据我们可以看出,每日构建的次数增长了 10 倍,每周产生的工件也增长了 10 倍,但是存储只增加了 2 倍,存储优化十分显著。最明显的效果是 CI 构建的时间减少了 3600%,这是非常惊人的。当然,这些都是直观的效果,还有一些是潜在的收益,比如新人熟悉整个项目的时间更短了、开发的周期更短、权限控制更加准确,相应地安全性也大幅提升。
' j0 l! D: |8 m! s  S

' D0 _% V& b+ A7 }' b/ ~
# Q; ]4 V0 {5 z$ W& K7 O- `
总结

# S3 U3 O+ B$ p/ g+ M

9 J  W. ~' C! a/ N1 J4 @* `  S
奔驰所面临的挑战在很多企业中都存在,尤其是大型的跨国开发团队。企业级的高可用,多语言的集中式仓库,跨地域的复制分发以及强大的依赖管理功能都是必须要满足的需求,JFrog Artifactory 在奔驰的实践中提供了切实可行的解决方案,实现了 DevOps 的平稳落地,具有借鉴意义。
# x0 E0 m# M! X- P8 L9 Y0 v: D

7 N2 G6 Q7 b" ]5 B
作者:付辉  JFrog 资深工程师

7 k! Q* V! S* J, G! `
/ _+ |& W& l; _+ p2 D
; d5 R" }1 a% s3 _3 L9 h$ k




上一篇:基于DevOps、微服务以及Kubernetes的高可用架构探索与实现问题
下一篇:"华为DevOps交付模式下的软件测试 "

本版积分规则

参加 ITIL 4 Foundation和中级过渡MPT认证、DevOps专家认证、ITSS服务经理认证报名

QQ|小黑屋|手机版|Archiver|艾拓先锋网 ( 粤ICP备11099876号-1 )|网站地图

Baidu

GMT+8, 2020-7-6 20:47 , Processed in 0.160871 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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