地理信息安全与保密
|
有心急的同学就要问了,丢了3%的消息吗?并没有,这3%的消息不会丢失,只是不保证及时触达给用户。我们的消息同步模型是推拉结合模式,在用户拉取消息时会拉取到设备当前位点与服务端最新位点的所有消息,accs下行失败的消息会通过主动拉模式获取到,但客户端主动拉取消息的触发时机有限,主要有以下几个:
收到一条推送消息,客户端发现新消息的位点跟本地最新的位点有gap,触发同步
可见上述主动同步消息的触发很大程度上依赖用户行为或者有没有收到新消息,难以保证消息及时到达。如果是用户高频打开的IM软件,这样也不会有太大的问题,但是闲鱼app的活跃度较低,有时候甚至依赖IM消息拉活,而且一条延迟的消息触达可能导致用户错过一笔交易,闲鱼消息不允许有这样的延迟发生。基于上述分析,我们先描述一个数据指标来反映现状,通过上面的描述可知,accs消息并不全都是推下来的,也可能是主动拉下来的,如果是推,必定可以及时到达,如果是拉,则受限于用户行为。拉的这部分消息,我们定义为accs消息补偿到达,然后计算accs消息补偿到达耗时,消息范围限定为服务端accs成功下行但是客户端通过主动拉取同步到的消息,以往的版本这个数据在60分钟左右。需要注意这个数据并不是消息触达到用户的耗时,因为如果在线转离线触达,拉取到消息的时间取决于用户行为(用户何时打开了app),但这个数据也能大致反映在线消息的到达延迟状况。 下一次响应变慢的时候,我们找到对应时间点的jstack日志文件,发现里面有很多线程阻塞在logback输出日志的过程,后来我们精简了log,并且把log输出改成异步,问题解决了,这个脚本果真好用!建议大家保留,以后遇到类似问题时,可以拿来用! 故障六:数据库死锁问题在分析案例之前,我们先了解一下MySQL InnoDB。 在MySQL InnoDB 引擎中主键是采用聚簇索引的形式,即在B树的叶子节点中既存储了索引值也存储了数据记录,即数据记录和主键索引是存在一起的。 而普通索引的叶子节点存储的只是主键索引的值,一次查询找到普通索引的叶子节点后,还要根据叶子节点中的主键索引去找到聚簇索引叶子节点并拿到其中的具体数据记录,这个过程也叫“回表”。 故障发生的场景是关于我们商城的订单系统。有一个定时任务,每一小时跑一次,每次把所有一小时前未支付订单取消掉。而客服后台也可以批量取消订单。
订单表t_order结构大至如下: 下推的消息未达 感知长连中断并重连只能在大多数时间保证长连接的有效性,但是在长连接无效或不稳定期间下推的消息客户端可能根本收不到,简单说就是仅仅有重连机制无法保证下行消息必达,可能有以下场景导致下行消息失败:
我们通过数据埋点统计得出,accs下行成功率在97%左右 (编辑:广元站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

