历史未核查正文:保留迁移前讲解与既有练习,不作为当前技术结论。新版主讲见数据一致性与基础设施及金融科技与新技术。以下历史正文保留。
数据一致性与基础设施¶
本页用于整理数据一致性、缓存、消息队列、扩展性、可维护性、虚拟化和云计算。
云计算与虚拟化¶
云计算按服务模式分为 IaaS、PaaS、SaaS:IaaS 提供虚拟机、存储和网络等基础设施;PaaS 提供运行环境和数据库平台;SaaS 直接交付可用软件。由 IaaS 到 SaaS,服务商管理的层次增多,用户自行管理的部分递减。常见部署方式包括公有云、私有云、混合云和多云。
FaaS(Function as a Service,函数即服务)是无服务器计算的一种形式,用户提交由事件触发的函数,由云平台负责运行环境、资源分配和按需扩缩容,通常按调用次数与执行资源计费。FaaS 常视为 PaaS 的延伸或细分形态,并不意味着没有服务器,而是用户无需直接管理服务器。SaaS 则提供完整可直接使用的应用软件;FaaS 提供的是执行函数的能力,不是面向终端用户的完整应用。
虚拟机由 Hypervisor(VMM)虚拟化硬件,通常运行独立客户操作系统;容器共享宿主机内核,启动较快,但隔离与资源抽象方式不同。Kubernetes(K8s)用于容器编排。选择方案时应综合考虑隔离、安全、资源利用和运维治理,不能将容器等同于虚拟机。
BASE 是分布式系统对强一致性与高可用之间取舍的一种设计理念,包含基本可用(Basically Available)、软状态(Soft state)和最终一致性(Eventually consistent)。软状态表示系统状态可以在一段时间内因异步复制、消息延迟等因素而不一致,并会随后台同步继续变化;最终一致性表示在没有新更新且同步最终完成后,副本会收敛到一致状态。它不保证每次读取都立即得到最新值,适用于可接受短暂不一致、但重视可用性和扩展性的场景;余额扣减等要求立即准确的操作则需采用更严格的一致性控制。
大数据分布式计算¶
大数据常用 5V 概括:Volume(规模)、Velocity(速度)、Variety(类型)、Veracity(真实性)、Value(价值)。分布式文件系统通过数据分片、多副本、容错和横向扩展处理单机容量与性能限制,并利用数据本地性减少跨节点传输。
Hadoop 生态中,HDFS 是分布式存储层,MapReduce 是批处理计算层,YARN 负责集群资源调度。Map 阶段拆分并并行处理任务,Reduce 阶段汇总中间结果,即“Map 分、Reduce 合”。Spark 是以内存计算为特点的分布式引擎,核心抽象为 RDD(弹性分布式数据集),适用于迭代计算、交互式查询和机器学习;常见组件有 Spark SQL、Spark Streaming、MLlib 和 GraphX。相较于中间结果常落盘的 MapReduce,Spark 在迭代场景通常更快。
批处理积累一批数据再计算,延迟较高,常见于日终计息、对账和报表;流处理逐条或持续处理数据,延迟较低,适用于实时风控和反欺诈。常见技术包括 MapReduce、Spark 批处理,以及 Spark Streaming、Flink 等流处理框架。
资源池化¶
资源池化(resource pooling)是指预先创建或准备一批可复用的资源,业务需要时从池中借用,使用完毕后归还,而不是每次请求都重新创建和销毁资源。
为什么要资源池化¶
- 降低创建和销毁成本:建立数据库连接、创建线程、分配对象可能涉及系统调用、网络握手或内存分配,重复操作开销较大。
- 减少延迟抖动:资源提前准备,请求到来后可以直接获取,响应更稳定。
- 控制并发上限:池大小限制同时使用的资源数量,避免请求无限创建线程或连接,拖垮 CPU、数据库或下游服务。
- 提高资源利用率:资源可以被多个请求轮流复用,避免每个请求独占一份长期闲置的资源。
- 统一管理生命周期:可以统一配置超时、最大空闲数、最大总数、健康检查和回收策略。
常见资源池¶
| 类型 | 池化对象 | 典型用途 | 需要注意 |
|---|---|---|---|
| 数据库连接池 | 数据库连接 | 复用 TCP/认证/会话连接 | 使用完必须归还,不能把连接长期占住 |
| 线程池 | 工作线程 | 执行异步任务和请求处理 | 控制队列与线程数,防止任务无限堆积 |
| 对象池 | 可复用对象 | 减少昂贵对象反复创建 | 归还前要重置状态,避免数据串用 |
| 缓冲池/缓存池 | 内存页、缓冲区或缓存对象 | 文件、数据库和网络 I/O | 命中率、容量和淘汰策略很重要 |
| 网络连接池 | HTTP/TCP 连接 | 复用长连接、减少握手 | 连接可能过期,需要健康检查 |
例子:数据库连接池。没有连接池时,每个请求都可能经历“建立连接 → 身份认证 → 执行 SQL → 关闭连接”;有连接池时,应用启动或运行中维护若干连接,请求只需从池中借一个连接,执行完成后清理事务状态并归还。这样减少了连接建立开销,但连接池也不能无限增大,因为数据库自身能承受的并发连接数有限。
资源池化的代价和风险¶
- 池太小:请求等待时间增加,吞吐量可能下降。
- 池太大:消耗更多内存、线程或连接,并可能压垮下游服务。
- 忘记归还:资源泄漏,最终池中没有可用资源。
- 归还前未重置状态:上一个请求的事务、变量或权限状态可能影响下一个请求。
- 任务超过池容量:需要明确采用排队、超时、拒绝还是降级,不能无限等待。
一句话记忆:资源池化不是“把所有资源都提前无限创建”,而是用有限资源的复用和排队,换取更低的创建成本、更稳定的延迟和可控的并发。
来源:专业课速记/08_云计算大数据AI.md
云计算基础概念与机制。 云计算通过网络按需提供可配置的计算、存储、网络和平台能力,通常强调按需自助、广泛网络访问、资源池化、快速弹性和可计量服务。机制:资源抽象与池化→门户/API 自助申请→调度器分配物理资源→监控计量→弹性扩缩与释放。场景:业务高峰自动增加计算实例,低峰释放资源。易错边界:云不等于互联网或虚拟化本身;虚拟化常是云的实现技术之一,但云还需自助服务、编排、计量、弹性和运营治理;“按量付费”也不表示成本必然更低。
服务模式和责任边界对比。 IaaS 提供虚拟计算、存储和网络,用户通常负责操作系统以上的应用与数据;PaaS 进一步管理运行时和平台,用户主要部署应用及管理数据;SaaS 提供可直接使用的软件,用户主要管理账号、配置和自身数据。不同云服务商责任划分不同,但共同原则是责任共享,用户仍需保护身份凭据、配置权限、分类数据、备份并满足合规。场景:自管虚拟机应用选 IaaS,开发团队不维护运行时可选 PaaS,直接使用邮件或客户管理应用属于 SaaS。易错边界:服务层越高,服务商管理组件通常更多,用户责任减少但不消失;公有云/私有云/混合云是部署形态,不是 IaaS/PaaS/SaaS 的同一分类轴;多云是使用多个云环境的策略,也不自动等于混合云。
虚拟化机制。 Hypervisor(VMM)在硬件与虚拟机之间抽象 CPU、内存、存储和设备,可采用裸机型直接运行在硬件上,或托管型运行在宿主操作系统上;虚拟机各自运行客户操作系统,隔离边界较完整。容器通过操作系统级隔离共享宿主内核,借助命名空间、资源控制等机制隔离进程并限制资源,镜像打包应用及依赖。场景:虚拟机适合不同操作系统或较强隔离需求,容器适合一致交付和快速弹性部署。易错边界:容器不是轻量虚拟机,内核共享使其隔离模型不同;虚拟化不能自动解决应用高可用、备份或安全配置;Kubernetes 是容器编排系统,不是虚拟化层本身。
分布式系统概念与运行机制。 分布式系统由多个通过网络通信的自治节点协作,对外提供服务;节点通过消息和协议协调,网络延迟、分区、节点失效及部分失败是常态。典型流程:服务拆分/节点部署→请求路由→复制或分片→故障检测与重试→一致性协调→监控和恢复。场景:在线银行将接入、交易、风控和数据存储部署到不同节点,提升扩展能力。易错边界:多个进程不必然是分布式系统;节点间通信失败时无法假设所有节点同时知道同一状态;超时只能说明未在预期时间内收到响应,不能证明远端操作一定未执行,重试需考虑幂等。
分布式部署流程与对比。 纵向扩展是提升单机 CPU/内存等能力,横向扩展是增加节点并分担负载;复制主要提升读能力或容灾能力,分片主要拆分数据/负载。实施顺序:识别瓶颈→确定扩展目标和数据所有权→选分片键/副本策略→设计一致性和故障处理→压测→分阶段切流→监控回滚。易错边界:横向扩展不一定线性提升吞吐,协调、网络和热点会成为瓶颈;副本延迟导致读到旧值,分片迁移要处理双写、校验和路由切换;高可用、可扩展和一致性是不同属性,不可互相代替。
概念对照练习(含答案解析)。
- 云平台可快速开设虚拟机,但资源只能由管理员手工分配且无计量,这体现了虚拟化还是完整云服务?答案: 体现虚拟化资源能力,但尚未具备完整云服务常见的自助、编排和计量特征。解析: 云的概念范围大于虚拟化。
- 容器与虚拟机最关键的操作系统边界区别是什么?答案: 容器通常共享宿主内核,虚拟机运行客户操作系统并由 Hypervisor 抽象硬件。解析: 两者隔离方式、启动和资源开销不同,不可等同。
- 服务调用超时后,客户端能否断定远端没有执行扣款?答案: 不能。解析: 响应可能丢失但服务端已提交;应使用幂等键、状态查询或事务协议防止重复扣款。
- 增加数据库副本和按客户号拆分数据分别主要解决什么?答案: 副本主要用于冗余/读扩展,分片用于拆分数据与负载。解析: 两者可组合,但都需要一致性、路由和故障处理设计。
并行计算的定义。 并行计算是把一个计算任务划分为可同时执行的子任务,由多个处理单元(如单机多核 CPU、GPU 或多台机器)在时间上重叠执行,再协调并汇总结果,以缩短完成时间或提高吞吐量。任务之间可独立,也可能需要同步、通信或按阶段等待;并行计算不限定必须跨多台机器。
分布式计算的定义。 分布式计算是由多台通过网络连接、各自拥有处理器和本地内存的计算节点协作完成计算;节点通过消息、远程调用或共享的分布式存储交换数据和协调状态,通常还需处理网络延迟、节点故障与部分失败。它强调计算资源和状态分布在多个自治节点上,不要求所有节点同时执行任务。
共同点与区别。 两者都可能拆分任务、协调执行并汇总结果,也都需要处理通信、同步和负载划分;核心区别在于关注角度:并行计算强调多个处理单元同时执行以提升计算性能,分布式计算强调多节点经网络协作及其资源、数据和故障边界。两者不是互斥分类:一个任务可在多台机器上并行执行,形成分布式并行计算;但并行可以只发生在单机内,分布式系统也可以按顺序执行。
交集与反例。 交集示例:银行按客户号把月度风险计算分片到多台服务器,每台服务器再用多核并行计算所分配客户,最后汇总结果;这是分布式(多机网络协作)且并行(多处理单元同时执行)。反例一:一台 8 核服务器把图像切块交由多个核心同时处理,属于并行计算,但没有多台网络节点协作,不属于分布式计算。反例二:节点 A 先生成全量中间结果,完成后节点 B 才能读取并执行下一阶段;若两个阶段存在严格先后依赖而无任务重叠,这是分布式计算,但该场景的阶段执行并非并行。注意,节点内部或其他独立任务仍可能并行,需按题目描述的计算任务和时间范围判断。
场景与易错边界。 MapReduce 在多台集群节点上分片执行 Map、等待中间结果完成后再进入 Reduce,整体属于分布式计算;Map 阶段中多个分片可同时运行,因此也包含并行执行,但 Map 与 Reduce 两阶段存在同步边界。单机多线程/多核执行可以是并行而非分布式;仅有多台机器、网络连接或数据复制,不足以证明某个计算任务正在并行;反之,多处理单元同时运算也不自动构成分布式系统。作答时先判断是否存在多台自治网络节点协作(分布式),再判断是否有多个处理单元在同一任务中同时推进(并行),并结合依赖关系说明哪些阶段能重叠、哪些必须等待。
阶段依赖与性能边界。 上述 MapReduce 顺序描述指 Reduce 的最终归约计算依赖所需 Map 输出,并不表示 Reduce 端进程必须在全部 Map 完成后才启动:Shuffle 拉取中间数据可与尚未完成的 Map 重叠;阶段间有依赖,不等于整个任务没有并行。单核上多个线程交替推进通常只是并发,不是多个处理单元同时运算;线程数多也不能证明并行加速。多机计算还要付出数据传输、序列化、调度和同步成本,串行部分、热点与数据倾斜会限制加速比;分布式不自动等于高可用,仍需副本、故障检测和恢复机制。完整场景判断应说明任务如何切分、在哪些节点/核心执行、何时等待、如何汇总,以及失败重试如何避免重复计入结果,而非只依据“集群”或“多线程”等名称作答。