如果面试官让你设计美团外卖的分库分表架构,就该这么说!

美团后端面试高频考点:并发、存储与分布式场景深挖 后端开发面试中,Java并发、MySQL存储和分布式一致性始终是技术深度考察的核心。从volatile的内存屏障到线程池的参数推导,从InnoDB的锁与MVCC到Redis缓存穿透的防治,每一个基础原理都对应着线上高并发系统的真实痛点。在本地生活服务场景下,海量订单写入、附近商家检索和骑手位置追踪,迫使工程师掌握消息队列削峰、分布式事务最终一致和幂等设计等工程能力。理解这些技术背后的设计初衷,不仅是为了应对面试官的多轮追问,更是构建高可靠、可扩展系统的必备素养。本文以美团后端面试为切入点,系统梳理从原理推导 阅读详情

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:juejin.cn/post/

7128726681954549768

95fd290ec882781b61e624b27e2badde.jpeg


概述

分库分表后设计到的第一个问题就是,如何选择路由key,应该如何对key进行路由。路由key应该在每个表中都存在而且唯一。路由策略应尽量保证数据能均匀进行分布。

如果是对大数据量进行归档类的业务可以选择时间作为路由key。比如按数据的创建时间作为路由key,每个月或者每个季度创建一个表。按时间作为分库分表后的路由策略可以做到数据归档,历史数据访问流量较小,流量都会打到最新的数据库表中。

也可以设计其与业务相关的路由key。这样可以保证每个数据库的资源都能很好的承担流量。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

支持场景

外卖订单平台分库分表后需要支持的场景,用户的角度,需要实时查看所点外卖订单的状态,跟踪订单信息。商家需要查询订单信息,通过订单分析菜品的质量,进行商业决策。

用户Consumer = C端 商家Business = B端

e0534ec8f5ce30d73e0901d7a1cc082c.jpeg

用户下单后订单可能会落到不同的表中,查询的时候可能需要查询多张表。

37ad86c4fef0d9ee20f997d3eecce88f.jpeg

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

路由策略

如果创建订单时随机插入到某一张表中,或者不知道插入到那张表中,查询订单的时候都需要查询所有的表才能确保查询的准确信。

如果在插入订单的时候有一定的规则,根据这个规则插入到数据库中,查询的时候也执行相应的规则到对应的表中进行查询。这样就能减少数据操作的复杂性。可以通过设计路由策略来实现,用户和商家查询数据的时候都遵循相同的路由策略。

30b223312729246e8eb41dabc0469176.jpeg 51240fcc2c4bfb87ad245744bb30a6cc.jpeg

用户端路由key

根据上一小节的路由策略分析,现在需要选定一个路由key。用户端让同一个用户id 的数据保存到某固定的表中,所以可以选用用户id最为路由key。

在单库的情况下,用户下单,生成一个订单,把用户id作为路由key,对user_id取hash值然后对表的数量进行取模,得到对应需要路由的表,然后写入数据。

cd14a454d3c95e089036ab3df6d8fe4e.jpeg

多库多表的情况下需要先找到对应的库然后再找到对应的表。多库多表的路由策略:用户下达->生成订单->路由策略:根据用户id的hash值对数据库的数量进行取模找到对应的数据库->根据用户id的hash值除以对表的数量,然后在对表的数量进行取模即可找到对应的表。

c701696129c4b6f3f587dd106fd4ab74.jpeg

路由策略设计的要点是根据具体的业务业务场景设计,跟用户信息关联度比较大的作为路由key进行hash值取模

商家路由key

单独为商家B端设计了一套表(C端和B端是独立的)。

114a342879f4cb981042d7b6e2630c77.jpeg

用户的角度以user_id作为路由key,商户的角度以商家id作为路由key。商家是如何通过路由key路由数据的呢。游湖在下单的时候把队友的订单号发送到MQ里,商家可以去消费这个MQ,然后根据订单号获取订单信息,然后再把订单信息插入到商户的数据库表当中。商户的路由策略 和用户的路由策略 是一样的。

e2b985ab5dcf00ae421b0247899a3882.jpeg

用户端和商户端的完整数据流程图:

8a62de6d784f469b8c723dcce3f406d2.jpeg

欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

0f2e1324873b07aa2dda1d7b2f3ba5ac.png

已在知识星球更新源码解析如下:

4c36ca2ab6453c3ee433397900cbde3d.jpeg

626938da6c04e80164f27f698751af65.jpeg

d4968111cd84c06ac8eb916e7da875da.jpeg

29a070109e4a2a247e09cbd4c5dd5524.jpeg

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
Zebra:美团点评集团统一使用MySQL数据库访问层的中间件。主要提供对业务开发透明,读写分库,分库分表能力,并提供端到端SQL监控的集成方案 斑马 介绍 Zebra是一个基于JDBC API协议的上开发出的高可用,高性能的数据库访问层解决方案,是美团评论内部使用的数据库访问层中间件。具有以下功能点: 配置集中管理,动态刷新 支持读写分离,分库分表 丰富的监控信息在CAT上展现 初步化数据库请求,多数据源支持 核心价值 简化了识别分离,分库分表的开发工作,并在业务方在分库分库,识读分离的情况下,依然可以像操作分离库那样去操作,屏蔽实现的复杂性,对业务透明。提供了从读写分离到分库分表全生命周期的技术支持。 完善的监控体系帮助开发掌控数据库请求的整个互连,快速定位问题。 dao层扩展功能 模组 zebra-client(核心):除了监控 立即下载

相关推荐

黑金ZYNQ7010开发板开箱实测:从接线到串口通信的保姆级指南

本文提供黑金ZYNQ7010开发板从开箱到串口通信的完整实操指南。详细介绍了硬件连接、驱动安装、启动模式设置及串口终端配置等关键步骤,并针对常见问题提供排查思路,帮助FPGA开发者快速上手ZYNQ平台,建立稳定的调试通道。

weixin_29266749的博客 466

面试官: 美团外卖的分库分表怎么设计?

程序员的成长之路互联网/程序员/技术/资料共享关注阅读本文大概需要 2.8 分钟。来自:https://juejin.cn/post/7128726681954549768概述分库分表后设计到的第一个问题就是,如何选择路由key,应该如何对key进行路由。路由key应该在每个表中都存在而且唯一。路由策略应尽量保证数据能均匀进行分布。如果是对大数据量进行归档类的业务可以选择时间作为路由key。比如...

良月柒 277

风光储互补微电网在偏远地区的应用实践:从建模到仿真全解析

本文深入解析了风光储互补微电网在偏远地区的应用实践,从系统设计到仿真建模全流程。通过Simulink等工具进行动态仿真,验证了系统在多种工况下的可靠性,并结合实际案例展示了其显著的经济和环保效益。文章为从业者提供了从技术路径到实施优化的全面指导。

weixin_29047545的博客 271

MySQL如何分库分表

MySQL如何分库分表,

zhw21w的博客 2244

Python RPA 流程自动化快速上手

Python RPA 流程自动化快速上手

看花容易绣花难 1万+

ITIL 4 Foundation 自学通关笔记1

ITIL 4 Foundation 自学通关笔记

m0_58817196的博客 953

Oracle-美团外卖

美团外卖是国内主要的外卖平台,平台系统主要为商家提供商品管理服务,为消费者提供商品选购与订单评价服务,为配送员提供订单分配服务,同时系统会进行收益分配。假设该系统由于性能问题,需要升级开发,现在由你负责数据存储设计,假设数据库选择Oracle 11g,请你根据理解和所学知识,按照要求完成下面设计。 请设计该数据库的逻辑存储结构,即设计各个数据表的名称及各字段名称、字段大小及含义。字段名称使用英文或汉语拼音。 请设计该数据库所用的表空间,每个表空间至少两个文件,并指出每个表空间存储的数据表,并使用SQ.

Vivien_CC的博客 3504

【深度学习】肺结节分割项目实战二:分割肺实质

在后续训练模型的时候如果直接使用原始的肺部CT图像,其中的非肺区域会对训练造成干扰,因此我们需要提取分割肺实质。这一部分参考了kaggle上的教程。 从这张CT图像中可以看出扫描器以外的部分为黑色,背景和肺内部颜色较深,非肺组织和骨头颜色较浅。我们的目的是将肺部分割出来。由于肺部区域和其他部分对比明显,我们可以设置一个合适的阈值对图像中的区域进行隔离。 import argparse import os import numpy as np from medpy.filter.smoothing imp

weixin_42182906的博客 7242

分库分表落地与实践

本篇博客主要是对美团订单系统分库分表系统的一些解析和加入了自己的理解 垂直切分垂直切分是什么意思? 简单来说就是竖着切,试想一下,把一个库中很多张表竖着切,这些表就会散开,其实垂直切分就是这个意思,将不同模块的表放

一年e度的夏天的专栏 2296

完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码)

申请公司的苹果开发者账号和企业级的苹果开发者账号时,都会用到邓白氏编码,也就是我们申请苹果开发者账号时需要填写的D-U-N-S Number。     申请这个邓白氏编码是免费的,但是从像华夏邓白氏公司提交申请到可以申请苹果开发者账号来用这个9位的D-U-N-S Number,需要一段时间,我申请得到D-U-N-S Number,用了8个工作日(不算周末哦)

wxw2011014003的博客 9万+

从0到1构建数据分析AI Agent:数据采集、洞察生成与报告自动化

在企业数字化转型的今天,数据分析师80%的时间被消耗在重复取数、数据清洗、报表排版等低价值劳动上,真正用于深度业务洞察和决策支持的时间不足20%。本文将从核心概念、技术原理、代码实现、落地实践全维度,教你从0到1搭建一套完整的数据分析AI Agent系统,实现「用户用自然语言提需求→Agent自动采集多源数据→AI自动挖掘业务洞察→自动生成符合业务要求的多格式报告」的全链路自动化,平均可将需求响应速度从天级压缩到分钟级,释放70%以上的分析师人力成本。

AI Python 编程之道的博客 472

泛谈阿里vs美团订单存储架构演进

泛谈完美团和阿里的订单存储,无论是美团的4份数据的冗余,还是阿里的全局二级索引,都有我们值得借鉴的思想在当下的最好的设计不一定是未来的最好设计。往前走可能有更大的苹果,或者可能在我们未来看的这一部分代码,比如美团的设计,你或许会不理解,但是当时的这个方案一定是为了兼容业务 或者 时间的问题。存在即合理。辩证的眼光看待设计,取其精华,去其糟粕。

IT枫斗者的博客 1436

【服务器电源架构与关键技术发展趋势】深度解析架构、方案、玩家与未来趋势

技术维度:台达 / 光宝在高功率密度(97%+ 效率)和垂直整合上领先,大陆厂商(麦格米特 / 欧陆通)在成本控制和快速响应上更优,国际厂商(英飞凌)聚焦核心器件突破。 客户维度:台达绑定英伟达核心供应链,麦格米特 / 欧陆通兼顾国内外客户,光宝 / 中恒电气侧重云端与互联网厂商。 趋势适配:所有厂商均加速布局 800V 高压架构、液冷技术和高功率 Power Shelf,以应对 AI 服务器单柜功率从 10kW→200kW 的升级需求。

昔时扬尘处 724

送外卖它不赚钱吗?3年经验面试美团Java高级开发凉经

最近收到了网友分享的京东面试经历,别人觉得问的还是挺有技术性的,适合咱们这些想去大厂的程序员,分享给大家,希望大家吸取经验争取拿到offer! 面试过程: 通过在Boss直聘上收到来自美团的面试邀请,约的下午15:30,到了之后面试的人很多,大致流程如下:先填写个人履历登记表以及期望薪资,然后会有专门人员帮你联系面试官,大概经历了三轮面试,每轮差不多在1个多小时,总的下来得4个小时多点。完了会通知他们内部有个评测,让你回去等消息,差不多一两天内会给反馈结果。 公司的环境还是很好的,羡慕这样的大公司。.

banzhuanhu的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java面经分享:美团面试也太难了! 4面美团终成Offer!

美团面试以难度高著称,尤其对Java技术栈的深度考察非常严格。

程序员高级码农的博客 1410

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

美团两年java开发_我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知......

美团点评 测试开发(Java岗)总共是三面,一面二面是纯技术面,三面带点技术+hr面的问题,三面下来感觉还不错,对方总监对我的印象不错,也加了微信留了电话让我等通知。。。等了一个星期,本来以为要凉凉了,居然给我打电话准备周一到岗~哈哈哈~ 一面(一个小时左右)算法:写冒泡排序,问如何优化,简单讲了快排和堆排序的原理数据库:解释左连接数据库第一第二第三范式,数据库死锁linux:怎么查看内存;怎么查...

weixin_35118333的博客 239

【美团二面】系统QPS与部署策略,每天5千万请求如何应对?

本文针对面试中常见的系统设计问题,详细讲解了如何计算5000万日请求的QPS并设计高可用架构。首先通过流量分析得出高峰QPS约7800,然后分层设计:接入层用LVS+Nginx集群、应用层部署4台SpringBoot无状态服务、缓存层采用Redis3主3从集群、数据库层采用MySQL分库分表+主从复制,并用Kafka异步解耦。最后强调要通过压测验证架构性能,并提供完整的面试答题模板。文章指出,面试官考察的是将业务需求转化为技术方案的能力,而非单纯记忆架构组件。

2401_84204413的博客 1332

Java校招面试问题大全,我在美团Java研发岗工作的那5年

我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

F1520080的博客 886

美团后端面试高频考点全解析:从并发到系统设计

后端面试考察的不仅是知识记忆,更是对高并发、分布式系统等核心原理的理解。从Java并发、JVM调优到MySQL索引与事务、Redis缓存,再到消息队列和分布式事务,每一项技术都服务于真实业务场景中的性能与一致性需求。以美团为代表的互联网公司,常通过场景化追问考验候选人从原理到落地的工程能力,例如订单系统设计、秒杀架构、缓存雪崩与分布式锁等典型问题。掌握这些技术的原理、取舍与排查方法,能够帮助工程师在复杂业务中做出合理架构决策,并从容应对后端技术面试。本文系统梳理了后端面试的高频考点与实战思路。

weixin_34293141的博客 341

2018 java 美团笔试题

想进美团的同学注意了,这里是修真院面试笔记整理,那么这里就给大家分享一下 【2018 java 美团笔试题】 技术一面 1、我们先聊聊java基础知识吧,说出Object类的常用方法? 2、刚刚说到object的常用方法,这些方法你应该都很熟悉吧,那你说说你对equal和hashcode这两个方法的认识? 3、多线程用过吧?写过一些demo,那你说说多线程之间的通信,回答用wait sl...

IT修真院:初学者转行到互联网的聚集地 999
上一篇: 如何设计权限系统?
下一篇: 我,40岁码农,还在荷兰写低级代码,不敢回国…
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值