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

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

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

扫描二维码登录本站

QQ登录

只需一步,快速开始

搜索
查看: 635|回复: 0

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

[复制链接]
发表于 2018-11-15 09:51:44 | 显示全部楼层 |阅读模式
本帖最后由 adminlily 于 2018-11-15 09:54 编辑 " v8 ~. G" G9 J2 k2 u% @
2 K) n5 V- ?% G6 k- f. ]; t

$ h+ v; s: _( `

# J6 r: j5 ]. L2 T' K
0?wx_fmt=jpeg.jpg

( J! H% ]- V1 t: M5 X- N
, L% c; f* j) A% T5 B
Siva Mandadi 是来自奔驰北美研发中心的用户交互部门的一名 DevOps 工程师,他在 JFrog 用户大会上分享中介绍了奔驰通过 DevOps 落地,加速打造未来汽车的实践。本文根据视频资料整理而来,原视频地址:
: l0 _- ?5 A- m3 L! M7 y

# E% g% h% d- b4 l. Y% @$ t. Y; J7 z
https://www.youtube.com/watch?v=zw0QsPgD5Ug

. U" k* K6 q- C0 q
5 c  R7 d1 A3 Q
背景介绍
7 h, B6 X+ ^5 r+ @( l4 x, t6 }: L
& N  h3 n' I4 ~7 t
奔驰对于未来汽车的定义涵盖了很多方面,包括车载音乐、导航、自动驾驶等等,涉及到的实现技术也是多方面的,如机器学习、物联网等前沿技术。这些技术表现在实际应用上,便有了一种“未来感”。举个例子,未来汽车可以根据天气情况,切换车内的主题,比如颜色、音乐等,让车主时刻都保持舒适的状态;或者,如果车主开车回家,在离家还有半小时车程的时候,可以通过车给家里的厨房电器发消息,开始准备煮一顿可口的饭菜。

- T+ m3 h" J% U- l* P% B. V: g

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

1 g$ a  F4 E( O& i0 h/ a( f  S) F& P

3 r  R; X. W( h% a% l( X) [
0?wx_fmt=jpeg.jpg
! E( J% g7 x+ A) l2 z( u3 [. y

9 d7 M' P% D4 L0 n+ [# r
. _9 {: S8 t7 a3 E8 L" n" J' I$ \( e2 ^
面临的挑战

" L  i8 v0 _7 D$ r+ O2 O1 I

2 M( D0 I. H% b( L! P# s" a
随着业务的发展,团队面临着巨大的挑战,主要是在工件的存储与共享、依赖管理、编排、持续构建和仓库不同等方面:
: S$ t. G* ?; x  T

* Q2 }6 ?- X2 m
  • 自研件存储:每周会产生超过 1000 个自研件,需要耗费近 ITB 存储空间,随着时间推移现有的存储资源很快就出现枯竭。
    ' `8 }2 `. R, N; I$ P; U3 X5 j
    ( S  Q( o) E1 ]- z  [& L+ v2 }
% m. t7 ^; `* m; d3 l
  • 自研件共享:团队成员分布在世界各地,上传和下载的速度成为瓶颈,开发与 QA 人员通常会抱怨下载速度太慢。比如印度和德国的开发者需要上传,美国这边的 QA 需要下载进行测试就会遇到这种情况。

    % s. b5 |4 D& J) D! n; ~" S3 k$ j) l2 M, n$ D
0 A  w. B& C) d' c2 [+ u" I
  • 依赖管理:庞大研发团队的依赖管理也是一个非常头疼的问题,某些功能依赖的软件包在不同的模块中存在着不同的版本,而维护复杂的依赖关系是非常有挑战的一件事情。团队主要使用 Java 和 C++ 开发,并且使用了 maven、conan 作为依赖管理工具。

    ! r- ?$ |/ D, @6 S9 ~6 R' h. q  W' `: E
( I8 a: D1 I, z9 Q8 M1 f" x, }
  • 持续集成:持续集成对于这样一个大团队是必须的,每一次的提交都必须通过持续集成(CI)确保提交不会带来任何问题。团队使用了 Jenkins 和 Bamboo 做一些持续集成相关的事情,值得一提的是使用了 Docker Container 作为 Jenkins Agent,通过配置文件根据负载动态创建 Build Agent。然而,由于 Docker 镜像非常大,而且处于不同的地域,导致整个过程也效率较低。
    / T. U4 F5 l3 G8 G% ~- P" K
4 T( v% T6 l1 g! g  O

6 T9 X1 |0 v; K6 n- W* L1 C: O
0?wx_fmt=jpeg.jpg
! D+ ~7 w; x; N, K4 l! m
- ?  y' J, B! f5 D2 N

" @4 ?' K  |0 G) m2 n' }" Y% C% Z
( b3 I; o6 e; S! J8 O
在遇到上述挑战的同时,在 CI 构建阶段,下载依赖的时候达到 5-6 个小时,这也是难以接受的,并且由于 Artifact 非常大,也会使得整个系统运行缓慢。一种解决方案就是使用 NAS 存储。但是依然存在一些新的挑战:
2 d8 E) ^+ V7 u$ r
7 t; f- k* A4 e" Q
  • 价格昂贵。

    $ i$ \- ~8 s+ O! k
    + k2 t! [/ L* U0 N3 v8 H3 l
4 Y& D) a( o0 f" J+ q
  • NAS 存储虽然能在一定程度上解决问题,但是相关的设备和维护费用非常昂贵。

    ' q. Q: P* g& e: ]2 ~% c0 S- T6 H7 P( u
9 h+ z$ ~9 u6 ?
  • 构建次数的限制:由于构建的自研件增长非常快,然而存储空间是相对有限的,所以,实际情况下需要限制 10 次构建。

    9 D/ L  `$ |  O" w1 G
    . N# Z, q) L4 @- Z! k' t( ?' ^

$ n4 O" Q( \# K, r: Y
  • 共享:共享的问题依然难以解决,尤其是跨地域的共享。

    5 N1 q$ c  U# N! Z& J( V0 p
3 y7 [" P! O& L5 P& p
0?wx_fmt=jpeg.jpg

4 U, a  j5 d" b, I# h9 J4 I

) k6 X' {8 R0 A6 t) H5 l
  S& o% G! p" h
/ U  D  B1 O3 p8 v8 s! E
解决方案

5 r" w. z% ?; w1 R8 D& @% c
4 U# F( ~5 R! u- b8 a( l
在对挑战进行分析之后,认为有如下两种可选的解决方案。一种是增加存储,另外一种方式是采用 Nexus,但需要高可用架构和 REST API 的支持。
$ I9 P" n+ Z% f4 r

5 r; L& E0 s5 W- E( s
0?wx_fmt=jpeg.jpg
" s" s! s4 _2 z$ l0 {0 h
/ \/ a: j9 N5 F' f" T

* _' F2 h- E) C0 t; `
这两种选择无疑都需要一个强大的 DevOps 工具。对于跨国研发团队来说,高可用是非常重要的特性,多语言的仓库也是必须的,增加存储显然难以解决根本问题。Nexus 有多语言支持,但是在高可用和 REST API 方面都需要额外的维护。在调研了众多相关产品之后,奔驰的研发团队认为 JFrog Artifactory 是非常不错的选择。% r4 E! Z& g1 o' ^1 q) K9 M/ X
9 f, }- ?# l! G+ I9 A

. ]8 q. R, r) m6 R% N
0?wx_fmt=jpeg.jpg

3 _. P7 y) Y# }5 F  c
$ D! Q# n( k- C- t& k& ~

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

6 D  ?: e0 ]% F& p
- n0 {' C9 T! k9 P" [+ t; S
除此之外,Artifactory 还有诸多非常强大的特性,如 DevOps 全生命周期元数据记录、AQL(Artifactory Query Language) 查询语言、跨语言的服务正向和反向依赖解析、结合 Xray 的漏洞扫描及影响力分析等等。
* K! ~4 U  X7 c  M$ N  D+ a2 m
6 T% ]  X# \1 O3 B+ l
0?wx_fmt=jpeg.jpg

$ c  K! q1 V$ G4 D

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

$ D: \: w0 d- r8 t% }6 i' L
9 S! a7 a1 }, o3 |' M
全球分布的研发中心和人员的角色变更,使得权限的管控变得异常复杂,由于 Artifactory 集中管理了所有语言的二进制包,奔驰在使用 Artifactroy 后轻松地实现了对各地研发人员的细粒度权限管控,在团队内共享也可以很方面地控制相关权限,确保始终满足最小权限模型的要求。

0 N. e% X- w: d/ ?) K

# O2 k4 }: F) Z7 V* O- V
0?wx_fmt=jpeg.jpg

, v. U! ?3 M# U- m& ?! d* A

3 p4 C5 G* U4 u- F7 P  [+ Q" |

& }! n% Q/ [/ i- t" y0 P
从数据我们可以看出,每日构建的次数增长了 10 倍,每周产生的工件也增长了 10 倍,但是存储只增加了 2 倍,存储优化十分显著。最明显的效果是 CI 构建的时间减少了 3600%,这是非常惊人的。当然,这些都是直观的效果,还有一些是潜在的收益,比如新人熟悉整个项目的时间更短了、开发的周期更短、权限控制更加准确,相应地安全性也大幅提升。
) b, {7 @! {( D+ g' ]- v

  d$ z1 I0 u  @2 P! Q9 F

, v  r4 G1 Y9 I) I
总结
. b4 K& D- `" _$ S& D- g; C( e

( k# U. @' v- B# s7 W+ N
奔驰所面临的挑战在很多企业中都存在,尤其是大型的跨国开发团队。企业级的高可用,多语言的集中式仓库,跨地域的复制分发以及强大的依赖管理功能都是必须要满足的需求,JFrog Artifactory 在奔驰的实践中提供了切实可行的解决方案,实现了 DevOps 的平稳落地,具有借鉴意义。
, F& F% T0 J$ Q. u& A' g! l+ W
  ?. E2 M. r- _4 ^7 m
作者:付辉  JFrog 资深工程师
: f; v6 V( i0 O& x. O

$ H$ C7 m6 M$ y/ p) ?3 Q) m) D# l  T- l9 T; G1 x7 S

本版积分规则

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

Baidu

GMT+8, 2019-9-23 07:04 , Processed in 0.142599 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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