小鹏汽车技术中台实践:微服务篇腾讯云开发者社区

小鹏汽车的技术中台(Logan)已经快两岁了,今天我们不讨论该不该做技术中台,只说说中台给我们带来了什么。

不管黑猫白猫,捉到老鼠就是好猫。

技术中台正好契合了公司上述所有需求。在公司的引领和推动下,2018年4月召开了小鹏汽车技术中台的启动会,同年5月底团队成立。技术中台团队始终坚持“兵不在多而在精”的原则,近两年高峰时期团队也未超过10人。

也许有人会怀疑,一支足球队规模的团队,到底能做出个什么样的中台来?

简单来说,小鹏汽车的技术中台主要由以下及部分组成:

接入中台的应用不需要写一行业务代码,可以立即具备以下能力:

对外保证:

如上图,小鹏汽车的技术中台分为微服务中台和云平台两大部分:

历史背景:

鉴于以上原因,开源软件及产品被列入首选,同时结合现实情况及需求在开源的基础上进行功能的扩展开发。只有实在没有选择的情况下,我们才会考虑自造轮子。

部分正在使用的组件:

此外,中台通过自定义的SDK提供对上述功能开箱即用,包含组件的配置调优、Metrics输出、统一日志、框架Bug的紧急修复以及功能扩展。

参考官方的文档,跑个DEMO是很容易的,但是真正在生产级环境中使用又会踩不少坑。

可用性对于车企来说尤为重要,甚至说高于一切也毫不夸张,公司对这一方面也格外重视。

a.服务实例上下线的被发现延迟

使用默认配置的情况下,实例正常上、下线的被发现延迟最大为90s,比如,服务B(提供方)的一个实例上/下线,服务A(调用方)在最长90s之后才会发现。这与Netflix的设计有关:

可通过修改配置缩短上下线的被发现延迟:

b.非正常下线的被发现延迟

上面提到默认配置下被发现的延迟最大是90s。运行过程中不可避免的会出现非正常下线的情况,比如进程被强杀(kill-9),实例来不及通知注册中心进行注销操作就退出了。这种情况下,此实例的信息会存在服务调用方的Ribbon、实例列表中最长达240s。如果是2个实例的话,会有50%的请求受到影响。这同样源于Netflix的设计:

c.自我保护模式到底开不开?

Eureka是基于CAP理论的AP模型,用于保证分区容错性,但这也导致注册信息在网络分区期间可能出现不一致,自我保护功能是为了尽可能减少这种不一致。

自我保护(selfpreservation)是Eureka的一项功能,Eureka注册表在未收到实例的心跳情况超过一定阈值(默认:85%)时停止驱逐过期的实例。

解决了b中的延迟问题,必然会导致自我保护模式不准确。

d.一个深坑

解决了b中的延迟问题,还会带来一个坑更深的坑:极低的概率下,实例启动后本地处于UP状态,而远端(注册中心)的状态持续处于STARTING状态,且无法更新。这会导致实例实际正常运行,而且对服务消费者不可见。

这种情况在Kubernetes环境下尤为恐怖:实例本地状态为UP,健康状态也为UP。在Kubernetes的滚动升级模式下,旧的实例为删除,新的实例正常运行,却对消费端不可见。

注:在技术中台运行一年多,生产环境累计出现的次数不到10次,不是2个实例运行的情况下没有对请求出现影响。

Ribbon大家常听到的就是负载均衡,但是除了负载均衡之外,它还提供容错的能力:重试。

这里有个隐藏的坑,就是加入开启了对所有操作重试的情况下,且出现SocketTimeoutException时,可能会导致一致性的问题:

因为SocketTimeoutException不只是连接超时,还有读取超时。假如一个POST请求会更新数据库,出现客户端的读取超时,但是服务端可能在客户端断开后完成的更新的操作。如果客户端进行重试,则会再次进行更新。

SpringBootTomcat的优雅退出,不知为何官方没有实现,实在匪夷所思。

为什么需要优雅退出?当Spring上下文关闭时,假如有未处理完的请求,不等请求处理完毕就直接退出。从健壮性或者一致性方面考虑,并不是一个好的解决方案。

这也是我们生产中遇到的一个问题,会在凌晨的低峰时段偶发。异常如下:

SpringBoot中通过server.connectionTimeout来设置Tomcat的keepAliveTimeout,如果未设置,则使用Tomcat的默认配置。

大写的但是:Tomcat并没有在响应头部带上Keep-Alive:timeout=60。

可通过增加过滤器–在响应头部增加Keep-Alive的timeout配置的方式来解决。

微服务中台运行于云平台之上,应用的升级模式为滚动升级:对服务进行升级时会先创建新版本的实例,待相应的检查(借助Actuator提供的/health接口)通过后,再将旧版本的实例下线。

小鹏汽车的业务比较复杂,除了主要的Java技术栈之外,还有基于CPU/GPU的Python应用,以及Node.js应用和前端应用。

而中台的出发点是功能的复用,如何让非Java语言的应用使用到中台的能力?

我们的做法是借助Sidecar模式实现基础功能下沉,与应用解耦,将SDK中的功能,下沉到独立进程中。

对于我们运行在Kubernetes上的应用来说,实现这一点就更容易了:在Pod中增加一个Sidecar的容器。

同时Sidecar还给我们带来了意想不到的效果:

当然目前的实现也不是很完美,sidecar的实现,我们用的是spring-cloud-netflix-sidecar。是的,Java的实现很重,对资源还存在一定的浪费。但是战略有了,战术的选择是多样的,比如C++实现的Envoy。

因此当前的方案不只是一次尝试,也是一个布局。

服务的容器化,允许我们在统一了日志格式后,将日志直接输出到标准输出/错误。通过Docker的json-filedriver统一落盘到Node(Kubernetes的工作节点)上。再经由以DaemonSet方式运行采集器挂在日志目录对日志进行采集。

详细的工作方式及调优,请期待云平台实践篇(云平台的能力不仅限于此)。

技术中台同样提供了基于Jenkins流水线(Pipeline)的CICD平台,经历过两个阶段:项目级的流水线和平台级的流水线。

因此我们在后续的演进中进一步将流水线提升到平台级,即平台上的系统使用统一的流水线脚本,脚本保存在GitLab仓库中,并提供版本控制。

借助JobDSL插件,我们将抽象的项目元数据转化为Jenkins作业。在项目注册到平台时,会自动为其创建作业。

每个作业的结构基本一致,包含:

外部对接云平台、Sonar、Nexus以及自动化测试平台。

微服务中台不仅仅是技术上的开发工作,还包括中台的落地,以及打造各种配套的功能设施,比如流程的简化、DevOps还有表面上无法体现的各种优化和修复工作。

作者介绍:

张晓辉:资深码农,12年软件开发经验。曾在汇丰软件、唯品会、数人云等公司任职。目前就职小鹏汽车,在基础架构团队从事技术中台的研发。

THE END
1.5G很屌吗?你肯定会说了:别闹,这不是说胡话吗,看不见?摸不着?还跑的快的没影? 后来人家老头又说了,这玩意不但跑的飞快,还能带着信息跑 大家不信归不信,但是也有少数老头的信徒信了,拿来试了试 这一试,可了不得了,离得老远的距离,这头打一个字,那头马上能清楚的看到了 https://blog.csdn.net/best_xiaolong/article/details/119880691
2.网络安全教育112篇(全文)道路上车辆、行车川流不息,交通十分繁忙,如果我们随意地在道路上玩耍、追逐,把它当成“游戏场”,不仅影响交通,而且非常危险。例如踢足球、溜冰、打羽毛球、放风筝等,不少人不仅在课间休息时间玩,而在上学、放学的道路上也玩。殊死搏斗不知这样非常危险,有时为追赶玩的物品跑向路中,导致汽车驾驶员措手不及,而https://www.99xueshu.com/w/fileyssprtph.html
3.esc故障灯亮点不了火esc故障灯亮。清不了 田贵 4.9 / 已服务车主 4256 次 擅长: 问题没解决,没看懂?来问我吧 咨询 您好,路试来校准是最好的,按照我发的方法去进行就可以了。 2022-12-02 16:52:38 您好,路试来校准是最好的,按照我发的方法去进行就可以了。 您好!很高兴能为您服务。 您好 小贴士:该回复还有https://q.qcds.com/tag-question/cSVEMyVDRjAlMDAlMTMlMDYlRkM
4.汽车技能大赛初赛题库39、汽车在沥青路面上行驶,轮胎气压下降,滚动阻力( ) A、增加 B、减少 C、不变 D、 以上都不是 10、如果汽车行驶中后轴开始出现侧滑,驾驶员应当采取( )可停止侧滑。 A、减速行驶 B、加速行驶 C、向侧滑反方向转动转向轮 D、向侧滑方向转动转向轮 http://www.360doc.com/content/14/1027/17/20057531_420375561.shtml
5.2023年网络攻击事件盘点2月16日消息,一系列网络攻击导致瑞典国家电视广播公司SVT网站无法正常访问。而此前一周内,已有多所瑞典高校、医院和地区行政办公室遭受类似攻击。根据SVT的说法,这可能是一次拒绝访问攻击——一种针对计算机系统的攻击活动,虽然不会造成永久性损坏或访问到秘密信息,但却能限制系统的正常使用以起到重大的干扰效果。 https://www.51cto.com/article/778045.html
6.网络安全课后习题答案(精选6篇)8、据统计,火灾中死亡的人有80%以上属于()。A.被人践踏而死; B.烟气窒息致死; C.跳楼或惊吓致死;D.被火直接烧死 9、下列哪种灭火器不适用于扑灭电器火灾?()A.二氧化碳灭火器; B.干粉剂灭火器; C.泡沫灭火器 10、爆炸现象的最主要特征是什么?() https://www.360wenmi.com/f/file86h2jn2g.html
7.产业结构调整指导目录(2019年本)2、矿井灾害(瓦斯、煤尘、矿井水、火、围岩、地温、冲击 地压等)防治 3、型煤及水煤浆技术开发与应用 4、煤炭共伴生资源加工与综合利用 5、煤层气勘探、开发、利用和煤矿瓦斯抽采、利用 66、煤矸石、煤泥、洗中煤等低热值燃料综合利用 7、管道输煤 https://www.cnjx.gov.cn/News/show/1241848.html
8.www.krszf.com/aplhtml77327.htm他有自己的工作节奏,进组频率并不低。但还是会主动空出一些档期,回家陪伴家人。张若昀真的挺顾家的,在剧组就认真拍戏,下了工后就跟妻子孩子打视频聊天,还从撺掇妻子领着孩子来剧组探他的班。张若昀前阵子去给动画电影《狮子王2》配了音,是给影片中的辛巴之父“木法沙”配音,已经定档下旬上线,目前正在宣传了。https://www.krszf.com/aplhtml77327.htm
9.车路云概念彻底火了!最新研判这些投研人士认为,“车路云一体化”技术在智能网联汽车行业的应用前景非常广阔,并随着5G、人工智能、大数据等新技术的快速发展,相关技术也在不断创新和完善,给资本市场带来巨大投资机遇,车与路的通信OBU、车内通信T-BOX、网关等产品或会先受益。 “车路云一体化”应用前景广阔 https://wap.eastmoney.com/a/202407143130516315.html