美文网首页IM分布式IM服务器开发
我的IM服务开发之路-叩开混沌之门

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

作者: 黑哥儿666 | 来源:发表于2016-11-10 00:18 被阅读158次

    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

    相关文章

      网友评论

        本文标题:我的IM服务开发之路-叩开混沌之门

        本文链接:https://www.haomeiwen.com/subject/ormtpttx.html