只会 CRUD?滴滴这 DDD 架构建设方案太强了!支持 iOS/Android/网页多种终端

实时数仓:以滴滴出行的实时数仓架构为例,其整体数据架构和所用组件的详细说明 滴滴的实时数仓架构中,通过 Kafka 解耦上下游,Flink 进行流式处理,HBase 和 Doris 作为存储核心,Redis 提供快速查询,形成了从采集到服务的闭环,满足了实时性和高效性的需求。这种架构在类似的高并发、高实时性场景中具有很强的参考意义。假设滴滴的订单业务需要实现一个。 阅读详情
AI摘要

文章讲述了滴滴网约车服务端在面对渲染类需求迭代效率低下的问题时,通过分析问题、提出解决思路,最终实现组件、功能接入和数据的标准化,构建跨端统一渲染平台的过程。湾流平台经历了从单体服务到DDD拆分,再到DuKang框架的演进,以提高开发效率和代码复用性。在面临多端一致性、渲染逻辑管理和数据看清等挑战时,通过组件标准化、功能接入标准化和数据标准化来改进,建设了渲染网关、组件管理平台和功能管理平台等工具,以提升研发效率和数据管理能力。

导读

由于网约车业务本身的复杂性以及我们垂直式的领域化架构约束,网约车服务端技术团队在对端渲染业务需求的迭代过程中,碰到了一系列的问题,影响了研发效率。本文从这些具体问题入手,分析产生的原因,介绍我们的解决思路和方案,以及方案的建设落地过程。

1. 服务端架构演进回顾

过去几年,滴滴网约车为了满足不同用户的个性化出行需求,逐步推出了越来越丰富的品类和功能。随着品类功能的不断增加,我们系统的复杂度也越来越高,为了应对这一挑战,网约车服务端技术团队构建了一个「出行平台」,内部又称湾流平台。湾流平台的演进主要经过了以下几个阶段。

湾流平台1.0(2017-2018)

在1.0阶段,滴滴网约车的主要业务重心是丰富品类,为用户提供更多选择,其中包括专车、豪华车、优享等。在这个阶段,湾流平台还是一个单体服务,主要面临的挑战是如何快速新增品类并支持多品类之间的差异化开发。

为了应对这些挑战,我们引入了配置化和插件化。配置化使得新增品类可以快速上线并进行复用,提高开发效率。插件化则能够隔离不同品类之间的差异逻辑,确保各品类的独立性和灵活性

9a0ca6881a2353105d3b4bfb03730146.png

湾流平台2.0(2018-2020)

在2.0阶段,随着品类的不断丰富和个性化功能的增加,开发团队也不断壮大,系统规模逐渐庞大,但日常的迭代效率和稳定性出现了明显下降。为了解决这些问题,我们从两个方向对湾流平台进行了改造。

首先,按照领域驱动设计(DDD)的思路,对单体服务进行了拆分,降低整体系统的复杂度,同时也解决了团队成员并行开发导致的上线冲突和排队的问题,提高了开发效率。

23c4d610d530d20e2b920e87e36f1be1.png

其次,在领域服务内部,我们进行了功能的聚合和抽象,通过将具有相似功能的业务进行聚合,并对其进行抽象,可以避免功能的重复开发,进一步提高了开发效率和代码的可维护性。

67f37624fb85263dfe49d2029bb3c17d.png

湾流平台3.0(2020-至今)

在3.0阶段,我们开发了一套名为DuKang的业务框架,它将API的业务逻辑分为两个层次。首先是流程层,用于串接状态流转,提供了通用的流程实现,不同的品类可以根据自身需求定制自己的流程,以满足差异化的业务要求。

其次是能力组件层,负责完成各个垂类功能。组件内使用策略模式实现不同的行为,例如播单组件内部提供了延迟播单、实时播单等不同方式,不同的品类可以根据自己的需求选择适合自己的方式。同时,组件也支持插件机制,可以让品类注入独有的模式。

通过Dukang框架,我们能够有效约束各服务系统的实现,保持统一的规范,让不同的领域服务可以复用能力组件,提高开发效率和代码的复用性。

978ffd2064c761e50360a6668cb4825d.png

湾流平台详细的建设思路,可以参考之前的文章「滴滴出行平台业务架构演进」,系统的架构简单示例如下:

8501402d791865893c08be5cb5793b28.png

2. 新问题和挑战

在讨论新问题挑战之前,我们先统一一些基本概念。

  • 页面:指用户在终端上看到的整体区域,包含各种UI控件,例如打开app看到的乘客首页、司机接单后赶来的等待接驾页等。

  • 组件:页面中独立展示的功能区块,通常具有特定的业务属性,例如下图的小助手组件,主要用于展示当前场景下的一些重要业务提示和部分营销活动。

  • 模板:组件内的不同UI展示样式,依赖于组件的定义和存在。

  • 功能:表示一些具体的业务场景,例如保障车队功能、自选车功能等。

  • 数据源:提供组件渲染数据的后端服务接口。

7aa63f61b735b8bf4245af5eedd07b6f.png

在湾流平台的持续建设过程中,渲染类需求的迭代效率始终上不去,经过进一步的深入分析,我们发现虽然领域服务能够通过能力层实现功能逻辑的复用,但在做对端的渲染逻辑时出现了一些问题。不同位置的组件是由不同领域服务负责的,而这些领域服务各自有自己的渲染规范,因此,同一个功能想要在不同组件上进行展示时,就需要按照这些组件的渲染规范进行适配,例如有的组件要求直接通过接口返回渲染数据,而有些则要求在平台上进行数据配置,这就导致一个功能在渲染对接上需要花费大量成本。同时,除了服务端系统内部的问题外,还有一些外部沟通协作、数据开发等挑战。

下图是当前系统内渲染处理现状,具体的问题可以结合下图进行讨论。

9920ff1c57ab8bc227aaef693005f5e2.png

多端问题

滴滴涵盖了多个终端,包括Android、iOS和小程序等。由于我们划分了不同的领域服务,每个领域服务都需要直接向终端提供相关展示数据,例如,售卖领域服务提供首页相关数据,交易撮合领域服务提供等待应答页的相关数据等。然而,这就导致了所有领域服务需要同时与所有终端进行对接,增加了沟通和协作的成本,影响迭代效率。

同时,网约车产品在大多数情况下要求多终端的体验保持一致,然而,由于各端独立开发和实现,又没有地方统一进行管控,导致不一致的问题经常出现。例如,相同的标签展示内容在长度超过限制时,iOS会截断展示,而Android则采用跑马灯展示等。多端实现不一致同样也会影响我们的迭代效率,例如当产品希望对线上展示内容进行动态更换时,由于各端实现不同,导致动态化能力参差不齐,产品不得不针对各端进行差异化实现;还有同一个功能上线后,由于各端埋点实现不一致,收集的数据差异很大,每次都需要排查原因,甚至需要为不同端制定不同的数据分析策略。总之多端一致有利于产品体验的提升,也能提升效率。

渲染逻辑管理困难

端上的组件位置是有限的,但是功能却是不断累积的,这导致在一个组件上需要根据不同的业务场景,展示不同的内容。经过统计,一些热点组件上,拥有四五十种展示形式,上百种展示场景,面对如此复杂的情况,流量分发、优先级排序等管理十分复杂,而且所有的领域服务都需要重复实现这些复杂的逻辑,存在大量的重复工作。

bff7130dd34896e5158cae4245b1f4aa.png

功能跨流程接入难

有很多功能需要在全流程进行透出感知,比如拼车权益卡,在冒泡、等待应答、行程结束等很多阶段都需要进行感知透出,这些阶段的页面由不同的领域服务处理,这些服务又归属于不同的团队,在渲染接入上都有自己独立的一套规范,导致拼车权益这样一个功能接入跨流程的展示时,需要和不同的领域服务进行对接,而且需要进行逐一适配,接入成本很高。

4cc5bd971cdfa1c3061fcaa82aaab2be.png

数据看清难

各个组件的前后端埋点都是由不同团队的开发同学进行自定义实现,缺乏统一的规范,下图以拼车权益示例,可以看到,虽然各个位置都有埋点,但是大家的规范都不一样,想要把这些数据串起来非常的困难,每次要看数据时,都需要数据产品单独提需求进行开发实现,周期长,成本也很高。

75d9fc905cbdae20f4698b3f1a6e18d3.png

以上就是我们在渲染上遇到的一系列问题,从上面的问题中可以看到,当前架构中最核心的问题,是系统各个层级间缺乏统一的渲染标准和规范,导致出现了很多的重复工作以及相互间信息打不通,主要可以归纳为这三个方面:

  • 前端 & 后端 :如何构建统一的组件认知,如何保证多端一致,如何减少多终端的协作成本。

  • 后端 :如何管理组件内复杂的功能展示逻辑,如何保证单一功能在全流程进行感知时,可以快速接入。

  • 数据 & 前端 & 后端:如何建设统一的前后端数据规范,如何快速看清数据

3. 解决思路

解决这几个问题的核心思路是进行标准化,通过不同层次的标准化配合,形成一套统一的跨端渲染平台,详细的方案思路如下所示。

组件标准化

组件标准化的思路是将我们页面按功能模块划分成不同的组件,然后对这些组件进行UI规范和数据交互协议的统一,各端再根据统一的UI规范和交互协议进行组件的开发,同时在研发流程和研发模式上进行管控,让各终端架构层面保持统一,尽可能地实现各端体验的一致。针对多端实现一致的问题,Android和IOS也在探索跨端技术等方式,本文不对此展开。

有了这些多端统一的标准化组件之后,为了实现组件的复用以及减少终端和后端的沟通协作成本,我们建设了组件管理平台和渲染网关。终端研发在管理平台上对页面进行配置,配置页面上有哪些组件,这些组件通过什么样的形式进行布局,组件的数据从哪来等等。有了这些配置之后,终端进行页面渲染时,不再和各个组件下游服务交互,而是和渲染网关进行交互,渲染网关会根据终端传入的页面标识,在配置后台拿到对应页面的配置,代理请求下游服务,拿到各组件的数据统一进行下发。通过这样的形式,可以有效地减少终端和各后端的沟通协作成本,同时这种标准化构建的组件,可以很方便地进行跨页面的复用,提升迭代效率。

组件标准化除了对开发的收益之外,对产品业务同样有很大的帮助,之前的产品迭代过程缺乏集中的沉淀,导致每次新功能需要做展示时,即使展示样式跟之前的功能很类似,但由于没有地方查阅,依然会找UI重新设计,研发重新开发实现。这也是导致一个组件上展示样式爆炸式增长的主要原因。进行标准化之后,产品业务能够在平台上看到组件上当前所有的展示样式,新功能可以选择复用之前的模板,提升研发效率,同时也能集中对组件和模板进行管控,保持体验的统一。

通过组件的标准化,整体的需求开发模式变成了如下的形式:

d7346d0760a618ab2dfa0d05ef2198f6.png

组件标准化建设过程,主要是渲染网关和组件管理平台的建设,下面重点展开介绍下这两部分的详细方案:

渲染网关

渲染网关主要提供了两个接口,layout接口和data接口,layout接口负责下发页面的布局信息,包括页面的一些静态配置以及有哪些组件等信息,data接口则负责获取组件渲染所需的数据。在实际运行过程中,考虑到性能和体验的问题,在layout接口,会将核心组件的数据也进行返回,端上拿到layout的数据之后就能够进行页面的渲染,对于页面上一些非核心可异步加载的组件,端上在拿到layout数据后,会再请求data接口获取这些组件的数据。详细的交互如下所示。

4323dc54341de47ee46b4d8bd7306e85.png

组件管理平台

组件管理平台主要是提供一个配置后台,管理组件相关的内容,主要功能包括:

  • 页面管理,管理页面标识和页面组件关系等,可以在页面管理里配置对应页面包含哪些组件,并且可以进行一些组件实验和灰度的配置,页面也提供了版本管理的能力。

  • 组件管理,对组件进行定义,并且对组件的模板进行管理,包括模板的UI规范、IDL交互协议等。

  • 数据源管理,对下游数据源进行注册、参数映射转换等,组件在注册到页面时会配置对应的数据源,这样网关就能根据配置直接代理请求拿到组件数据。

  • 组件全景图,为产品业务打造的组件视图,业务和产品可以在上面追踪到当前app有哪些页面,每个页面上是由哪些组件组成,每个组件上支持哪些展示样式,也能看到有哪些功能会在这个组件下进行展示,这些功能的流量是如何分配的。

8b14515855f3234471fdfcfb7cd9a529.png

除了上面提到的核心管理能力外,管理平台在开发体验上也提供了一些能力,比如多版本功能,可以实现类似git的多分支并行配置开发测试;网关接口文档和mock能力,由于所有组件交互协议是托管在平台上的,平台会基于此实现接口文档和下游组件数据的mock功能,提高开发联调效率。

功能接入标准化

功能接入标准化的主要思路是统一一套标准的渲染处理逻辑,不同领域服务进行接入使用,这样不仅能够减少领域服务间的重复建设,也能够让功能接入方式统一,不再需要进行适配。为了统一渲染处理逻辑,我们在Dukang框架基础上扩充了渲染框架能力,将渲染流程固化为上下文构建->功能过滤->功能决策→功能渲染。其中上下文构建是组装渲染所需的必要上下文数据,功能过滤是根据地域、时间、品类等规则过滤掉当前场景下不展示的功能,功能决策是对剩余的功能进行优先级排序,选择最终展示的功能,功能渲染则是选中的功能进行数据的填充。除了渲染框架以外,我们还沉淀了一些标准可复用的能力,比如开城、白名单、物料管理等等,这些能力的相关配置我们统一建设了功能管理平台进行集中管理。

下面介绍下渲染框架和功能管理平台的详细建设方案。

渲染框架

渲染框架主要思路是通过一套统一的功能执行流程,对功能进行标准化约束,框架限定了功能的执行流程依据上下文构建->功能过滤->功能决策->功能渲染,框架约束的只是执行流程,具体逻辑依然是相关功能闭环实现。比如功能过滤,如果只是简单的开城过滤,业务方可以直接使用标准的开城能力;如果有一些不能抽象的复杂策略,业务方可以在自己的包中编码实现。这样既能保持功能的标准化定义,也能保持业务的灵活性。

57f6531ceeb8dd97b70b84333fee5c2a.png

功能管理平台

功能管理平台主要提供功能管理能力,平台的主要功能如下:

  • 功能展示策略配置,结合沉淀的城市、品类、场景等展示规则,配置不同功能对应的展示策略

  • 功能优先级配置,配置组件下功能间的优先级,优先级支持多个分组,比如不同城市,优先级可能是不一样

  • 功能文案物料配置,配置对应功能展示所需的文案以及相关物料,这部分由于不同功能的配置方式差别很大,我们结合了内部的一个通用配置平台实现,在通用配置平台上,rd先根据实际需求,进行功能的文案和物料的配置模板开发,功能管理平台和该通用配置平台打通,将对应的配置页面集成进来,形成统一的配置平台。

  • 功能全链路视图,该视图主要提供给产品业务使用,之前由于缺少统一的规范和沉淀,一个功能在哪些地方进行了透出,各个地方的效果转化如何,很难在一个集中的地方看到。通过我们的标准化之后,我们可以提供功能的全链路视图,方便的看到每个功能在哪些组件上进行了透出,对应的流量分布是怎样的,转化漏斗如何等等。

03da41aa931bf1b9ac6c14359b971d9b.png

数据标准化

对组件和功能接入进行标准化之后,数据标准化就水到渠成了,我们只需要在每个阶段的日志中,记录前面定义的页面、组件、模板、功能等唯一标识,同时打通数据链路,按照统一的规范进行数据上报、采集、清洗和聚合,就能够形成一套标准的数据方案,在后面的功能开发过程,不需要再进行额外的数据开发,根据组件或功能的标识就能够看到需要的数据。

埋点协议统一

埋点协议统一的核心就是让不同服务的埋点信息能够聚合起来,只要大家采用一套固定协议,约定好聚合的字段,通过数据采集清洗等步骤进行聚合,就可以实现数据的统一。我们制定了前端上报、网关下发日志、数据源服务日志等一系列的协议,统一了页面、组件、模板和功能等标识。整体的思路如下所示,通过平台统一管控埋点统一配置,各个服务利用sdk的方式对上报埋点进行统一。

2213cf5b98aeb24a5c760a1227213e73.png

数据链路打通

打通从终端到后端服务的数据链路,通过标准的协议,将数据聚合到统一的数仓中,进而形成统一的数据看板。主要数据链路示意如下所示:

c961fd2c3f7400c7c9de6abab7280e5a.png

总结

综上所述,我们通过组件、功能接入和数据的标准化,完成了整个跨端统一渲染平台的建设,目前该平台还在持续建设推广中,渲染网关、组件管理平台、渲染框架、埋点规范等已经建设完成,功能管理平台、数据链路还在建设中。当前该统一渲染平台已经接入了20+页面,未来将继续覆盖到所有的渲染场景。

平台的整体的系统架构图如下所示:

38b9b7a7d7c27b54247c0f773648c1d4.png

ed8a0e0dc77061236fd5363c1f1b8df0.png

END

作者及部门介绍 

本篇文章作者吴俊,来自滴滴网约车出行技术团队,出行技术作为网约车业务研发团队,通过建设终端用户体验平台、C端用户产品生态、B端运力供给生态、出行安全生态、服务治理生态、核心保障体系,打造安全可靠、高效便捷、用户可信赖的出行平台。

招聘信息

团队后端、测试需求招聘中,欢迎有兴趣的小伙伴加入,可以扫描下方二维码简历直投,期待你的加入!

研发工程师

岗位描述:

1. 负责相关业务系统后台研发工作,包括业务的架构设计、开发,控制复杂度,提升系统性能和研发效率;

2. 有业务 sense,通过不断的技术研究和创新,与产品、运营一起快速迭代提升业务的核心数据。

3e708a6964a1b67857632d8410d21b82.png

测试开发工程师

岗位描述: 

1. 构建适用于网约车业务的质量保障体系,制定并推进相关质量技术方案落地,持续保障业务质量;

2. 深入了解业务,与业务中各角色建立沟通,总结业务问题与痛点,全方位为业务创造价值,工作不设固定边界;

3. 通过应用相关质量基础设施,提升业务代码质量和交付效率;

4. 沉淀高效测试解决方案,并能提供通用化方案,支持在其他业务线落地应用;

5. 解决业务质量保障中的难点问题、复杂技术难题;

6. 质量技术领域前瞻性探索。

c844aaf0a952d6c6c5aebb41c148e371.png

网约车系统架构设计与实现的实践总结 设计和实现一个高效、稳定的网约车系统需要考虑到系统架构设计、用户端和司机端开发、位置追踪与路线规划、订单管理与调度、支付与结算,以及安全性与隐私保护等多个方面。通过合理的架构设计、优化用户体验和功能完善,可以构建一个满足用户需求、提供优质出行服务的网约车系统。网约车系统需要实时追踪用户和司机的位置信息,并进行准确的路线规划。网约车系统中涉及到用户和司机的个人信息,因此安全性和隐私保护是重要考虑因素。系统应采用加密技术保护数据的传输和存储安全,并遵守相关法律法规,严格保护用户和司机的隐私。 阅读详情

相关推荐

Android 下一代架构指南:DDD

Presenter 与 View 为一对一的方式,就像一块蛋糕(View),指派给一个厨师(Presenter)去制作,但是厨师一个人需要做的事情太多,他需要亲自加工食材(Model),再将这些材料一一装饰在蛋糕上面,如图 4 所示。基于 DDD 的思想,新闻客户端实现了一套包含 UseCase 的基础框架,划分出了领域模型,由于视频详情页由多 Fragment 组成,技术团队还加入了共享变量层,使拥有统一生命周期的组件之间能解耦传递数据,重构后的视频详情页整体架构如图 8 所示。

垂天云的专栏 1296

滴滴出行平台业务架构演进

桔妹导读:为了满足不同用户在价格、体验等方面的差异化诉求,滴滴提供了越来越丰富的品类,这些品类大体流程是类似的,在一些细节体验上有差异,一套架构如何兼顾隔离和复用,同时支持这些品类,且看滴...

DiDi_Tech的博客 1万+

基于AI与车机技术的简易滴滴出行系统设计与实现

订单的状态流转是一个典型的有限状态自动机(Finite State Machine, FSM)模型。在滴滴系统中,常见的主状态包括:CREATED:订单刚被创建,尚未进入派单池:等待司机接单:已有司机接单但未出发:司机已到达上车点并开始行程COMPLETED:行程结束,费用结算完毕:各类取消状态FAILED:系统异常导致订单失败这些状态之间并非任意可跳转,而是遵循严格的业务规则。

weixin_32661831的博客 1453

分布式架构网约车平台后端原型系统设计与实现

实体设计较为简洁,包括顾客,请求订单,订单,司机,司机评价,司机请求订单。司机可有个司机评价,多个订单,多个请求订单。用户上车后形成订单,用户到达目的地,司机提交费用,用户支付后订单结束,订单可查询。一年内注册用户数可达5000万,日均订单800万,高峰时段每小时200万订单。用户可以查看接单司机的评价,在订单完成后可以对接单司机进行评价。系统向距离用户较近的若干个司机发送约车信息,司机自行选择接单。司机可以设置开始/结束接单,用户可以发起/取消约车请求。包括普通用户和司机的注册、登录、退出。

毕业作品网站 3082

SAP中MRP运行计划行超限问题的分析与解决

SAP中基于生产性物料的采购特点,通常会采用采购计划协议的方式进行采购。其具体的采购计划通常来自于成品计划独立需求,然后通过物料清单,经由MRP跑出。 在采购计划协议中的计划行中,存在一个计划行号,随着MRP在不断跑出新的计划行,该行号资源会消耗完。当计划行号消耗完后,MRP不会再跑出新的计划行。且在MD04或MD02中看不到类似提示信息。此时可以通过MD05来查看是否出现类似下图的提示信息。 ...

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 3845

手把手教你用Gazebo和VINS-MONO搞定VIO SLAM仿真(附Realsense D435i模型配置)

本文详细介绍了如何使用Gazebo和VINS-MONO构建VIO SLAM仿真环境,包括Realsense D435i模型的配置与集成。通过实战指南,帮助开发者快速搭建高保真仿真平台,优化VIO性能,并解决常见问题,适用于机器人感知与定位导航领域。

weixin_30682415的博客 159

APIJSON 零代码接口与文档:JSON 网络传输协议与 ORM 库实战指南

> **导读**:本文以 APIJSON 中文主文档([README-Chinese.md](https://link.gitcode.com/i/242956a305db80dd304299e82ea21e65))为核心,系统讲解这套"专为 API 而生的 JSON 网络传输协议 + ORM 库"的完整玩法——从七种自动化通用接口、全套功能符语法,到权限校验、远程函数定制、源码级解析与 SQL

gitblog_01179的博客 309

相机光学(三十八)——VCM(Voice Coil Motor)音圈马达

VCM(Voice Coil Motor)音圈马达全称Voice Coil Montor,电子学里面的音圈电机,是马达的一种。因为原理和扬声器类似,所以叫音圈电机,具有高频响、高精度的特点。其主要原理是在一个永久磁场内,通过改变马达内线圈的直流电流大小,来控制弹簧片的拉伸位置,从而带动上下运动。手机摄像头广泛的使用VCM实现自动对焦功能,通过VCM可以调节镜头的位置,呈现清晰的图像。弹片式结构滚珠式结构摩擦式结构Open loop开马达Close loop闭环马达。

图像学习之旅 7224

滴滴:网约车订单自助测试演进与落地实践

订单测试演进至今,在各个业务团队的协同合作下,在效率和可用性方面有了阶段性发展。赋能测试左移自助测试降低订单测试构造成本,让业务同学可以快速的构建的订单测试场景,实现问题的提前发现,助力测试左移,在流程中订单测试需要打通环境准备、测试集成、结果反馈、实现无感知的全流程订单测试。智能场景构建进一步通过线上流量分析,场景数据回放等实现测试场景的智能化构建,降低场景构造成本,实现一键式场景链路搭建验证。

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。 1144

【COMSOL】将一个面上数据导出CSV或txt格式的方法

在COMSOL中参数化扫描后,把一个面上或体里的数据按照CSV或TXT格式导出的方法。

dave496206的博客 2992

宇树GO2-YOLOv5在Jetson Orin上的部署避坑实践

本文详细记录了在宇树GO2四足机器人搭载的Jetson Orin平台上部署YOLOv5目标检测模型的完整实践过程。文章重点分享了从ARM架构认知、网络连接解决方案、Archiconda环境搭建、PyTorch版本精准匹配到依赖安装与性能验证的核心步骤与避坑指南,旨在帮助开发者高效完成边缘计算环境下的算法部署。

app77的博客 670

滴滴数据中台、海外架构、客户端性能优化等技术分享

滴滴出行在系统架构、客户端性能优化、安全准入、国际化业务架构、数据中台方面,有深厚的技术积累。2019年12月6-7日,在北京举办的ArchSummit全球架构师峰会上,滴滴出行技术副...

DiDi_Tech的博客 1778

2019年7月28日解决战网BLZBNTBNA00000005BLZBNTBNA00000006BLZBNTBTS0000005DBLZBNTBTS0000004A 007D0 008A4 00840

Blizzard—Battle.net—2019年7月28解决战网BLZBNTBNA00000005BLZBNTBNA00000006BLZBNTBTS0000005DBLZBNTBTS0000004A 007D0 008A4 008402019年7月28日再次更新写在前面■■■ 排查网路问题 ■■■■■■ 排查电脑自身问题 ■■■■尝试重置internet设置■网络的设置和防火墙规则■如果还是不...

MCGC高质人类协作会-MCG贴吧 3万+

滴滴时空供需系统的设计和演进

本篇文章分为:1.背景介绍2.系统框架的演进2.1 旧系统框架的不足2.2新系统框架的优势3.系统建设思考3.1 存储治理3.2性能优化3.3 研发提效:配置化能力升级3.总结1.背景介绍时空供需系统(SDS, supply and demand system)是为了满足滴滴网约车业务中供需特征需求而设计和研发的系统。可以在空间(地图网格、区县、城市)...

DiDi_Tech的博客 6314

jemalloc实战:5分钟搞定C程序内存泄漏检测(附PDF报告生成技巧)

本文详细介绍了使用jemalloc的heap profiling功能快速检测C/C++程序内存泄漏的实战方法。通过预编译库和LD_PRELOAD注入,无需修改代码即可启动低开销剖析,并利用jeprof工具进行深度分析和生成可视化PDF报告,帮助开发者高效定位线上或开发环境中的内存问题。

i3j4k5的博客 226

10、使用Ray Serve实现微服务与模型部署

本文深入介绍了如何使用Ray Serve实现微服务与机器学习模型的高效部署。从基础的部署定义到复杂的模型服务场景,涵盖部署架构、HTTP与Python调用、资源配置、FastAPI集成、金丝雀发布策略及实际应用流程。文章还探讨了模型服务的关键需求如灵活性、批处理、硬件优化和可扩展性,并展示了Ray Serve如何满足这些要求。最后提供了常见问题解决方案与未来发展方向,帮助开发者构建高性能、易维护的模型服务平台。

blue42的博客 176

构建滴滴业务中台:系统架构设计探索

**安全性和隐私保护:** 中台系统涉及大量用户数据和交易信息,需要采取严格的安全措施和隐私保护机制,确保数据的安全性和完整性。- **高可用性和容错性:** 中台系统需要具备高可用性和容错性,能够应对突发流量和系统故障,保证业务的稳定运行。- **扩展性和灵活性:** 中台架构需要具备良好的扩展性和灵活性,能够根据业务需求快速调整和扩展系统规模和功能。- **业务中台:** 包括订单管理、支付结算、用户认证等业务中台服务,提供业务逻辑的统一执行和管理。### 1. 中台架构概述。

qq_33665793的博客 1628

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

快的打车架构实践

快的打车从2013年年底到2014年下半年,系统访问量迅速膨胀,很多复杂的问题要在短时间内解决,且不能影响线上业务,这是比较大的挑战,本文将会阐述快的打车架构演变过程遇到的一些有代表性的问题和解决方案。LBS的瓶颈和方案先看看基本的系统模型,如图1所示。 图1 系统模型示意图 司机每隔几秒钟上报一次经纬度,存储在MongoDB里; 乘客发单时,通过MongoDB圈选出附近司机; 将订单通过长连...

博客 1104

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

交通 | 网约车系统:框架与回顾

为实现上述目标,平台决策包括:对乘客的定价和促销、对司机的工资和激励、匹配和订单调度、搭乘分配和分钱、空车的引导和重新定位、信息共享和评级等。在该综述中,作者总结了有关网约车系统的重要研究问题,从不同角度全面回顾了有关这些问题的不同领域的文献,包括 (1) 需求与定价,(2) 供给与激励,(3) 平台运营,以及 (4) 竞争、影响和监管。为了提高网约车系统的性能和效率,需要研究的问题包括预计到达时间的预估、匹配和订单调度、拼车问题、空车引导和重新定位、信息共享和披露以及评级机制等。具体分类如下表所示。

weixin_53463894的博客 982

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

滴滴跨端渲染平台的建设方案及落地

导读由于网约车业务本身的复杂性以及我们垂直式的领域化架构约束,网约车服务端技术团队在对端渲染业务需求的迭代过程中,碰到了一系列的问题,影响了研发效率。本文从这些具体问题入手,分析产生的原因,介绍我们的解决思路和方案,以及方案的建设落地过程。1. 服务端架构演进回顾过去几年,滴滴网约车为了满足不同用户的个性化出行需求,逐步推出了越来越丰富的品类和功能。随着品类功能的不断增加,我们系统的复杂度也越来越...

DiDi_Tech的博客 1570

滴滴出行的数据架构和信息流处理思路解析

截止到今年7月,滴滴注册用户已超过5.5亿,年运送乘客达100亿人次,每日处理数据4875+TB,日定位数超过150亿,每日路径规划请求超过400亿次。 面对庞...

<sdffdsfsdfdfs>sfsfsfsdfsdffds</sdfsDS>Fsd 1434

Android领域驱动设计与分层架构实践

领域驱动设计是一种软件开发方法,强调以业务领域为核心,通过统一语言(Ubiquitous Language)和领域模型来表达复杂的业务逻辑。领域驱动设计与分层架构为Android应用提供了清晰的结构和职责划分。虽然初期投入较大,但对于复杂业务场景,它能显著提高代码的可维护性和可扩展性。关键在于根据项目实际情况灵活应用,而不是教条式地遵循所有DDD原则。希望本文能为你在Android项目中应用DDD提供有价值的参考。实践过程中,建议从小规模开始,逐步迭代优化架构。

专注于移动开发的干货分享。提供高效解决方案、避坑指南与前沿技术解析。为开发者创造价值。 673

网约车系统架构全解析

网约车系统是一种典型的分布式高并发应用,涉及用户端、司机端、订单匹配、支付、实时定位等多个模块。其核心架构通常分为前端、后端、数据库和第三方服务集成四大部分。系统需要处理高并发请求、实时数据同步和复杂的业务逻辑。

uk5ltx6j的博客 790

滴滴到底是怎么计费的?滴滴计价系统架构首次揭秘

桔妹导读:计价是出行业务中非常重要的一部分。在滴滴,不同的业务有不同的计价方式,比如网约车不仅有根据里程、时长、时段等进行的分时计价,在拼车、特惠快车等场景还支持一口价,青桔则主要基于起...

emprere的博客 6796

领域驱动的Android开发

我们首先定义一个Coupon类,它是一个实体(Entity)。实体代表我们领域的主要概念。每个实体的实例都有唯一的标识。我们可以通过id属性来识别Coupon。除了实体(Entities),我们的模型还可以包含值(Values)。与实体不同,值没有标识和生命周期。每个实体由值或其他嵌套实体构建。在Coupon中,我们没有任何嵌套实体,只有值(Values)。当值(Value)有多个字段时,我们可以使用数据类(data class)来表示它。对于只有一个字段的值(Value),Kotlin提供了很好的值类(

chuyouyinghe的专栏 261

android滴滴技术架构,滴滴乘客端Android架构解密_何斌斌.pdf

滴滴出行乘客端Android架构解密何斌斌乘客Android负责人自我介绍自我介绍自我介绍滴滴出行乘客端Android负责人十余年移动终端经验拥有Android驱动、Framework、Application等多方向研发经验负责滴滴出行客户端公共基础、网约车等产品线研发何斌斌hebinbin@01 滴滴出行乘客端挑战目录 ...

weixin_39599081的博客 536
上一篇: 分布式存储的七方面问题
下一篇: 石墨文档Websocket百万长连接技术实践
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值