IM 系统的不可用主要有以下两个原因: 一是无法预测突发流量,即使进行了服务拆分.自动扩容,但流量增长过快时,服务已经不可用了: 二是业务中依赖的这些接口.资源不可用或变慢时,比如发消息可能需要依赖"垃圾内容识别"的 API 来进行消息内容的过滤,下推图片消息可能需要依赖图片服务获取缩略图来进行推流,会导致业务整体失败或者被拖慢而造成超时,影响服务的整体可用性. 如何保证系统的高可用呢? 一.流量控制 在即时消息系统中,突发超高流量时,为了避免服务器整体被流量打死,我们可以通过流控来扔…
IM 系统中,保证消息的可靠投递主要体现在两方面,一是消息的不丢失,二是消息的不重复. 一.消息不丢失 消息丢失的原因 首先看一下发送消息的流程,如下图所示: 消息.可以采取"时间戳比对"机制进行完整性检查. (图片来源于即时消息技术剖析与实战第 04 讲) 用户 A 发出的消息,先到达IM服务端(步骤1),由服务端暂存(步骤2),成功后,服务端将成功的结果返回给用户A(步骤3),同时将消息推送给用户B(步骤4). 在这个过程中,丢失消息有以下几种情况: 1)步骤 1 因为网络不通等原…
一.什么是消息一致性 消息一致性指的是消息的时序一致性,即消息收发的一致性.如果不能保证时序一致性,就会造成聊天语义不连贯,引起误会. 对于点对点的聊天场景,时序一致性保证接收方的接收顺序和发送方的发出顺序一致:对于群聊场景,时序一致性保证所有接收人看到的消息展现顺序一致. 二.消息一致性的难点 1.多发送方.多接收方.服务端多线程并发处理情况下,无法保证时序一致性. 2.分布式环境下,多个机器的本地时钟不一致,没有"全局时钟",不能用"本地时间"保证时序的一致性.…
一.IM的应用场景 聊天.直播.在线客服.物联网等所有需要实时互动.高实时性的场景,都需要应用到 IM 技术.…
在消息产生.流转的各个环节中,需要保证消息传输安全性.消息存储安全性.消息内容安全性. 一.消息传输安全性 消息传输的重要防范点有两个,一是访问入口安全,二是传输链路安全. 1.HttpDNS保证访问入口安全 访问入口指的是即时消息服务中提供的一个公网的接入服务,作为用户收发消息的出入口,它通过域名的方式提供给客户端.常见的问题有DNS劫持. DNS劫持的原因 1)路由器的DNS设置被非法侵入篡改: 2)运营商的LocalDNS可能会导致接入域名的解析被劫持. 这里先解释一下:LocalDNS是…
IM系统如何提升用户发送.浏览图片和音视频消息的体验呢?一是保证图片.音视频消息发送得又快又稳,二是保证用户浏览播放图片.音视频消息时流畅不卡顿. 一.提升用户发送图片.音视频的体验 1. 多上传接入点 针对不同的主流运营商提供不同的上传接入点 IP,然后通过运营商 DNS 解析,让用户能通过本运营商的上传接入点来快速上传图片和视频:后端的图片上传存储服务也可以部署在多线机房,这样上传服务也能快速地把文件流提交给存储层,从而避免从接入点到存储服务的跨网开销,也能解决其他运营商的用户下载图片时需要…
IM 技术经历过几次迭代升级,如图所示: 从简单.低效的短轮询逐步升级到相对效率可控的长轮询: 全双工的 Websocket 彻底解决了服务端的推送问题: 基于 TCP 长连接衍生的 IM 协议,能够实现服务端的主动推送. 一.基于HTTP协议的短轮询与长连接 短轮询 长连接 场景 定期.高频地轮询服务端的新消息.当服务器接到请求后,如果有新消息就将新消息返回给客户端,没有新消息就返回空列表,并关闭连接.即:服务端不管本轮有没有新消息产生,都会马上响应并返回. 当本次请求没有获取到新消息时,不会…
一.什么是消息未读 消息未读包括会话未读和总未读.前者指的是当前用户和某一聊天方的未读消息数,后者指的是当前用户的所有未读消息数,也就是所有会话未读的和.比如用户A收到用户B的2条消息,还收到用户C的3条消息,则用户A与B的会话未读数是2,用户A与C的会话未读数是3,用户A的总未读是5.   二.消息未读的维护 会话未读和总未读数一般都是单独维护的.这是因为: 1)总未读的使用场景较多,会被高频使用.如APP角标未读展示: 2)如果不单独维护,则总未读数需要通过计算所有的会话未读数,一旦会话数较…
假设有以下突发意外情况: 用户进入信号不好的地方,手机没有网络信号了 上网的路由器突然掉线了 这个时候,比如微信发消息,消息就会转圈圈,甚至变成红色叹号-- 上面情况都会导致"长连接"不可用. 我们知道,为了让消息能更加实时.可靠.快速地触达到接收方,大部分 IM 系统会通过"长连接"的方式来建立收发双方的通信通道,长连接一旦建立,就一直存在,除非网络被中断. 有了这基于 TCP 长连接的通信协议,在用户上线连接时,可以在服务端维护好连接到服务器的用户设备和具体 T…
一.什么是多终端漫游 多终端漫游是指:用户在任意一个设备登录后,都能获取到历史的聊天记录.如:QQ 默认漫游 7 天的聊天记录,开通 VIP 会员可漫游 30 天,开通 SVIP 会员可漫游 2 年. 二.多终端漫游的实现 支持消息多终端漫游一般需要两个条件: 设备在线状态 离线消息存储 1. 通过设备的在线状态来实现 记录设备的在线状态,当用户在多个终端同时登录并发送消息时,IM 服务端将收到的消息推给接收方的多台在线设备,同时推给发送方的其他登录设备. 可以看到,当多终端同时在线,只需要维护…
一.IM 系统的高并发场景 IM 系统中,高并发多见于直播互动场景.比如直播间,在直播过程中,观众会给主播打赏.送礼.发送弹幕等,尤其是明星直播间,几十万.上百万人的规模一点也不稀奇.近期随着武汉新型肺炎疫情的蔓延,很多教育机构也提供了"停课不停学"的在线直播教学服务,也是一大直播互动场景. 直播互动场景具有这样的特点:流量峰值具有"短时间快速聚集"的突发性.流量随着开播和结束而剧烈波动,因而会带来很大的高并发压力. 二.IM 系统的高并发解决方案 1.网关全量转发…
一.任务:采用基本的LSTM识别MNIST图片,将其分类成10个数字. 为了使用RNN来分类图片,将每张图片的行看成一个像素序列,因为MNIST图片的大小是28*28像素,所以我们把每一个图像样本看成一行行的序列.因此,共有(28个元素的序列)×(28行),然后每一步输入的序列长度是28,输入的步数是28步. 二.LSTM模型: 输入:x(t-1)的大小为一个28维的向量.……x(t-1),x(t).x(t+1)……有28个.[将一张图片拆成28*28] 隐藏层大小:128 输出:10 U:28…
一.AlexNet:共8层:5个卷积层(卷积+池化).3个全连接层,输出到softmax层,产生分类. 论文中lrn层推荐的参数:depth_radius = 4,bias = 1.0 , alpha = 0.001 / 9.0 , beta = 0.75 lrn现在仅在AlexNet中使用,主要是别的卷积神经网络模型效果不明显.而LRN在AlexNet中会让前向和后向速度下降,(下降1/3). [训练时耗时是预测的3倍] 代码: #加载数据 import tensorflow as tf fr…
笔者本人是个初入机器学习的小白,主要是想把学习过程中的大概知识和自己的一些经验写下来跟大家分享,也可以加强自己的记忆,有不足的地方还望小伙伴们批评指正,点赞评论走起来~ 文章目录 1.k-近邻算法概述 1.1 距离度量 1.2 k值的选择 1.3 分类决策规则 2.k-近邻算法实现 2.1 实现方法 2.2 k-近邻法python3.6实现 2.2.1 k-近邻法实现程序 2.2.2 classify0(inX, dataSet, labels, k)中部分方法注释 2.2.3 如何测试分类器…
说明:hdfs:nn单点故障,压力过大,内存受限,扩展受阻.hdfs ha :主备切换方式解决单点故障hdfs Federation联邦:解决鸭梨过大.支持水平扩展,每个nn分管一部分目录,所有nn共享dn资源.使用JN集群保证数据一致性,使用zk集群解决主备切换 1.若使用主备节点,常常存在的问题:强一致性,若一致性.强一致性(同步):nn主节点必须等到nn副本返回成功后,才能向客户端返回成功.主和副本之间可能会有如网络延迟.阻塞等问题,就造成了nn的不可用,违背了HA初衷.弱一致性(异步):…
1 1 1 Redis in Action : Redis  实战学习笔记 1 http://redis.io/ https://github.com/antirez/redis https://www.manning.com/books/redis-in-action Redis in Action Josiah CarlsonForeword by Salvatore Sanfilippo June 2013 ISBN 9781617290855 320 pages printed in b…
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第11章 - 使用Apriori算法进行关联分析. 基本概念 关联分析(association analysis)或者关联规则学习(association rule learning) 这是非监督学习的一个特定的目标:发现数据的关联(association)关系.简单的说,就是那些数据(或者数据特征)会一起出现. 关联分析的目标包括两项:发现频繁项集和发现关联规则.首先需要找到频繁项集,然后才能…
Ext.Net学习笔记11:Ext.Net GridPanel的用法 GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: <ext:GridPanel runat="server" ID="grid" ColumnLines="true" Width="500" Height="200"> <Store> <…
原文:[原创]WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿 在上面一篇文章中,我们对不同版本的IIS,以及ASP.NET得的实现机制进行了详细而深入的分析.在介绍IIS7.0的时候,我们谈到,HTTP.SYS+W3SVC实现了基于HTTP的请求监听,在此基础上引入了以下三组网络监听器(Listener)和监听适配器(Adapter),实现了基于TCP.Named Pipes和MSMQ的网络监听,图1揭示了IIS7的总体结构. TCPListener|TCP Listener Ada…
目标:限定列的有效值,将一列的有效字段值约束在一个固定的集合中.类似于数据字典. 反模式:在列定义上指定可选值 1. 对某一列定义一个检查约束项,这个约束不允许往列中插入或者更新任何会导致约束失败的值:            create table Bugs(status varchar(20) check(status in('new','in progress','fixed'))). 2.使用域或者用户自定义类型(UDT)等方法.         3.使用触发器:编写一个触发器,当修改指…
golang学习笔记11   golang要用jetbrain的golang这个IDE工具开发才好  jetbrain家的全套ide都很好用,一定要dark背景风格才装B   从File-->setting 里面进去也可以设置风格和字体大小  注册的可以找个代理的 license 服务器 或者自己搭建一个 https://www.jetbrains.com/go/download window下也可以选择Visual Studio Code: Visual Studio Code - Code…
Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript Object Notation",意思是JavaScript对象表示法.    2. 它是一种基于文本,独立于语言的轻量级数据交换格式.    3. json的两种结构:对象{key:value,key:value,...}  和  数组 [value, value2, ... ]    4. js…
目录(?)[-] 在AIDL中定义服务接口 根据AIDL文件自动生成接口代码 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Remote Service在之前的学习笔记 Android学习笔记(五三):服务Service(下)- Remote Service中介绍过.远程服允许行其他应用调用,及允许RPC(remote procedure call).在Android中remote需要…
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Android提供服务,服务是运行在后台的组件,没有UI,独立于activity的生命周期.有两种类型的服务:local services和remote services.本地服务是只能被本应用调用,而远端服务则可以被其他应用调用.远端服务通过AIDL(Android Interface Definition Language)描述.在服务…
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记11(cookie处理)'''from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.support.select import Select import time,osimpor…
1. Future的使用 Future模式解决的问题是.在实际的运用场景中,可能某一个任务执行起来非常耗时,如果我们线程一直等着该任务执行完成再去执行其他的代码,就会损耗很大的性能,而Future接口就是Future的实现,它可以让当前线程将任务交给Future去执行,然后当前线程就可以去干别的事,知道耗时任务执行完成之后,当前线程直接获取结果即可.FutureTask的使用比较简单,只需要先实例化一个Callable对象,重写call方法,再创建一个FutureTask对象,将Callable…
1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 man 数据库保存在以下的目录中(可以使用 manpath 命令查看): /usr/local/man /usr/local/share/man /usr/share/man 在每一个保存位置可以发现多个以 manX 命名的子目录(X 代表数字,范围为 1~9,分别对应不同的命令): 1:可执行文件…
<C++ Primer Plus>学习笔记11 第17章 输入.输出和文件 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<…
SpringMVC:学习笔记(11)——依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许Spring解析并将相关bean注入到bean中. 使用@Autowired在属性上 这个注解可以直接使用在属性上,不再需要为属性设置getter/setter访问器. @Component("fooFormatter") public class FooFormatter { publi…
Spring 源码学习笔记11--Spring事务 Spring事务是基于Spring Aop的扩展 AOP的知识参见<Spring 源码学习笔记10--Spring AOP> 图片参考了https://www.processon.com/view/60f4d859e0b34d0e1b6bb40c?fromnew=1 逻辑事务和物理事务的概念来自https://wiyi.org/physical-and-logical-transactions.html 本文忽略了编程式事务,探究了基于事务注…