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

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

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

扫描二维码登录本站

QQ登录

只需一步,快速开始

搜索
查看: 461|回复: 0

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

[复制链接]
来自- 日本

参加活动:0

组织活动:0

发表于 2018-11-15 09:51:44 | 显示全部楼层 |阅读模式 来自- 日本
本帖最后由 adminlily 于 2018-11-15 09:54 编辑 / I' D7 w: N/ r* y$ l; F

% S8 k& J" m' g5 b0 g" ?# ^8 q8 B
7 E) B5 ]& Y& w$ V

+ D3 d4 ]3 m5 _) P8 d
0?wx_fmt=jpeg.jpg
% e* u9 m, j4 r4 b- s

) b* u, u0 |. f2 ~/ U# ?: v5 g
Siva Mandadi 是来自奔驰北美研发中心的用户交互部门的一名 DevOps 工程师,他在 JFrog 用户大会上分享中介绍了奔驰通过 DevOps 落地,加速打造未来汽车的实践。本文根据视频资料整理而来,原视频地址:

. d2 E9 l' P& A  Y4 Q! k

2 A7 A0 X) Y( e6 ]5 J
https://www.youtube.com/watch?v=zw0QsPgD5Ug

: J7 ~+ E* |; }2 {7 ]

. n0 K; F7 E: U# `
背景介绍

) Z9 v' e0 T$ I- G

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

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

+ Y* A& [$ y  o( u& d

) `; t# k5 o" [8 C6 x& Y: S
0?wx_fmt=jpeg.jpg
# i& ?4 O8 B/ w+ a$ v
% \  G# t: h. ]
- `8 o- H# e8 ]+ p, {9 H
面临的挑战
% j" X% J) Y/ ^% W6 X3 z5 X

" h- X' z' O  k
随着业务的发展,团队面临着巨大的挑战,主要是在工件的存储与共享、依赖管理、编排、持续构建和仓库不同等方面:
: [' R2 [& C, D% o+ D0 A
/ a- m9 C+ J& }% x+ A* N' G
  • 自研件存储:每周会产生超过 1000 个自研件,需要耗费近 ITB 存储空间,随着时间推移现有的存储资源很快就出现枯竭。
    : F$ _+ \' f7 h) m

    : y- e: m# ^' e& \% G2 B

( K5 }! ?) W: }! {& e: c3 R0 Z
  • 自研件共享:团队成员分布在世界各地,上传和下载的速度成为瓶颈,开发与 QA 人员通常会抱怨下载速度太慢。比如印度和德国的开发者需要上传,美国这边的 QA 需要下载进行测试就会遇到这种情况。
    1 }0 M/ X, ?6 ]" D: B  Z0 \
    , a. H# [7 {- o1 w; M
6 b/ Y) l; g2 P; D' n
  • 依赖管理:庞大研发团队的依赖管理也是一个非常头疼的问题,某些功能依赖的软件包在不同的模块中存在着不同的版本,而维护复杂的依赖关系是非常有挑战的一件事情。团队主要使用 Java 和 C++ 开发,并且使用了 maven、conan 作为依赖管理工具。
    : V) P; f( n6 x: S

    $ ^2 z) c$ M& \- Z5 N4 y2 L/ L5 C4 f) u

# V0 r% A- ?4 k$ I: M! E8 G' O
  • 持续集成:持续集成对于这样一个大团队是必须的,每一次的提交都必须通过持续集成(CI)确保提交不会带来任何问题。团队使用了 Jenkins 和 Bamboo 做一些持续集成相关的事情,值得一提的是使用了 Docker Container 作为 Jenkins Agent,通过配置文件根据负载动态创建 Build Agent。然而,由于 Docker 镜像非常大,而且处于不同的地域,导致整个过程也效率较低。

    ) F( }. Q, R2 _8 N2 r$ G
% ~4 d6 Y" e- Z9 F6 W9 m

% t6 q2 _% |+ s: M
0?wx_fmt=jpeg.jpg

6 M; [- s* x4 E7 v: S
# D- O- L4 u8 O- |5 ^7 [

0 h6 n* _2 A5 ?  u+ W

" ^$ }* P' L2 z8 h
在遇到上述挑战的同时,在 CI 构建阶段,下载依赖的时候达到 5-6 个小时,这也是难以接受的,并且由于 Artifact 非常大,也会使得整个系统运行缓慢。一种解决方案就是使用 NAS 存储。但是依然存在一些新的挑战:
* @( _# `5 e" _% g9 g' e

6 f$ E3 D2 V0 K( k- |/ [
  • 价格昂贵。

    ; w4 [* E5 s: i4 l$ S; D( q2 R8 K) |4 V) I
" M3 D4 ~4 ^/ ^
  • NAS 存储虽然能在一定程度上解决问题,但是相关的设备和维护费用非常昂贵。

    6 |; s. w7 F( q7 m& L1 d% A  T
    8 X8 x* J. A. L; t, n
; d- Y* {2 u9 O/ L& [2 l& T: s
  • 构建次数的限制:由于构建的自研件增长非常快,然而存储空间是相对有限的,所以,实际情况下需要限制 10 次构建。

    2 `) F9 x. W- b  `0 }5 y' D) n5 W

& T  a. Z$ Y4 n; H" O
  • 共享:共享的问题依然难以解决,尤其是跨地域的共享。
      h% k* N0 ~$ B4 `/ e& _
( [3 V; S3 Z8 `5 v5 K% c
0?wx_fmt=jpeg.jpg

+ I6 ]# T# L; {, w5 C: P
# c& M8 g( R" A$ |+ r

' M* z: }/ [. H- z* f( `

! d/ O+ \! M2 }' N; v
解决方案

$ |( T! s$ ]. A, [
( ~- F% |  D0 R' \9 q3 @% h6 T2 ]7 t
在对挑战进行分析之后,认为有如下两种可选的解决方案。一种是增加存储,另外一种方式是采用 Nexus,但需要高可用架构和 REST API 的支持。
5 ?9 \" F# S) G) J0 J
0 h0 z7 Y; g0 ^0 i' e  h9 E
0?wx_fmt=jpeg.jpg

/ J/ B  b5 {4 z/ H: v/ _- `
! F& v. v: z8 h  Z

1 h9 i/ ?4 o" T5 I2 @6 |2 s
这两种选择无疑都需要一个强大的 DevOps 工具。对于跨国研发团队来说,高可用是非常重要的特性,多语言的仓库也是必须的,增加存储显然难以解决根本问题。Nexus 有多语言支持,但是在高可用和 REST API 方面都需要额外的维护。在调研了众多相关产品之后,奔驰的研发团队认为 JFrog Artifactory 是非常不错的选择。, t3 R* S) P/ J, J3 D& F! j+ M
! p, ~7 h( H9 D6 a

$ }  p0 @5 S5 ?& U9 q6 r# H: Y
0?wx_fmt=jpeg.jpg

+ Y; P* p0 A6 g  H% X$ K# g
4 t+ y& F. B- {1 l/ {, i5 z* ?
' \7 ~, b, [6 f' J
JFrog Artifactory 提供了非常丰富的功能,比如统一的仓库、一致的 UI、企业级高可用支持、基于 YAML 的预定义配置、丰富的 REST API 支持以及良好的客户支持等等。Artifactory 对开源工具均可以无缝对接,尤其是 Jenkins,因此用户原有的习惯几乎不需要改变,使用之后,整个 DevOps 环境有了很显著的变化。

4 z( Q& f" S+ y/ m* }# E1 G, [

! Z1 V- ?$ u1 M3 d
除此之外,Artifactory 还有诸多非常强大的特性,如 DevOps 全生命周期元数据记录、AQL(Artifactory Query Language) 查询语言、跨语言的服务正向和反向依赖解析、结合 Xray 的漏洞扫描及影响力分析等等。
* U/ ~+ ?4 V* w4 A, b9 m- M/ p" K
2 n7 }1 D& d! L! k
0?wx_fmt=jpeg.jpg

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

7 n1 z& V, x$ S. N! w) N. ]8 L

% k& v6 \* ?4 ]
全球分布的研发中心和人员的角色变更,使得权限的管控变得异常复杂,由于 Artifactory 集中管理了所有语言的二进制包,奔驰在使用 Artifactroy 后轻松地实现了对各地研发人员的细粒度权限管控,在团队内共享也可以很方面地控制相关权限,确保始终满足最小权限模型的要求。
" ^" e; k6 l( D9 b, V$ u

6 t+ L( m+ b# U# {
0?wx_fmt=jpeg.jpg

) Z& o9 R" X/ j# d: F; Z

4 O+ _1 a5 ~" c  s1 C
4 a0 m9 u( N! D# f7 F
从数据我们可以看出,每日构建的次数增长了 10 倍,每周产生的工件也增长了 10 倍,但是存储只增加了 2 倍,存储优化十分显著。最明显的效果是 CI 构建的时间减少了 3600%,这是非常惊人的。当然,这些都是直观的效果,还有一些是潜在的收益,比如新人熟悉整个项目的时间更短了、开发的周期更短、权限控制更加准确,相应地安全性也大幅提升。$ C+ x- C+ b1 a6 E

" ]. S. h1 H* V/ I2 m% ?4 I, O
2 G: ~( Q& [; U. ]
总结

( ~( |, v+ J% ]& Y4 c$ i
* C5 _2 M6 X% B3 S
奔驰所面临的挑战在很多企业中都存在,尤其是大型的跨国开发团队。企业级的高可用,多语言的集中式仓库,跨地域的复制分发以及强大的依赖管理功能都是必须要满足的需求,JFrog Artifactory 在奔驰的实践中提供了切实可行的解决方案,实现了 DevOps 的平稳落地,具有借鉴意义。

( V+ J$ A! l+ F5 S
; W# [$ D+ Q2 A7 G0 y! _. M
作者:付辉  JFrog 资深工程师

- R2 M2 T; B2 \: S7 }: C1 B' h
3 V) r4 V. g4 }: }# j$ i: w& x3 _: ~
7 O1 `" ]5 `) v! s" {$ F: r, X

本版积分规则

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

Baidu

GMT+8, 2019-6-17 23:20 , Processed in 0.248130 second(s), 37 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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