FantasticMao 技术笔记
BlogGitHub
  • README
  • C & Unix
    • C
      • 《C 程序设计语言》笔记
      • C 语言中的陷阱
      • CMake 示例
      • GNU make
      • LLVM Clang
      • Nginx 常用模块
      • Vim 常用命令
    • Unix-like
      • 《深入理解计算机系统》笔记
      • 《UNIX 环境高级编程》笔记 - UNIX 基础知识
      • 《UNIX 环境高级编程》笔记 - 文件 IO
      • 《UNIX 环境高级编程》笔记 - 标准 IO 库
      • 《鳥哥的 Linux 私房菜》笔记 - 目录配置
      • 《鳥哥的 Linux 私房菜》笔记 - 认识与学习 bash
      • 《鳥哥的 Linux 私房菜》笔记 - 任务管理
      • OpenWrt 中的陷阱
      • iptables 工作机制
  • Go
    • 《A Tour of Go》笔记
    • Go vs C vsJava
    • Go 常用命令
    • Go 语言中的陷阱
  • Java
    • JDK
      • 《Java 并发编程实战》笔记 - 线程池的使用
      • 设计模式概览
      • 集合概览
      • HashMap 内部算法
      • ThreadLocal 工作机制
      • Java Agent
    • JVM
      • 《深入理解 Java 虚拟机》笔记 - Java 内存模型与线程
      • JVM 运行时数据区
      • 类加载机制
      • 垃圾回收算法
      • 引用类型
      • 垃圾收集算法
      • 垃圾收集器
    • Spring
      • Spring IoC 容器扩展点
      • Spring Transaction 声明式事务管理
      • Spring Web MVC DispatcherServlet 工作机制
      • Spring Security Servlet 实现原理
    • 其它
      • 《Netty - One Framework to rule them all》演讲笔记
      • Hystrix 设计与实现
  • JavaScript
    • 《写给大家看的设计书》笔记 - 设计原则
    • 《JavaScript 权威指南》笔记 - jQuery 类库
  • 数据库
    • ElasticSearch
      • ElasticSearch 概览
    • HBase
      • HBase 数据模型
    • Prometheus
      • Prometheus 概览
      • Prometheus 数据模型和指标类型
      • Prometheus 查询语法
      • Prometheus 存储原理
      • Prometheus vs InfluxDB
    • Redis
      • 《Redis 设计与实现》笔记 - 简单动态字符串
      • 《Redis 设计与实现》笔记 - 链表
      • 《Redis 设计与实现》笔记 - 字典
      • 《Redis 设计与实现》笔记 - 跳跃表
      • 《Redis 设计与实现》笔记 - 整数集合
      • 《Redis 设计与实现》笔记 - 压缩列表
      • 《Redis 设计与实现》笔记 - 对象
      • Redis 内存回收策略
      • Redis 实现分布式锁
      • Redis 持久化机制
      • Redis 数据分片方案
      • 使用缓存的常见问题
    • MySQL
      • 《高性能 MySQL》笔记 - Schema 与数据类型优化
      • 《高性能 MySQL》笔记 - 创建高性能的索引
      • 《MySQL Reference Manual》笔记 - InnoDB 和 ACID 模型
      • 《MySQL Reference Manual》笔记 - InnoDB 多版本
      • 《MySQL Reference Manual》笔记 - InnoDB 锁
      • 《MySQL Reference Manual》笔记 - InnoDB 事务模型
      • B-Tree 简述
      • 理解查询执行计划
  • 中间件
    • gRPC
      • gRPC 负载均衡
    • ZooKeeper
      • ZooKeeper 数据模型
    • 消息队列
      • 消息积压解决策略
      • RocketMQ 架构设计
      • RocketMQ 功能特性
      • RocketMQ 消息存储
  • 分布式系统
    • 《凤凰架构》笔记
    • 系统设计思路
    • 系统优化思路
    • 分布式事务协议:二阶段提交和三阶段提交
    • 分布式系统的技术栈
    • 分布式系统的弹性设计
    • 单点登录解决方案
    • 容错,高可用和灾备
  • 数据结构和算法
    • 一致性哈希
    • 布隆过滤器
    • 散列表
  • 网络协议
    • 诊断工具
    • TCP 协议
      • TCP 报文结构
      • TCP 连接管理
由 GitBook 提供支持
在本页
  • 提高架构的性能
  • 缓存设计
  • 负载均衡
  • 异步调用
  • 数据镜像
  • 数据分区
  • 提高架构的稳定性
  • 服务拆分
  • 服务冗余
  • 限流降级
  • 高可用架构
  • 高可用运维
  • 分布式系统的关键技术
  • 服务治理
  • 架构软件管理
  • DevOps
  • 自动化运维
  • 资源调度管理
  • 整体架构监控
  • 流量控制
  • 参考资料
  1. 分布式系统

分布式系统的技术栈

构建分布式系统的目的是增加系统容量、提供系统的可用性,对应到技术层面的具体两件事如下:

  1. 提高整体架构的吞吐量,服务更多的并发和流量;

  2. 提高整体系统的稳定性,让系统的可用性更高。

提高架构的性能

缓存设计

在架构设计中加入缓存系统,可以有效地提高系统的访问能力。从前端的浏览器,到网络,再到后端的服务、底层的数据库、文件系统、硬盘和 CPU,全都有着合理高效的缓存设计,这是提高快速访问能力的最有效的手段。

负载均衡

负载均衡是水平扩展的关键技术,它可以使用多台机器来共同分担一部分流量的请求。

异步调用

异步调用主要是通过消息队列来对请求做排队处理,从而削去前端的请求峰值,使后端可以通过自身能够承受的处理速度来处理请求。使用异步调用可以增加系统的吞吐量,但是系统的实时性会被降低。

数据镜像

数据镜像是把一个数据库镜像分成多份一样的数据,应用可以在任意节点上进行读写,各个节点之间会自动同步数据。使用数据镜像最大的问题是如何保证数据的一致性。

数据分区

数据分区是把数据按照一定的方式分成多个区(例如通过地址位置),不同分区的数据承担不同分区的流量。使用数据分区会导致跨库 join 和跨库事务变得非常复杂。

提高架构的稳定性

服务拆分

服务拆分主要有两个目的:为了隔离故障和重用服务模块。但是在服务拆分之后,会引入服务调用间的依赖关系。

服务冗余

服务冗余是为了去除单点故障,并可以支持服务的弹性伸缩、故障迁移。但是对于一些有状态的服务来说,服务冗余会带来更高的复杂性,比如在弹性伸缩时需要考虑数据的复制或者是重新分片。

限流降级

当系统承受不住高并发的压力时,只能通过限流或者降级的方式来停掉一部分服务、或者拒绝一部分请求,以确保整个架构不会挂掉。

高可用架构

高可用架构通常都是从冗余架构的角度来保证系统的可用性,比如多租户隔离、灾备多活,为了避免出现单点故障。

高可用运维

高可用运维是指 DevOps 中的 CI/CD。一个良好的运维模式应该是一条很流畅的软件发布管线,其中有着充分的自动化测试,还可以做相应的灰度发布,以及对线上系统的自动化控制。

分布式系统的关键技术

服务治理

服务治理的最大意义是梳理服务间的依赖关系和调用关系,并对这些服务进行性能和可用性方面的管理。涉及的技术有服务拆分、服务调用、服务发现、服务依赖等等。

架构软件管理

服务之间有依赖关系,并且也有兼容性问题,所以整体服务所形成的架构需要有架构版本管理、生命周期管理,以应对服务的编排、聚合、事务处理等服务调度功能。

DevOps

分布式系统可以更快速地更新服务,因此对于服务的测试和部署要求相对较高。所以分布式系统还需要 DevOps 的全流程,包括环境构建,CI、CD 等等。

自动化运维

分布式系统还需要对服务进行自动伸缩、故障迁移、配置管理、状态管理等一系列的自动化运维技术。

资源调度管理

应用层的自动化运维需要基础层的调度支持,即云计算的 IaaS 层的计算、存储、网络资源的调度、隔离和管理。

整体架构监控

需要对应用层、中间件层、基础层的进行监控。

流量控制

负载均衡、服务路由、熔断、降级、限流等等。

参考资料

最后更新于1年前

分布式系统的技术栈