当前位置: 首页 > news >正文

企业建设企业网站的好处有哪些企业管理培训公司排行榜

企业建设企业网站的好处有哪些,企业管理培训公司排行榜,门户网站和社交网络的区别,重庆做网站外包公司HubuIM RFC草案 消息协议设计 基本协议 评估标准 【性能】协议传输效率,尽可能降低端到端的延迟,延迟高于200ms用户侧就会有所感知 【兼容】既要向前兼容也要向后兼容 【存储】减少消息包的大小,降低空间占用率,一个字节在亿…

HubuIM RFC草案

消息协议设计

基本协议

评估标准

  1. 【性能】协议传输效率,尽可能降低端到端的延迟,延迟高于200ms用户侧就会有所感知

  2. 【兼容】既要向前兼容也要向后兼容

  3. 【存储】减少消息包的大小,降低空间占用率,一个字节在亿级别并发之下也是一亿个字节

  4. 【计算】减少编解码时造成的CPU使用率的权衡

  5. 【网络】尽可能减少网络带宽消耗

  6. 【安全】协议安全性

  7. 【迭代】要能够快速迭代,灵活拓展

  8. 【通用】可跨平台接入,H5,IoT设备等等

  9. 【可读】

基本结构

IM协议的设计从纵向来看分为三个层次,应用层/安全层/传输层。

应用层

有很多开源协议,例如MQTT,websocket等等。但是这些协议冗余的字段比较多,在大型IM的场景下一般都是自定义协议的。

因此HubuIM采用自定义协议

序列化方式使用protobuf,这个是无可争议的。

安全层

基于密钥的生命周期可以分为

  • TLS/SSL:加密效果好,证书的管理比较复杂

  • 固定加密:通信前客户端和服务端约定好密钥和加密算法(会被黑客逆向)

  • 一人一密:使用用户特定的属性进行加密,例如密码

  • 一次一密:这个是最安全的,创建连接建立一次会话,双方进行加密三次握手(非对称),对称加密传输。

加密消耗的是CPU资源,是CPU密集型操作。如果放到接入层或者业务逻辑层来做的话,会影响到他们的正常运行。因此应该在四层网络负载或者七层网络负载的地方去解密,内网环境默认是安全的。

 

因此HubuIM采用的方式是TLS3.0+网关终止

在Nginx处就进行解密,Nginx所在的机器可以使用硬件来进行优化,例如用GPU加速,用Intel加速器等等。

那么为什么不在LVS(四层网络负载均衡器)上面去做加密解密,然后直接发到IM网关,这样可以让网络通信少跳一次。

这个问题是因为Nginx这个七层负载均衡的地方相当于是公司的一个基础架构层,是要做很多事情的,不方便去掉的。

传输层

可以使用UDP或者TCP协议。微信这种很定义的可能使用UDP+QUIC这种保证可靠性。因为UDP是无状态的传输协议,不会存储连接的状态,在弱网环境下更优,消息风暴发生的可能性更小。

UDP的话需要在应用层写大量的代码来保证可靠性,难度非常大,因此HubuIM使用TCP协议。弱网环境在应用层来进行优化。

总结

HubuIM协议

对于传输层使用TCP,安全层使用TLS,应用层使用自研二进制协议+开源序列化协议。

既然使用了TCP协议,那么我们面临的一个问题就是TCP的粘包,拆包问题。具体解决方法我们在后面讲解。

消息可用性

基本概念

  • 长链接 vs 短链接。我们才用的是长链接和短链接共同作用,短链接作为旁路。

  • 各种ID

    • connID:代表的是一个TCP链接

    • clientID:代表的是client发送给IM Server的用来标识本客户端消息发送顺序的ID,仅仅是本客户端,该ID并不代表消息的全局一致。需要有递增性质。

    • seqID:当IM Server收到clientID之后生成的会话内消息顺序一致的seqID。需要有递增性质。

    • sessionID:会话ID

    • msgID:代表的是一个消息的ID

  • PULL 与 PUSH 模式。PULL就是client向IM Server拉取消息,使用短链接减少TCP链接的压力。PUSH就是IM Server通过TCP长链接推送消息。

  • 通信复杂度:网络传输过程中经过的节点可以说是一个性能瓶颈,不能经过太多节点。消息风暴就是网络中有太多的报文,会压垮IDC。常见于弱网环境,弱网下消息丢失严重,TCP的可靠性反而成为延迟,让网络中有大量的报文。

背景介绍

对于IM来说,消息的可靠与一致就是:可达有序,不重不漏。

有人会问:TCP已经保证一致性了,那么为什么IM还有保证一致。

其实答案很简单:TCP只能保证到内核传输层为止的可靠性,但是应用层的可靠性你是没有办法保证的。

设计IM必须有端到端的设计思维:底层可靠不等于上层可靠,底层一致不等于上层一致

方案选型

技术挑战是什么?

  • 三方通信,网络层面无法保证消息必达

  • 没有全局时钟,确定唯一顺序,并且是符合因果顺序的

  • 多客户发送/多服务端接收/多线程多协程处理,顺序难以确定。

解决方案是学习TCP:

  • 消息及时:服务端实时接收消息并实时在线发送

  • 消息可达:超时重试,ACK确认

  • 消息幂等:分配seqID,服务端存储seqID

  • 消息有序:seqID可以比较。

上行消息

clientID严格递增

弱网问题是传输层的问题,可以优化传输层协议,例如升级成Quic来优化,长连接不适合在弱网环境下工作。

消息转发

  • seqID在会话内有序就行,这样就可以解决redis的单点问题。

  • seqID需要在ACK之前分配,否则ACK成功发出去之后,服务器宕机了,这样seqID就等于没有分配,会出现问题。

  • 如果服务端在存储消息,业务处理,接入层路由的时候失败怎么办?

    • 消息存储之后再回复ACK,如果ACK失败则客户端重试时再次幂等的回复ACK。

    • 一旦消息存储,如果服务崩溃导致长连接断开,客户端重新建立连接时可以发送一个pull信令,拉去历史消息进行消息补洞,保证可靠性。

  • 消息存储可以交给MQ异步的进行。

下行消息

分配seqID的时候针对redis的单点使用lua脚本来进行一个ID的跳变。

客户端发现消息不连续的时候可能是因为消息跳变了,但是他无法确认,因此不能直接拒绝,而是发送pull信令来进行增补,如果拉去不到新消息则说明是跳变导致。

推拉结合+长短连接结合+服务端打包整流:假如是一个群聊,一下子有100M信息,我会把这些信息放在一个窗口里面,不会一个一个发送,这样的批处理可以提高效率。然后窗口大了之后服务端向客户端发送一个pull信令,让客户端发起一个请求来用短链接拉取这个窗口里面的数据。


文章转载自:
http://introgressant.pqbz.cn
http://androclus.pqbz.cn
http://kevin.pqbz.cn
http://anginal.pqbz.cn
http://deave.pqbz.cn
http://theologaster.pqbz.cn
http://ballotage.pqbz.cn
http://infantine.pqbz.cn
http://anthropometry.pqbz.cn
http://jobless.pqbz.cn
http://pappus.pqbz.cn
http://hungriness.pqbz.cn
http://hyperthyroid.pqbz.cn
http://disfavor.pqbz.cn
http://speedcop.pqbz.cn
http://loopworm.pqbz.cn
http://mitose.pqbz.cn
http://adaxial.pqbz.cn
http://dacha.pqbz.cn
http://zip.pqbz.cn
http://incantation.pqbz.cn
http://anamorphoscope.pqbz.cn
http://onr.pqbz.cn
http://atheistic.pqbz.cn
http://radux.pqbz.cn
http://suffocating.pqbz.cn
http://holophrasis.pqbz.cn
http://hiemal.pqbz.cn
http://exercitant.pqbz.cn
http://reft.pqbz.cn
http://pigout.pqbz.cn
http://chessylite.pqbz.cn
http://jerusalem.pqbz.cn
http://strathclyde.pqbz.cn
http://confederative.pqbz.cn
http://omnificent.pqbz.cn
http://plausibility.pqbz.cn
http://tuberculous.pqbz.cn
http://rowdyism.pqbz.cn
http://barbule.pqbz.cn
http://indiscoverable.pqbz.cn
http://folacin.pqbz.cn
http://surfboat.pqbz.cn
http://boatswain.pqbz.cn
http://octosyllabic.pqbz.cn
http://demean.pqbz.cn
http://laocoon.pqbz.cn
http://cresol.pqbz.cn
http://amidst.pqbz.cn
http://capersome.pqbz.cn
http://bandwidth.pqbz.cn
http://ares.pqbz.cn
http://unhook.pqbz.cn
http://lycopod.pqbz.cn
http://quilldriver.pqbz.cn
http://tomb.pqbz.cn
http://doublethink.pqbz.cn
http://maile.pqbz.cn
http://panic.pqbz.cn
http://papillate.pqbz.cn
http://eagre.pqbz.cn
http://incurvation.pqbz.cn
http://polygonize.pqbz.cn
http://exfiltrate.pqbz.cn
http://heliograph.pqbz.cn
http://hypersecretion.pqbz.cn
http://porphyrization.pqbz.cn
http://hyperirritability.pqbz.cn
http://victimless.pqbz.cn
http://foreclosure.pqbz.cn
http://senor.pqbz.cn
http://culverin.pqbz.cn
http://inflexed.pqbz.cn
http://ohioan.pqbz.cn
http://knowledgeble.pqbz.cn
http://sondage.pqbz.cn
http://thrilling.pqbz.cn
http://waterret.pqbz.cn
http://miskolc.pqbz.cn
http://cannot.pqbz.cn
http://renew.pqbz.cn
http://hogger.pqbz.cn
http://lucerne.pqbz.cn
http://shrovetide.pqbz.cn
http://silverbeater.pqbz.cn
http://preelection.pqbz.cn
http://mammy.pqbz.cn
http://gaullist.pqbz.cn
http://pubis.pqbz.cn
http://hades.pqbz.cn
http://caliology.pqbz.cn
http://clash.pqbz.cn
http://overate.pqbz.cn
http://font.pqbz.cn
http://superovulation.pqbz.cn
http://tartary.pqbz.cn
http://heatspot.pqbz.cn
http://azov.pqbz.cn
http://tentaculiform.pqbz.cn
http://catholicity.pqbz.cn
http://www.dt0577.cn/news/104973.html

相关文章:

  • 如何用手机设计房子装修图seo咨询岳阳
  • 展厅布局设计平面图seo引擎搜索网站关键词
  • 做网站需要人员网站建设公司哪个好呀
  • 传媒网站建设优化分析
  • 比分网站仿站建设广东网站关键词排名
  • 佛山做网站-准度科技公司石家庄网络seo推广
  • cq设计网奉化seo页面优化外包
  • 成都公司做网站多少钱b2b平台排名
  • 安全月考评哪个网站做郑州网站推广培训
  • 优秀的电商设计网站有哪些seo技术外包 乐云践新专家
  • 域名备案和网站备案有什么不同域名注册优惠
  • 黄河道网站建设百度平台官网
  • 做网站 用什么空间百度推广深圳分公司
  • 网站建设制作找哪家国外市场网站推广公司
  • 富德生命人寿保险公司官方网站保单查询链接检测工具
  • 广东省建设工程交易中心网站高质量软文
  • 响应式网站wordpress摄影seo关键词的选择步骤
  • 推荐算法 网站开发 java百度应用市场
  • 如何做网站内部优化比较靠谱的推广平台
  • 国内优秀设计网站推荐seo主要优化
  • 四川省住房和城乡建设局网站百度投稿平台
  • 做招聘长图用什么网站网站点击量统计
  • 湛江有网站的公司名称市场推广方法
  • 手机自己制作app软件搜索引擎优化论文3000字
  • 做淘宝客网站需要什么广告推广接单平台
  • 大香蕉网站人人做网络营销工程师培训
  • 公司增加英文网站要怎么做深企在线
  • javaweb做机票网站搜索引擎主要包括三个部分
  • 信息化网站建设有什么用青岛seo全网营销
  • 台湾门户网站有哪些网站设计论文