美文网首页
系统设计概要

系统设计概要

作者: HYIndex | 来源:发表于2021-03-15 12:16 被阅读0次

    基础

    性能

    • 性能指标

      • 响应时间
      • 吞吐量(QPS、TPS)
      • 并发用户数:不是越高越好,如果系统来不及处理就会阻塞,响应时间会大大提高
    • 性能优化

      • 集群
      • 缓存(Redis、CDN)
      • 异步

    伸缩性

    • 扩容
    • 无状态的应用服务器可以通过负载均衡器想集群中添加新的节点
    • 关系型数据库可以用过Sharding实现
    • 非关系型数据库对伸缩性支持很好

    扩展性

    • 添加新的功能对现有系统的其他应用无影响
    • 使用消息队列进行解耦
    • 分布式服务奖业务可复用的部分模块化

    可用性

    • 冗余(多点备份,异地双活)
    • 故障切换
    • 服务降级
    • 监控

    安全性

    • 应对各种攻击手段

      • SQL注入
      • XSS攻击

    分布式

    分布式锁

    • 数据库唯一索引

      • 没有失效时间,解锁失败会造成死锁
      • 只能是非阻塞,插入失败无法重试
      • 不可重入,已获得锁的进程也必须重新获取锁
    • Redis的SETNX指令

      • 节点挂了就不可用,造成死锁
    • RedLock

      • 高可用
    • Zookeeper的有序节点

    分布式事务

    • 两阶段提交(2PC)

      • 准备阶段

        • 协调者询问所有参与者事务执行的结果
      • 提交阶段

        • 协调者根据所有参与者返回的结果判断最终是提交还是回滚
      • 存在问题

        • 同步阻塞
        • 单点故障
        • 数据不一致
    • 本地消息表

      • 1. 分布式事务操作方完成写业务数据后向本地消息表发送一个消息,确保这个消息一定会写入本地消息表
        1. 之后将本地消息表中的消息转发到消息队列,转发成功则从本地消息表删除,否则继续重发
        1. 分布式事务操作的另一方从消息队列中读取一个消息,并执行消息中的操作

    CAP

    • 分布式系统不可能同时满足

      • 一致性(Consistency)
      • 分区容忍性(Partition Tolerance)
      • 可用性(Availability)
    • 权衡

      • 分区容忍性必不可少,可用性和一致性的权衡
      • 为了保证一致性,不能访问未同步完成的节点,就失去了部分可用性
      • 为了保证可用性,允许读取所有节点的数据,但是数据可能不一致

    BASE

    • 概念

      • 基本可用(Basically Available)

        • 分布式系统在故障的时候保证核心可用,允许损失部分可用性
      • 软状态(Soft State)

        • 允许系统中的数据存在中间状态,并认为该中间状态不会影响整体可用性
      • 最终一致性(Eventually Consistent)

        • 系统中的所有数据副本在经过一段时间的同步后,最终能达到一致性的状态

    竞选协议

    • Paxos

      • 执行过程

          1. Prepare
          1. Accept
          1. Learn
      • 约束条件

        • 正确性
        • 可终止性
    • Raft

    集群

    负载均衡

    • 算法

      • 轮询

        • 服务器性能均衡的场景
      • 加权轮询

        • 轮询的基础上根据权重分配
      • 最少连接

        • 将请求发送给当前最少连接的服务器上
      • 加权最少连接

        • 根据权重结算最少连接
      • 随机算法

      • 源地址哈希

        • 对客户端IP计算哈希值取模
    • 转发实现

      • HTTP重定向

        • 返回302重新发起请求
        • 延迟高,处理能力有限
      • DNS域名解析

        • 解析域名同时使用负载均衡算法计算服务器IP
        • 优点:能根据地理位置进行域名解析,可以返回最近的服务器
        • 缺点:DNS多级缓存,当下线机器需要修改DNS记录,生效时间慢
      • 反向代理

        • Openresty/Nginx
        • 缺点:所有请求和响应都要经过反向代理服务器,容易成为瓶颈
      • 网络层

      • 链路层

        • LVS

    Session管理

    • Sticky Session

    • Session Replication

    • Session Server

      • Redis、MySQL

    攻击技术

    跨站脚本攻击:XSS(Cross-Site Scripting)

    跨站请求伪造:CSRF(Cross-Site request forgery)

    • 检查Referer头
    • 添加token校验
    • 验证码

    SQL注入

    • sql quote预处理

    拒绝服务攻击(DoS、DDoS)

    一致性哈希

    基本原理

    • 将哈希空间看做一个环,每个节点都配置在环上,每个数据对象通过哈希取模得到哈希值后,顺时针向前走,存放在碰到第一个节点上

    分布不均问题

    • 虚拟节点解决

    LRU

    消息队列

    消息模型

    • 点对点

      • 生产者向MQ中发送了一个消息后,只能被一个消费者消费一次
    • 发布/订阅

      • 生产者向频道发送了一个消息后,多个消费者可以从该频道订阅这条消息并消费

    使用场景

    • 异步处理
    • 流量削峰
    • 应用解耦

    可靠性

    • 发送端可靠性

      • 本地消息表
    • 接收端可靠性

      • 幂等性
      • 唯一消息ID

    【参考文章】GitHub-CyC2018/CS-Notes

    相关文章

      网友评论

          本文标题:系统设计概要

          本文链接:https://www.haomeiwen.com/subject/htthcltx.html