首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

跟着源码学IM(十一):一套基于Netty的分布式高可用IM详细设计与实现(有源码)

多线程可能是导致时序不一致影响的因素。以上:如果保持绝对的实现,那么只能是一个发送方,一个接收方,一个线程阻塞式通讯来实现。那么性能降低。...2)客户端如何保证顺序:为什么要保证顺序?因为消息即使按照顺序到达服务器端,可能出现:不同消息到达接收端后,可能会出现“先产生的消息后到”“后产生的消息先到”等问题。...这些判断指标主要是:1)每条消息的ack时间 RT时间2)同时在线人数以及同时发消息的人数3)每台机器的负载CPU和内存和网络IO和磁盘IO以及GC参数当开启了柔性保护机制,那么返回失败,用户端体验不友好...如果Redis宕机,造成下面结果:1)消息中转不过去,所有的用户可以发送消息,但是都接收不了消息;2)如果有在线机制,那么系统都认为是离线状态,走手机消息通道推送。...21.3为什么接入层用LSB返回的IP来做接入呢?

1K40

笔记︱统计评估指标AUC 详解

当然带来问题: AUC 反应了太过笼统的信息。无法反应召回率、精确率等在实际业务中经常关心的指标。...这种问题一般相对好查,很多时候在离线阶段就能发现。 明显的表现就是训练集和测试集差异比较大 2. 线上线下特征不一致 据我所知,这种情况是导致离线在线跌或者没效果的最常见情况。...首先是代码不一致,例如,离线用户特征的加工处理采用scala/python处理,抽取用户最近的50个行为,在线特征抽取用c++实现只用了30个。...只要离线在线用不同的代码抽取就很容易存在这种代码带来的不一致。 另外一种线上线下不一致,是由于数据的不一致导致。 这在离线拼接样本和特征的pipeline中比较常见。...6 线下AUC提升为什么不能带来线上效果提升?–测试和评估的一些真相 7 精确率、召回率、F1 值、ROC、AUC 各自的优缺点是什么? 8 如何解决离线和线上auc和线上点击率不一致的问题?

2.9K10
您找到你想要的搜索结果了吗?
是的
没有找到

IM消息机制(一):保证在线实时消息的可靠投递

A给用户B发送一个“你好”,很容易想到,流程如下: client-A向im-server发送一个消息请求包,即msg:R im-server在成功处理后,回复client-A一个消息响应包,即msg:...A 如果此时client-B在线,则im-server主动向client-B发送一个消息通知包,即msg:N(当然,如果client-B不在线,则消息会存储离线) 四、上述消息投递流程出现的问题 从流程图中容易看到...九、消息的去重 解决方法很简单,由发送方client-A生成一个消息去重的msgid,保存在“等待ack队列”里,同一条消息使用相同的msgid来重传,供client-B去重,而不影响用户体验。...十、其它 上述设计理念,由客户端重传,可以保证服务端无状态性(架构设计基本准则) 如果client-B不在线,im-server保存了离线消息后,要伪造ack:N发送给client-A 离线消息的拉取,...为了保证消息的可靠性,需要有ack机制,但由于拉取离线消息不存在N报文,故实际情况要简单的多,即先发送offline:R报文拉取消息,收到offline:A后,再发送offlineack:R删除离线消息

2.1K21

webim如何保证消息的可靠投递

R:客户端主动发送给服务器的报文 A:服务器被动应答客户端的报文,一个A对应一个R N:服务器主动发送给客户端的报文 二、普通消息投递流程 用户A给用户B发送一个“你好”,流程如下: ?...主动向client-B发送一个消息通知包,即msg:N(当然,如果client-B不在线,则消息会存储离线) 三、上述消息投递流程出现的问题 从流程图中容易看到,发送方client-A收到msg:A后,...八、消息的去重 解决方法很简单,由发送方client-A生成一个消息去重的msgid,保存在“等待ack队列”里,同一条消息使用相同的msgid来重传,供client-B去重,而不影响用户体验。...九、其他 1)上述设计理念,由客户端重传,可以保证服务端无状态性(架构设计基本准则) 2)如果client-B不在线,im-server保存了离线消息后,要伪造ack:N发送给client-A 3)离线消息的拉取...,为了保证消息的可靠性,需要有ack机制,但由于拉取离线消息不存在N报文,故实际情况要简单的多,即先发送offline:R报文拉取消息,收到offline:A后,再发送offlineack:R删除离线消息

1.5K90

个推推送Android问题检测

先测试一下,在工具箱里进行推送,看看是否延迟。 2.      判断网络原因,是不是因为无线或信号不好导致的客户端假在线。 3.      查日志,看一下客户端的回执有没有上来。 4.     ...5、在调用个推接口的时候,返回状态码,注:返回客户端状态(status),有如下两种状态:在线返回:successed_online离线返回:successed_offline还有一种是 successed_ignore...用户再次登录的话,产生新的Clientid。 2.      用户精细分类:就类似于用户画像,通过大数据计算给用户附上特定属性。 3.     ...11、CID在哪些情况下变或失效 Android: 1.      用户超过三个月未登录,之后再登录重新生成一个CID 2.     ...如果获取到10008而后续没有获取到clientid,很有可能是当时网络的原因导致clientid一直登录不成功导致的,所以一直离线 这种情况并没有问题的,后续对你不会有太大的影响,所以可以放心使用

2K70

EasyNVR通道离线但视频流可正常播放是什么原因导致的?

一般视频通道接入EasyNVR后,视频广场就会清楚显示视频的快照和在线情况,快照默认一分钟更新一次,在线情况也是同步更新。 有EasyNVR的用户反馈在平台中,通道显示是离线状态,但是流可以正常播放。...经过多次观察后发现用户的流实际是不稳定的,经常性在线离线反复跳跃。...这里我们需要提到一个底层库EasyStreamClient,这个库有个现象,就是流只会连接一次,如果流离线了,连接失败就会阻塞,所以如果流再次上线也是不会重新连接的,造成流实际在线但是EasyNVR上显示离线...底层库逻辑改为连接后无论在不在线都直接返回结果。如果不在线就继续重连,修复测试后离线不会上线的问题解决了,但是在给用户测试时出现cpu升高的情况,而我们本地多次测试都没有这种情况发生。...接着查看了EasyNVR的线程,打印了线程里的状态,发现实际连接的流端口和用户填写的不一致,如下: 抓包分析后发现用户的流会出现重定向的情况: 根据以上我们确定是重定向的流消耗了cpu资源,在我们内部经过多次测试和讨论后

35010

是什么原因导致通道离线但视频流依然正常播放?

一般视频通道接入EasyNVR后,视频广场就会清楚显示视频的快照和在线情况,快照默认一分钟更新一次,在线情况也是同步更新。 有EasyNVR的用户反馈在平台中,通道显示是离线状态,但是流可以正常播放。...经过多次观察后发现用户的流实际是不稳定的,经常性在线离线反复跳跃。...这里我们需要提到一个底层库EasyStreamClient,这个库有个现象,就是流只会连接一次,如果流离线了,连接失败就会阻塞,所以如果流再次上线也是不会重新连接的,造成流实际在线但是EasyNVR上显示离线...底层库逻辑改为连接后无论在不在线都直接返回结果。如果不在线就继续重连,修复测试后离线不会上线的问题解决了,但是在给用户测试时出现cpu升高的情况,而我们本地多次测试都没有这种情况发生。...接着查看了EasyNVR的线程,打印了线程里的状态,发现实际连接的流端口和用户填写的不一致,如下: 抓包分析后发现用户的流会出现重定向的情况: 根据以上我们确定是重定向的流消耗了cpu资源,在我们内部经过多次测试和讨论后

59420

拿到一台新的物理服务器,这些事情一定要做!

你好,这里是网络技术联盟站。 服务器大家都玩过哈,不过大家玩的最多的应该就是云服务器了,今天给大家讲讲物理服务器。...在线互动式UPS 在线互动式UPS监控输入电源,在检测到电压特别高或者特别低的时候,自动去调节。...备用 UPS 备用 UPS又称离线 UPS ,在中小型企业中应用最为广泛,价格十分实惠,当UPS监控到服务器断电的时候,备用UPS就会工作,平时只需要充电就行,这种情况下优点延迟,这个跟在线双转换不太一样...在多少情况下,建议直接禁用root用户,可以建一些特权用户,赋予它们sudo权限即可。...时钟漂移导致很多问题,比如在授予访问权限之前测量服务器和身份验证基础设施之间的时间偏差,通过这个时间差去进行身份验证。还有就是服务与服务之间时间不一致导致难以解决的bug。

88500

Java高性能系统缓存的最佳实践

这样服务器下电不会丢数据。绝大多数用于生产系统的服务器,都会使用多块磁盘组成磁盘阵列,这样即使其中的一块异常,可把数据从其他磁盘中恢复。 另外磁盘便宜,就可用较低成本,存储海量消息。...os利用系统空闲物理内存给文件读写做缓存,这缓存叫做PageCache。应用程序在写文件时,os先把数据写入PageCache,成功写进后,对于用户代码,写入就结束了。...这些问题都会导致缓存数据和磁盘数据不一致,而且,在下次更新这条数据前,这个不一致问题一直存在。 当然,这些问题不是不能解决,比如使用分布式事务,只是牺牲性能、实现复杂度,代价很大。...另一种较简单方法 定时刷盘 一般每次同步时直接全量更新,因为是在异步线程中更新,同步速度即使慢点不是大问题。...再比如,有会话的系统,你知道现在哪些用户在线,哪些用户离线,那优先置换那些已离线用户的数据,尽量保留在线用户的数据也是好策略。

95610

拿到一台新的物理服务器,这些事情一定要做!

你好,这里是网络技术联盟站。 服务器大家都玩过哈,不过大家玩的最多的应该就是云服务器了,今天给大家讲讲物理服务器。...UPS 类型 一般来说,从大的角度,UPS分为两种类型:在线 UPS 与备用 UPS 在线 UPS 在线 UPS 其实又分为两种:在线互动式UPS、在线双转换UPS 在线互动式UPS 在线互动式UPS监控输入电源...备用 UPS 备用 UPS又称离线 UPS ,在中小型企业中应用最为广泛,价格十分实惠,当UPS监控到服务器断电的时候,备用UPS就会工作,平时只需要充电就行,这种情况下会有点延迟,这个跟在线双转换不太一样...在多少情况下,建议直接禁用root用户,可以建一些特权用户,赋予它们sudo权限即可。...时钟漂移导致很多问题,比如在授予访问权限之前测量服务器和身份验证基础设施之间的时间偏差,通过这个时间差去进行身份验证。还有就是服务与服务之间时间不一致导致难以解决的bug。

87230

IM开发干货分享:我是如何解决大量离线消息导致客户端卡顿的

3.2 业务痛点 随着业务蓬勃发展,用户的不断增多,用户创建的群、加入的群和好友不断增多和聊天活跃度的上升,某些用户在线期间,产生大量的离线消息(尤其是针对群聊,离线消息特别多)。...(庆幸的是,在线消息目前没有性能问题)。 所以针对上述问题,结合产品对IM系统的远大规划,我们服务端决定优化离线消息(稍微吐槽一下,客户端处理能力不够,为什么要服务端做优化?...客户端反馈,即使客户端采用异步方式会有比较严重的性能问题。 ▶ 【于是我想】: 为什么客户端收到消息后还没有将数据存储到数据库就回复给服务端ack?很有可能存储失败,这本身不合理,这是其一。...针对这个方案,客户端提出一些问题: 1)虽然这种方案,客户端不会卡死,但是如果当前用户离线消息特别多,那么收到所有离线消息的时间非常长; 2)客户端每次收到消息后会刷新界面,很有可能客户端会发生,界面上下乱跳的画面...完全没必要用在线消息的ack逻辑去处理离线消息,反而很不合理,不仅流程上有问题,浪费kafka、redis等中间件性能。

2.1K11

零基础IM开发入门(三):什么是IM系统的可靠性?

用户行为来讲,消息“可靠性”应该分为两种类型: 1)在线消息的可靠性:即发送消息时,接收方当前处于“在线”状态; 2)离线消息的可靠性:即发送消息时,接收方当前处于“离线”状态。...5、TCP并不能保证在线消息的“可靠性” 接上节,在一个典型的服务端中转型IM架构中,即使使用“可靠的传输协议”TCP,不能保证聊天消息的可靠性。为什么这么说?...简单来说,如果 Sender 发送一个 Seq = 1,长度为 100 bytes 的包,那么 receiver 返回一个 Ack = 101 的包,如果 Sender 收到了这个Ack 包,说明数据确实被...关于IM聊天消息的可靠性保障问的深入讨论,可以详读:《IM消息送达保证机制实现(一):保证在线实时消息的可靠投递》,该文深入讨论这个话题。...7、典型的离线消息收发流程 说完在线消息的“可靠性”问题,我们该了解一下离线消息了。 7.1 离线消息的收发存在“不可靠性” 下图是一张典型的IM离线消息流程图: ?

85861

业界总结 | 如何改进双塔模型,才能更好的提升你的算法效果?

为什么呢?因为双塔模型在NLP和搜广推中的应用实在太广泛了。不管是校招社招,面试NLP或推荐算法岗,这已经是必问的知识点了。...第一类 在离线阶段直接将BERT编码的document映射为固定长度的向量,在线阶段将query映射为固定长度的向量,然后通过打分函数计算最后的得分,例如:Sentence-BERT,DPR。...第二类 模型在离线阶段将BERT编码document得到的多个向量(每个向量对应一个token)全部保留,在线阶段利用BERT将query编码成多个向量,和离线阶段保留的document的多个向量进行交互打分...第三类 模型是前两种的折中,将离线阶段BERT编码得到的document向量进行压缩,保留k个(k<m)个向量,并且使用一个向量来表示query(一般query包含的信息较少),在线阶段计算一个query...ANCE提出了一种迭代式生成负样本的思路:随着训练的进行,模型对于文本的表示变化,之前对于模型较难的负样本可能变得不那么难,而之前没见过的负样本对于模型可能较难区分。

46020

TCP三次握手

三次握手 第一次:客户端发送请求给服务端,确定服务端可以接收到消息 第二次:服务端收到客户端的请求后,做出回应 第三次:客户端发送请求给服务端,建立TCP连接 最基础的是两次握手,那么为什么客户端还会向服务器发送一次请求呢...假设没有第三次握手怎样?...,你的好友回复“在的”,你回复“我在”,好了确定你俩都在线可以开始聊天了,这就是三次握手。 如果是你发送“在吗?”...因为网络原因消息没被发送出去,你以为你的好友不在线随之离线,等你的设备在网络环境好的情况下吧你刚刚的消息又发送出去了,你的好友收到消息,回复了你“在的”以后,等待与你的聊天,而你又刚好离线了,就会造成你好友不好的体验...这就是两次握手造成的问题。

42430

深度解析开源推荐算法框架EasyRec的核心概念和优势

为什么看似简单的改进,你没有能够发现呢? 为什么尝试了类似的方向,但是没有搞出来效果呢?...特征一致性 特征工程是搜广推流程里面的关键部分,通常是造成线上线下效果不一致的原因。为了能够在快速迭代中保持离线在线的一致性,通常采用的方法是线上线下采用同一套代码。...这两种方式各有优缺点:由于日志丢失等问题,离线模拟通常会和线上有少量的不一致在线落特征如果要增加新的特征通常要等待比较长的时间才能攒够样本。...我们的解决方案是在线用户行为的序列落下来,然后离线通过相同的jar包来加工出各种统计特征,如1h/2h/../24h的点击次数。...在线特征工程对计算效率要求比较高,而计算量离线要大:离线计算的样本通常是1个user配对m个曝光的item(召回模型的话,增加一些随机采样的负样本), 而线上计算的样本是1个user配对n个item

87420

微信为什么不丢消息?

R:客户端主动发送给服务器的报文 A:服务器被动应答客户端的报文,一个A对应一个R N:服务器主动发送给客户端的报文 二、普通消息投递流程 用户A给用户B发送一个“你好”,流程如下: ?...主动向client-B发送一个消息通知包,即msg:N(当然,如果client-B不在线,则消息会存储离线) 三、上述消息投递流程出现的问题 从流程图中容易看到,发送方client-A收到msg:A后,...六、消息的超时与重传 client-A发出了msg:R,收到了msg:A之后,在一个期待的时间内,如果没有收到ack:N,client-A尝试将msg:R重发。...八、消息的去重 解决方法很简单,由发送方client-A生成一个消息去重的msgid,保存在“等待ack队列”里,同一条消息使用相同的msgid来重传,供client-B去重,而不影响用户体验。...九、其他 1)上述设计理念,由客户端重传,可以保证服务端无状态性(架构设计基本准则) 2)如果client-B不在线,im-server保存了离线消息后,要伪造ack:N发送给client-A 十、总结

3.5K91

周五了,不想研究 ChatGPT 了,来看个国产好项目!

你好呀,我是歪歪。 周五了,今天我要给大家推荐一个近期荣获 GVP 称号的项目—— Eoapi,界面简洁的同时满足我的核心诉求。...在线Demo: https://www.eoapi.io/?utm_source=wx&utm_campaign=k-08 界面简洁 在线Demo: https://www.eoapi.io/?...国产,能更好地理解国内用户的需求,与开发团队沟通无障碍 详尽的文档 目前该项目在 Gitee 上获得了官方的认可,荣获 GVP (Gitee 最有价值开源项目)称号。...努力提升用户体验是 Eoapi 做开源项目的初心,为了让所有用户能有较好的下载体验,Eoapi 会在后续任何一个新版本发布的第一时间同步 Gitee 。...如何联系 关于项目,如果你有任何的疑问或者建议,老规矩,记得去 Github 或者 Gitee 上提 Issue ,他们第一时间处理。

32230

清华大学陈文光教授:AI时代需要怎样的数据处理技术?

上面是在线链路,一个数据请求先经过预处理,再通过训练好的模型做推理,比如风控、分类等等,再把结果反馈到 KV 里,直接服务用户的请求。 下面是离线链路,收到数据请求后,我们要想办法处理,去更新模型。...经过一段时间后再把模型更新到在线链路上。 在线离线两个链路分开,在生产中会遇到一些比较严重的问题,主要就是在线离线不一致。...造成这种现象的根本原因,就是我们通过不同的数据链路把新数据接入进来,离线链路处理的数据与在线链路不一致。 怎么解决这个问题?最好的解决方案,就是只有一套数据。...这两个系统的数据通过 TuGraph Dataflow 处理完成后,一条线通过 TuGraph DB 去做在线链路,另外一个经过存储去完成后续的离线分析,这时就会出现数据不一致的情况。...(三)数据处理与 AI 计算一体化 有人可能问,数据处理不就是 SQL 吗?AI 是神经网络层面的东西,AI 与 SQL 为什么结合到一起?我举一个例子。

29910

同盾科技 x TiDB丨实时数据架构为风控智能决策保驾护航

,上下游数据经常出现数据不一致的情况,非常影响提供给作业的数据质量。...项目的核心目标是在海量数据落库下,保障在线离线数据的数据库的准实时性和一致性,并提供优质的数据服务给内部的风控系统开发人员、算法模型工程师和运营人员加工数据。为什么选择 TiDB?...即使在使用 TiDB 的过程中遇到一些问题马上能在社区得到解决。...未来在 TiDB 推出一个 DM worker 支持多个数据源的特性后,同盾再考虑进行替换。离线数据层离线数据层中的大数据平台主要管控 TiDB 的元数据和实际到下游的同步情况。...未来规划同盾科技是 TiDB 非常早期的用户,多年的使用让同盾确信 TiDB 是一款非常好的产品,未来继续致力于在更多的场景依靠 TiDB 生态落地赋能一些业务场景。

53520

安全科普:流量劫持能有多大危害?

即使浏览再平常不过的网页,或许一个悄无声息的间谍脚本已暗藏其中,正偷偷访问你那登录着的网页,操控起你的账号了。 听起来似乎很玄乎吧,砖家似乎没说已登录的账号怎么样。...直到用户切回窗口,再恢复到原先那个页面。 ? 由于泄露的是明文的账号和密码,即使数量不多,能通过社工获取到用户的更多信息,最终导致更严重的泄露。...最简单的方法,就是嵌套一个原页面的框架,并在 URL 里加上随机数,确保是最新的在线内容。 ? 因为嵌套的是同域框架,最终仍能被入侵脚本所控制。 不过,离线存储投毒的后期影响小一些。...未来用户在安全的网络里打开页面时,浏览器再次请求 .appcache 文件。由于这个文件并不一定存在,因此浏览器很可能删除掉离线数据。...钓鱼插件 有时为了能让网页获得更多的在线能力,安装插件必不可少,例如支付控件、在线播放器等等。在方便使用的同时,埋下了安全隐患。 如果是一些小网站强迫用户安装插件的,大家几乎都是置之不理。

1.3K60
领券