Skip to main content

Principle

KISS

Keep It Simple, Stupid 的缩写,直译是“保持简单,傻瓜”。核心思想是:绝大多数系统,在“简单”时运转得最好,因此“简单”应被视为核心设计目标。

KISS不是反对功能丰富或技术高端,而是反对**“非必要的偶然复杂性”**。这种复杂性通常源于:

  • 过度设计(为未来不一定发生的需求提前构建抽象层)。
  • 炫技(用高深的技术解决简单问题)。
  • 重复造轮子(忽略已有的标准解决方案)。

SOLID

  • S - 单一职责原则 (Single Responsibility Principle):一个类应该只有一个导致它变化的原因。简单来说,一个类只做一件事。这能降低类的复杂度,提高可读性和可维护性。
  • O - 开闭原则 (Open-Closed Principle):软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。即,在添加新功能时,应尽量通过扩展新代码来实现,而不是修改已有的稳定代码,这通常通过接口和抽象类实现。
  • L - 里氏替换原则 (Liskov Substitution Principle)子类型必须能够替换掉它们的父类型。也就是说,任何使用父类的地方,都可以透明地使用其子类替代,而不会影响程序的正确性。
  • I - 接口隔离原则 (Interface Segregation Principle)不应该强迫客户端依赖它们不使用的接口。应创建多个小而专用的接口,而不是一个臃肿的大接口,避免不必要的耦合。
  • D - 依赖倒置原则 (Dependency Inversion Principle)高层模块不应依赖低层模块,两者都应依赖抽象;抽象不应依赖细节,细节应依赖抽象。这意味着要依赖于接口或抽象类,而不是具体的实现类,以降低模块间的耦合度。

CAP

CAP理论的核心定义

CAP理论指出,一个分布式系统不可能同时满足以下三个保证,最多只能同时满足其中两个:

  • C(Consistency,一致性):所有节点在同一时间看到的数据完全相同。当你更新一个节点的数据后,系统需要保证之后所有对该数据的读请求,都能返回最新的值。
  • A(Availability,可用性):系统始终能对外提供服务。每次请求都能收到一个(非错误)的响应,但不保证响应中的数据是最新的。
  • P(Partition tolerance,分区容错性):系统在部分网络节点之间通信中断(即发生“网络分区”)时,仍能继续运行。这是分布式系统的客观存在,必须选择

网络分区

当系统没有发生网络分区(P不存在)时,CA可以同时满足。但在分布式系统中,网络故障是常态,因此P是必选项。一旦发生网络分区(比如北京和上海的服务器断连),系统就面临抉择:

  • 选择 CP(放弃可用性,保证一致性):系统会暂停服务,等待数据同步完成。在此期间,系统不可用。典型如银行转账系统,宁可暂时无法操作,也绝不允许账目出错。
  • 选择 AP(放弃一致性,保证可用性):系统继续提供服务,但各分区内的数据可能暂时不一致。典型如社交媒体的点赞数,短暂显示不同步不影响核心体验,保证系统始终可用。

BASE

BASE是三个英文单词首字母的缩写,分别代表了这三个特性:

  • BA:基本可用 (Basically Available)
    系统在出现故障或高峰负载时,允许损失部分功能或响应时间,但保证核心功能依然可用。例如,双11期间,电商网站可能暂时关闭“历史订单查询”功能,或延长响应时间(从200ms延长到2秒),但保证“下单”和“支付”这两个核心流程正常运行。

  • S:软状态 (Soft State)
    由于没有即时同步,系统允许数据存在一个“中间状态”,并且这个状态会持续一段时间。这个状态不要求实时强一致,可以随时间变化。比如,你转账后,系统显示“处理中”,此时账户余额还未实际变动,这就是一种软状态。

  • E:最终一致性 (Eventually Consistent)
    这是BASE的最终目标。它不强求数据在任何时刻都一致,但保证在经过一段时间(通常很短)的异步修复后,所有数据副本最终会变得一致。比如,你发了一条朋友圈,你的好友们可能在不同时间看到,但最终所有人都会看到这条动态。

简单来说,ACID是“宁可不服务,也不能出错”,而BASE是“宁可暂时出错,也不能不服务”。在分布式系统中,由于存在“网络分区”这个必然因素,我们很难同时保证一致性和可用性,这也就是著名的CAP理论(分布式系统最多只能满足一致性、可用性、分区容错性中的两个)。BASE正是选择牺牲一致性(C)来保证可用性(A)和分区容错性(P)的具体实现策略。

ACID

A - 原子性 (Atomicity)

核心意思: “要么全做,要么全不做”。

C - 一致性 (Consistency)

核心意思: “事务必须遵守规则”。

I - 隔离性 (Isolation)

核心意思: “各干各的,互不干扰”。

D - 持久性 (Durability)

核心意思: “一旦确认,永不失忆”。

隔离级别

  1. 读未提交(Read Uncommitted):最低级,可能读到脏数据(读到别人未提交的中间状态)。
  2. 读已提交(Read Committed):只能读到已提交的数据(Oracle默认),但会出现“不可重复读”(同一查询两次结果不同)。
  3. 可重复读(Repeatable Read):保证同一条数据多次读取一致(MySQL默认),但可能出现“幻读”(读到新增的数据行)。
  4. 串行化(Serializable):最高级,完全隔离,性能最差。