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

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

 找回密码
 立即注册

扫描二维码登录本站

QQ登录

只需一步,快速开始

查看: 2132|回复: 0

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

[复制链接]
发表于 2018-11-15 09:51:44 | 显示全部楼层 |阅读模式
本帖最后由 adminlily 于 2018-11-15 09:54 编辑 7 s! R  S6 Z- y$ @
3 B, `0 c6 n0 ?! V% S  V
" C) x5 r) q. u/ P, m* Z. F4 L2 ^& L
# ]  E  d; K0 _6 v- d4 N! y
0?wx_fmt=jpeg.jpg
8 m; b9 c/ A+ h! i0 o9 D5 d+ l" t
7 J4 F& x! P) m4 m, T6 S
Siva Mandadi 是来自奔驰北美研发中心的用户交互部门的一名 ITILxf.com" target="_blank" class="relatedlink">DevOps 工程师,他在 JFrog 用户大会上分享中介绍了奔驰通过 DevOps 落地,加速打造未来汽车的实践。本文根据视频资料整理而来,原视频地址:

+ e- J3 ^  m" g+ j8 O% R
# M5 A: E9 H. R  v
https://www.youtube.com/watch?v=zw0QsPgD5Ug
  K" e6 e  u- a: \9 w

) v; p  _) |. j# E
背景介绍

3 j! p/ \/ `9 c3 B

4 D! u( G; e1 `% [& U# ^# |
奔驰对于未来汽车的定义涵盖了很多方面,包括车载音乐、导航、自动驾驶等等,涉及到的实现技术也是多方面的,如机器学习、物联网等前沿技术。这些技术表现在实际应用上,便有了一种“未来感”。举个例子,未来汽车可以根据天气情况,切换车内的主题,比如颜色、音乐等,让车主时刻都保持舒适的状态;或者,如果车主开车回家,在离家还有半小时车程的时候,可以通过车给家里的厨房电器发消息,开始准备煮一顿可口的饭菜。
+ b, X" D4 @+ x8 z
; W# x. |, x  v" ]6 [
最开始,整个用户交互部门(视频主讲人所在部门)大约有 300 名工程师,他们来自不同国家,分布在美国、德国和印度等不同地域;团队每天大约会执行 60 次构建任务;每周有超过 1000 个、约 1TB 数据量的自研件产生;平均 CI 构建时长为 6 小时。

% Z' F/ E) C) t9 P% d- P0 f

  \) w. O9 O; j* I! w
0?wx_fmt=jpeg.jpg

/ U3 `; t) D7 a

- G& S8 ~  b  i; V- b: O/ o

& c# L( `: M# M/ J  a! f
面临的挑战

. L. b9 ^5 f6 l1 N
1 ^- W5 y3 l1 w( J
随着业务的发展,团队面临着巨大的挑战,主要是在工件的存储与共享、依赖管理、编排、持续构建和仓库不同等方面:

- ]" m5 n9 }- G& K, \* o' e7 m; Z
6 F+ U' n# g) }- j; }
  • 自研件存储:每周会产生超过 1000 个自研件,需要耗费近 ITB 存储空间,随着时间推移现有的存储资源很快就出现枯竭。
    / H, N$ `' A7 W) x4 L

    0 z+ L$ E4 C! u
/ n2 j& l( d& Y% ]
  • 自研件共享:团队成员分布在世界各地,上传和下载的速度成为瓶颈,开发与 QA 人员通常会抱怨下载速度太慢。比如印度和德国的开发者需要上传,美国这边的 QA 需要下载进行测试就会遇到这种情况。

    3 E$ i% k* n7 K  |+ s
    1 V/ M& K; ?0 D% s, w

" n& A4 U$ Z$ K/ c& y
  • 依赖管理:庞大研发团队的依赖管理也是一个非常头疼的问题,某些功能依赖的软件包在不同的模块中存在着不同的版本,而维护复杂的依赖关系是非常有挑战的一件事情。团队主要使用 Java 和 C++ 开发,并且使用了 maven、conan 作为依赖管理工具。
    ( R& d2 a5 n- u6 w- `9 ~3 L$ ]
    6 y/ Z4 m. F5 G# A% H
8 i& S. ^" z4 q+ C( `/ `
  • 持续集成:持续集成对于这样一个大团队是必须的,每一次的提交都必须通过持续集成(CI)确保提交不会带来任何问题。团队使用了 Jenkins 和 Bamboo 做一些持续集成相关的事情,值得一提的是使用了 Docker Container 作为 Jenkins Agent,通过配置文件根据负载动态创建 Build Agent。然而,由于 Docker 镜像非常大,而且处于不同的地域,导致整个过程也效率较低。

    ( S/ v. K" j: o6 \  {  A

0 P; A$ x  t5 h% w9 b

3 _. [) }9 ~, b: w% \1 H2 z
0?wx_fmt=jpeg.jpg

# X$ c$ S9 F- C! b' z# ~
6 B# q3 z1 Y  m* X

/ B8 m8 s5 q' \6 h, @1 J4 L
5 J- `8 T8 _3 D# z+ V% I6 v
在遇到上述挑战的同时,在 CI 构建阶段,下载依赖的时候达到 5-6 个小时,这也是难以接受的,并且由于 Artifact 非常大,也会使得整个系统运行缓慢。一种解决方案就是使用 NAS 存储。但是依然存在一些新的挑战:
0 r$ v8 ^' g2 Y  i( v5 f( ]
- t1 Z1 d4 }  `1 I% h
  • 价格昂贵。

    , h+ w) o. F# @4 G/ v  n0 ]& ]
    : Y9 O; j1 u/ j. e$ J$ g7 Z

" Q' ]$ P8 f7 z& t$ ^
  • NAS 存储虽然能在一定程度上解决问题,但是相关的设备和维护费用非常昂贵。

    0 h  ]' }1 V# o1 c! Y* S' U0 c" L/ g' v8 }5 F
' U: m$ Q. J# Q: w; X9 @
  • 构建次数的限制:由于构建的自研件增长非常快,然而存储空间是相对有限的,所以,实际情况下需要限制 10 次构建。

    ! Y" z" y3 t( `& N2 _5 R$ ]9 `* U; i( X) @7 _  U5 Q/ u* |
7 I5 {# U7 L2 P' L
  • 共享:共享的问题依然难以解决,尤其是跨地域的共享。
    % I2 d1 \4 N" b7 u. k5 Z: y4 f

5 v: s8 H2 p  T" \, B
0?wx_fmt=jpeg.jpg

1 @% g9 _2 v9 M( s) m

: W" p8 D3 I5 o
1 S1 k" x5 _1 X# W4 n! y

; b$ i+ t2 \$ U( p& A: c
解决方案

- r$ X- h6 O- t  \  U* z5 l  G
( O0 u% W# H3 E! o' T
在对挑战进行分析之后,认为有如下两种可选的解决方案。一种是增加存储,另外一种方式是采用 Nexus,但需要高可用架构和 REST API 的支持。
* m- D3 ?1 J! Y" W6 O
% [7 x& S) n# m7 y/ f2 F: p; T" `* D
0?wx_fmt=jpeg.jpg

' G3 N6 M* N7 G  ^" y* d
7 z+ C: _( Q; }1 [
% q( X' Q/ n; f1 f
这两种选择无疑都需要一个强大的 DevOps 工具。对于跨国研发团队来说,高可用是非常重要的特性,多语言的仓库也是必须的,增加存储显然难以解决根本问题。Nexus 有多语言支持,但是在高可用和 REST API 方面都需要额外的维护。在调研了众多相关产品之后,奔驰的研发团队认为 JFrog Artifactory 是非常不错的选择。
1 o# o: a- M$ P2 A; i

3 Q  v% g; l  ]( d' a5 }
; B4 ?! @" O. j* p. B, j$ d8 j; V
0?wx_fmt=jpeg.jpg
: d4 ]1 j) h& m6 e& I& N( M0 f5 J" k

  N: C3 p0 {0 I5 y( ]2 T

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

0 K+ v2 ]( k: r' j
8 C3 J6 a3 {6 g+ F2 F
除此之外,Artifactory 还有诸多非常强大的特性,如 DevOps 全生命周期元数据记录、AQL(Artifactory Query Language) 查询语言、跨语言的服务正向和反向依赖解析、结合 Xray 的漏洞扫描及影响力分析等等。
4 ~8 q+ C# \& F8 M% v# P- e

: j* Y8 ]2 ~$ F1 G9 e# [
0?wx_fmt=jpeg.jpg
5 q- C! j+ T  K; {4 f2 m, Y* o
( @3 J- t% O( ^1 D2 Z0 L
奔驰通过 Artifactory 实现了统一的依赖管理和集中式的软件包仓库,结合其强大的正反向依赖解析,轻松解决了依赖关系不清晰的问题。Artifactory 的异地同步复制解决了软件包上传和下载的性能瓶颈问题,由于具有缓存机制,使得虽然每天的构建频率增长十倍,但是构建时间却大幅下降。在自研件存储方面,通过 Artifactory 的存储优化节省了大量存储空间,且通过自动清理机制,减少了很多管理成本,也降低了人为操作的风险。
, L1 ?" t0 x6 L- D
7 l7 t. o3 C# @7 w$ I* C0 B; B# Z
全球分布的研发中心和人员的角色变更,使得权限的管控变得异常复杂,由于 Artifactory 集中管理了所有语言的二进制包,奔驰在使用 Artifactroy 后轻松地实现了对各地研发人员的细粒度权限管控,在团队内共享也可以很方面地控制相关权限,确保始终满足最小权限模型的要求。
! o& y, I9 |* {  l' Q& T
% l& u# @6 w: R& W3 o$ b+ f5 d/ ~
0?wx_fmt=jpeg.jpg

  Y2 q# `" _8 e, C! [

' v- R$ M4 G: x9 q2 T
2 {" A6 Z5 ]/ j1 R& u
从数据我们可以看出,每日构建的次数增长了 10 倍,每周产生的工件也增长了 10 倍,但是存储只增加了 2 倍,存储优化十分显著。最明显的效果是 CI 构建的时间减少了 3600%,这是非常惊人的。当然,这些都是直观的效果,还有一些是潜在的收益,比如新人熟悉整个项目的时间更短了、开发的周期更短、权限控制更加准确,相应地安全性也大幅提升。
" f- r. t# Z/ s1 J
$ w$ e1 k. x7 u3 f% y& t

$ }, Y, _6 V2 x+ U. p' ~* ]2 D: y
总结

) C! z( `" {- g% o- B
9 T2 i3 ?! j  _. C- i
奔驰所面临的挑战在很多企业中都存在,尤其是大型的跨国开发团队。企业级的高可用,多语言的集中式仓库,跨地域的复制分发以及强大的依赖管理功能都是必须要满足的需求,JFrog Artifactory 在奔驰的实践中提供了切实可行的解决方案,实现了 DevOps 的平稳落地,具有借鉴意义。

* a$ v% _, [7 E$ M5 |
& _$ e9 [! {, j7 N
作者:付辉  JFrog 资深工程师
' D% D' n- r. w) ], |$ D
, h4 |9 z& R- o" ?, x* ?: F  K/ T! x

+ p1 q0 X1 T# g. I- b- c" X: |! T




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

本版积分规则

参加 ITIL 4 基础和专家认证、长河ITIL实战沙盘、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, 2022-5-17 00:08 , Processed in 0.249716 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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