分层架构 IM 系统之架构演进
在电商业务日活几百万的情况下,IM 系统采用分层架构方式,如下图。

分层架构的 IM 系统,整体上包含了【终端层】、【入口层】、【业务逻辑层】、【路由层】、【数据访问层】和【存储层】,我们在上篇文章(分层架构 IM 系统之架构解读)中进行了介绍。今天讨论局部的架构调整和演进!
随着用户日活量的增多,业务规模也在逐步增大(即后端接口数量越来越大),而且业务逻辑也越来越复杂;为了引流,平台几乎每周都会做运营活动,此时 IM 系统的业务逻辑全部集中在 Logic 中实现,会愈加繁杂;此时系统表现出的最大的问题是:非核心的业务(如各类运营活动)影响核心的业务(如收发消息、联系人)。
怎样解决该问题呢?将非核心的业务和核心的业务进行拆分即可。上图 IM 系统我们称之为分层架构1.0,那么分层架构2.0见下图。

在业务逻辑层中,包含 Logic 和 Extlogic 两个服务:由 Logic 负责处理核心的、实时性较高的、轻量级的业务,比如:用户登录、点对点消息、群消息、消息已读等; 由 Extlogic 负责处理处理非核心的、实时性较低的,重量级的业务,比如:广播系统消息、离线用户召回等;然后由 Logic 通过 RPC 方式远程调用 Extlogic;Extlogic 如果要推送消息到客户端,直接将其推送到 Entry 即可。
业务逻辑层拆分成 Logic 和 Extlogic 之后,各类运营活动的代码直接在 Extlogic 完成,核心的 Logic 逻辑不会受到运营活动代码的侵入;再一个,频繁重启的是 Extlogic 进程,核心的 Logic 进程大大减少了被重启的次数,保证了核心业务的稳定性。
随着业务的不断迭代,仔细分析 Extlogic 的业务,其业务接口的执行逻辑结果如何,并不会影响到 Logic 的执行逻辑,也就是说:Logic 在执行业务逻辑的过程中,并不关注 Extlogic 的执行结果,只是将业务事件通知到 Extlogic 即可。此时,Logic 和 Extlogic 通过 RPC 这样一种高耦合的方式进行通讯就不是太合适。
再一个,自研的内存存储 Router,随着在线用户量的增多,其维护的复杂度也增大,可以通过成熟的组件进行优化。分层架构 IM 系统3.0见下图。

在 3.0 版本的 IM 系统中,引入了 MQ 消息中间件:MQ 一方面解耦了 Logic 和 Extlogic,同时解耦了 “平台业务” 对整个 IM 系统的调用;在整个电商平台中,有非常多的业务(比如订单、支付、物流、客服等)需要借助于 IM 系统,实现定制化消息的推送。
另外,引入缓存(Redis),替换 Router,大大降低了对用户在线状态中央存储维护的复杂度。
最后,总结文中关键:
1、分层架构 IM 1.0,业务逻辑层通过 Logic 实现所有的业务逻辑;
2、分层架构 IM 2.0,业务逻辑层通过 Logic 实现核心的业务逻辑,通过 Extlogic 实现非核心的业务逻辑;
3、分层架构 IM 3.0,引入 MQ,一方面解耦 Logic 和 Extlogic,一方面解耦电商平台和IM系统;引入 Redis,替换 Router,降低对中央存储维护的复杂度。
大家思考一下:
在分层架构 IM 系统中,入口层 Entry 需要处理哪些问题呢?
相关文章:
分层架构 IM 系统之架构演进
在电商业务日活几百万的情况下,IM 系统采用分层架构方式,如下图。 分层架构的 IM 系统,整体上包含了【终端层】、【入口层】、【业务逻辑层】、【路由层】、【数据访问层】和【存储层】,我们在上篇文章(分层架构 IM 系…...
基于YOLOv8深度学习的医学影像阿尔兹海默症检测诊断系统研究与实现(PyQt5界面+数据集+训练代码)
阿尔茨海默症(Alzheimer’s disease)是一种常见的神经退行性疾病,主要表现为记忆丧失、认知能力下降以及行为和人格改变。随着全球老龄化问题的加剧,阿尔茨海默症的发病率也在逐年上升,给患者及其家庭带来了巨大的经济…...
【支持向量机(SVM)】:相关概念及API使用
文章目录 1 SVM相关概念1.1 SVM引入1.1.1 SVM思想1.1.2 SVM分类1.1.3 线性可分、线性和非线性的区分 1.2 SVM概念1.3 支持向量概念1.4 软间隔和硬间隔1.5 惩罚系数C1.6 核函数 2 SVM API使用2.1 LinearSVC API 说明2.2 鸢尾花数据集案例2.3 惩罚参数C的影响 1 SVM相关概念 1.1…...
Android kotlin之配置kapt编译器插件
配置项目目录下的gradle/libs.versions.toml文件,添加kapt配置项: 在模块目录下build.gradle.kt中增加 plugins {alias(libs.plugins.android.application)alias(libs.plugins.jetbrains.kotlin.android)// 增加该行alias(libs.plugins.jetbrains.kotl…...
时序数据库TDEngine
TDengine 是一款开源、高性能、云原生的时序数据库(Time Series Database, TSDB), 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计。同时它还带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少系统设计的复杂度&…...
jd-easyflow中inclusive的用法
在jd-easyflow中,inclusive通常与流程中的条件分支(conditions)配置相关,用于控制多个条件分支的执行逻辑。当conditionType设置为inclusive时,表示多个条件分支中的所有条件都会被评估,而不是像exclusive那…...
sqlmap图形化安装使用(附文件)
1.需要python环境,我这里就不教如何安装python环境了。 2.下载压缩包并且解压 3. 凭自己喜好选择大窗口小窗口 4.进入图形化界面后,1.输入url地址。2.选择要执行的操作。3.构造命令语句 5.点击一把梭,然后就可以发现出结果了 6. 对于喜欢自己…...
从二维到一维:动态规划矩阵问题的优化之道
动态规划中的矩阵问题是非常经典的应用场景,比如最小路径和问题。这类问题很自然地可以想到使用二维 dp 数组来求解。 我们定义: dp[i][j] 表示从矩阵的第 i行第 j列到右下角的最小路径和。 基本解法 求解过程从右下角开始,向左上角遍历&am…...
计算机视觉(CV):让机器看懂世界
引言 计算机视觉(Computer Vision, CV)是人工智能的重要领域,致力于让机器能够“看懂”世界。CV技术广泛应用于自动驾驶、医疗影像、安防监控和娱乐领域,正在改变我们的生活方式。 本文将从基本概念、技术方法、应用场景和发展方向…...
记录下,用油猴Tampermonkey监听所有请求,绕过seesion
油猴Tampermonkey监听所有请求,绕过seesion 前因后果脚本编写 前因后果 原因是要白嫖一个网站的接口,这个接口的页面入口被隐藏掉了,不能通过页面调用,幸好之前有想过逆向破解通过账号密码模拟登录后拿到token,请求该…...
服务器产品
一 存储产品 3.1 3PAR 3.2 X10000 3.3 SAN Switch 3.4 Nimble 3.5 SimpliVity 3.6 XP 3.7 MSA 3.8 StoreOnce 3.9 StoreEver 3.10 StoreBlade 3.11 StoreEasy(WindowsNAS) 3.12 JBOD 3.13 CB 二 服务器产品 4.1 红牌服务器 4.1.1 红牌…...
pyhton django web集群基于linux定时任务
基于django management/commands目录下的脚本 from django.core.management import BaseCommand import logging import uuid from pia.utils.cache import reset_redis_expire from pia.utils.reids_key import TASK_KEYlogging logging.getLogger(task)""" …...
探索 Python 字典的奥秘:Future 对象为何能成为字典的键?
本质在于作为字典的key能不能执行hash(key) 问题 import concurrent.futuresdef task(n):return n * n# 创建一个线程池 with concurrent.futures.ThreadPoolExecutor() as executor:# 提交任务并获取 Future 对象future_to_num {executor.submit(task, i): i for i in rang…...
多品牌摄像机视频平台EasyCVR视频融合平台+应急布控球:打造城市安全监控新体系
在当今快速发展的智慧城市和数字化转型浪潮中,视频监控技术已成为提升公共安全、优化城市管理、增强应急响应能力的重要工具。EasyCVR视频监控平台以其强大的多协议接入能力和多样化的视频流格式分发功能,为用户提供了一个全面、灵活、高效的视频监控解决…...
Spark 中 RDD checkpoint 是通过启动两个独立的 Job 完成的。
在 Spark 中,RDD checkpoint 是通过启动两个独立的 Job 完成的。这两个 Job 分别用于生成 checkpoint 数据和更新依赖关系。下面从源码角度深入分析这个机制。 1. 为什么需要两个 Job? 当调用 RDD.checkpoint() 后: 第一个 Job:…...
如何下载TikTok视频没有水印
随着短视频平台的普及,TikTok(抖音国际版)成为了全球最受欢迎的社交媒体平台之一。它吸引了无数创作者发布自己的短视频内容,内容涵盖了舞蹈、搞笑、挑战、教程、旅行等各个方面。与此用户也常常希望能够下载自己喜欢的TikTok视频…...
天童美语:提升孩子的自信心的方法
每个孩子都渴望展翅高飞,但在成长的旅途中,难免会遇到风雨。不自信,就像一层薄雾,有时悄悄笼罩在孩子心头,阻碍了他们向阳而生的脚步。宁波天童教育认为,身为家长,我们的使命不仅是孩子的庇护伞…...
【网络编程】字节序:大端序和小端序
端序(Endianness),又称字节顺序,又称尾序,在计算机科学领域中,指存储器中或在数字通信链路中,组成多字节的字的字节的排列顺序。 在几乎所有的机器上,多字节对象都被存储为连续的字…...
视频融合×室内定位×数字孪生
随着物联网技术的迅猛发展,室内定位与视频融合技术在各行各业中得到了广泛应用。不仅能够提供精确的位置信息,还能通过实时视频监控实现全方位数据的可视化。 与此同时,数字孪生等技术的兴起为智慧城市、智慧工厂等应用提供了强大支持&#…...
RK3568平台开发系列讲解(platform虚拟总线驱动篇)注册 platform 驱动
🚀返回专栏总目录 文章目录 一、注册 platform 驱动二、platform_driver 结构体沉淀、分享、成长,让自己和他人都能有所收获!😄 一、注册 platform 驱动 platform_driver_register 函数用于在 Linux 内核中注册一个平台驱动程序。 下面是对该函数的详细介绍: 函数原型…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
