|簡體中文

比思論壇

 找回密碼
 按這成為會員
搜索



查看: 798|回復: 2
打印 上一主題 下一主題

一篇文章教你如何设计一个百万级的消息推送系统

[複製鏈接]

1218

主題

4

好友

8015

積分

教授

Rank: 8Rank: 8

  • TA的每日心情
    開心
    3 天前
  • 簽到天數: 684 天

    [LV.9]以壇為家II

    推廣值
    0
    貢獻值
    2
    金錢
    452
    威望
    8015
    主題
    1218
    樓主
    發表於 2019-11-15 14:26:05
    前言先简单说下本次的主题,由于我最近做的是物联网相关的开发工作,其中就不免会遇到和设备的交互。
    最主要的工作就是要有一个系统来支持设备的接入、向设备推送消息;同时还得满足大量设备接入的需求。
    所以本次分享的内容不但可以满足物联网领域同时还支持以下场景:
    • 基于 WEB 的聊天系统(点对点、群聊)。
    • WEB 应用中需求服务端推送的场景。
    • 基于 SDK 的消息推送平台。
    技术选型要满足大量的连接数、同时支持双全工通信,并且性能也得有保障。
    在 Java 技术栈中进行选型首先自然是排除掉了传统 IO。
    那就只有选 NIO 了,在这个层面其实选择也不多,考虑到社区、资料维护等方面最终选择了 Netty。

    协议解析既然是一个消息系统,那自然得和客户端定义好双方的协议格式。
    常见和简单的是 HTTP 协议,但我们的需求中有一项需要是双全工的交互方式,同时 HTTP 更多的是服务于浏览器。我们需要的是一个更加精简的协议,减少许多不必要的数据传输。
    因此我觉得最好是在满足业务需求的情况下定制自己的私有协议,在我这个场景下其实有标准的物联网协议。
    如果是其他场景可以借鉴现在流行的 RPC 框架定制私有协议,使得双方通信更加高效。
    不过根据这段时间的经验来看,不管是哪种方式都得在协议中预留安全相关的位置。
    协议相关的内容就不过讨论了,更多介绍具体的应用。
    简单实现首先考虑如何实现功能,再来思考百万连接的情况。
    注册鉴权
    在做真正的消息上、下行之前首先要考虑的就是鉴权问题。
    就像你使用微信一样,第一步怎么也得是登录吧,不能无论是谁都可以直接连接到平台。
    所以第一步得是注册才行。
    如上面架构图中的 注册/鉴权 模块。通常来说都需要客户端通过 HTTP 请求传递一个唯一标识,后台鉴权通过之后会响应一个 token,并将这个 token 和客户端的关系维护到 Redis 或者是 DB 中。
    客户端将这个 token 也保存到本地,今后的每一次请求都得带上这个 token。一旦这个 token 过期,客户端需要再次请求获取 token。
    鉴权通过之后客户端会直接通过 TCP长连接到图中的 push-server 模块。
    这个模块就是真正处理消息的上、下行。

    頭像被屏蔽

    7

    主題

    0

    好友

    499

    積分

    禁止發言

  • TA的每日心情
    開心
    2023-7-23 04:03
  • 簽到天數: 918 天

    [LV.10]以壇為家III

    推廣值
    0
    貢獻值
    89
    金錢
    3295
    威望
    499
    主題
    7
    沙發
    發表於 2020-4-28 20:42:41
    提示: 作者被禁止或刪除 內容自動屏蔽
    頭像被屏蔽

    8

    主題

    0

    好友

    2801

    積分

    禁止發言

  • TA的每日心情
    慵懶
    2023-7-23 17:55
  • 簽到天數: 1435 天

    [LV.10]以壇為家III

    推廣值
    0
    貢獻值
    0
    金錢
    2906
    威望
    2801
    主題
    8
    板凳
    發表於 2020-8-25 00:14:14
    提示: 作者被禁止或刪除 內容自動屏蔽
    重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

    手機版| 廣告聯繫

    GMT+8, 2024-5-15 19:14 , Processed in 0.015636 second(s), 19 queries , Gzip On, Memcache On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回頂部