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

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

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

扫描二维码登录本站

QQ登录

只需一步,快速开始

搜索
查看: 715|回复: 0

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

[复制链接]
发表于 2018-11-15 09:51:44 | 显示全部楼层 |阅读模式
本帖最后由 adminlily 于 2018-11-15 09:54 编辑 2 U* _" V# ^2 k5 e0 w

5 \! ^$ S, V! ?# \/ c- s9 x6 w; j; u

( @: g4 P9 Q9 m2 O* ^8 a3 g
0?wx_fmt=jpeg.jpg

3 n' c7 e2 V8 R. z: `

2 x5 G: x2 }4 W+ ^; l2 n
Siva Mandadi 是来自奔驰北美研发中心的用户交互部门的一名 DevOps 工程师,他在 JFrog 用户大会上分享中介绍了奔驰通过 DevOps 落地,加速打造未来汽车的实践。本文根据视频资料整理而来,原视频地址:

* x7 n, C9 h  b
! Z. |1 c: `$ E: B4 M. {, K
https://www.youtube.com/watch?v=zw0QsPgD5Ug
2 E8 z" i' C4 H

/ m; e- H2 O% ]/ `# \' y% J
背景介绍
8 P! b! F5 J9 v1 e$ |' S; p1 P4 N- M
6 _& c" e3 T+ S0 }% a* H
奔驰对于未来汽车的定义涵盖了很多方面,包括车载音乐、导航、自动驾驶等等,涉及到的实现技术也是多方面的,如机器学习、物联网等前沿技术。这些技术表现在实际应用上,便有了一种“未来感”。举个例子,未来汽车可以根据天气情况,切换车内的主题,比如颜色、音乐等,让车主时刻都保持舒适的状态;或者,如果车主开车回家,在离家还有半小时车程的时候,可以通过车给家里的厨房电器发消息,开始准备煮一顿可口的饭菜。

7 d8 R, |4 |7 Q- B+ S2 b! B3 i

/ f' Y& x+ Z( K8 A4 l: s; x2 K  d3 ]
最开始,整个用户交互部门(视频主讲人所在部门)大约有 300 名工程师,他们来自不同国家,分布在美国、德国和印度等不同地域;团队每天大约会执行 60 次构建任务;每周有超过 1000 个、约 1TB 数据量的自研件产生;平均 CI 构建时长为 6 小时。
+ `2 O) @' ]! G1 I0 s
& E/ ?, k. c% ]( |' c2 O* E
0?wx_fmt=jpeg.jpg
* q2 i2 ~& G5 T. e
7 i( ^! ~5 A' X- M+ R3 N# F
4 |5 {: v7 t3 U9 x/ D' ^. @! X, j
面临的挑战
) a+ Q* \$ p) H. T' G# Q8 C* n

4 @7 T9 k8 |1 Y: p
随着业务的发展,团队面临着巨大的挑战,主要是在工件的存储与共享、依赖管理、编排、持续构建和仓库不同等方面:
4 c1 ~5 m7 U9 [% I  j/ |

0 i5 D8 ~1 f- T
  • 自研件存储:每周会产生超过 1000 个自研件,需要耗费近 ITB 存储空间,随着时间推移现有的存储资源很快就出现枯竭。

    ! A$ X/ e0 Q9 a) V; u
    % H- [! w! f5 }" }3 r

# ~3 Z4 u+ y, T. m$ K0 [
  • 自研件共享:团队成员分布在世界各地,上传和下载的速度成为瓶颈,开发与 QA 人员通常会抱怨下载速度太慢。比如印度和德国的开发者需要上传,美国这边的 QA 需要下载进行测试就会遇到这种情况。
    9 n8 Y- b+ \" f) h) @( X

    ! @8 U4 T' y8 @" {. ]

& P: r4 h+ {/ Q3 n8 \# g) G
  • 依赖管理:庞大研发团队的依赖管理也是一个非常头疼的问题,某些功能依赖的软件包在不同的模块中存在着不同的版本,而维护复杂的依赖关系是非常有挑战的一件事情。团队主要使用 Java 和 C++ 开发,并且使用了 maven、conan 作为依赖管理工具。

    7 B3 c' k, ~# H, m- x5 L+ l7 V( o( n2 J
5 }' P5 r" R: ?) v& D
  • 持续集成:持续集成对于这样一个大团队是必须的,每一次的提交都必须通过持续集成(CI)确保提交不会带来任何问题。团队使用了 Jenkins 和 Bamboo 做一些持续集成相关的事情,值得一提的是使用了 Docker Container 作为 Jenkins Agent,通过配置文件根据负载动态创建 Build Agent。然而,由于 Docker 镜像非常大,而且处于不同的地域,导致整个过程也效率较低。

    . j: p; I) M3 e$ U+ Z
) A2 Z( y: N0 S- N( w8 a6 P/ O
* L# D9 p2 B8 i$ }. U% B% L* M
0?wx_fmt=jpeg.jpg

; c# a3 _, ^" L0 V: T6 {/ q7 ^

' Q9 @+ ?/ @: A6 c4 F
2 t* E1 c; Q3 L$ _2 M) u) C4 w5 R- o

! ?5 I% y& U' S: h7 I9 Q  }
在遇到上述挑战的同时,在 CI 构建阶段,下载依赖的时候达到 5-6 个小时,这也是难以接受的,并且由于 Artifact 非常大,也会使得整个系统运行缓慢。一种解决方案就是使用 NAS 存储。但是依然存在一些新的挑战:
3 g" E* T! }2 P/ Z# o! J
7 Y  f4 s+ E4 r; I8 {
  • 价格昂贵。
    7 D- y) i5 l$ {# Q3 N

    # U, M9 }4 p/ N, k6 p- s3 `/ Y7 q

; r# y  B$ O! E4 z
  • NAS 存储虽然能在一定程度上解决问题,但是相关的设备和维护费用非常昂贵。

    8 z, g+ J0 e- `! ?& B, ~* h9 i7 @5 w1 o+ o9 x4 e$ [

& M/ |- ]& P0 n# a4 `: J% f1 E* S
  • 构建次数的限制:由于构建的自研件增长非常快,然而存储空间是相对有限的,所以,实际情况下需要限制 10 次构建。

    ) M" q1 h1 ^, S! x: Z4 b4 N( J+ m& i8 }; D) L0 q; z. i/ F
6 F+ B* b5 \. N, d+ `: S* S
  • 共享:共享的问题依然难以解决,尤其是跨地域的共享。
    4 ~7 r, B  U; `

! R' h8 m+ e0 l0 f2 X& N( k
0?wx_fmt=jpeg.jpg

# u4 Y* t. \& W
* L5 J$ `. \) G# y+ ~7 n8 u% C" S

& `* ]4 S) K# f- d' g# c! Z% b

: d# y# C2 c9 e4 d
解决方案

3 G- @) R: n; d% q" l; o: F
- ^- ?- U, t& j  a7 X6 l% [6 K
在对挑战进行分析之后,认为有如下两种可选的解决方案。一种是增加存储,另外一种方式是采用 Nexus,但需要高可用架构和 REST API 的支持。
4 X( c2 [& b0 Q; j% Q/ d4 z2 g- I

, ^" t9 `+ f, [+ H  V2 C+ h6 {  k
0?wx_fmt=jpeg.jpg
6 B! q4 ?+ v. R6 c5 n6 x7 R/ b

  X8 T# B2 ~" {+ [9 ~* q/ I

* B" U- o# y' W0 S* I/ X# V
这两种选择无疑都需要一个强大的 DevOps 工具。对于跨国研发团队来说,高可用是非常重要的特性,多语言的仓库也是必须的,增加存储显然难以解决根本问题。Nexus 有多语言支持,但是在高可用和 REST API 方面都需要额外的维护。在调研了众多相关产品之后,奔驰的研发团队认为 JFrog Artifactory 是非常不错的选择。
3 @$ p. X+ f! [9 t- |
5 M2 C: g. H9 Q+ z' p: {

$ D7 q) J& ^, a  Y) F
0?wx_fmt=jpeg.jpg
  A' [: |+ y; i: l* L3 x/ C

" \7 M  [- P' W  k8 ^

( N% k2 r; |. V& G# s
JFrog Artifactory 提供了非常丰富的功能,比如统一的仓库、一致的 UI、企业级高可用支持、基于 YAML 的预定义配置、丰富的 REST API 支持以及良好的客户支持等等。Artifactory 对开源工具均可以无缝对接,尤其是 Jenkins,因此用户原有的习惯几乎不需要改变,使用之后,整个 DevOps 环境有了很显著的变化。

: N0 w  ^7 e- u* F# s) b

' S/ a& n' P$ c7 B/ ?( }
除此之外,Artifactory 还有诸多非常强大的特性,如 DevOps 全生命周期元数据记录、AQL(Artifactory Query Language) 查询语言、跨语言的服务正向和反向依赖解析、结合 Xray 的漏洞扫描及影响力分析等等。

" Z8 M7 u2 g8 k7 H" l

( s1 f* S0 d: _7 }6 u% V8 a9 H
0?wx_fmt=jpeg.jpg

$ }1 Y7 s  j7 `) i, x
8 v# c/ L+ f5 j# |
奔驰通过 Artifactory 实现了统一的依赖管理和集中式的软件包仓库,结合其强大的正反向依赖解析,轻松解决了依赖关系不清晰的问题。Artifactory 的异地同步复制解决了软件包上传和下载的性能瓶颈问题,由于具有缓存机制,使得虽然每天的构建频率增长十倍,但是构建时间却大幅下降。在自研件存储方面,通过 Artifactory 的存储优化节省了大量存储空间,且通过自动清理机制,减少了很多管理成本,也降低了人为操作的风险。
% s1 x/ v) i3 r1 L* `  ~: P

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

. _1 N& U: t9 n& }, r9 |# D7 [

- |, M) H9 z4 L6 J3 a* m
0?wx_fmt=jpeg.jpg

4 Z" r( Z9 m% `8 a. @" e
) v! K3 p# u  e# E" l/ S) M
7 W) n( g) e" r& ?0 n! C! v
从数据我们可以看出,每日构建的次数增长了 10 倍,每周产生的工件也增长了 10 倍,但是存储只增加了 2 倍,存储优化十分显著。最明显的效果是 CI 构建的时间减少了 3600%,这是非常惊人的。当然,这些都是直观的效果,还有一些是潜在的收益,比如新人熟悉整个项目的时间更短了、开发的周期更短、权限控制更加准确,相应地安全性也大幅提升。  V- A# p* f6 A7 B$ A4 {. B9 r/ h

; l- o; F$ m8 j( R

1 C# W& |; |) o( b: A0 s
总结
0 i4 P# N7 Z4 a9 i- U
8 G- a1 Z) N, B: K0 s
奔驰所面临的挑战在很多企业中都存在,尤其是大型的跨国开发团队。企业级的高可用,多语言的集中式仓库,跨地域的复制分发以及强大的依赖管理功能都是必须要满足的需求,JFrog Artifactory 在奔驰的实践中提供了切实可行的解决方案,实现了 DevOps 的平稳落地,具有借鉴意义。

, F1 @2 E- O# E7 [; ]7 Q) a

; y" i/ ?0 d9 Q" r" Q6 Z
作者:付辉  JFrog 资深工程师

! B1 J/ k# G2 b4 `. X. \1 B, h) _. D$ ]2 K$ s6 {
" }0 z" e, v, E$ j. T! P  F

本版积分规则

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

Baidu

GMT+8, 2019-11-18 07:15 , Processed in 0.154425 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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