当前位置:网站首页>Million message IM system technical points sharing
Million message IM system technical points sharing
2022-06-23 23:11:00 【wecloud1314】
If we look closely, we can find , Any type of Internet service in life has IM The existence of the system .
such as :
1) Basic services - Tencent news ( Comment news );
2) Business applications - nailing ( Approve workflow notifications );
3) Communication and entertainment -QQ/ WeChat ( Private chat, group chat & Discussion groups & Circle of friends );
4) Internet we media - Tiktok Kwai ( Point like reward notice ).

In these numerous Internet ecological products , Instant messaging system as the underlying capability , In ensuring normal business and user experience optimization , Has always played a vital role .
therefore , In today's Internet products , Instant messaging technology is not limited to traditional IM The chat tool itself , It has already been embedded into various forms of Internet applications through tangible or intangible ways .IM technology ( Or instant messaging ) For many developers , It is indeed a necessary and indispensable domain knowledge , Indispensable .
Typical IM The system usually needs to meet four capabilities : high reliability 、 High availability 、 Real time and order .
For my project , The key points of architecture design are :
1) Microservices : Split into user micro Services & Message connection service & Messaging services ;
2) Storage architecture : Compatibility performance and resource overhead , choice reids&mysql;
3) High availability : It can support high concurrency scenarios , choice Spring Provided websocket;
4) Support multi terminal message synchronization :app End 、web End 、 WeChat official account 、 Applet messages ;
5) Support online and offline message scenarios .
Understand read diffusion and write diffusion
Let's give an example of what read diffusion is , What is write diffusion :
A group chat “ Love each other and family ”, member : Dad 、 Mom 、 brother 、 My sister and I ( common 5 people ).
Because you have a girlfriend recently , So I sent a message “ I took off the order ” Go to the group , Then naturally, I hope my parents, brothers and sisters can receive it .
Under normal logic , The process of sending group chat messages should be like this :
1) Traverse the members of the group chat and send a message ;
2) Query the online status of each member ;
3) Storage offline when members are not online ;
4) Real time push of members online .
The problem lies in : If the first 4 An exception occurred in step , Group friends will lose messages , Then it will lead to families who don't know “ You took off the order ”, Cause serious consequences of expediting marriage .
So the optimized scheme is : Whether the group members are online or not , You have to store messages first .
According to the above thinking , The optimized group message flow is as follows :
1) Traverse the members of the group chat and send a message ;
2) Group chat everyone saves a copy ;
3) Query the online status of each member ;
4) Online real-time push .
The above optimized scheme , It's called “ Write spread ” 了 .
The problem lies in : Everyone saves the same “ You took off the order ” The news of , It wastes a lot of disk and bandwidth ( This is the biggest disadvantage of write diffusion ).
So the optimized scheme is : The group message entity stores a , Users only save messages ID Indexes .
So the optimized sending group message flow is as follows :
1) Traverse the members of the group chat and send a message ;
2) Save a message entity first ;
3) Then group chat everyone saves a message entity ID quote ;
4) Query the online status of each member ;
5) Online real-time push .
The scheme after secondary optimization , It's called “ Reading diffusion ” 了 .
To sum up :
1) Reading diffusion : The read operation is heavy , The write operation is very light , Resource consumption is relatively small ;
2) Write spread : The read operation is very light , The write operation is heavy , Resource consumption is relatively large .
Message entity model :
Common messaging services , It can be abstracted into several entity model concepts : user / User relationship / User equipment / User connection status / news / Message queue .
Entity model concept explanation :
User entity :
1) user -> User terminal equipment : Each user can log in and send and receive messages at multiple terminals ;
2) user -> news : Considering read diffusion , The relationship between each user and the message is 1:n;
3) user -> Message queue : Considering read diffusion , Each user will maintain their own “ Message list ”(1:1), If expansion is considered , You can even open up a message overflow list to receive more than “ Message list ” Capacity message data ( Now it's 1:n);
4) user -> User connection status : Considering that users can log in multiple terminals , that app/web There will be corresponding online status information (1:n);
5) user -> Contact relationship : Considering that users are eventually connected by some kind of business , Form multiple contact relationships , Finally form private chat or group chat (1:n);
Contact relationship ( The relationship between users is mainly determined by the business ), for instance :
1) How many people in a family , How many people there are in this family group ;
2) stay ToB scene , In nail enterprise , We often have business groups to talk about this existence .
Message entity :
news -> Message queue : Considering read diffusion , Messages eventually belong to one or more message queues , Therefore, in the group chat scenario, it will be distributed in different message queues .
Message queuing entity :
Message queue : To be exact, message reference queue , The index element in it finally points to the specific message entity object .
User connection status :
1) about app End : Disconnection due to network reasons , Or the user can manually kill Drop the application process , Are offline ;
2) about web End : The browser is disconnected due to network reasons , Or the user manually closes the tab , Are offline ;
3) For the public number : Cannot be offline or online separately ;
4) For applets : Cannot be offline or online separately .
User terminal equipment :
The client is usually Android&IOS,web The client is usually a browser , There are other flexible WebView( official account / Applet ). Instant messaging development

Message storage scheme
For message storage schemes , There are essentially only three options : Or put it in memory 、 Or put it on disk 、 Or a combination of the two ( It is said that large companies in order to optimize performance , Active message data is stored in memory , After all, money ~).
The advantages and disadvantages of the main schemes are analyzed below :
1) Scheme 1 : Consider performance , Put all the data in redis For storage ;
2) Option two : Consider resources , The data used redis + mysql For storage .
For scheme one :redis
Premise : user & Contact relationship , Because it's business data , Therefore, relational database storage is used by default .
Explain the following :
1) User sends message ;
2)redis Create an entity data & An entity data timer ;
3)redis stay B The user's user queue Add entity data reference ;
4)B User pull message ( follow-up 5.2 Pull mode will be mentioned ).
Implementation scheme :
1) User queues ,zset(score Ensure order );
2) List of message entities ,hash(msg_id Make sure it's unique );
3) Message entity counter ,hash( Support the number of references of group chat messages , When the countdown reaches zero, the corresponding message of the entity list will be deleted , To save resources ).
Advantage is : Memory operations , Good response performance
The disadvantage is :
1) Memory consumption is huge ,eg: Except for big factories , The precious memory resources of servers in small companies can't afford to consume business , As the business grows , Don't want to expand resources , You need to clean up the data manually ;
2) suffer redis Disaster recovery strategy has a great impact , If redis Downtime , Directly lead to data loss ( have access to redis Cluster deployment of / Sentinel mechanism / Master-slave replication and other means to solve ).
Option two :redis+mysql
Premise : user & Contact relationship , Because it's business data , Therefore, relational database storage is used by default .
Explained as follows :
1) User sends message ;
2)mysql Create an entity data ;
3)redis stay B The user's user queue Add entity data reference ;
4)B User pull message ( The pull mode will be mentioned below ).
Implementation scheme :
1) User queues ,zset(score Ensure order );
2) List of message entities , Transferred to the mysql( Table primary key id Make sure it's unique );
3) Message entity counter ,hash( Delete this concept , Because the total available disk resources are much higher than the total memory resources , Even if it has been stored mysql database , At the level of millions of business, there will be no big problem , If it is a huge volume business, we need to consider the performance of processing and retrieving data by table and database ).
Advantage is :
1) The message entity with the largest amount of data , Greatly saves memory resources ;
2) Disk resources are easy to expand , Cheap and practical .
The disadvantage is : Disk read operation , Poor response performance ( From the perspective of product design , The set you maintain IM How strong is the system IM Or weak IM).
边栏推荐
- Go deep: the evolution of garbage collection
- How to use phpMyAdmin to restore a backed up MySQL database
- Unknown character set index for field ‘255‘ received from server.
- MySQL数据库配置信息查看与修改方法详解
- The national post office and other three departments: strengthen the security management of personal information related to postal express delivery, and promote the de identification technology of per
- Application of clock synchronization system in banking system
- go语言学习
- Debian change source and uninstall useless services
- How to use FTP to upload websites to the web
- Section 29 basic configuration case of Tianrongxin topgate firewall
猜你喜欢

巨头下场“摆摊”,大排档陷入“苦战”

详解四元数

The national post office and other three departments: strengthen the security management of personal information related to postal express delivery, and promote the de identification technology of per
Summary of cloud native pipeline tools

Ambire Guide: the arbitrum odyssey begins! Week 1 - Cross Chain Bridge

什么是免疫组织化学实验? 免疫组织化学实验

Section 30 high availability (HA) configuration case of Tianrongxin topgate firewall

Bilibili×蓝桥云课|线上编程实战赛全新上新!

The Sandbox 与 BAYZ 达成合作,共同带动巴西的元宇宙发展

C#/VB.NET Word转Text
随机推荐
C#/VB. Net word to text
Payment industry tuyere project: smart digital operation 3.0
Phpmailer sends mail PHP
CS1.6 service startup tutorial
Save: software analysis, verification and test platform
2021-12-10: which can represent a 64 bit floating point number or a 64 bit signed integer
C# Winform 自定义进度条ProgressBar
Section 29 basic configuration case of Tianrongxin topgate firewall
AIX系统月维护查什么(一)
PostgreSQL怎么创建分区表详解
Go language learning
Bilibili×蓝桥云课|线上编程实战赛全新上新!
Micro build low code tutorial -hello, world
How to access the top-level domain name and automatically jump to the secondary domain name?
国家邮政局等三部门:加强涉邮政快递个人信息安全治理,推行隐私面单、虚拟号码等个人信息去标识化技术
Recommended | January activity 2-core 4G lightweight application server, enterprise nationwide purchase 6.7 yuan / month!!!
Consequences of website construction without SSL authentication are websites without SSL authentication reliable
Dlib detects 68 facial features, and uses sklearn to train a facial smile recognition model based on SVM
堡垒机安装pytorch,mmcv,mmclassification,并训练自己的数据集
Three ways to enable IPv6 on Tencent cloud