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

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

 找回密码
 立即注册

扫描二维码登录本站

QQ登录

只需一步,快速开始

查看: 1980|回复: 0

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

[复制链接]
发表于 2018-11-15 09:51:44 | 显示全部楼层 |阅读模式
本帖最后由 adminlily 于 2018-11-15 09:54 编辑
' B* g# i7 {) y
1 s8 J6 |5 s& ]( h4 D8 w
6 T' k, P2 |" _' F
- L7 W% P( a) [; ]2 a  y/ f
0?wx_fmt=jpeg.jpg
. g$ E4 O# H# Z/ ]% t6 k

/ T1 }. y5 w/ r+ w
Siva Mandadi 是来自奔驰北美研发中心的用户交互部门的一名 DevOps 工程师,他在 JFrog 用户大会上分享中介绍了奔驰通过 DevOps 落地,加速打造未来汽车的实践。本文根据视频资料整理而来,原视频地址:
7 _7 _' |- y* n. z  x& u4 n

( |8 g% L( N/ J0 {9 K3 i7 g
https://www.youtube.com/watch?v=zw0QsPgD5Ug
9 B: [% \7 r% O) }" K
, [/ d! G! R8 I8 ~/ w1 @& W
背景介绍
% a* o. M5 E6 z% Y3 v  a
, S% G$ y! n) x% j0 K+ h
奔驰对于未来汽车的定义涵盖了很多方面,包括车载音乐、导航、自动驾驶等等,涉及到的实现技术也是多方面的,如机器学习、物联网等前沿技术。这些技术表现在实际应用上,便有了一种“未来感”。举个例子,未来汽车可以根据天气情况,切换车内的主题,比如颜色、音乐等,让车主时刻都保持舒适的状态;或者,如果车主开车回家,在离家还有半小时车程的时候,可以通过车给家里的厨房电器发消息,开始准备煮一顿可口的饭菜。

4 I0 ?0 F1 s+ n: @. j7 S$ S+ K* y

' d- K3 M" x5 s
最开始,整个用户交互部门(视频主讲人所在部门)大约有 300 名工程师,他们来自不同国家,分布在美国、德国和印度等不同地域;团队每天大约会执行 60 次构建任务;每周有超过 1000 个、约 1TB 数据量的自研件产生;平均 CI 构建时长为 6 小时。
5 v" {7 U, r) d4 u; U
; W  j8 N0 ?! k$ d8 P2 e# P
0?wx_fmt=jpeg.jpg

  m, P* b' `! N0 d2 |  E6 E0 [
+ B7 O8 N8 w" ~7 M5 k

4 K( O9 D8 B7 t1 {8 v1 I
面临的挑战
4 H4 L/ \& }6 A4 H3 f3 p2 P2 U
0 [. V7 c1 E. H) @; I. @- V
随着业务的发展,团队面临着巨大的挑战,主要是在工件的存储与共享、依赖管理、编排、持续构建和仓库不同等方面:

0 X! W- ~2 N; W, [8 j. C$ K

" s& Z) I& Y$ q
  • 自研件存储:每周会产生超过 1000 个自研件,需要耗费近 ITB 存储空间,随着时间推移现有的存储资源很快就出现枯竭。

    8 I% w4 i7 C7 h* a& D9 \1 P- w9 v6 L$ @' {4 O
) q; y( T. S1 I. j! n- W4 \2 |
  • 自研件共享:团队成员分布在世界各地,上传和下载的速度成为瓶颈,开发与 QA 人员通常会抱怨下载速度太慢。比如印度和德国的开发者需要上传,美国这边的 QA 需要下载进行测试就会遇到这种情况。

    1 `. W/ J7 \$ L/ }* A& W  g: Z2 ~( d& J$ Q) a/ |( |" m
% u0 `+ E' d0 {" ~! V5 }% c
  • 依赖管理:庞大研发团队的依赖管理也是一个非常头疼的问题,某些功能依赖的软件包在不同的模块中存在着不同的版本,而维护复杂的依赖关系是非常有挑战的一件事情。团队主要使用 Java 和 C++ 开发,并且使用了 maven、conan 作为依赖管理工具。

    5 D7 Y! s* U% N1 o- i! y! s$ s# ]2 v7 J* s: i* X6 L
, g/ W) u9 h! _2 [
  • 持续集成:持续集成对于这样一个大团队是必须的,每一次的提交都必须通过持续集成(CI)确保提交不会带来任何问题。团队使用了 Jenkins 和 Bamboo 做一些持续集成相关的事情,值得一提的是使用了 Docker Container 作为 Jenkins Agent,通过配置文件根据负载动态创建 Build Agent。然而,由于 Docker 镜像非常大,而且处于不同的地域,导致整个过程也效率较低。

    7 o' l* I# w  m. D/ o5 M
: [* n" @4 X1 M! J

3 }) s) @# z* Q9 e, a4 H" D
0?wx_fmt=jpeg.jpg

/ K9 ~0 m; S& B
2 W. S3 V3 Z4 W: E% C# ~
, B3 b' W. B5 J8 `) h
1 t" s- M1 b$ r7 \9 T- a+ H
在遇到上述挑战的同时,在 CI 构建阶段,下载依赖的时候达到 5-6 个小时,这也是难以接受的,并且由于 Artifact 非常大,也会使得整个系统运行缓慢。一种解决方案就是使用 NAS 存储。但是依然存在一些新的挑战:
8 n7 g' l) r; D2 q. d& [3 ~0 }

/ M4 A; i! i9 K, \' m; e- S
  • 价格昂贵。

    ; R* x, r" _4 k% E
    2 K  G- T: c' l8 N/ l

9 f  n$ _2 _6 I( F5 f" w: |8 r9 _
  • NAS 存储虽然能在一定程度上解决问题,但是相关的设备和维护费用非常昂贵。

    8 Y7 W7 o8 K4 A6 E8 ^$ q) |$ ^: U
/ t8 ]  F  K' d  W2 I$ d5 D) }" C
  • 构建次数的限制:由于构建的自研件增长非常快,然而存储空间是相对有限的,所以,实际情况下需要限制 10 次构建。

    8 S+ X' s* Z; r  ?. y2 C  H5 U  s) h3 h
! d0 n2 B, l. c& w$ E
  • 共享:共享的问题依然难以解决,尤其是跨地域的共享。

    0 R5 @( w8 e5 N1 L0 J: P5 Q, r" I7 q
2 D) |9 E# Q1 V0 L) ?. D. Z% m) ~. G, l
0?wx_fmt=jpeg.jpg
3 S$ R* F2 E2 F8 H+ i5 X
# T' k6 f2 x' M& r' P
9 E4 x3 z5 W8 }$ H5 Q4 ~9 T) C4 {7 D
- c5 k; ?7 q! `; v% p; s
解决方案
! A, U7 P3 K* `; g( L

% P- G. R% O# F" {  t4 C
在对挑战进行分析之后,认为有如下两种可选的解决方案。一种是增加存储,另外一种方式是采用 Nexus,但需要高可用架构和 REST API 的支持。
( k7 Z- |& `3 B( A. v7 _2 P
$ z) I$ D) J# U# P6 V
0?wx_fmt=jpeg.jpg
% j( i7 v  A- F- A0 T" |, M
6 j0 j7 O+ C; Q2 Q4 ?0 o+ n
" z; U. f# W* h- \7 e! b) [
这两种选择无疑都需要一个强大的 DevOps 工具。对于跨国研发团队来说,高可用是非常重要的特性,多语言的仓库也是必须的,增加存储显然难以解决根本问题。Nexus 有多语言支持,但是在高可用和 REST API 方面都需要额外的维护。在调研了众多相关产品之后,奔驰的研发团队认为 JFrog Artifactory 是非常不错的选择。6 C# O. r- @& K8 p0 p" z- G

1 u/ K* K2 M6 A3 X4 a
6 t( }2 I5 U  ]/ q! G% Y# T$ O( E# Y5 T
0?wx_fmt=jpeg.jpg
# i/ P4 E' v0 O' a( V7 ]

( \. t: ?' j" ], c

. b- W% _) H5 L2 M1 u
JFrog Artifactory 提供了非常丰富的功能,比如统一的仓库、一致的 UI、企业级高可用支持、基于 YAML 的预定义配置、丰富的 REST API 支持以及良好的客户支持等等。Artifactory 对开源工具均可以无缝对接,尤其是 Jenkins,因此用户原有的习惯几乎不需要改变,使用之后,整个 DevOps 环境有了很显著的变化。
9 ?3 o% {+ l0 N1 P: T5 r
7 D/ n7 a0 n2 s7 i% g& [7 G
除此之外,Artifactory 还有诸多非常强大的特性,如 DevOps 全生命周期元数据记录、AQL(Artifactory Query Language) 查询语言、跨语言的服务正向和反向依赖解析、结合 Xray 的漏洞扫描及影响力分析等等。

$ U/ y) T/ k- N9 E
# s# L' C5 d3 ^9 b1 f
0?wx_fmt=jpeg.jpg

6 \) t; E3 Z/ d/ r

8 k8 {& v6 v. a% w4 M
奔驰通过 Artifactory 实现了统一的依赖管理和集中式的软件包仓库,结合其强大的正反向依赖解析,轻松解决了依赖关系不清晰的问题。Artifactory 的异地同步复制解决了软件包上传和下载的性能瓶颈问题,由于具有缓存机制,使得虽然每天的构建频率增长十倍,但是构建时间却大幅下降。在自研件存储方面,通过 Artifactory 的存储优化节省了大量存储空间,且通过自动清理机制,减少了很多管理成本,也降低了人为操作的风险。
$ K( h+ W, K9 h/ f
' r( \& y- p; J+ x% H6 \9 Q* _
全球分布的研发中心和人员的角色变更,使得权限的管控变得异常复杂,由于 Artifactory 集中管理了所有语言的二进制包,奔驰在使用 Artifactroy 后轻松地实现了对各地研发人员的细粒度权限管控,在团队内共享也可以很方面地控制相关权限,确保始终满足最小权限模型的要求。
2 X2 [6 k2 u  J0 }% F+ Q

& L6 z3 @+ Z" |1 d( e
0?wx_fmt=jpeg.jpg

6 `/ O; R) h" P. t# D6 I8 N
2 t, O, a3 d$ E  Q
9 U- m) ]) s( s' D
从数据我们可以看出,每日构建的次数增长了 10 倍,每周产生的工件也增长了 10 倍,但是存储只增加了 2 倍,存储优化十分显著。最明显的效果是 CI 构建的时间减少了 3600%,这是非常惊人的。当然,这些都是直观的效果,还有一些是潜在的收益,比如新人熟悉整个项目的时间更短了、开发的周期更短、权限控制更加准确,相应地安全性也大幅提升。1 `. z5 ^0 f& k
& r4 \5 c5 G. c& t: I/ u

( {: s1 N; |! y' U1 D  k4 C
总结

7 D2 \" j) S5 u- I

4 C* x0 O/ ^& L2 x
奔驰所面临的挑战在很多企业中都存在,尤其是大型的跨国开发团队。企业级的高可用,多语言的集中式仓库,跨地域的复制分发以及强大的依赖管理功能都是必须要满足的需求,JFrog Artifactory 在奔驰的实践中提供了切实可行的解决方案,实现了 DevOps 的平稳落地,具有借鉴意义。

8 k& d  d; K8 Y+ T( K

: m/ K# I" `, P5 {. _: V
作者:付辉  JFrog 资深工程师

+ m( a" x  v4 k1 f* r- Q( i$ @* l% Z& O0 U, W, M# v

1 @; ?, I. W" ~; \/ T5 T




上一篇:基于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-8-6 08:55 , Processed in 0.107953 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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