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

一套十万级TPS的IM综合消息系统的架构实践与思考

我们的IM综合消息中心技术特性:1)综合消息中心是会有拉历史聊天记录(服务端拉)的功能,存储了全量消息;2)综合消息中心的客户端,需要支持网页版本。...,那么下次该用户登录进来,可以从缓存中拉取到该消息,并且清掉缓存;2)写扩散对于我们这类通用综合消息平台并不友好,由于接入方大部分是网页版的客户端,所以没有缓存消息的能力,浏览刷新就没有了任何消息,所以需要实时去服务端拉历史消息...5.2 取消了位置服务取消了位置服务(这里的位置不是指的IM消息里的地理位置消息哦),消息分发服务集成位置服务的能力。...5.3 存储由tidb改成了mysql存储端由tidb改成了mysql,增强了可维护性,消息服务使用mysql主从读写分离方式,提高了消息落库速度与检索速度的同时,也减轻数据库压力。...而我们使用mysql更加稳定,大家对mysql的学习成本相对较低。针对消息服务使用读写分离的方式,能大大提高消息的吞吐量。

91630

MySQL提升笔记(1):MySQL逻辑架构

值得一提的是在MySQL8.0中取消了查询缓存,大概的理由是查询缓存存在严重的可伸缩性问题,并且很容易成为严重的瓶颈缓存,将缓存移动到客户端能收获更好的性能。 ?...5、执行 MySQL通过解析知道了你要做什么,通过优化知道了该怎么做,于是就进入了执行阶段,执行会根据一系列的执行计划去调用存储引擎的接口去完成SQL的执行。...查询也会在优化之前调用precheck验证权限)。...比如我们这个例子中的表T中,ID字段没有索引,那么执行的执行流程是这样的: 调用InnoDB引擎接口这个表的第一行,判断ID值是不是10,如果不是则跳过,如果是则将这行存在结果集中; 调用引擎接口...第一次调用的是“满足条件的第一行”这个接口,之后循环“满足条件的下一行”这个接口,这些接口都是引擎中已经定义好的。

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

【Python自动化】定时自动采集,并发送微信告警通知,全流程案例讲解!

我原创开发了一套定时自动化爬方案,完整开发流程如下:采集数据->筛选数据->存MySQL数据库->发送邮件->微信提醒->定时执行如果您现在苦于每天繁琐、重复的数据采集工作,可尝试套用该自动化方案,节省人力...数据库结果(部分数据已脱敏):Excel结果(部分数据已脱敏):微信消息提醒:收件箱告警邮件:邮件正文内容(部分数据已脱敏):以上。...三、代码讲解3.1 爬虫采集行政处罚数据爬目标是某公示平台的行政处罚数据。通过浏览的开发者模式分析接口,页面显示数据与接口返回数据一致,故可通过爬接口的方式采集。...3.2 存MySQL数据库如上所述,数据保存到csv文件作为临时存储,下面保存到MySQL数据库作为持久性存储。...[手动狗头]3.4 定时机制定时执行也是采用简单粗暴的方式,直接os.system调用分别的py文件,死循环加sleep的方式:while True: # 执行爬虫 print(get_now

25610

从零搭建精准运营系统

日常消息:由业务人员通过条件筛选锁定用户群,定时或即时给批量用户发送消息或者优惠券 触达消息:主要由用户自身的行为触发,比如登陆、进件申请、还款等,满足一定筛选条件实时给用户发送消息或优惠券 对于用户筛选条件...report server:事件上报服务,数据源之一 tags:用户画像系统计算出来的标签,数据源之一 触发场景路由:分实时触发和延迟触发,实时触发直接到下一步,延迟触发基于 redis的延迟队列实现 用户筛选处理...:将筛选规则翻译为ES查询语句到ES查询用户数据,可以是批量的和单个用户的 幂等处理:对数据做幂等处理,防止重复消费 变量渲染处理:对推送内容做处理 推送适配器:兼容不同的推送方式 BloomFilter...记录:将推送用户和流水号记录到redis,用于幂等处理 推送事件记录:将推送事件推入kafka 定时任务模块:基于elastic-job,处理定时推送任务 规则配置控制台:提供可视化配置界面(运营规则配置...运营位服务:提供外部接口,根据条件匹配运营位(如启动图、首页banner图片等) 总结与展望 系统基本满足了目前的业务需求,对转化率等运营指标提升显著 可以扩展其它业务,如推荐、风控、业务监控等 规则定时拉

1.7K30

一文理解Kafka重复消费的原因和解决方案

max.poll.records:单次消费者拉的最大数据条数,默认值500。...原因2:设置enable.auto.commit为true,如果在关闭消费者进程之前,取消了消费者的订阅,则有可能部分offset没提交,下次重启会重复消费。...在缩短单条消息消费的同时,根据实际场景可将max.poll.interval.ms值设置大一点,避免不必要的Rebalance。可根据实际消息速率适当调小max.poll.records的值。...引入消息去重机制。例如:生成消息时,在消息中加入唯一标识符如消息id等。...在消费端,可以保存最近的max.poll.records条消息id到redis或mysql表中,这样在消费消息时先通过查询去重后,再进行消息的处理。 保证消费者逻辑幂等。

5.1K10

ExcelVBA打开文件对话框之.GetOpenFilename 方法

参数 返回值 Variant 【说明】 在 FileFilter 参数中传递的该字符串由文件筛选字符串对以及后跟的 MS-DOS 通配符文件筛选规范组成,中间以逗号分隔。...例如,下列字符串指定两个文件筛选 - 文本和加载宏:“文本文件 (*.txt)、*.txt、加载宏文件 (*.xla)、*.xla”。...如果用户取消了对话框,则该值为 False。 本方法可能更改当前驱动或文件夹。 【示例】 此示例显示“打开”对话框,并将文件筛选设置为文本文件。...如果用户选择了文件名,则此代码在消息框中显示该文件名。...Boolean 综上所述,我们可以用 if TypeName(obj)="Boolean" Then msgbox "你选择了“取消”,将退出程序":exit sub ◆我的学习之“本方法可能更改当前驱动或文件夹

2.8K20

​Python爬虫 --- 2.4 Scrapy之天气预报爬虫实践

我们要爬的就是图中的:合肥七天的前期预报: [pic1.png] 数据的筛选: 我们使用chrome开发者工具,模拟鼠标定位到相对应位置: [pic2.png] 可以看到我们需要的数据,全都包裹在 <...我们用bs4、xpath、css之类的选择定位到这里,再筛选数据就行。 本着学习新知识的原则,文中的代码将会使用xpath定位。...主要目的是: 将Downloader发给我们的Response里筛选数据,并返回给PIPELINE处理。...return items 编写PIPELINE: 我们知道,pipelines.py是用来处理收尾爬虫抓到的数据的, 一般情况下,我们会将数据存到本地: 文本形式: 最基本的存储方式 json格式 :方便调用...: ''' 将爬的信息保存到mysql ''' # 将item里的数据拿出来 date = item

1K00

消息推送平台

设计实现 设计方案 准备推送素材 导入消息接收人的数据 选择条件去各个业务线拉取消息接受者的数据 第一点:导入消息接收人的数据可以支持excel导入,然后去各个业务线去拉完整的用户id即可,导入的数据需要分页提交给服务或者分页落库...设计顺序消费mq来消费客服筛选条件的方式拉门店数据 本系统采用rocketmq的天然支持方式来保证顺序投递(messageQueueSelector) 限制消费的线程数来保证大数据量消费的情况下服务的自我保护...消费mq消息开始拉门店数据 通过mq投递过来的任务信息,拉取用户选择的条件去各个业务线拉需要发送的消息接收者的数据(现阶段就只需要拉门店)。...拉门店数据在线上出现的问题 由于消息推送中心存的条件是用户筛选的条件,并且这些条件都是一些枚举值,所以去获取门店数据的时候是没办法走到索引,通过这些条件如果去查并且符合这些条件的数据量很少会导致全表扫描并且调用接口超时...解决方案 各个业务线可以每次通过游标的方式去数据库拉数据再放到redis去根据条件筛选符合的数据,然后返回,这样就可以解决接口超时的问题。

3.7K65

全面提升数据库日志处理效率,EventBridge 支持 DTS 数据订阅功能正式发布

用户通过配置 DTS 连接,基于 DTS 数据订阅实时拉源实例的 Binlog 增量日志,完成业务数据变化的消费与处理,同时可以实现下游不同目标的分发,快速完成数据处理链路的搭建,如缓存更新,ETL...多目标: 下游支持计算、存储、消息队列等不同类型目标源,可根据实际业务需求,完成从数据库到指定目标的投递。...数据转投 完成数据库变更数据到下游目标的实时同步,如 Mysql --> Kafka, Mysql --> ES,Pgsql --> ES/COS 等场景 2....多目标分发 同一个 EB 支持配置不同投递目标,可以根据实际业务情况,将事件筛选过滤后投递到指定下游,例如可以将全量 DDL、DML 操作到 ES 存储的同时,筛选 DML 操作发送到 SCF 进行处理...2、进入 EventBridge 控制台:https://console.cloud.tencent.com/eb,选择指定事件集,进入事件集详情页,在「连接」部分添加 DTS 数据订阅连接

1.4K30

手撸一个消息推送平台

设计实现 设计方案 准备推送素材 导入消息接收人的数据 选择条件去各个业务线拉取消息接受者的数据 第一点:导入消息接收人的数据可以支持excel导入,然后去各个业务线去拉完整的用户id即可,导入的数据需要分页提交给服务或者分页落库...设计顺序消费mq来消费客服筛选条件的方式拉门店数据 本系统采用rocketmq的天然支持方式来保证顺序投递(messageQueueSelector),其中原理可以参考这篇文章。...消费mq消息开始拉门店数据 通过mq投递过来的任务信息,拉取用户选择的条件去各个业务线拉需要发送的消息接收者的数据(现阶段就只需要拉门店)。...拉门店数据在线上出现的问题 由于消息推送中心存的条件是用户筛选的条件,并且这些条件都是一些枚举值,所以去获取门店数据的时候是没办法走到索引,通过这些条件如果去查并且符合这些条件的数据量很少会导致全表扫描并且调用接口超时...解决方案 各个业务线可以每次通过游标的方式去数据库拉数据再放到redis去根据条件筛选符合的数据,然后返回,这样就可以解决接口超时的问题。

61220

消息推送平台的设计

选择条件去各个业务线拉取消息接受者的数据 第一点:导入消息接收人的数据可以支持excel导入,然后去各个业务线去拉完整的用户id即可,导入的数据需要分页提交给服务或者分页落库 第二点:选择条件去各个业务线拉取消息接收者数据...设计顺序消费mq来消费客服筛选条件的方式拉门店数据 本系统采用rocketmq的天然支持方式来保证顺序投递(messageQueueSelector),其中原理可以参考这篇文章。...消费mq消息开始拉门店数据 通过mq投递过来的任务信息,拉取用户选择的条件去各个业务线拉需要发送的消息接收者的数据(现阶段就只需要拉门店)。...拉门店数据在线上出现的问题 由于消息推送中心存的条件是用户筛选的条件,并且这些条件都是一些枚举值,所以去获取门店数据的时候是没办法走到索引,通过这些条件如果去查并且符合这些条件的数据量很少会导致全表扫描并且调用接口超时...解决方案 各个业务线可以每次通过游标的方式去数据库拉数据再放到redis去根据条件筛选符合的数据,然后返回,这样就可以解决接口超时的问题。

2.4K01

关于游戏服务的服务拆分

在关系型数据库,如Mysql中,有一项功能叫“外键约束”,用于保证数据完整性。然而随着各种Mysql分布式方案的出现,这项功能被越来越少的使用。...虽然在设置和取消行军路线时,需要消耗CPU来计算行军路线会经过哪些World服务,但是这些消耗是常量,随着服务的水平伸缩,很快就被抵消了。 同时还会有两处额外的开销,也需要能通过水平伸缩来抵消。...1) 在客户端拉当前屏幕地块信息时,有可能需要收集1个以上的World服务中的地块信息 2)在客户端拉行军路线的队伍信息时,也需要向1个以上Role服务拉相关的队伍信息 但是不管怎样,整个分布式系统都是以常量的开销...在实时游戏服务中,服务间会经常产生消息推送。在我们不使用缓存技术的情况下,某些业务逻辑会产生竞争问题。...还是以联盟立国为例,客户端调用“联盟服务”选定国都C1进行立国,“联盟服务”通过RPC调用“城池服务”检查是否为自己城池。 “城池服务”收到这条消息,返回消息M1,告知当前城池还是属于此联盟。

78210

ThinkPHP3.2.3新特性之:数据库设置

> 1, // 读写分离后 主服务数量 'DB_SLAVE_NO' => '', // 指定从服务序号 相对3.2.2版本来说,取消了如下设置参数: 'DB_FIELDTYPE_CHECK...' // 3.2.3强制进行字段类型检测了 'DB_SQL_BUILD_CACHE' // 3.2.3取消了SQL创建缓存 'DB_SQL_BUILD_QUEUE' // 3.2.3取消了SQL创建缓存...'DB_SQL_BUILD_LENGTH' // 3.2.3取消了SQL创建缓存 'DB_SQL_LOG' // 由新增的DB_DEBUG参数取代 'DB_BIND_PARAM' // 新版采用...>'mysql', // 不再支持设置为PDO 也不再区分mysql和mysqli 数据库的连接信息,主要包括下面参数: 'DB_HOST' => '', // 服务地址...然后在模型里面定义: //在模型里单独设置数据库连接信息 namespace Home\Model; use Think\Model; class UserModel extends Model{ //调用配置文件中的数据库配置

29241

基于 SpringBoot + Vue 框架开发的网页版聊天室项目

使用了Spring Security安全框架进行密码的加密存储和登录登出等逻辑的处理,以WebSocket+Socket.js+Stomp.js实现消息的发送与接收,监听。...项目技术栈 后端技术栈 Spring Boot Spring Security MyBatis MySQL WebSocket RabbitMQ Redis 前端技术栈 Vue ElementUI axios...项目预览图 客户端界面-群聊主界面 客户端界面-私聊界面 管理端界面-用户管理 管理端界面-群聊消息管理 部署流程 clone 项目到本地 在本地 MySQL 中创建一个空的数据库 subtlechat...注册邮箱的授权码,在项目中的mail模块的 application.yml 文件中填入 图片 搭建fastdfs服务,fastdfs-client.properties文件改成自己的。...备注 项目分为前后台两个项目,除此之外,为了简化部署,搭建了一个mini版本,取消了分模块,删去了邮件发送部分的RabbitMQ、Redis的使用。如果仅仅是为了演示功能,后台可直接部署mini版本。

1.1K20

开源一款现代化社区(论坛,问答,BBS社交,网络博客)系统平台

筛选未解决问题 用户 查看详情 编辑个人资料 更新登录密码 关注好友 查看粉丝 消息...文章/问答被关注通知 文章/问答被评论通知 个人被关注通知 设置消息为已读 关注 关注的用户文章/问答 关注的问答...) 新增标签 配置 首页轮播图配置 侧边栏轮播图配置 特性 前端 多终端适配(手机端,pc端) 自定义主题颜色,方便企业用户自定义主题 编辑支持...control + s保存 编辑支持control + v复制图片上传 后端 日志带有调用链,方便排查问题 分布式session,支持集群部署 用户角色权限分级,便于用户管理 接口权限校验,接口操作更安全...可接入审核中心便于运营管理 文件存储抽象接口,可支持自定义接入企业内部文件储存服务 缓存服务抽象接口,可支持自定义接入企业内部缓存服务 搜索服务抽象接口,可支持自定义接入企业内部搜索服务 技术栈 后端 数据库:mysql

1.2K10

DBMotion大改版,数据迁移更丝滑,好用到爆!

DBMotion支持MySQL、MongoDB的自动化迁移,2208版本发布后进行了页面的大幅改版,并且新增了迁移前预检查、对象校验、并行结构迁移、迁移用户筛选、反向同步的功能,运维和部署更加方便,支持...页面全屏化 老版本的DBMotion采用居中定宽模式,内容不够紧凑; 新版本采用全屏展示,内容一目了然 详情页面弹窗改边栏 老版本弹窗展示详情页,空间局促; 新版本边栏展示详情,结构清晰 02 MySQL...源库和目标库的关键参数设置不一致问题等 2.提供修复建议,方便客户按需修改 3.对每个schema展示该schema上的对象数量、空间大小和预估迁移时间 4.在迁移详情页面可以查询到最后一次预检查的结果 03 用户筛选...老版本仅支持数据库的筛选,以及同步全部用户和不同步用户的选择; 新版本列出所有的源端用户,供您选择,看需要迁移哪些业务用户过去 04 对象校验 老版本对象校验只校验目标库的表、视图等是否存在;...版本信息 新版本取消了登录页面,增加了版本信息页面,方便排查问题时,明确客户当前各组件的版本。

75220

基于Spark的用户行为分析系统

实时数据,通常都是从分布式消息队列集群中读取的,比如Kafka;实时数据实时的写入到消息队列中,比如Kafka,然后由后端的实时数据处理程序(Storm、Spark Streaming),实时从Kafka...2、J2EE平台接收到了执行统计分析任务的请求之后,会调用底层的封装了spark-submit的shell脚本(Runtime、Process),shell脚本进而提交我们编写的Spark作业。   ...算法   6、通过Spark的各种功能和技术点,进行各种聚合、采样、排序、TopN业务的实现 ?...日志发送给后台web服务(nginx),nginx将日志数据负载均衡到多个Tomcat服务上,Tomcat服务会不断将日志数据写入Tomcat日志文件中,写入后,就会被日志采集客户端(比如flume...agent)所采集,随后写入到消息队列中(kafka),我们的实时计算程序会从消息队列中(kafka)去实时地拉数据,然后对数据进行实时的计算和统计。

2.3K30
领券