Case Analysis

【软考之系统架构师】系统架构风格部分考点详细拆解

软考架构设计师备考全攻略:从八大架构到实战案例

领域驱动设计(DDD)相关架构介绍与演变过程分析

DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all together

Canal全栈解决方案

Redis延迟双删有啥用

Redis与MySQL双写一致性:延迟双删binlog异步删除

架构评估+Redis+微服务

keepalive和nginx、lvs、haproxy

解释器和规则系统图解
dbms && nosql && redis
延迟双删
令
单线程模型:Redis是单线程模型的,而单线程避免了CPU不必要的上下文切换和竞争锁的消耗。
也正因为是单线程,如果某个命令执行过长(如hgetall命令),会造成阻塞。Redis是面向快速执行
场景的数据库。,所以要慎用如 smembers和Irange、hgetall等命令

如何解决热key问题?
Redis集群扩容:增加分片副本,均衡读流量;
将热key分散到不同的服务器中;
使用二级缓存,即JVM本地缓存,减少Redis的读请求。

redis过期策略和内存淘汰策略
定时、定期、惰性
内存淘汰策略:LRU(Least Recently Used)、LFU(Least Frequently Used)、
redis持久化机制有哪些?优缺点是什么?
如何实现高可用?
redisson 解决分布式锁的问题
redlock算法
mysql与redis如何保证双写一致
redis6.0 多线程
redis事务处理
redis哈希冲突


管道-过滤器的并行优势,核心是通过“流水线重叠+多实例并行+分布式部署”三层机制实现,完全依托架构本身“过滤器独立、数据流单向流动”的天然特性,不需要复杂的共享状态协调。

黑板系统中知识源的协作,核心是完全不直接通信,所有交互都通过共享黑板+控制器调度完成,像医院急诊室的多科室医生围绕同一份电子病历协同诊断,最终逐步收敛出问题的完整解。

解释器和规则系统图解


## 软件设计方法

DDD  (Domain Driven Design) 领域驱动设计
CQRS (Command Query Responsibility Segregation) 命令查询分离
Hexagonal Architecture
Onion Architecture


WPDRRC信息安全模型
SysML (System Modeling Language) 系统建模语言
MBSE (Metamodel-Based Software Engineering) 基于元模型的软件工程
## 五大架构风格
1.数据流风格: 
2.调用/返回风格: 
3.独立风格: 
4.虚拟机风格: 
5.仓库风格: 


## 八大架构
1.信息系统架构
2.层次式架构
3.云原生架构
4.面向服务架构
5.嵌入式系统架构
6.通信系统架构
7.安全架构
8.大数据架构

六边形架构 (Hexagonal Architecture)

物理层:比特传输,保证比特传输的可靠性, 协议有:RS232, RS485, RJ45, FDDI, 
数据链路层: 比特组成帧,是帧与帧之间的传输,进行差错控制和流量控制,协议有:IEEE 802.3 802.5 802.11、ATM
网络层:报文传输,路由选择和报文控制,协议有:IP、ARP、RARP、ICMP
传输层:提供端到端报文的可靠、透明传输,保证报文的传输顺序正确性和完整性, 协议有:TCP、UDP
会话层:提供进程间的会话同步。对应80、443端口
表示层:提供数据格式转换,如:ASCII、BMP、JPEG
应用层:为用户提供服务,协议有:HTTP、FTP、SMTP、POP3、IMAP

架构风格

虚拟机风格:构建“虚拟执行环境”,按规则或解释逻辑处理任务。
* 解释器:解释执行自定义代码,典型如JVM、Python解释器。执行效率低但灵活。
* 基于规则的系统:通过规则集推理决策,典型如专家系统、DSS决策支持系统。

仓库风格(以数据为中心):所有构件围绕共享数据存储协作。
* 数据库系统:构件通过SQL访问中央数据库,典型如电商订单系统。
* 黑板系统:多个知识源围绕黑板异步读写,共同解决问题,适合没有确定性算法的复杂问题, 典型如语音识别、图像处理。


### 管道-过滤器的并行优势,
核心是通过“流水线重叠+多实例并行+分布式部署”三层机制实现 
并行的前提:过滤器无状态、单一职责、接口标准化,这是架构天生的优势
典型考法:
问“编译器的词法分析、语法分析、代码生成三个阶段为什么能高效并行”,
答案就是管道-过滤器的流水线重叠并行

管道-过滤器:数据边流动边加工,像“流水线”。典型例子:传统编译器、网络报文处理、路由器、防火墙。
管道-过滤器是流式数据、可并行
第一层:流水线式时间重叠并行
这种并行让多个过滤器在同一时间片内同时工作,把原本串行的总耗时从T1+T2+T3压缩到接近最慢单个过滤器的耗时。

第二层:多实例数据并行
* 由于过滤器之间不共享状态、只通过标准化管道交互,同一个过滤器可以启动N个完全相同的实例,把输入数据流分片后分发给这些实例并行处理。
* 典型场景:日志清洗流水线中,“日志解析”这个过滤器启动10个实例,把Kafka的10个分区分别交给一个实例消费,整体吞吐量直接提升10倍。
* 这种并行没有锁竞争、没有状态同步开销,扩展成本极低,是大数据流式处理(Flink/Spark Streaming)的核心加速手段。

第三层:分布式跨节点并行
* 过滤器之间完全解耦,只依赖管道传输标准化数据流,天然支持把不同过滤器部署在不同的服务器、甚至不同机房的节点上。
* 比如ETL流水线:“数据提取”跑在数据源所在的业务服务器,“数据清洗”跑在计算集群的CPU节点,“数据加载”跑在数仓所在的存储节点,三个节点完全并行工作,没有单点性能瓶颈。
* 华为云等云原生架构实践中,这种分布式部署方式可以根据每个过滤器的负载单独弹性扩缩容,资源利用率远高于单体串行系统。


### 黑板系统
黑板系统中知识源的协作,核心是完全不直接通信,所有交互都通过共享黑板+控制器调度完成,像医院急诊室的多科室医生围绕同一份电子病历协同诊断,最终逐步收敛出问题的完整解。

协作的三大核心角色
所有协作都围绕三个固定组件展开,没有任何知识源之间的点对点调用:
* 黑板:全局共享的分层数据区,存储原始问题、中间结果、最终结论,按层级划分子区域,避免读写冲突。
* 知识源:每个都是独立的“领域专家”,只拥有自己专属的专业能力,比如语音识别里的“音素识别源”“词语匹配源”“语法分析源”,互不依赖对方的内部逻辑。
* 控制器:全局调度中心,监控黑板状态,决定下一个激活哪个知识源,避免并发读写冲突,推进求解流程。


### 解释器和规则系统 - 结合金融风控的实践写一篇论文
解释器和规则系统同属虚拟机风格,核心区别是
解释器聚焦“按流程逐行执行自定义代码”,
规则系统聚焦“按条件动态匹配规则推理决策”,
二者在运行逻辑、核心组件、适用场景上完全不同。

1.执行效率:解释器逐行翻译执行,效率远低于原生编译代码;规则系统通过Rete算法优化规则匹配,在大量规则场景下推理效率远高于硬编码的if-else分支。
2.维护成本:解释器修改逻辑必须改源代码;规则系统只需要修改规则集,完全不用动程序代码,非技术人员也能维护。

典型考题区分:看到“脚本语言、跨平台、逐行执行”选解释器;看到“专家系统、决策推理、如果-那么规则”选规则系统。

核心运行逻辑差异
* 解释器:像同声传译,严格按代码的书写顺序逐行执行,有明确的执行流和程序计数器,每一步操作都由源代码的顺序决定,不会主动跳转或回溯。比如Python解释器运行脚本,完全按代码从上到下的顺序执行,不会跳过某行自动执行其他逻辑。
* 规则系统:像经验丰富的法官,没有固定执行流,通过“匹配-执行”循环工作:先扫描所有规则,找出条件被当前事实满足的规则,执行后更新事实,再触发新一轮规则匹配,动态迭代推理出结果。比如医疗诊断专家系统,不会按固定顺序跑代码,而是根据输入的症状自动匹配对应的诊断规则。
 
| 维度     | 解释器                                           | 规则系统                                      |
| 核心组件 | 解释引擎、代码存储区、状态记录器、执行进度跟踪器 | 规则集、规则解释器、规则/数据选择器、工作内存 |
| 核心数据 | 待执行的源代码/字节码                            | 大量“如果-那么”形式的规则库 + 动态事实数据    |
| 调度逻辑 | 按程序计数器顺序推进执行                         | 用Rete等算法动态筛选优先级最高的规则执行      |

典型应用场景差异
* 解释器:适合需要跨平台执行自定义程序的场景,比如Python/JVM等脚本语言引擎、领域特定语言(DSL)实现、配置文件动态解析。核心价值是弥合自定义语言和底层硬件的语义差异,实现“一次编写,到处运行”。
* 规则系统:适合需要大量专业知识做决策的场景,比如医疗诊断专家系统、金融风控引擎、保险理赔系统、电商促销规则配置。核心价值是把业务规则和代码完全分离,业务人员不用改代码就能直接修改规则,快速响应需求变化。
 
规则系统架构在金融风控中的落地,核心是把风控决策逻辑从硬编码代码中完全抽离,
通过“规则可视化配置+全生命周期闭环管控”实现业务策略的秒级迭代,
既满足金融行业强合规要求,又能快速响应监管政策和风险场景的变化。


RocketMQ与Kafka的区别

RocketMQ与Kafka架构深度对比

RocketMQ vs Kafka

1 RocketMQ
* RocketMQ的系统设计更偏向于队列模型,提供了丰富的消息队列语义,如顺序消息、事务消息和定时消息等。
* 它主要由NameServer、Broker、Producer和Consumer组成。NameServer负责服务注册与发现,Broker负责存储消息,Producer和Consumer分别负责发送和消费消息。
* RocketMQ还支持Filter Server组件,用于支持消息过滤功能。这种设计使得RocketMQ在处理复杂业务逻辑时更加灵活。
 
2 Kafka
* Kafka的系统设计更偏向于日志模型,强调数据的顺序性和持久性。
* 它主要由Producer、Consumer、Broker和ZooKeeper(或KRaft)组成。
  Producer和Consumer分别负责发送和消费消息,Broker负责存储消息,ZooKeeper(或KRaft)负责协调管理。
* Kafka的Broker是无状态的,可以独立处理请求,并通过ZooKeeper(或KRaft)进行协调管理。这种设计使得Kafka在处理高吞吐量日志数据时更加高效。
 
相同之处
1.分区机制:消息通过 rocketmq queue/kafka partition 进行分区,提高了消费者并行处理能力
2.副本机制:通过对分区进行副本 replication,提升了容灾能力
3.页缓存:两者均利用了操作系统的页缓存 Page Cache 机制,加载数据时,以该数据所在的页提前缓存到操作系统内存中,从而实现相邻数据的快速访问
4.顺序 IO:两者都尽可能通过顺序 IO 降低读写的随机性,将读写集中在比较集中的区域,从而减少缺页中断,提高了性能
5.零拷贝:都使用零拷贝降低用户空间和内核空间的转换以及 CPU 的利用率,但是在具体使用上仍然有差异
6.单分区有序:都仅支持单Topic分区有序,全局有序也是基于使用单个分区
7.消息压缩:都支持对消息压缩,减少网络传输数据量

RocketMQ更适合需要丰富队列语义和灵活消费模式的场景;
而Kafka则更适合强调数据顺序性、持久性和高吞吐量的日志处理场景。

Kafka 吞吐快,适合数据流处理相关的场景,没有比较复杂的业务处理,比方说常用的日志处理,或者涉及到 Hive、Spark、Flink 等大数据等场景,字节内部的 Dorado 数据转换平台使用的就是 Kafka,能够实现 Hive 表转 Kafka 消息

复杂业务场景下尽量用 RocketMQ,RocketMQ 本身性能也不低,而且还有许多业务上能用到的功能特性。