Skip to content

Latest commit

 

History

History
142 lines (138 loc) · 2.9 KB

系统设计.md

File metadata and controls

142 lines (138 loc) · 2.9 KB

架构优化

  1. 缓存和数据库的一致性问题
  2. 集群伸缩问题

设计推特

  1. B站视频分享

如何在面试中掌握主动性

  1. 当前项目的业务逻辑较为简单,要不你设计一些场景,我讲一下我的解决方案。

设计存储架构

  1. 估算性能需求(存储量,读写性能)
  2. 选择存储系统(TP还是AP)
  3. 设计存储方案

选择的三要素

  1. 合适
  2. 简单
  3. 演进

用户量预估

  1. 规划
  2. 推算
  3. 对比(更同类产品对比)

用户行为模型

  1. 行为
  2. 数量
  3. 频率

  1. 总量50G (冷热数据)
  2. 读写请求TPS/QPS 平均值和峰值,两者之差双十一10倍,游戏两三倍。
  3. 预留量(线性伸缩)

SQL

  • OLTP
    • mysql
    • postgresql
    • oracle
  • OLAP
    • clickhouse
    • hive

NoSQL

  • redis
  • mongodb
  • es
  • influxdb

大数据

  • flink
  • hadoop
  • spark
  • hdfs
  • hbase
  • cassandra
  • ceph

技术本质

  1. 应用场景: 游戏服务器用mongodb,论坛服务器用es。
  2. 优缺点

架构能力

  1. 研究成熟开源框架P7以前,展示自己的架构能力
    • ES
    • Redis
  2. 架构原理和优缺点

架构的复杂度

  1. 难度:技术深度和广度:多技术,多领域。
  2. 规模:时间,人数。
  3. 创新:方法和技巧。

P6项目能手

  1. 理解自己的子系统架构
  2. 理解已用子系统架构原理:Redis,MySQL
  3. 沟通表达所用技术。(带新员工)

P6问答

  • MySQL用的是什么模式?
    1. 主从
    2. 读写分离
    3. 分库分表
  • Redis用的什么数据结构?为什么用这个数据结构?
  • 线上服务器有多少台?性能指标大概多少?

P7团队专家

  1. 熟悉上下游
  2. 参与端到端的设计
  3. 团队相关的开源项目优缺点和原理
  4. 子系统的设计和重构

P7准备技巧

  1. Tech学习法(写博客,培训,演讲)
  2. 结合业务发展和痛点推动架构升级
  3. 链式学习法:自顶向下,逐步深入。

服务层

  1. 架构解耦
  2. 业务降级
  3. 异地多活

高性能

  1. 缓存
  2. 异步

优势

  • Java
  • C++
  • ES
  • InnoDB
  • RocksDB
  • Redis
  • Kafka

数据结构

  • LSM
  • B+
  • LRU
  • Heap
  • Raft
  • Skiplist

方向

  • 分布式
  • 数据库
  • 服务器
  • 数据调度
  • ETL

数据调度

  1. 副本
  2. 一致性
  3. 事务
  4. 伸缩

C++后台

  • 异步IO
  • 定时器
  • epoll
  • 线程池
  • 零拷贝
  • socket

高性能

  1. 缓存
  2. 异步

云端DAQ

  • 分批上传(start/process/stop)
  • 异步线程
  • 批量写入
  • 缓存策略cache aside更新策略(强一致性2PC和共识算法)

数据库设计

  1. 读写分离CQRS
  2. 分库分表sharding
    • 分表策略:基于租户ID分表
    • 数据访问层的中间件

分布式架构

  1. 分布式锁
  2. 分布式ID
  3. 分布式事务