⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 皇子谈技术 「皇子」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

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

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

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

一)规模复杂性

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

一图顶千言

1、数据复杂

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

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

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

2、业务逻辑复杂

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

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

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

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

二)结构复杂性

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

一图顶千言

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

三)功能复杂性

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

一图顶千言

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

四)行为复杂性

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

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

一图顶千言

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

思考

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

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

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

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

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

文章目录
  1. 1. 一)规模复杂性
    1. 1.1. 1、数据复杂
    2. 1.2. 2、业务逻辑复杂
  2. 2. 二)结构复杂性
    1. 2.1. 1、前端应用
    2. 2.2. 2、后端服务
    3. 2.3. 3、数据库系统
    4. 2.4. 4、消息队列
    5. 2.5. 5、缓存系统
  3. 3. 三)功能复杂性
    1. 3.1. 1、聊天功能
    2. 3.2. 2、朋友圈功能
    3. 3.3. 3、支付功能
    4. 3.4. 4、小程序功能
  4. 4. 四)行为复杂性
    1. 4.1. 1、用户操作处理
    2. 4.2. 2、系统事件响应
    3. 4.3. 3、运行环境适应
    4. 4.4. 4、行为分析
    5. 4.5. 5、行为预测
  5. 5. 思考