7000字长文带你深入分析微信系统的复杂性来源

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

e3e52fae5f84f0b3d3133524ebbf54fa.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本 

来源:皇子谈技术

3f565f743c14a124336a92390b80c1bf.jpeg


关于系统复杂性和风险 的问题,是我们在软件开发过程中必须面对的挑战,因为复杂性是系统的固有属性 ,它来源于系统的规模、结构、功能、行为 等多个方面。

系统规模 的增大会导致系统的复杂性增加,因为系统的元素和关系会随着规模的增大而增多;结构复杂 性体现在系统的层次结构、模块化结构、网络结构等;功能复杂 性体现在系统的功能多样性、功能的交互性等方面;行为复杂 性体现在系统的动态性、不确定性、适应性等方面。

风险则是复杂性的直接产物 ,它可能导致系统的性能下降、成本增加、甚至系统的失败。今天我们就以一个全球领先的即时通讯和生活服务平台 一个复杂的、多元化的、动态的微信系统 为例,针对复杂性主要来源之规模、结构、功能和行为 详细展开来全面认识下系统复杂性的来源

一)规模复杂性

规模复杂性包括:数据复杂、业务逻辑复杂

一图顶千言

58274db3c4bb2f571135198bc139c6a1.png

1、数据复杂

微信是一个拥有数亿用户的大型系统,它需要处理的数据量非常大,导致它的数据复杂 包括:

1)微信需要存储、实时处理数十亿用户的聊天记录、朋友圈信息、支付记录等数据,需要采用分布式计算框架,通过任务调度、负载均衡等技术,保证了数据的高效处理;

2)需要对用户的这些数据进行分析,采用大数据分析技术,通过数据挖掘、机器学习等技术,提取了数据的价值信息,以提供个性化的服务,包括广告推广、公众号推荐、视频号推荐等;

2、业务逻辑复杂

除此之外,微信需要处理的业务逻辑也非常复杂的:

1)微信的消息推送涉及到即时通讯、群聊、公众号消息、小程序消息等多种类型的消息。这就需要微信的系统能够实时处理大量的消息推送请求,保证消息的及时送达,同时微信还需要处理消息的存储、同步、搜索等问题;

2)微信的好友关系管理涉及到添加好友、删除好友、查看好友信息、设置好友权限等多种操作,同时微信还需要处理好友的推荐、搜索、排序等问题;

3)微信的支付处理涉及到创建支付、完成支付、查询支付、退款支付等多种操作,这就需要微信的系统能够处理大量的支付请求,保证支付的正确处理。同时,微信还需要处理支付的安全、效率、稳定性等问题,这都增加了业务逻辑的复杂性。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

二)结构复杂性

微信的系统结构的复杂性,主要体现在前端应用、后端服务、数据库系统、消息队列、缓存系统 等多个部分的协同工作。这些部分各自承担着不同的职责,共同构成了微信的整体服务。

一图顶千言

052bdeb0ba2df00c031f382681477435.png

1、前端应用

1)用户界面(UI): 微信的前端应用需要提供丰富的用户界面,包括聊天窗口、朋友圈、微信支付、小程序等。这些界面需要有良好的用户体验,包括清晰的布局、直观的操作、美观的视觉效果等。

2)用户交互: 微信的前端应用需要处理复杂的用户交互,包括消息发送、好友添加、支付操作等。这些交互需要有良好的响应性,包括快速的反馈、准确的结果、稳定的性能等。

3)数据同步: 微信的前端应用需要进行数据同步,包括消息同步、状态同步、数据更新等。这些同步需要有良好的一致性,括实时的更新、准确的同步、完整的数据等。

4)网络通信: 微信的前端应用需要进行网络通信,包括数据请求、数据接收、数据发送等。这些通信需要有良好的可靠性,包括稳定的连接、高效的传输、安全的加密等。

5)设备适配: 微信的前端应用需要进行设备适配,包括屏幕适配、操作系统适配、网络环境适配等。这些适配需要有良好的兼容性,包括完整的功能、优秀的性能、一致的体验等。

2、后端服务

1)业务逻辑处理: 微信的后端服务需要处理复杂的业务逻辑,包括消息处理、好友关系管理、支付处理等。这些业务逻辑需要有高效的处理能力和准确地处理结果。

2)数据存取: 微信的后端服务需要进行大量的数据存取操作,包括用户数据、业务数据等。这些数据存取需要有高效的存取能力和高可用的存取质量。

3)系统集成: 微信的后端服务需要与其他系统进行集成,包括数据库系统、消息队列系统、缓存系统等。这些系统集成需要有稳定的集成性能和高可靠的集成质量。

4)服务稳定性: 微信的后端服务需要保证服务的稳定性,包括服务的可用性、服务的响应性、服务的容错性等。这些服务稳定性需要有高度的稳定性和高可靠的稳定质量。

5)安全防护: 微信的后端服务需要进行安全防护,包括数据安全、网络安全、系统安全等。这些安全防护需要有高效的防护能力和高可靠的防护质量。

3、数据库系统

1)数据存储: 微信的数据库系统需要存储大量的数据,包括用户数据、业务数据、日志数据等。这些数据的存储需要有高效的存储能力和高可用的存储质量。

2)数据查询: 微信的数据库系统需要进行复杂的数据查询,包括单表查询、多表查询、全文查询等。这些数据查询需要有高效的查询能力和准确的查询结果。

3)数据一致性: 微信的数据库系统需要保证数据的一致性,包括事务一致性、复制一致性、缓存一致性等。这些数据一致性需要有高度的一致性和高可靠的一致性质量。

4)数据安全: 微信的数据库系统需要进行数据安全保护,包括数据加密、数据备份、数据恢复等。这些数据安全保护需要有高效的保护能力和高可靠的保护质量。

5)数据分析: 微信的数据库系统需要进行数据分析,包括数据统计、数据挖掘、数据报告等。这些数据分析需要有高效的分析能力和准确的分析结果。

4、消息队列

1)消息处理: 微信的消息队列需要处理大量的消息,包括用户消息、系统消息、业务消息等。这些消息的处理需要有高效的处理能力和准确地处理结果。

2)消息路由: 微信的消息队列需要进行消息路由,将消息准确地发送到目标服务。这需要有高效的路由能力和高可靠的路由质量。

3)消息持久化: 微信的消息队列需要进行消息持久化,保证消息在系统故障时不会丢失。这需要有高效的持久化能力和高可靠的持久化质量。

4)消息顺序: 微信的消息队列需要保证消息的顺序,确保消息按照发送的顺序被接收。这需要有高度的顺序性和高可靠的顺序性质量。

5)消息安全: 微信的消息队列需要进行消息安全保护,包括消息加密、消息认证、消息审计等。这需要有高效的保护能力和高可靠的保护质量。

5、缓存系统

1)缓存策略: 微信的缓存系统需要实现合理的缓存策略,包括何时缓存、何时更新、何时淘汰等。这些策略的实现需要有高效的策略执行能力和准确的策略执行结果。

2)缓存一致性: 微信的缓存系统需要保证缓存的一致性,确保缓存数据和源数据的一致。这需要有高度的一致性和高可靠的一致性质量。

3)缓存性能: 微信的缓存系统需要提供高性能的数据访问,包括高速的读取、高效的写入等。这需要有高性能的访问能力和高可靠的访问质量。

4)缓存容量: 微信的缓存系统需要管理大量的缓存数据,包括用户状态、会话信息等。这需要有高效的管理能力和高可靠的管理质量。

5)缓存安全: 微信的缓存系统需要进行缓存安全保护,包括数据加密、访问控制、审计日志等。这需要有高效的保护能力和高可靠的保护质量。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

三)功能复杂性

微信提供了非常丰富的功能,包括聊天、朋友圈、支付、小程序 等,而微信的聊天功能需要处理消息的发送和接收,朋友圈功能需要处理信息的发布和浏览,支付功能需要处理交易的创建和完成,小程序功能需要提供应用的运行环境等,这些功能的实现和维护,都增加了微信系统的功能复杂性。

一图顶千言

8b78ff16830ad452bd635896db7cc7f5.png

1、聊天功能

1)消息类型: 微信的聊天功能支持多种类型的消息,包括文本消息、语音消息、图片消息、视频消息、表情消息、位置消息等,每种类型的消息都需要进行特定的编码、传输、解码和显示处理。

2)消息发送和接收: 微信需要处理消息的发送和接收,包括消息的输入、发送、传输、接收、显示等一系列的处理,需要考虑网络环境、设备性能、用户体验等多个因素。

3)消息存储和同步: 微信需要处理消息的存储和同步。用户的聊天记录需要在本地和服务器上进行存储,以支持离线访问和跨设备访问,需要实现高效的数据存储和同步机制。

4)消息搜索: 微信提供了聊天记录的搜索功能。用户可以通过关键词搜索聊天记录,前提也是需要实现高效的全文搜索和索引机制。

5)消息安全: 微信需要保证聊天消息的安全,包括消息的加密、传输安全、访问控制等,这同样需要实现强大的安全机制,以保护用户的聊天隐私。

2、朋友圈功能

1)信息发布: 在微信的朋友圈中,我们可以看到各式各样的内容,包括文字、图片、视频、链接等。这些内容的发布涉及到数据的存储、索引和推送,同时,用户还可以自定义内容的可见范围,这就涉及到了复杂的权限控制机制。

2)信息浏览: 朋友圈的魅力在于分享和互动,用户可以浏览到朋友们发布的信息,并进行点赞和评论。这就要求微信能够高效地获取和显示信息、处理好点赞和评论的存储、显示和通知。

3)信息推送: 信息的及时性是很重要的,用户在发布朋友圈的时候,需要新发布的信息能够及时推送给用户。这就考验了微信的信息推送机制,同时用户还可以自定义是否接收某些用户的信息推送,这就涉及到了复杂的推送设置机制。

4)信息搜索: 有时候,我们想找回曾经的某个动态,微信的朋友圈提供了信息的搜索功能。用户可以通过关键词搜索朋友圈的信息,这就需要微信有高效的全文搜索和索引机制。

5)信息安全: 在分享的同时,我们也关心自己的隐私安全,微信的朋友圈需要保证信息的安全。这包括信息的加密、传输安全、访问控制等,这就需要微信有强大的安全机制,以保护用户的信息隐私。

3、支付功能

1)交易处理: 微信支付支持多种交易方式,包括转账、付款、收款等。每一种交易方式都涉及到一系列复杂的处理流程,如验证用户身份、扣款、入账等,这都需要微信支付有高效且准确的处理能力。

2)安全保障: 支付安全是微信支付最重要的考量因素,因此微信需要实现强大的安全机制,包括数据加密、风险控制、欺诈防范等,以保护用户的资金安全。

3)用户体验: 微信支付需要提供简单、快捷的支付体验,包括快速的支付流程、清晰的支付状态、方便的支付方式等。为了实现这些需要进行精细化的设计和优化。

4)支付场景: 微信支付支持多种支付场景,包括线上支付、线下支付、跨境支付等。每一种支付场景都有其特定的需求和挑战,如线下支付需要支持二维码支付、NFC支付等,跨境支付需要处理汇率转换、跨境清算等问题。

5)支付服务: 微信支付还提供了一系列的支付服务,如红包、理财通、公益捐赠等,这些服务的实现和维护,同样增加了微信支付的功能复杂性。

4、小程序功能

1)运行环境: 微信小程序的运行环境是其复杂性的一个重要体现。微信需要提供一个稳定且高效的环境,让小程序能够顺利运行,包括 JavaScript 的执行环境、各种 API 的提供,以及 UI 的渲染等。

2)开发框架: 微信为小程序开发者提供了一套完整的开发框架,这其中包括了语言规范、丰富的组件库,以及便捷的开发工具,为了提供更好的开发体验,需要不断地维护和优化这套开发框架。

3)生命周期管理: 微信小程序的生命周期管理也是一个复杂的过程,包含对小程序的加载、运行、卸载等各个阶段进行管理,这就需要微信具备高效的资源管理和任务调度能力。

4)性能优化: 为了提供流畅的用户体验,微信需要具备丰富的优化经验,能对对小程序的性能进行优化,包括提升启动速度、优化运行速度,以及降低内存占用等。

5)安全防护: 在保证小程序功能的同时,微信还需要保护小程序的安全,包括保护代码的安全,保护用户数据的安全,以及防止网络攻击等。为此,微信需要具备强大的安全防护机制,并且需要进行严格的安全审核。

四)行为复杂性

微信的行为我们梳理一下,发现是非常复杂的,它需要处理各种用户操作,响应各种系统事件,适应各种运行环境 等。

其中就包括了,微信需要处理用户的登录、发送消息、发表朋友圈、进行支付等操作,需要响应系统的网络变化、设备状态变化、应用状态变化等事件,需要适应不同的网络环境、设备环境、用户环境,下面我们展开说一说。

一图顶千言

380141e1694848625429b83158d6da19.png

1、用户操作处理

1)多样性: 微信需要处理各种用户操作,包括登录、发送消息、发表朋友圈、进行支付等。每一种操作都有其特定的处理流程和规则,这就需要微信有能力处理各种不同的用户操作。

2)实时性: 用户的操作往往需要微信能够实时响应。例如,当用户发送一条消息时,微信需要立即将消息发送出去;当用户发表一条朋友圈时,微信需要立即进行发布。

3)连贯性: 用户的操作往往是连贯的,一系列的操作需要协同完成一个任务。例如,用户在进行支付时,可能需要先选择商品,然后填写支付信息,最后确认支付。

4)异常处理: 在处理用户操作时,微信还需要考虑各种异常情况。例如,网络异常、服务器异常、用户输入异常等。

5)安全性: 在处理用户操作时,微信还需要保证操作的安全。例如,用户的登录操作需要保证密码的安全,用户的支付操作需要保证交易的安全。

2、系统事件响应

1)多元化的事件源: 微信需要响应的系统事件源非常多样,包括网络状态变化、设备状态变化、应用状态变化等。每一种事件源都可能对微信的运行产生影响,微信需要对这些事件进行有效地捕获和处理。

2)实时性: 系统事件的发生往往是无法预知的,微信需要能够实时地响应这些事件,例如,当网络状态发生变化时,微信需要立即调整网络请求策略;当设备状态发生变化时,微信需要立即调整资源使用策略。

3)处理策略: 对于不同的系统事件,微信需要有不同的处理策略。例如,对于网络状态变化,微信可能需要调整网络请求策略;对于设备状态变化,微信可需要调整资源使用策略。最终考验的是微信有能力制定和执行有效的处理策略。

4)异常处理: 在响应系统事件时,微信还需要考虑各种异常情况,例如,网络异常、设备异常、系统异常等。

5)性能影响: 系统事件的处理可能会对微信的性能产生影响。例如,大量的事件处理可能会占用大量的CPU资源,影响微信的运行性能,这需要微信有有效的性能优化策略。

3、运行环境适应

1)网络环境适应: 微信需要适应各种网络环境,包括Wi-Fi、4G、3G、2G甚至没有网络的情况。对于不同的网络环境,微信需要有不同的数据传输策略,以保证服务的稳定性和流畅性。

2)设备环境适应: 微信需要适应各种设备环境,包括不同的操作系统、不同的硬件配置、不同的屏幕大小等。

3)用户环境适应: 微信需要适应各种用户环境,包括用户的使用习惯、使用场景、使用时间等。

4)系统更新适应: 随着操作系统的更新,微信需要及时进行适配,以利用新的系统特性,提高用户体验。同时,也需要处理可能出现的兼容性问题。

5)安全环境适应: 微信需要适应不断变化的安全环境,包括新的安全威胁、新的安全标准等,这就需要微信有强大的安全防护能力,以保护用户的数据安全和隐私安全。

4、行为分析

1)数据收集: 微信需要收集大量的用户行为数据,包括用户的操作行为、使用习惯、使用时间、使用场景等,包含着高效的数据收集机制和大数据处理能力。

2)数据分析: 收集到的数据需要进行深入的分析,以了解用户的需求和偏好,需要有强大的数据分析能力,包括数据挖掘、机器学习、人工智能等技术。

3)行为模型: 基于数据分析的结果,微信需要建立用户行为模型,以预测用户的未来行为,需要能有精准的模型建立和优化能力。

4)个性化服务: 基于用户行为分析的结果,微信需要提供个性化的服务,以提高用户体验。

5)隐私保护: 在进行用户行为分析的同时,微信还需要保护用户的隐私,需要有强大的数据加密和访问控制机制,以保护用户数据的安全。

5、行为预测

1)数据挖掘: 微信需要通过大数据技术,对用户的行为数据进行深度挖掘和分析,以找出可能的行为模式和趋势。

2)模型构建: 基于挖掘出的数据,微信需要构建预测模型,如机器学习模型或深度学习模型,以预测用户的未来行为。

3)实时预测: 微信需要能够实时地预测用户的行为,以便及时地做出响应,例如,预测用户可能的需求,提前进行资源的准备和调度,这需要微信具备高效的计算和响应能力。

4)预测准确性: 预测的准确性直接影响到微信的用户体验和服务质量,微信需要不断优化预测模型,提高预测的准确性。

5)隐私保护: 在进行行为预测的同时,微信还需要保护用户的隐私,这就需要微信有强大的数据加密和访问控制机制,以保护用户数据的安全。

思考

复杂性是系统的固有属性 ,它来源于系统的规模、结构、功能、行为 等多个方面,而要管理好系统复杂性是一个需要多方面合作的任务。我们站在架构师的角度 ,就是要以降低系统的复杂性为目标 ,针对不同的复杂性问题采取不同的应对方案:如:

针对规模复杂性问题 ,我们首先想到的是采用微服务、服务网格等架构模式,将大规模的系统分解为可独立开发、部署和扩展的小规模服务,然后通过负载均衡、服务发现等技术,实现服务的动态伸缩和故障转移,以提高系统的性能和可用性;

针对结构和功能复杂性问题 ,我们考虑参考模块化、分层、解耦等设计原则,构建出清晰、灵活、可维护的系统结构,并按照业务和功能进行垂直划分和水平划分,实现功能的高效执行和动态扩展,还可以通过容器化、云原生等技术,实现系统结构的动态调整和优化;

针对行为复杂性问题 ,可以通过状态机、事件驱动等模型,实现行为的可预测和可控,同时考虑通过行为的监控、追踪、分析等技术,实现行为的实时洞察和快速定位。

最后想说的一点是 ,系统的复杂性性在项目从启动到交付,再到产品不断迭代优化的过程中,每个阶段体现出来的复杂性问题是不一样的 ,有些复杂性优先级很低,如:项目刚启动我们就开始为亿级用户、订单规模而设计,这是不合理的,我们应抓住重点,以 业务和产品角度去做好架构设计


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,长按”或“扫描”下方二维码噢

e63ca86814f3d828e9434fbea3e6db67.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

7126de1c5708c3a07dbae9f35e6e22c1.png

738fde72bb60772936336a4eadae7527.png6766332faad616208ecb36d3a62102b8.png85e25fa0f854dbd40cc2e17ef4b98da9.png0c446968dffda8447a0ef64c36074b07.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值