Netty+springboot开发即时通讯系统笔记(三)

news2024/11/24 9:56:48

实现长连接负载均衡策略

登录成功返回登陆的im地址。

1.在公共模块里写个RouteHandle接口,然后他的实现类去实现不同的均衡策略。

2.在业务模块的config文件下的beanConfig中定义一个@Bean routeHandle,从配置文件中获取不同的负载均衡策略来初始化RouteHandle。

3.在登录业务里调用方法

一致性哈希解决方案:

1。先说流程,

用treemap存储ip对应的hash值作为value,ip作为值,然后根据自己的信息在map中定位,找到自己对应的ip

2.细节:

1.节点数过少可能会导致hash分布不均,所以可以添加一些虚拟节点来解决,就是多个hash对应同一个ip,具体可以通过原ip+随机数的方式来获取多个不同hash值。

2.这个treemap集合里面的值可能会随着节点数变化,所以每次调用这个方法的时候要先清一下这个map,防止访问到无效节点。并且在方法上加上synchronized确保方法的原子性。

3.对于一致性哈希的解决方案不一定只能用treemap实现,并且需要可以扩展比如排序方法,添加方法,获取节点方法。所以这里使用抽象类实现。在这个抽象类中,add,sort,getFirstNodeValue,processBefore,均可以作为抽象方法交给子类实现,而主方法和hash方法可以直接在抽象类中直接实现。

在这里插入图片描述

im回调业务系统回调

腾讯云给出的流程图很清楚了

从功能角度来看,回调可以分为四大类:

1在线状态回调

2资料关系链回调

3单聊消息回调

4群组系统回调

从处理角度来看,回调可以分为以下两大类:

1事件发生之前回调:回调的主要目的在于让 App 后台可以干预该事件的处理逻辑,即时通信 IM 会根据回调返回码确定后续处理流程(例如发送群消息之前回调)。

2事件发生之后通知:回调的主要目的在于让 App 后台实现必要的数据同步,即时通信 IM 忽略回调返回码(例如群组成员退群之后通知)。

在这里插入图片描述

数据多端同步

​ 比如微信的手机端和电脑端,存在数据同步问题。有以下解决方案:

1.定时轮询拉取,缺点:数据基本是不变的,不停的拉取会造成很多的网络资源浪费。

2.通过回调,缺点:增加了业务服务端与im服务端之间的交互,并且数据同步过度依赖业务服务器。

3.tcp通知

接口鉴权加密

使用hmacsha256可逆加密

消息分发流程

聊天记录的存储和读取

读扩散,写扩散。

用户之间的聊天记录,已读未读,使用写扩散。

使用写扩散可以把索引和数据分开来,聊天内容只存一份,而发送人id,接收人id和消息所属人id可以写多份

群消息使用读扩散。

消息分布式id

  1. UUID(Universally Unique Identifier):UUID 是一种由网络上的唯一标识符组成的标准化规范,它可以在分布式系统中生成唯一的标识符。然而,UUID 的缺点是它的长度较长(128 位),在存储和索引上占用的空间较大,不适合作为数据库索引或 URL 参数。此外,基于随机数生成的 UUID 在高并发环境下可能会导致性能问题。
  2. 自增 ID:自增 ID 是指在数据库中使用自增字段(如 MySQL 中的自增主键)生成唯一标识符。这种方式简单高效,但在分布式系统中存在一些问题。首先,自增 ID 需要依赖数据库自身的自增机制,如果使用多个数据库实例或分库分表,可能会导致 ID 生成的冲突。其次,自增 ID 不适合用于公开的标识符,因为它们可能泄露有关数据库的敏感信息。
  3. 雪花算法(Snowflake Algorithm):雪花算法是一种常用的分布式 ID 生成算法,它可以根据时间戳、机器 ID 和序列号生成唯一的 ID。然而,雪花算法的缺点是它对时钟的依赖性较强,如果系统时钟回拨或不同机器的时钟不同步,可能会导致生成的 ID 不唯一。此外,雪花算法的机器 ID 需要在分布式环境中进行分配和管理,可能需要引入额外的复杂性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/891279.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苹果电脑会自动清理垃圾吗 苹果电脑系统垃圾怎么清除

苹果电脑是很多人喜欢使用的一种电脑,它有着优美的外观,流畅的操作系统,丰富的应用程序和高效的性能。但是,随着时间的推移,苹果电脑也会产生一些不必要的文件和数据,这些文件和数据就是我们常说的垃圾。那…

半导体退火那些事(2)

2.半导体退火的作用 2.1改善半导体的电学性能 退火过程中,材料中的缺陷得到修理,杂质原子和材料内的杙错得到排列,位于能带中动力学的载流子少,能级也就相对于更加密集。因而在退火之后,半导体材料中的电子、空穴浓度…

RabiitMq-4工作队列/消息应答

1.工作队列 工作机制类似一个生产者,多个消费者。工作队列采用轮训的机制,即工作线程一次只能处理一个消息,轮流处理 公共方法 public class MqUtiles {public static final String QUEUE_NAME"hello";public static Channel fu…

预防SQL漏洞注入和规避网络攻击

前言: 虽然近些年SQL注入已经被各类的安全开发框架规避了绝大部分,但SQL注入作为一种最原始的攻击手段之一,破坏力仍然十分强大,因为它直捣黄龙数据中心。所以未雨绸缪,各位不可不重视。 预防SQL注入方法措施: 服务器…

【微信小程序】阶段开发总结2

【微信小程序】阶段开发总结2 《工欲善其事,必先利其器》 一、选择器组件Picker 由于业务需求,需要比较个性化的时间Picker组件和基础Picker组件,便基于微信提供的 picker-view 自行封装了两个Picker组件。 基础Picker: 代码示…

低代码平台这5大选型要素值得参考

伴随低代码的流行,选购低代码成为越来越多人需要面临的挑战。选平台容易,换平台难。不同的企业场景不同,对低代码平台的需求也不一样。因此在做出技术选型时,有五个关键要素需要考虑。 要点1:是否符合自身需求 这是最核…

[JavaWeb]【四】web后端开发-SpringBootWeb入门

目录 一 Spring 二 SpringBootWeb入门 2.1 入门需求 2.2 分析 2.3 开始创建SpringBootWeb 2.4 创建类实现需求 2.5 启动程序 2.6 访问 三 HTTP协议 3.1 HTTP-概述 3.2 HTTP-请求协议 3.3 HTTP-响应协议 3.3.1 响应状态码 && 响应类型 3.4 HTTP-协议解析 前言…

【一】ubuntu20.04上搭建containerd版( 1.2.4 以上)k8s及kuboard V3

k8s 部署全程在超级用户下进行 sudo su本文请根据大纲顺序阅读! 一、配置基础环境(在全部节点执行) 1、安装docker 使用apt安装containerd 新版k8s已经弃用docker转为containerd,如果要将docker改为containerd详见&#xff1a…

6、Mysql免安装版本的配置与使用(2023-08)

1、下载 官网:https://www.mysql.com/downloads/ 点击前往 1.1 官网首页 1.2 首页往下翻,到达下图点击 1.3 选择如图Mysql Cimmunity Server 1.4 选择版本 1.5 点击开始下载 2、安装 2.1 配置环境变量 打开电脑环境变量,在环境变量path中…

抖音矩阵系统源代码部署开发详解

一、引言 抖音矩阵系统是一款基于抖音平台的自动化短视频创作和发布工具。通过对源代码的部署和开发,可以实现大规模、高效率的短视频生产和发布,提高抖音账号的曝光量和关注度。本文将详细介绍抖音矩阵系统源代码的部署和开发过程,帮助读者…

centos安装pandoc

1、首先从官网下载安装包(Release pandoc 3.1.6 jgm/pandoc GitHub) 2、上传到服务器(这里放到 /root目录下了),进行解压 tar -zxvf pandoc-3.1.6-linux-amd64.tar.gz,解压后的文件 3、然后使用命令 ln -s /root/pandoc-3.1.6/bin/pandoc /usr/bin/p…

JavaScript 进阶 第四天

深浅拷贝异常处理处理this性能优化 一. 深浅拷贝 深浅拷贝只针对引用类型 1.1 浅拷贝 拷贝的是地址常见方法 (1)拷贝对象:Object.assign() / 展开运算符 {...obj} (2)拷贝数组:Array.prototype.c…

蓝桥杯每日N题(杨辉三角形)

大家好 我是寸铁 希望这篇题解对你有用,麻烦动动手指点个赞或关注,感谢您的关注 不清楚蓝桥杯考什么的点点下方👇 考点秘籍 想背纯享模版的伙伴们点点下方👇 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…

Hbase的列式存储到底是什么意思?一篇文章让你彻底明白

一、 HBase 定义 Apache HBase™ 是以 hdfs 为数据存储的,一种分布式、可扩展的 NoSQL 数据库。 二、 HBase 数据模型 HBase 的设计理念依据 Google 的 BigTable 论文,论文中对于数据模型的首句介绍。 Bigtable 是一个稀疏的、分布式的、持久的多维排…

性能优化的重要性

性能优化的重要性 性能优化的重要性摘要引言注意事项代码示例及注释性能优化的重要性 性能优化的重要性在 Java 中的体现响应速度资源利用效率扩展性与可维护性并发性能合理的锁策略线程安全的数据结构并发工具类的应用避免竞态条件和死锁 总结代码示例 博主 默语带您 Go to Ne…

【Java】常用工具——字符串

1. String的创建 String s1 "Katnisss Blog"; String s2 new String(); //空的字符串 String s3 new String("Katnisss Blog");2. String的常用方法 方法解释int length()返回字符串长度int indexOf(char c)返回字符c出现的第一个位置int indexOf(Str…

十、RabbitMQ集群

一、clustering 1、 使用集群的原因 单台RabbitMQ遇到内存崩溃、机器故障等情况会导致服务不可用单台RabbitMQ只能满足每秒1000条的消息吞吐量 2、搭建步骤 1、准备三台虚拟机 2、修改3台机器的主机名称 分别为node1、node2、node3 vi /etc/hostname 3、配置节点的hosts文…

【第三阶段】kotlin语言中的数字安全转换函数(String转Int)

字符串有整形相关的转换,尽量使用toIntOrNull()函数 fun main() {//String转Intvar num1"666"println(num1.toInt())//Double不能自动转换为Int,会崩溃,解决崩溃如下:toIntOrNull()如果转换失败会转为nullv…

ATF(TF-A) 威胁模型汇总

安全之安全(security)博客目录导读 目录计划如下,相关内容补充中,待完成后进行超链接,敬请期待,欢迎您的关注 1、通用威胁模型 2、SPMC威胁模型 3、EL3 SPMC威胁模型 4、fvp_r 平台威胁模型 5、RSS-AP接口威胁模型 威胁建模是安全…

290页12万字数字乡村项目规划建设方案WORD

导读:原文《290页12万字数字乡村项目规划建设方案WORD》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 目录 第一章总体概述1 1.1.建设背景1 1.1.1.数…