您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。 [2023第十二届全球TOP100软件案例研究峰会]:高德-福辰-高德云原生架构变革与演进 - 发现报告

高德-福辰-高德云原生架构变革与演进

报告封面

“职位:高德地图-高级技术专家(技术服务平台架构师) 过往经历:曾就职于滴滴、360、赶集网等公司 开源贡献者:RSocket-go、Reactor-go、Stable-Diffusion-webui、Stable-Diffusion-webui-Controlnet… 工作内容:负责部门架构改造和中间件&基础服务开发 项目重要经历: •359行交易业务•异地多活-交易单元化•行业无关化架构–低代码之乐高2.0•风控&资损•… 姓名刘金龙(福辰) •云原生生态落地–Serverless&Mesh•稳定性保障•…” 主题SUBJECT 架构优化/生态&架构变革•Go生态 •云原生生态–Serverless&mesh(简)•架构优化升级 目标:提效&降本 大团队要求:切云原生架构,大量的Serverless架构应用涌出,本质是降低研发门槛。 核心:开发简单,支持多云架构 后续AllINDapr生态,打造MultiRuntime基座(涵Mesh),解决东西流量异构和工具治理的问题,最终融合边节点 未来:可控 南北流量&边缘节点 •可以通过类似Envoy的数据面来管理•未来自研LeapMesh(异构语言VM->Filter),路线:由边缘工具->Gateway->Ingress •可通过部署类似Dapr的Sidecar进行通讯(MultiRuntime工具集合) 东西流量 解多语言访问中间件: 内聚在业务中的中间件访问,可下沉到Sidecar中 如TDDL的访问,基于dapr-like可在本机暴露为标准MySQL协议,nodejs/python/c++等服务就可像连接本机MySQL一样访问TDDL库等 359行,行行不一样 面向359行行业无关化架构设计 1、强大的编排能力:支持串行、分支、并行、父子流等 3、任务自动恢复防丢失(即使服务器重启或者无故宕机也可自动恢复);支持租户隔离;支持针对不同的流程配置线程池大小,避免流程间相互干扰;支持自动重试和自动跳过等 4、高性能:强大的分布式调度策略确保高效的调度能力;同时核心读写操作全部基于缓存层实现;未引入任何事务,所有核心逻辑都支持幂等性保证 359行,业务体量大,出问题受损严重 •痛点:核心业务依赖机房,无法做到真正的容灾,具备快速恢复自愈的能力 •目标:建设一种通用的交易容灾架构,让核心业务具备异地容灾(单元化)的能力,故障快速恢复的能力•名词:异地多活 •同城双活 •伪双活的单边架构•主库机房出问题依然会影响全量业务,灾备切换时间较长•依然受地域资源限制和重大自然灾害影响,比如地震、电力限制 核心:快速自愈,影响面最小 •异地冷备 •纯冷备,资源严重浪费•日常不跑流量,不敢切流•即使切流,没有任何预热也很难扛住 •单元封闭✅ •数据单元内闭合,读写均走当前单元•依然受地域资源限制和重大自然灾害影响,比如地震、电力限制 •疑难杂症 •距离导致的网络时延是物理限制,不可能突破•多次跨地域的调用会严重影响服务RT,导致用户体验严重下降•网络时延对数据一致性是巨大挑战,要写业务多活更是难上加难 大胆假设:类似分库分表思路,业务数据需要进行分区治理(Shard)? 异地多活,单元封闭 单元划分模式:•Unit:即所有读写流量在单元内完成,有异常不会影 响其他单元。随时切流✅•Copy:读流量走单元服务,写流量走中心服务。单元切流无异常,中心服务出问题,整体都会出问题 数据一致性:•做到演练态不丢数据,做到容灾态数据可修复等 •对于数据不一致给出确定性的结论,在真正故障时多少用户、多少订单会不一致,会造成多大的资损等 单元化 •统一配置管控•单元内封闭•服务可见性•支持压测•支持灰度 Serverless-FaaS问题 C++ Runtime遇到的问题: 存储模式:(解决:自定义配置) 系统庞大链路复杂:(解决:内圈向外推动) •上下游链路较为复杂,架构如何推动修改 •许多库需要源码安装,不同版本之间有冲突(解决:Docker化)•如:rsocket、folly、boost、glog、proxygen等。既要满足linux又要满足mac上的使用,否则没办法满足日常开发的需求•中间件在c++上支持不足,很多要么没有sdk,要么不支持mac(解决:补齐缺失)•缺失异步版本的C++HttpClient且能适配Reactive的库•镜像臃肿,下载时长问题(解决:Docker分段编译)•性能瓶颈问题(Docker拿不到真实的cpu,解决:动态计算+默认指标)•… •存储中间件兼容•MySQL协议适配•本地磁盘存储•本地内存存储 架构耦合,规则归一:(解决:灰度工具,幂等流量) •359行,单元化规则一行一套还是公用一套 存储优化:(解决:组合式选择) •BoltDb:Input&OutPut较大,性能有问题•Badger:wiskey+ttl机制,GC时候回丢失sst和vlog索引•纯内存:无法进行任务恢复和回滚 Go Runtime遇到的问题: 单元化后,压测链路是否影响:(解决:流量染色,支持混压) •359行,单元化后,服务质量工具应如何变化最小 •链路死循环•RSocket-go回调所在的Read loop是同步的,Runtime既做发起方又做回调方就形成了链路死循环(解决:队列分离+异步回调队列)•内存使用过多•MONO放大,内存使用过载(解决:oneshot机制)•Playload的Bytes使用过量(解决:bytebuffer)•性能损耗较大•Slice申请过多,扫描成本高(解决:GOGC=xxx)•Payload的Zerocopy•Payload的bytes是走的bytes池子,得确保在DoOnXXX里,如果逃逸要走一遍Clone•… 架构优化: •流程链路无法超时(解决:整体timeout和分任务超时)•并发时机触发插队(解决:多维度计算插队机制)•支持分布式任务机制(解决:架构剥离,SDK&server)•支持多协议和自定义协议(解决:核心抽象支持协议,任务等自定义)•… •单元化后,Sequnce号段浪费,基本是剩余行业*步伐 Rust Runtime遇到的问题: •集团中间件Rust生态缺失(解决:补齐生态缺失) 与社区生态共进 其他开源贡献 Serverless-FaaS贡献 社区贡献: 内部贡献: AIGC贡献: 内部贡献: •https://github.com/rsocket/rsocket-go参与RSocket-go贡献•https://github.com/rsocket/rsocket-rust参与RSocket-rust贡献 •常见最小单元组件•流程引擎GO版本贡献•… •https://github.com/AUTOMATIC1111/stable-diffusion-webui贡献者(Contributions)•https://github.com/Mikubill/sd-webui-controlnet贡献者(Contributions)•… •精细化灰度工具(java&GO)•GoMatchsSDK贡献•… 内部Rust生态贡献:•集团中间件Rust版本贡献(路由分发、配置监听管) Go-FaaS对开源社区贡献: •Rsocket-go内存使用率提升60%•Rsocket-goReactor-go增强•Zip&ZipWith等•SwitchValueIfError等•… 开发提效30%以上 降低成本30%以上 运维提效60%以上 •低代码+流程复用•SFF/BFF场景业务快速开发•完备中间件生态 •多维度伸缩策略(资源&流量)•完备的生命周期管理•免运维 •潮汐流量,按需计费•弹性伸缩,按量计费•语言切换,资源节省计费 主题SUBJECT 平台赋能/提交降本•性能平台 •灰度平台•压测平台•引流回放平台 防腐化&提效 1、便于获取:直接可以“生产环境<->生产环境”直接抓取;2、便于查看:不需要每个人PC都安装gopprof、graphviz等工具组件3、便于分享:性能压测报告,可以更好的通过在线url的方式分享给别人,一起分析,一起优化;4、便于留存:通过留存,能够看到各系统历史阶段的性能分析报告,性能变化情况等,方便对比; 流量染色&识别,准确定位环境 复杂->极简 人工统计之前的数据(有文档也需要找,不直观,无法对比) 压测平台自动抓取、保存。(可做性能和防腐化评测) 场景不同,另寻它路 选择:•中间件录制(服务本身承载录制+Mock) 主题SUBJECT 案例总结/由杂变简 •FaaS案例(单体&复合)•行业无关化案例•单元化案例 演变:乐高初探 演变:乐高架构初期试探 系统架构&挑战: •灵活化配置•底层能力沉淀,灵活组合•资源按需使用,弹性管理•研发成本低,人员效能高 演变:行业无关化架构 演变:乐高演变行业无关化架构 乐高零/部件+流程编排+Serverless: •粘合•适配•个性化逻辑•转换•事件驱动•…等 演变:继续组合,单元化架构 单元化核心 行业无关化低代码: •行业XML组合复用,编排Task•流程引擎,抽象Input->OutPut•业务协议统一,转换Input&OutPut 单元化: •单元内封闭(内圈向外扩容),跨单元禁写•全局规则适配359行,单行业灰度流控幂等放量•单元切流(切流干净),染色压测Or线上混压•纠偏一次,整体链路rt加速•详细切流控制(禁写,禁更等)•中间件单元化同步,QOS质量保障•… 主题SUBJECT 乐高原子化&可编排流程&行业无关化架构 •行业无关化架构,提效降本,用最少得人解决最多的事•组装式+行业无关化架构,让产&运营快速搞定简单需求 微 信 官 方 公 众 号 : 壹 佰 案 例关 注 查 看 更 多 年 度 实 践 案 例