You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
2.6 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 期中测试IM 系统设计实战
你好,我是陈现麟。
现在我们已经学完“分布式计算篇”了,一直坚持到现在不容易,恭喜你做到了,这是一件值得鼓励和高兴的事情。
在“分布式计算篇”的学习过程中,我们一起讨论了非常多的分布式计算相关的技术原理,并且在讨论技术原理的时候,同时也一起讨论了技术出现的原因、解决问题的思路和架构设计中的 trade-off 。我认为它们和技术原理是一样重要的,是我们进行系统设计的软素质,相信你已经具备了分布式在线业务系统的架构能力,还有足够的信心去做一些相关的系统设计了。
所以,今天我们就来个期中测试,实际考察一下你对分布式计算系统的理解,以及对所学知识的应用情况。
你可以用一周的时间,去做一个 IM 系统的架构设计,对于这个 IM 系统,从业务上和架构上有如下的需求。
**业务上的需求**
* 支持单聊。
* 100 个人以内的群聊。
* 峰值同时在线 1000 w。
* 峰值发送消息 10 w QPS。
**架构上的需求**
* 开发模式简单,新功能支持快速迭代。
* 长连接支持就近接入和负载均衡。
* 分层设计。
* 在功能迭代上线的时候,不要影响到用户已经建立好的长连接。
* 发送消息的接口是幂等的。
根据上面描述的业务上和架构上的需求,请你分别回答下面几个问题:
1.IM 系统一般都会涉及基于 TCP 的长连接通道和基于 HTTP(S) 的短连接通道,你认为长连接通道和短连接通道的职责分别是什么?
2.长连接的就近接入和负载均衡应该怎么来做?(可以考虑通过设计一个路由服务来解决。)
3.整个 IM 系统应该怎么分层每一层的职责是什么可以考虑从长连接接入、Push 和 IM 等方面来进行分层。)
4.在系统设计中,如何让功能在迭代上线的时候,不要影响到用户已经建立好的长连接呢?
5.对于业务需求, IM 系统的消息扩散模式,采用读扩散还是写扩散?为什么?
6.如何保障消息的发送接口是幂等的?
7.如果要对 IM 系统进行限流,你认为应该在哪几个地方来实施?为什么?
8.如何提高长连接和短连接通道的连接成功率?
9.整个 IM 系统满足业务需求的指标,大约需要多少机器资源?是怎么计算的?
加油,期待你的回答,我们将在 3 月 14 日更新架构作业的讲解。
预祝你取得好成绩!