热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【原创】图解hotwheels

2019独角兽企业重金招聘Python工程师标准项目地址:tolbrinohotwheels项目说明:Erlangmessagingservero

2019独角兽企业重金招聘Python工程师标准>>> hot3.png



项目地址: tolbrino/hotwheels
项目说明&#xff1a; Erlang messaging server optimized to send 1 message to 40k subscribers to a topic in <1s

概述

      Janus 是一种消息服务器&#xff0c;专门被优化以便能够处理&#xff0c;以 TCP 单播方式同时发消息给数以千计客户端的场景。这些客户端可以订阅到各种 topic 上。
      终极目标是能够在 20k 客户端同时在线的情况下&#xff0c;进行消息推送时保证延时低于 2 秒。

关于 Janus 的历史

      在罗马神话中 Janus 是天门神&#xff0c;早晨打开天门&#xff0c;让阳光普照人间&#xff0c;晚上又把天门关上&#xff0c;使黑暗降临大地。他的头部前后各有一副面孔&#xff0c;同时看着两个不同方向&#xff0c;一副看着过去&#xff0c;一副看着未来&#xff0c;因此也称两面神&#xff0c;或被尊称为时间之神。罗马有好几座 Janus 神庙。Janus 掌管所有的出入门户&#xff0c;因此罗马人在战时永远将 Janus 神殿的门敞开着&#xff0c;以便军人在败阵时躲入殿内以求庇护&#xff0c;或是在战胜时凯旋入殿。早期的 Janus 神像的两副面孔都有胡子&#xff0c;后来没有胡子&#xff0c;但是一副面孔年轻&#xff0c;另一副面孔年老。Janus 的右手指上刻有数字 CCC&#xff08;300&#xff09;&#xff0c;左手指上刻着数字 LXV&#xff08;65&#xff09;&#xff0c;合在一起恰是一年的天数。从纪元前 1 世纪起&#xff0c;罗马人把祭祀 Janus 的节日和新年结合在一起。罗马的执政官也在元旦这一天就职&#xff0c;并向 Janus 献祭&#xff0c;祈求国家的安宁。为了纪念 Janus&#xff0c;罗马人把正月称为 Januarius&#xff08;mensis&#xff09;&#xff0c;意含“Janus 之月”&#xff0c;英文借用了该词&#xff0c;先作 Januarie&#xff0c;后作 January 。而在英文吸收 January 一词之前&#xff0c;撒克逊人把正月叫作 Wulf-Monath&#xff08;wolf-month&#xff09;&#xff0c;意为“狼月”&#xff0c;因为此时正值严冬&#xff0c;是狼群出没村子寻觅食物的时节。

关于 hotwheels&#xff08;即风火轮&#xff09;的历史

      风火轮&#xff0c;双轮暗藏风火之势&#xff0c;行动间有风雷之声&#xff0c;故称风火轮。可踏在脚下作为交通工具&#xff0c;踏上其轮&#xff0c;念动咒语&#xff0c;上天入地&#xff0c;无所不能。 传说是青鸾火凤所化&#xff0c;一蹬九万里&#xff0c;双足十八万里。传说中为哪吒兵器之一。

监督树总体结构

|janus_app|| (one_for_one)&#43;-------------------&#43;------------------&#43;--------------------&#43;| | | || | | |topman janus_acceptor (supervisor) mapper| || | (simple_one_for_one)&#43;--------&#43;-------| &#43;--------&#43;-------&#43;| | | | | || | | | | |pubsub ... pubsub ... transport ...
(topic:<<"T1">>) (topic:<<"T2">>) || (janus_flash 封装层)|client_proxy
其中
topman - 维护 pubsub 进程和 Topic 的映射关系&#xff1b;
pubsub - 关联特定  Topic 的进程 &#xff1b;维护所有订阅到该 Topic 的进程信息&#xff1b;
janus_acceptor - 处理来自网络的 TCP 连接&#xff1b;动态创建 transport 和 client_proxy 进程&#xff0c;以处理后续协议交互&#xff1b;
transport - 针对某个 TCP 连接上的数据处理&#xff1b;
client_proxy - 实际处理订阅&#xff0c;取消订阅&#xff0c;以及消息推送的模块&#xff1b;
mapper 提供轻量级进程注册管理功能&#xff1b;

subscriber 行为

 

janus 针对 subscribe 的内部处理


publisher 行为


janus 针对 publish 的内部处理

协议细节

subscriber 协议交互


对应

flashbot janus,0,PING,0---------------------------------------------->{"timestamp":[1448,434925,303633],"token":[55,97,55,100,48,102,56,98,102,97,97,49,54,101,48,48,48,100,101,99,54,55,48,57,55,99,101,99,97,99,56,56]},1<----------------------------------------------,0,{"action":"subscribe","data":"events"},0---------------------------------------------->ACK,1<----------------------------------------------{"timestamp":[1448,434925,395864],"topic":"events","event":"test_event","message_id":"","data":"test"},1<----------------------------------------------,0,{"action":"unsubscribe","data":"events"},0----------------------------------------------> 对应

00000000 3c 72 65 67 75 6c 61 72 2d 73 6f 63 6b 65 74 2f 00000010 3e 00 50 49 4e 47 00 >.PING.00000000 7b 22 74 69 6d 65 73 74 61 6d 70 22 3a 5b 31 34 {"timest amp":[1400000010 34 38 2c 34 33 34 39 32 35 2c 33 30 33 36 33 33 48,43492 5,30363300000020 5d 2c 22 74 6f 6b 65 6e 22 3a 5b 35 35 2c 39 37 ],"token ":[55,9700000030 2c 35 35 2c 31 30 30 2c 34 38 2c 31 30 32 2c 35 ,55,100, 48,102,500000040 36 2c 39 38 2c 31 30 32 2c 39 37 2c 39 37 2c 34 6,98,102 ,97,97,400000050 39 2c 35 34 2c 31 30 31 2c 34 38 2c 34 38 2c 34 9,54,101 ,48,48,400000060 38 2c 31 30 30 2c 31 30 31 2c 39 39 2c 35 34 2c 8,100,10 1,99,54,00000070 35 35 2c 34 38 2c 35 37 2c 35 35 2c 39 39 2c 31 55,48,57 ,55,99,100000080 30 31 2c 39 39 2c 39 37 2c 39 39 2c 35 36 2c 35 01,99,97 ,99,56,500000090 36 5d 7d 01 6]}.
00000017 3c 72 65 67 75 6c 61 72 2d 73 6f 63 6b 65 74 2f 00000027 3e 00 7b 22 61 63 74 69 6f 6e 22 3a 22 73 75 62 >.{"acti on":"sub
00000037 73 63 72 69 62 65 22 2c 22 64 61 74 61 22 3a 22 scribe", "data":"
00000047 65 76 65 6e 74 73 22 7d 00 events"} .00000094 41 43 4b 01 ACK.00000098 7b 22 74 69 6d 65 73 74 61 6d 70 22 3a 5b 31 34 {"timest amp":[14000000A8 34 38 2c 34 33 34 39 32 35 2c 33 39 35 38 36 34 48,43492 5,395864000000B8 5d 2c 22 74 6f 70 69 63 22 3a 22 65 76 65 6e 74 ],"topic ":"event000000C8 73 22 2c 22 65 76 65 6e 74 22 3a 22 74 65 73 74 s","even t":"test000000D8 5f 65 76 65 6e 74 22 2c 22 6d 65 73 73 61 67 65 _event", "message000000E8 5f 69 64 22 3a 22 22 2c 22 64 61 74 61 22 3a 22 _id":"", "data":"000000F8 74 65 73 74 22 7d 01 test"}.
00000050 3c 72 65 67 75 6c 61 72 2d 73 6f 63 6b 65 74 2f 00000060 3e 00 7b 22 61 63 74 69 6f 6e 22 3a 22 75 6e 73 >.{"acti on":"uns
00000070 75 62 73 63 72 69 62 65 22 2c 22 64 61 74 61 22 ubscribe ","data"
00000080 3a 22 65 76 65 6e 74 73 22 7d 00 :"events "}.

publisher 协议交互


对应

flashbot janus,0,PUBLISH,0{"topic":"events","event":"test_event","message_id":"","data":"test"}---------------------------------------------->{"timestamp":[1448,434925,395595],"token":[100,52,97,53,56,51,54,99,57,97,50,52,50,57,52,57,55,48,52,102,48,100,99,53,102,55,56,101,101,97,53,98]},1<---------------------------------------------- 对应

00000000 3c 72 65 67 75 6c 61 72 2d 73 6f 63 6b 65 74 2f 00000010 3e 00 50 55 42 4c 49 53 48 00 7b 22 74 6f 70 69 >.PUBLIS H.{"topi
00000020 63 22 3a 22 65 76 65 6e 74 73 22 2c 22 65 76 65 c":"even ts","eve
00000030 6e 74 22 3a 22 74 65 73 74 5f 65 76 65 6e 74 22 nt":"tes t_event"
00000040 2c 22 6d 65 73 73 61 67 65 5f 69 64 22 3a 22 22 ,"messag e_id":""
00000050 2c 22 64 61 74 61 22 3a 22 74 65 73 74 22 7d ,"data": "test"}00000000 7b 22 74 69 6d 65 73 74 61 6d 70 22 3a 5b 31 34 {"timest amp":[1400000010 34 38 2c 34 33 34 39 32 35 2c 33 39 35 35 39 35 48,43492 5,39559500000020 5d 2c 22 74 6f 6b 65 6e 22 3a 5b 31 30 30 2c 35 ],"token ":[100,500000030 32 2c 39 37 2c 35 33 2c 35 36 2c 35 31 2c 35 34 2,97,53, 56,51,5400000040 2c 39 39 2c 35 37 2c 39 37 2c 35 30 2c 35 32 2c ,99,57,9 7,50,52,00000050 35 30 2c 35 37 2c 35 32 2c 35 37 2c 35 35 2c 34 50,57,52 ,57,55,400000060 38 2c 35 32 2c 31 30 32 2c 34 38 2c 31 30 30 2c 8,52,102 ,48,100,00000070 39 39 2c 35 33 2c 31 30 32 2c 35 35 2c 35 36 2c 99,53,10 2,55,56,00000080 31 30 31 2c 31 30 31 2c 39 37 2c 35 33 2c 39 38 101,101, 97,53,9800000090 5d 7d 01 ]}.




转:https://my.oschina.net/moooofly/blog/546871



推荐阅读
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • MicrosoftDeploymentToolkit2010部署培训实验手册V1.0目录实验环境说明3实验环境虚拟机使用信息3注意:4实验手册正文说 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 利用 Python Socket 实现 ICMP 协议下的网络通信
    在计算机网络课程的2.1实验中,学生需要通过Python Socket编程实现一种基于ICMP协议的网络通信功能。与操作系统自带的Ping命令类似,该实验要求学生开发一个简化的、非标准的ICMP通信程序,以加深对ICMP协议及其在网络通信中的应用的理解。通过这一实验,学生将掌握如何使用Python Socket库来构建和解析ICMP数据包,并实现基本的网络探测功能。 ... [详细]
  • Nacos 0.3 数据持久化详解与实践
    本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 本文深入解析了通过JDBC实现ActiveMQ消息持久化的机制。JDBC能够将消息可靠地存储在多种关系型数据库中,如MySQL、SQL Server、Oracle和DB2等。采用JDBC持久化方式时,数据库会自动生成三个关键表:`activemq_msgs`、`activemq_lock`和`activemq_ACKS`,分别用于存储消息数据、锁定信息和确认状态。这种机制不仅提高了消息的可靠性,还增强了系统的可扩展性和容错能力。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
author-avatar
暖暖252
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有