IM系统四大基本特性-一致性(及解决方案)

一致性:一般来说是指消息的时序一致性。消息的时序一致性其实是要求我们的消息具备“时序可比较性”,也就是消息相对某一个共同的“时序基准”可以来进行比较,所以,要保证消息的时序一致性的一个关键问题是:我们是否能找到这么一个时序基准,使得我们的消息具备“时序可比较性”。在工程实现上,我们可以分成这样几步。1.首先是:如何找到时序基准。2.其次是:时序基准的可用性问题。3.最后是:有了时序基准,还有其他的误差吗,有什么办法可以减少这些误差?1.如何找到时序基准?我们来看看发送方的本地序.
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

IM系统四大基本特性-安全性(及解决方案)

消息安全性的三个维度既然对于即时消息服务来说,安全性是如此的重要和不可妥协,那么到底都有哪些环节可能导致消息安全方面的问题呢?一般来说,从消息的产生和流转的细分上,我们大概从三个维度来描述消息的安全性:1.消息传输安全性2.消息存储安全性3.消息内容安全性如何保证消息传输安全性传输安全性这个比较好理解,存在网络交互的即时消息服务,大多需要通过开放网络来进行消息和信令的传输。可能导致出现安全风险的地方相对也比较多,比如,DNS 劫持会导致发往 IM 服务的请求被拦截发到其他服务器.
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

IM系统功能-消息未读数(及解决方案)

我们看到某个 App 有一条“未读消息提醒”,点进去事件却没有,这种情况对于“强迫症患者”实在属于不可接受;或者本来有了新的消息,但未读数错误,导致没有提醒到用户,这种情况可能会导致用户错过一些重要的消息,严重降低用户的使用体验。所以,从这里我们可以看出“消息未读数”在整个消息触达用户路径中的重要地位。消息和未读不一致的原因那么在即时消息场景中,究竟会有哪些情况导致消息和未读数出现“不一致”的情况呢?要搞清楚这个问题,我们要先了解两个涉及未读数的概念:“总未读”与“会话未读”。我们分别来看看以下两个
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

IM系统功能-心跳机制(及解决方案)

为什么需要心跳机制“长连接”方式给我们带来了众多好处,那么要让消息通过“长连接”实现可靠投递,最重要的环节就在于如何维护好这个“长连接”。由于这个“长连接”底层使用的 TCP 连接并不是一个真正存在的物理连接,实际上只是一个无感知的虚拟连接,中间链路的断开连接的两端不会感知到,因此维护好这个“长连接”一个关键的问题在于能够让这个“长连接”能够在中间链路出现问题时,让连接的两端能快速得到通知,然后通过“重连”来重新建立新的可用连接,从而让我们这个“长连接”一直保持“高可用”状态。...
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

IM系统功能-消息支持多终端漫游(及解决方案)-分布式一致性

所谓的“多终端漫游”是指:用户在任意一个设备登录后,都能获取到历史的聊天记录。如何实现多终端消息漫游那接下来我们看一下,怎么才能让收发的消息能在多个终端漫游。要支持消息多终端漫游一般来说需要两个前置条件:1.是通过设备维度的在线状态来实现。2.是通过离线消息存储来实现。设备维度的在线状态对于在多个终端同时登录并在线的用户,可以让 IM 服务端在收到消息后推给接收方的多台设备,也推给发送方的其他登录设备。这样的话,就要求能够按照用户的设备维度来记录在线状态,这个其实也是支持多端登录
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

IM系统功能-自动智能扩缩容-直播互动场景中峰值流量的应对

业务形态区别和技术挑战首先,在业务形态上,与传统的即时消息场景不太一样,直播互动的流量峰值具有“短时间快速聚集”的突发性,流量紧随着主播的开播和结束而剧烈波动。另外,直播互动是以房间为单位,传统的群聊业务和聊天室业务虽然也有千人群和千人聊天室,但和直播间动辄几十万、上百万人的规模相比还是小巫见大巫的。而且,直播互动由于房间有时效限制和明星效应,用户发言和互动的积极性会更高,毕竟可能“错过这村就没这店了”。超大的房间规模及高热度的互动导致的一个问题,就是消息下推的并发峰值。这里我们可以简单用数字来直观感受
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

IDEA | 类和方法名注释

一、设置类注释模板File -> Settings -> Editor -> File and Code Templates -> Includes/** * @ClassName ${NAME} * @Description TODO * @author 花学长 * @createTime ${YEAR}.${MONTH}.${DAY} ${HOUR...
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

快速入门 Spring boot 2.3.X | 第一篇:创建 Spring boot

前提:IDEA 提前安装 Lombok和Easy Code (自行百度)步骤1.创建Springboot:File-New-Project2.创建项目文件结构3.POM依赖点击Next,然后Finish;注:可能Maven中无Jar包需要从仓库下载,需要耐心等待(可以去听首歌)4.项目结构5.pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.or.
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

快速入门 Spring boot 2.3.X | 第二篇:集成SQL

步骤1.pom<!-- SQL --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version></dependency><dependency> <groupId>org.mybat...
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

快速入门 Spring boot 2.3.X | 第三篇:统一结果

package com.springboot.config;import com.alibaba.fastjson.annotation.JSONField;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.util.Date;@Data@NoArgsConstructor@AllArgsConstructorpublic class Res.
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

JavaUtilS | Redis工具类 - RedisUtil

package com.springboot.util;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.stereotype.Component;import java.util.Set;import java.util.concurren.
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

JavaUtilS | 正则工具类 - RegexUtil

package com.springboot.util;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 正则工具类 * * @author java */public class RegexUtil { /** * 验证Email * @param email email地址,格式:[email protected][email protected],xxx代表邮.
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

JavaUtilS | 短信工具类 - SendSms

1.pom<!-- 阿里云短信 --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.3</version> </dependency>
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

JavaUtilS | 敏感词过滤 - SensitiveWord

package com.yidianqn.util;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;/** * 敏感词过滤类 * * @author java */public class SensitiveWord { /** * 敏感词转化为字符串数组 */ .
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

JavaUtilS | 翻译插件 - TranslateUtil

package com.springboot.util;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import org.jsoup.Jsoup;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.IOException;/.
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

JavaUtilS | JsonWebTokens - JWTUtil

1.pom<!-- JSON Web Tokens --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.0</version> </dependency>.
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

Server | 提高Springboot并发

方案一1、undertow替换tomcat<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> <exclusions> <exclusion> <groupid>org.springfra
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

别在小看MySQL了!阿里三面因为MySQL与阿里P7失之交臂!

上个月的时候因为对现有的工作有些许的不满,就直接辞职跳槽了,投的是面试阿里P7级架构师,本以为准备的够充分再加上这四年的工作经验想要拿下阿里的P7应该是没多大问题的,没想到真到面试的时候却卡在了第三面,还是因为平常擅长的Mysql。 最终与之失之交臂。阿里4面核心面试题01 Zookeeper 部分CAP定理 ZAB协议 leader选举算法和流程02 Redis 部分Redis的应用场景 Redis支持的数据类型(必考) zset跳表的数据结构(必考) Redis的数据过期.
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

SSH Config

# To keep alive sshHost * ControlPersist yes ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p ServerAliveInterval 30Host git.xiaojukeji.com HostName git.xxx.com User ...
分类: 其他 发布时间: 10-27 21:45 阅读次数: 0

软件设计的目标和途径

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.记录一下笔者关于软件设计的一些相关认知。在开始之前,先引入两个概念目标和途径(这里可能会有些咬文嚼字,不过主要是为了区分主观和客观的一些细微差异)。1 目标和途径我们在做某一件事情的时候,总是会带有一定的目的性的:比如说一日三餐,是为了给身体补充所需的能量。那么这三餐具体如何落实呢,则会有多种多样的方式。比如你可以选择吃碳水食物、蔬菜、肉类、牛奶或者蛋类等等;也可以选择通过静脉注射一些所需的葡萄糖或者蛋白质。总之,
分类: 其他 发布时间: 10-27 21:44 阅读次数: 0