阿里面试

本文讨论了系统架构随业务量增长的演进策略,包括分库分表、数据异构、冷热分离等技术,以及面对海量数据时的检索方案。同时,强调了工程师应具备对所用技术深度理解的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在系统压力其实不大,每天20万新增数据量也不大,每年哪怕单表新增千万级数据其实也还算可以接受。

第一个问题:如果假设你的系统承载的业务量翻了10倍,每天新增200万数据,你的系统架构要如何演进?

如果系统承载的业务量翻了100倍,每天新增2000万数据,你的系统架构要如何演进?

候选人:

我们还没这种需求,所以我暂时还没想过这个问题。

建议:

实际上这类问题在BAT、美团、京东等大公司里面试,都是常问的,为什么呢?

因为大公司里的系统面对的就是业务经常翻倍的增长,系统压力越来越大,所以每年都要做几次技术升级,一直要进行架构演进。

所以在互联网公司里,架构设计能力中非常关键的一环,就是针对业务增长,架构演进的能力是非常核心的。

你要有一个意识说如果你的业务量10倍增长,100倍增长,你的系统架构要如何演进?这几乎是资深工程师必须要有的一个意识和能力。

其实大家可以思考一下,如果10倍增长,单表每年新增近亿数据,还能用单库单表的方式来承载吗?

肯定不行了,所以必然针对10倍增长的场景,需要引入分库分表的技术,保证每个库每个表分散一定的数据量,避免单表单库数据量过大。

那么大家再思考一下,如果100倍增长呢,每年单表新增近10亿数据,你分库分表也不一定够了。因为此时可能会有高并发访问的问题,数据库抗起来很吃力。

此时,你要不要考虑数据异构、冷热分离等数据存储的架构设计?

比如采用MySQL分库分表 + 分布式NoSQL数据库 + Elasticsearch分布式搜索 + Redis缓存的架构,来整体设计这个数据存储架构。

先做冷热分离的架构,比如最热的数据放入分布式NoSQL数据库,专门承载当日数据的高并发写入,以及高性能的读写。

然后每过一段时间,做数据归档,把NoSQL里不再频繁使用的冷数据迁移到MySQL里去归档。

最后就是应对海量数据的检索,可以把索引构建在Elasticsearch里来应对,但是从NoSQL+MySQL的异构存储来提取明细数据即可。

而且针对一些特别热查询的数据,可以依托Redis做一个缓存。

其实那个P9面试官的面试评价里,期望的也是候选人把这一套架构说出来。虽然P6+的职级不一定说有能力完全hold住这个架构,但是起码要有这个意识。

结果候选人完全什么都说不出来,那当然会让人很失望了。

这位同学他们的系统有一部分的数据是放在特殊存储服务里的,用的是云平台上的存储服务,而且存放在存储服务里的数据还是很核心的数据。

所以面试官就开始问第二个问题了。

面试官:

你能说说你对这种特殊存储服务的理解吗,原理是什么?

你们用的云平台上的服务存储他的架构是什么样的,你们的存储是如何规划的?

候选人:

我一般是调用API往里面写数据,详细的还没太多关注过。

建议:

这是该同学犯的第二个错误,不说资深工程师,就说作为一个高级工程师,应该对自己负责的系统使用到的方方面面都有一定的了解。

比如你要是用了语音转换API,或者是快递公司的查询API,那你起码知道人家背后大致在干什么,或者问清楚人家API的QPS极限,以及访问量是多少。

你们用了特殊的存储服务,起码知道那种存储服务的实现原理是什么,存储的容量规划等等问题,这是一个高级工程师hold住自己工作的起码工作素养。

面试气氛尴尬,不过仍然继续。

面试官:

那你觉得这个系统最大的技术难点是什么?

候选人:

我想想(思索10秒后),好像没什么难的,主要就是一些接口,然后数据就落入数据库了。

建议:

大公司面试一定会问你系统的难点是什么,这代表你的项目经验有多少含金量。

哪怕你们项目很Low,平时也得想办法弄点新技术进去,没难点也要凑点儿难点出来,否则去面试必然给人鄙视。

举个例子,比如上面的这个系统,实际上他有一个步骤是要做数据迁移,也就是说把数据库里可能几百万数据量,一次性迁移到另外一套存储里去

那么这个数据迁移的步骤,其实涉及到千万级的数据量迁移。

你如何保证数据迁移的效率?如何保证迁移后的数据准确性?在迁移的过程中如何避免影响数据库的性能?

像这些问题,其实你平时都应该考虑一下,作为一个技术难点好好阐述一下吧。

那你说说你认为自己最擅长最有深度的技术吧?

候选人:

我好像平时自己用MQ技术比较多一些。

面试官:

那你说说Kafka、RabbitMQ、RocketMQ几种MQ的对比,还有他们各自的原理。

它们分别如何实现分布式消息队列架构的,底层的机制都聊一下,对比一下特点以及优缺点。

建议:

大公司一定会考察你的技术深度,一般就是对你平时用的最多,或者最熟悉的技术深入挖掘和考察,看你的技术深度有多深。

结果这个同学自己说了MQ,但是对MQ的了解实际上非常的浅薄,深入的东西都说不出来,那么最后一定就是让面试官很无语了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值