从0开始架构二
从0开始架构(二)
读写分离
- 主从,一主多从
复制延迟
- 读写主
- 读失败读主
- 关键业务主,非关键读写分离
分配机制
- 程序代码封装【TDDL】
- 实现简单
- 每个编程语言实现一次
- 故障下,主从切换,所有配置都需要修改并重启
- 服务端代码,mysql proxy atlas
业务分库遇到的问题:
- join操作问题
- 事务问题
- 成本问题
水平拆分&垂直拆分
路由:hash路由,配置路由
高性能NOSQL
- 行存储
- schema扩展不方便
- 关系库搜索功能比较弱
nosql的4类
- k-v存在 redis
- 文档数据库 mongodb
- 列式数据库 hbase
- 全文搜索引擎 es
缓存穿透
- 数据不存在
- 缓存数据生成耗费大量时间或者资源
缓存雪崩
- 更新锁
- 后台更新机制
缓存热点,拆分
单机服务器高性能的关键:服务器采取的并发模型
- 服务器如何管理连接
- 服务器如何处理请求
操作系统的io模型和进程模型
- io模型:阻塞,非阻塞,同步,异步
- 进程模型:单进程,多进程,多线程
PPC,prefork
TPC,prethread
Reactor:单reactor单进程,单reactor多线程,多reactor进程、线程
单reactor单进程(例如redis)
- reactor的select监控连接事件,然后dispatch
- accept接收连接
- handler read+write+业务
单reactor多线程
- reactor 处理select和dispatch
- accept 建立连接
- read + send
- processor 业务
多reactor多线程
- main reactor
- select dispatch
- accpet
- subreactor
- select dispatch
- read-handler-send
例子:nginx,mc,netty
proactor
- 用户进程,注册事件,注册io
- 内核进程
高性能负载均衡
- dns
- 私有dns
- F5&A10
- 软件负载均衡:lvs和nginx
大系统的负载均衡: 地理位置级别,集群级别,机器级别的
负载均衡算法
- 任务平分类
- 负载均衡类,根据负载来分配
- 性能最优类
- hash类
轮询,加权轮询,负载最优先,性能最优,hash类