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

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

 找回密码
 立即注册

扫描二维码登录本站

QQ登录

只需一步,快速开始

查看: 2058|回复: 0

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

[复制链接]
发表于 2018-11-15 09:51:44 | 显示全部楼层 |阅读模式
本帖最后由 adminlily 于 2018-11-15 09:54 编辑
; ]! ]5 l% T0 k- ]" U% U, g# R7 Z
7 @2 c/ n( l! D0 c2 O6 G
3 Q) ]' L( G0 C. {

  q" ?: |  `, W  m2 F
0?wx_fmt=jpeg.jpg
! R; M  ?$ |( b( {0 n- L& B# p
/ R9 v7 y) V! n, M2 ~
Siva Mandadi 是来自奔驰北美研发中心的用户交互部门的一名 DevOps 工程师,他在 JFrog 用户大会上分享中介绍了奔驰通过 DevOps 落地,加速打造未来汽车的实践。本文根据视频资料整理而来,原视频地址:
7 ]0 j+ T0 T! d, c
* @: U9 A( @/ G8 q
https://www.youtube.com/watch?v=zw0QsPgD5Ug

" e0 _2 V* p! G1 ]; O; y+ w

- C4 q8 ]: @* s: p2 d
背景介绍

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

0 q. \$ u6 n) h* G

; Q8 |! H7 c) {! x8 w% [3 r7 J0 }# l
最开始,整个用户交互部门(视频主讲人所在部门)大约有 300 名工程师,他们来自不同国家,分布在美国、德国和印度等不同地域;团队每天大约会执行 60 次构建任务;每周有超过 1000 个、约 1TB 数据量的自研件产生;平均 CI 构建时长为 6 小时。

% g6 a8 |9 y( d  O

( l1 G6 }! V) s2 H$ w
0?wx_fmt=jpeg.jpg
: a9 W0 y  P. t5 p1 w
. U2 O! W$ A3 x' w" y9 E

6 s) o' |$ Z: K6 H; \0 I* l
面临的挑战
0 n# V. M2 j) A& O) q: M# p; [

. e1 T. M% r% C5 K* n, _
随着业务的发展,团队面临着巨大的挑战,主要是在工件的存储与共享、依赖管理、编排、持续构建和仓库不同等方面:

0 [$ g! ^, U6 T  f% G5 l

, V4 Z' N0 U  Z, h- K* f/ N& \
  • 自研件存储:每周会产生超过 1000 个自研件,需要耗费近 ITB 存储空间,随着时间推移现有的存储资源很快就出现枯竭。
    3 _6 ^: L7 y: \" x

    : O* U, \+ M0 M
2 X, ^# B  b1 i6 R
  • 自研件共享:团队成员分布在世界各地,上传和下载的速度成为瓶颈,开发与 QA 人员通常会抱怨下载速度太慢。比如印度和德国的开发者需要上传,美国这边的 QA 需要下载进行测试就会遇到这种情况。
    & W" x: Z$ n* O
    : f4 {& }* J7 H$ W0 l- k
# j6 ?& z1 y! r4 G9 S$ h
  • 依赖管理:庞大研发团队的依赖管理也是一个非常头疼的问题,某些功能依赖的软件包在不同的模块中存在着不同的版本,而维护复杂的依赖关系是非常有挑战的一件事情。团队主要使用 Java 和 C++ 开发,并且使用了 maven、conan 作为依赖管理工具。
    0 _8 r# V/ I0 g- H

    , N3 \' w6 C  s% b: [+ T

3 V2 O1 o; a& A
  • 持续集成:持续集成对于这样一个大团队是必须的,每一次的提交都必须通过持续集成(CI)确保提交不会带来任何问题。团队使用了 Jenkins 和 Bamboo 做一些持续集成相关的事情,值得一提的是使用了 Docker Container 作为 Jenkins Agent,通过配置文件根据负载动态创建 Build Agent。然而,由于 Docker 镜像非常大,而且处于不同的地域,导致整个过程也效率较低。
    ( Z( }5 ^6 `" w* Z4 N  Q: I
3 k% h$ J+ R4 M' L

% k( D: _; P# a0 \. s/ Q9 E- u
0?wx_fmt=jpeg.jpg

# H* Q7 j( Y8 {2 s# j1 A
8 [! I6 D5 h; b8 H4 n
* ^; [8 R- s  K$ q' q
( f- h6 u+ c) _+ b0 G* ?, z. |, n6 S
在遇到上述挑战的同时,在 CI 构建阶段,下载依赖的时候达到 5-6 个小时,这也是难以接受的,并且由于 Artifact 非常大,也会使得整个系统运行缓慢。一种解决方案就是使用 NAS 存储。但是依然存在一些新的挑战:

* a, C0 d" o. C$ r/ N5 H
8 q8 t3 `# n- }+ ?
  • 价格昂贵。
    0 X8 A$ i. [+ V9 \$ t" x! R0 g4 y
    8 s" O1 R. ]! M
  e* \; w7 r$ p2 E' D
  • NAS 存储虽然能在一定程度上解决问题,但是相关的设备和维护费用非常昂贵。
    + G8 p* \& O1 V7 B) ?

    - R8 q) n% E. u  _/ ?- w
+ e" o% |( M' {* P0 j8 E% z
  • 构建次数的限制:由于构建的自研件增长非常快,然而存储空间是相对有限的,所以,实际情况下需要限制 10 次构建。
    5 p- k- k0 v+ _6 f

    7 ]7 ]! M4 N/ `; C+ l
7 E! g6 H$ c/ e, [* J- h+ l
  • 共享:共享的问题依然难以解决,尤其是跨地域的共享。
    / h2 f. r5 _- Q  p8 J! x. ~+ y

$ x- E3 a# N  M: L7 e3 G4 G8 M
0?wx_fmt=jpeg.jpg
1 c+ L: w; y. e. @
% l4 y0 Q/ B9 U, ~: \' V% j

3 O' t" f& e+ s! V, {- u8 p' @
) ~5 S. N- Q; s6 r6 u
解决方案
6 X0 e! [8 y' n- F) m5 A! x& m( {

& R* t$ l6 H) b+ W
在对挑战进行分析之后,认为有如下两种可选的解决方案。一种是增加存储,另外一种方式是采用 Nexus,但需要高可用架构和 REST API 的支持。
" Y) d( x* m+ x' f( E
( c/ F6 n  Y+ m1 _" A) u0 J
0?wx_fmt=jpeg.jpg

+ ]# E# v- X7 `/ I9 R

6 T4 N( S3 }: `& J$ D

. s4 m; U6 ~% D9 D
这两种选择无疑都需要一个强大的 DevOps 工具。对于跨国研发团队来说,高可用是非常重要的特性,多语言的仓库也是必须的,增加存储显然难以解决根本问题。Nexus 有多语言支持,但是在高可用和 REST API 方面都需要额外的维护。在调研了众多相关产品之后,奔驰的研发团队认为 JFrog Artifactory 是非常不错的选择。$ D. d% Z& P6 j) N( I, }

$ u: b/ a5 D2 X3 N+ U7 t/ B
5 B6 A% G. \+ L0 p. `3 q: M
0?wx_fmt=jpeg.jpg
5 G+ r5 m3 G' i1 D5 D

% B! r. p+ {8 F: K
: P/ g) B, O: P: s  L. ^
JFrog Artifactory 提供了非常丰富的功能,比如统一的仓库、一致的 UI、企业级高可用支持、基于 YAML 的预定义配置、丰富的 REST API 支持以及良好的客户支持等等。Artifactory 对开源工具均可以无缝对接,尤其是 Jenkins,因此用户原有的习惯几乎不需要改变,使用之后,整个 DevOps 环境有了很显著的变化。
/ R3 ]% A' T: i; J6 d* Z8 [8 ?

! `& h# W* h# u: t2 Q+ {
除此之外,Artifactory 还有诸多非常强大的特性,如 DevOps 全生命周期元数据记录、AQL(Artifactory Query Language) 查询语言、跨语言的服务正向和反向依赖解析、结合 Xray 的漏洞扫描及影响力分析等等。

' R9 {' n1 u2 L6 ^

" e. u* k0 }& W' _$ V0 b# a+ ^' n
0?wx_fmt=jpeg.jpg
' Z# f+ Q9 v* o' D

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

0 R& S0 k1 y4 w5 j) {  ?1 k2 e
1 e- s7 m  ]' @, ^& y! n0 K  \
全球分布的研发中心和人员的角色变更,使得权限的管控变得异常复杂,由于 Artifactory 集中管理了所有语言的二进制包,奔驰在使用 Artifactroy 后轻松地实现了对各地研发人员的细粒度权限管控,在团队内共享也可以很方面地控制相关权限,确保始终满足最小权限模型的要求。

4 k2 R" p2 W7 I3 q" }' U
7 {& f% S3 q; q' g: v
0?wx_fmt=jpeg.jpg

5 n; J, i1 F& H7 B; O4 K

& C- p4 s  o6 L' b" b) @

2 r* h4 d( q- e' |/ `9 Z0 k+ x! [8 L
从数据我们可以看出,每日构建的次数增长了 10 倍,每周产生的工件也增长了 10 倍,但是存储只增加了 2 倍,存储优化十分显著。最明显的效果是 CI 构建的时间减少了 3600%,这是非常惊人的。当然,这些都是直观的效果,还有一些是潜在的收益,比如新人熟悉整个项目的时间更短了、开发的周期更短、权限控制更加准确,相应地安全性也大幅提升。1 U" A4 z, n' S0 O
4 h: m7 E7 _" v  }: x/ n: o' ^
) q9 c- C8 o% }8 c. Q) U  |3 w
总结

" Y" c/ {/ y9 N. e$ F$ Q
" k9 J" S" Y6 w) J7 x
奔驰所面临的挑战在很多企业中都存在,尤其是大型的跨国开发团队。企业级的高可用,多语言的集中式仓库,跨地域的复制分发以及强大的依赖管理功能都是必须要满足的需求,JFrog Artifactory 在奔驰的实践中提供了切实可行的解决方案,实现了 DevOps 的平稳落地,具有借鉴意义。

3 N7 b/ P' f6 z+ g' b# f& w5 \
2 J2 I4 v0 x9 K% G1 ~, J
作者:付辉  JFrog 资深工程师
7 f  Z4 U* P6 s& w  v* m" w

+ H- b" T/ J0 Q, y' L0 ?0 `- }" X- H! e+ x  Z- U




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

本版积分规则

参加 ITIL 4 基础和中级专家认证、v3专家升级、DevOps专家认证、ITSS服务经理认证报名
本站关键字: ITIL| ITSM| ISO20000| ITIL培训| ITIL认证| ITIL考试| ITSS| ITSS培训| ITSS认证| IT运维管理| DevOps| DevOps培训| DevOps认证| itop| itil4| sre| 开源ITSM软件

QQ|ITIL先锋论坛 ( 粤ICP备11099876号 )|appname

Baidu

GMT+8, 2021-12-3 00:33 , Processed in 0.132487 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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