我的IM服务开发之路-叩开混沌之门

IM,Instant messaging的缩写,翻译为中文就是即时通讯。例如QQ,微信等都是即时通讯领域的软件。俗称聊天软件

最近有个想法,对于我两年的IM开发经历做个简要的总结,本着学习和交流的心态,分几个篇幅写出一些自己对于分布式IM系统的理解,期望能收到大牛的指正和意见。本系列文章所说的IM都是指在分布式环境下的IM系统。

单就分布式系统,就已经有很深很深的水了,这里会较多地涉及到分布式系统下的内容,正好伴随着IM的业务进行自我回顾。


自己对IM的特性做个非官方的总结:

1. 即时性。从字面意思不难理解,IM对于即时性的要求比较高,需要实时地收到对方发来的消息。

2. 可交互。消息双方的用户需要能够对消息作出回应,即进行交互,互动。如果发出一片文字过来却不能与之进行交互,也算不得IM。

3. 高度依赖网络。在断网的情况下也不能进行通畅的IM交互。

4. 基于可视化或者是可感知的信息。比如文字,图片,语音,文件,表情。这些都是基于眼睛或者耳朵能感知到的。你不能在网上传递一个温暖的怀抱给对方吧?或者说你不能通过IM给对方一巴掌吧?也不能把香味传过去给对方。(或者这些也可以是IM的一个发展方向,哈哈,反水好快。。。)

5. 不安全性。基于网络的交互,都是不安全的,任何系统都有被攻破的可能性。别人给你发的一串文字,可能是经过中间人修改过的。

6. 虚拟。网络都是虚拟的。所以对于网络上的消息,我们应该有基本的辨别能力,不能轻易相信网上的信息。例子就不举了,网络诈骗多了去了。

7. 必须是两个端及以上进行聊天。可以是单人之间的聊天,也可以是一群人之间的聊天。当然,你也可以自己和自己聊天。

8. 传播扩散快。既然是即时通讯,其信息扩散的能力是很快的,可以一个传一个,也可以是病毒式分裂扩散。

IM系统对于技术上有如下几点要求:

1. 如何保证信息即时地成功投递给对方,消息不丢失,不重复;

2. 如何保证信息的顺序到达;

3. 如何保证信息中途不会被篡改;

4. 如何保证消息在收发双方展示一致;

5. 如何保证给用户省电省流量;

6. 如何保证IM系统的数据一致性;

7. 如何保证IM系统的可用性;

8. 如何保证IM系统的分区容忍;

9. CAP不可能同时满足,系统设计中如何做取舍;

10. 如何应对消息风暴引起的网络波动;

11. 如何避免或减少系统的消息风暴;

12. 在没有全局时钟的情况下如何保证有序;

若想在IM系统开发中游刃有余,需要熟练get如下技能:

1. TCP/IP协议,HTTP协议;

2. Linux功底:shell命令,linux操作系统的特性及脾气,Linux下的常用开发接口;

3. 分布式系统原理;

4. 一种服务端开发语言:C/C++/Java/Nodejs/Golang/PHP and so on;

5. 字符编码,不同进制之间的转换;

6. 加密、压缩技术;

7. 存储:mysql,nosql,以及不同存储介质下存储系统性能的发挥程度;

8. 如何优雅地与android,iOS,win,mac,web,运维之间进行“撕逼”;


本篇文章仅仅是罗列了几个点,提出了几个问题。问题都是我在开发过程中遇到或思考的一些问题,很多细节地方深入探究非常有意思,往往每个决定感觉都是在和哲学做对抗。


分布式系统的cap
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,065评论 25 708
  • 喝火令 独醉秋光 陌上梧桐满,园中嫩菊香。 道旁丹桂馥芬芳。 枫叶火红翻转,情意已飞扬。 世路经年寂,...
    书中樵夫阅读 863评论 7 50
  • 某天中午看到朋友圈里,老同学晒了两张刚出生孩子的照片,她的孩子兜兜终于出生了。此时,虽是冬天,但是阳光很好,晒在身...
    凉凉尘阅读 617评论 2 1
  • 真正的友情是不企求什么也不依靠什么,只有心甘情愿地相互关爱与帮助,总是既纯净又脆弱,心底无私天地宽!
    春的守望阅读 101评论 0 2
  • 其实已经是第十一天了,昨天睡了过去,现在是九月29日了,昨天给学校打完了邮件,打包了行李,剩下的就是在家呆了一天,...
    兆之阅读 146评论 0 0