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

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

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

扫描二维码登录本站

QQ登录

只需一步,快速开始

艾拓先锋
搜索
查看: 308|回复: 0

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

[复制链接]
来自- 日本

参加活动:0

组织活动:0

发表于 2018-11-15 09:51:44 | 显示全部楼层 |阅读模式 来自- 日本
本帖最后由 adminlily 于 2018-11-15 09:54 编辑
+ I4 Q- D; t- S5 e0 i
2 p6 ^4 n9 S# G+ f+ E
9 T- D) |1 e( H- ^

+ |7 c" O9 c0 O1 s- d
0?wx_fmt=jpeg.jpg
8 C6 h/ `/ X5 f5 ?# a! Y3 m
/ h7 F2 |: o- c. X6 n' \9 n) p5 J
Siva Mandadi 是来自奔驰北美研发中心的用户交互部门的一名 DevOps 工程师,他在 JFrog 用户大会上分享中介绍了奔驰通过 DevOps 落地,加速打造未来汽车的实践。本文根据视频资料整理而来,原视频地址:
# Q( {+ m9 [$ N$ q* M- G+ V) A
6 z8 H/ v: i0 }  \" c
https://www.youtube.com/watch?v=zw0QsPgD5Ug
$ }6 m" F( j* Z! g& Z
" o- G6 @& d; |& c7 S7 q
背景介绍

+ Z/ L( ^( i+ `3 u( e/ I

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

( D7 d# I9 N* Q! S4 q2 [
最开始,整个用户交互部门(视频主讲人所在部门)大约有 300 名工程师,他们来自不同国家,分布在美国、德国和印度等不同地域;团队每天大约会执行 60 次构建任务;每周有超过 1000 个、约 1TB 数据量的自研件产生;平均 CI 构建时长为 6 小时。
2 ^; q. h  \) I: }

9 L( }. E" Y3 h7 l. u4 y( D! m$ ]
0?wx_fmt=jpeg.jpg
$ g. p9 w; @$ U4 M) S" I+ P' I" b9 _
3 H4 i1 l% B! E( u
2 O- V" s- Q4 V, L1 |2 f0 P' D
面临的挑战
" X) u$ U8 f7 R" u2 C- u& d% `
; L8 n7 h6 S! Z5 Z$ H7 e
随着业务的发展,团队面临着巨大的挑战,主要是在工件的存储与共享、依赖管理、编排、持续构建和仓库不同等方面:
/ F+ M, l+ w( t, R* I" l' t. j

9 s  G6 a$ }9 z% L8 T6 h
  • 自研件存储:每周会产生超过 1000 个自研件,需要耗费近 ITB 存储空间,随着时间推移现有的存储资源很快就出现枯竭。
    9 \2 E* x% E4 j

    ) O" k$ T' S3 I4 {9 T% P

3 B4 y, D- V. q3 v
  • 自研件共享:团队成员分布在世界各地,上传和下载的速度成为瓶颈,开发与 QA 人员通常会抱怨下载速度太慢。比如印度和德国的开发者需要上传,美国这边的 QA 需要下载进行测试就会遇到这种情况。

    6 w$ D, E  }# C) i; B. i3 _* r& O- o  H
& _$ ^* L0 `4 D  r
  • 依赖管理:庞大研发团队的依赖管理也是一个非常头疼的问题,某些功能依赖的软件包在不同的模块中存在着不同的版本,而维护复杂的依赖关系是非常有挑战的一件事情。团队主要使用 Java 和 C++ 开发,并且使用了 maven、conan 作为依赖管理工具。
    9 I) Z" H  V1 `; w
    9 e3 X/ p. A- V/ P( R
; S' \& f, q' y' W! p* v: @
  • 持续集成:持续集成对于这样一个大团队是必须的,每一次的提交都必须通过持续集成(CI)确保提交不会带来任何问题。团队使用了 Jenkins 和 Bamboo 做一些持续集成相关的事情,值得一提的是使用了 Docker Container 作为 Jenkins Agent,通过配置文件根据负载动态创建 Build Agent。然而,由于 Docker 镜像非常大,而且处于不同的地域,导致整个过程也效率较低。
    ( S9 r- n  i( Q- _6 D0 S: f

9 t: [2 A1 I- v4 R9 {

  ]. X; r: G! z& P
0?wx_fmt=jpeg.jpg

$ z; f. x8 l$ U3 w

0 N/ t( \6 |% }# Y% }3 x

8 p  ]4 f# A1 Q1 W) T" z
+ d5 C9 j( s6 Y. c5 b
在遇到上述挑战的同时,在 CI 构建阶段,下载依赖的时候达到 5-6 个小时,这也是难以接受的,并且由于 Artifact 非常大,也会使得整个系统运行缓慢。一种解决方案就是使用 NAS 存储。但是依然存在一些新的挑战:
1 i/ z  S- a" ?/ }* Q9 j7 F& U
0 f; R; P' w4 u" A
  • 价格昂贵。
    + H4 A6 [( p4 K. o# H
    : {: S& A" Y; c- z

$ }6 W) |* E# F5 V* k
  • NAS 存储虽然能在一定程度上解决问题,但是相关的设备和维护费用非常昂贵。

    6 `; i7 d1 M! f* u$ l: Z4 a2 |+ o4 J. t7 k; Y& m# P8 [
6 ?4 G7 ]5 Y/ l6 d; B  f9 p
  • 构建次数的限制:由于构建的自研件增长非常快,然而存储空间是相对有限的,所以,实际情况下需要限制 10 次构建。
    9 i# |3 ~7 V* V0 v
    ; C1 _0 X' z8 b4 a- @+ `; x
- M; B2 b" B5 q. y
  • 共享:共享的问题依然难以解决,尤其是跨地域的共享。

    7 w' h- u0 k8 x  ]4 r* U! x
$ U9 I& z- r, N# n( K2 U
0?wx_fmt=jpeg.jpg

- K' Q1 S( [. [% ~0 Z, c

1 r% V3 K- Q) Y' J7 l) B, O" F- F" q
. Q7 |9 |( s3 o" C
" R8 D* D) R  v! Y- F0 x
解决方案

, d! `. x  b$ J1 I1 @, y1 o! k
# O7 h6 P# @" E% T! }) M" d! z
在对挑战进行分析之后,认为有如下两种可选的解决方案。一种是增加存储,另外一种方式是采用 Nexus,但需要高可用架构和 REST API 的支持。

  `5 W0 t3 H9 N3 J

) [% L5 \; c: Y3 l4 J
0?wx_fmt=jpeg.jpg

5 P. r# t( X; n8 \4 Y

0 l% I; p; ]. l) D) a
& s  K. ~3 i$ x8 m
这两种选择无疑都需要一个强大的 DevOps 工具。对于跨国研发团队来说,高可用是非常重要的特性,多语言的仓库也是必须的,增加存储显然难以解决根本问题。Nexus 有多语言支持,但是在高可用和 REST API 方面都需要额外的维护。在调研了众多相关产品之后,奔驰的研发团队认为 JFrog Artifactory 是非常不错的选择。9 T4 M) C' [2 I4 h, O

8 V8 r1 z- `7 V: @" Y2 l- b+ m
$ O' l. H! S# z& ~
0?wx_fmt=jpeg.jpg

/ O& M/ r% j) R, ^
) p. p1 t. O1 d- o" W5 M
, P- u  r) `  C5 d( {( c1 A$ Y
JFrog Artifactory 提供了非常丰富的功能,比如统一的仓库、一致的 UI、企业级高可用支持、基于 YAML 的预定义配置、丰富的 REST API 支持以及良好的客户支持等等。Artifactory 对开源工具均可以无缝对接,尤其是 Jenkins,因此用户原有的习惯几乎不需要改变,使用之后,整个 DevOps 环境有了很显著的变化。
0 y$ A  R  D* x* _' I8 u) V
' A5 H1 N6 [, q3 N
除此之外,Artifactory 还有诸多非常强大的特性,如 DevOps 全生命周期元数据记录、AQL(Artifactory Query Language) 查询语言、跨语言的服务正向和反向依赖解析、结合 Xray 的漏洞扫描及影响力分析等等。
- c- h( i# V& T; w9 A! o1 H) C
  p( F' K' h& [; i
0?wx_fmt=jpeg.jpg
/ p8 ^: G5 q& U& ^

% |6 ^2 U9 P; e! W/ S
奔驰通过 Artifactory 实现了统一的依赖管理和集中式的软件包仓库,结合其强大的正反向依赖解析,轻松解决了依赖关系不清晰的问题。Artifactory 的异地同步复制解决了软件包上传和下载的性能瓶颈问题,由于具有缓存机制,使得虽然每天的构建频率增长十倍,但是构建时间却大幅下降。在自研件存储方面,通过 Artifactory 的存储优化节省了大量存储空间,且通过自动清理机制,减少了很多管理成本,也降低了人为操作的风险。
5 k$ T. b8 K8 w8 W! s
0 N! f) h9 `; }/ d9 t
全球分布的研发中心和人员的角色变更,使得权限的管控变得异常复杂,由于 Artifactory 集中管理了所有语言的二进制包,奔驰在使用 Artifactroy 后轻松地实现了对各地研发人员的细粒度权限管控,在团队内共享也可以很方面地控制相关权限,确保始终满足最小权限模型的要求。
- l+ @: a) Q! A1 O# n+ S
/ d* K# C$ P$ D6 }( v
0?wx_fmt=jpeg.jpg

$ T+ W' n5 @9 i3 _9 {- @2 ~# M
8 h2 v. ?) U1 ^- d6 ]5 r
. A& b. Y. h* }( _- q/ b; b( I4 y
从数据我们可以看出,每日构建的次数增长了 10 倍,每周产生的工件也增长了 10 倍,但是存储只增加了 2 倍,存储优化十分显著。最明显的效果是 CI 构建的时间减少了 3600%,这是非常惊人的。当然,这些都是直观的效果,还有一些是潜在的收益,比如新人熟悉整个项目的时间更短了、开发的周期更短、权限控制更加准确,相应地安全性也大幅提升。8 _2 f, U! f) z: {
2 `$ `' g) x% V: a

4 b9 r+ H5 r1 {5 I
总结

$ {9 `' ]' W: ?

' S7 \0 K, }0 S* D# C, I
奔驰所面临的挑战在很多企业中都存在,尤其是大型的跨国开发团队。企业级的高可用,多语言的集中式仓库,跨地域的复制分发以及强大的依赖管理功能都是必须要满足的需求,JFrog Artifactory 在奔驰的实践中提供了切实可行的解决方案,实现了 DevOps 的平稳落地,具有借鉴意义。

9 V/ D1 v" k; I' B( T  }- i! T

) t, F5 s/ I; E; C8 H0 s
作者:付辉  JFrog 资深工程师

* j* Y7 C' i. v
, t' R; s5 p9 y+ T+ ]5 ]# P; M+ g# r0 K0 ?

本版积分规则

选择云运维时代的王牌讲师-长河老师,助你轻松入门ITIL Foundation培训课程

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

Baidu

GMT+8, 2019-4-25 00:39 , Processed in 0.221504 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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