架构设计
2020-10-23 09:49:51 0 举报
AI智能生成
《从0开始学架构》知识图谱
作者其他创作
大纲/内容
可扩展架构
架构实战
架构基础
架构设计定义
一些概念
系统与子系统
系统
子系统
模块与组件
模块
组件
框架与架构
框架
架构
架构定义:软件架构指软件系统的顶层结构。
软件架构4+1视图
场景视图(用例视图)
逻辑视图
开发视图
处理视图
物理视图
架构设计起源
1、机器语言-->汇编语言-->高级语言
2、软件危机
第一次软件危机-->结构化程序设计
第二次软件危机-->面向对象
第三次软件危机-->架构设计
架构设计目的
架构设计的主要目的是为了解决软件系统复杂度带来的问题。
架构复杂度分析
高性能
单机高性能复杂度
操作系统复杂度
进程
多进程
基于CPU分时
SMP、NUMA、MPP
多进程通信
线程
多线程
协程
多机集群高性能复杂度
任务分配
任务分解
高可用
计算高可用
存储高可用
高可用状态决策
独裁式
协商式
民主式
可扩展性
预测变化
应对变化
变化层和稳定层
拆分
接口
抽象层和实现层
设计模式
规则引擎
低成本、安全、规模
低成本
安全
功能安全
架构安全
规模
功能越来越多,导致系统复杂度指数级上升
数据越来越多,系统复杂度发生质变
架构设计原则
合适原则
简单原则
演进原则
架构设计流程
识别复杂度
设计备选方案
数量一般在3-5个
备案方案之间的差异要比较明显
备选方案的技术不要只局限于已经熟悉的技术
设计误区
设计最优秀的方案
只做一个方案
备选方案过于详细
评估和选择
详细方案设计
高性能架构
数据库
读写分离
复杂度
主从复制延迟
数据库合理设计主从复制模式
异步复制
半同步复制
增强半同步复制
组复制(MGR)
客户端
二次读取,从读取失败后,再读一次主
关键业务读写操作全部指向主,非关键业务采用读写分离
分配机制
程序代码封装
中间件
MySQL Router
Atlas(360)
分库分表
业务分库
复杂度
业务关联查询问题
事务问题
运维成本
分表
垂直分表
复杂度
可能会存在多次查询
水平分表
复杂度
路由
范围路由
Hash路由
配置路由
join操作
count()操作
count()相加
记录数表
order_by操作
分别查询,汇总排序
高性能NoSQL
关系数据库的缺点
无法存储数据结构
schema扩展很不方便
大数据场景下I/O较高
全文搜索能力比较弱
常见NoSQL方案
K-V存储
文档数据库
列数据库
全文搜索引擎
高性能缓存架构
解决的问题
读多写少的数据
需要经过复杂运算后得出的数据
复杂度
缓存穿透
诱因
存储数据不存在
缓存数据生成耗费大量时间或者资源
缓存雪崩
解决办法
更新锁机制
后台更新机制
缓存热点
解决办法
热点数据缓存副本
单服务器高性能模式
关键点:服务器的并发模型
服务器如何管理连接
服务器如何处理请求
并发模型
PPC与TPC
Reactor与Proactor
高性能负载均衡
负载均衡分类
DNS负载均衡
优点
简单、成本低
就近访问,提升访问速度
缺点
更新不及时
扩展性能差
分配策略比较简单
硬件负载均衡
优点
功能强大
性能强大
稳定性高
支持安全防护
缺点
价格昂贵
扩展能力差
软件负载均衡
常见软负载
Nginx
LVS
优点
简单
便宜
灵活
缺点
性能一般
功能没有硬负载强大
一般不具备防火墙和防DDoS攻击等安全功能
选型原则
DNS负载均衡用于地理级别
硬件负载均衡用于集群级别
软件负载均衡用于机器级别
负载算法
算法分类
任务平分类
负载均衡类
性能最优类
Hash类
算法
轮询
加权轮询
负载最低有限
性能最优类
Hash类
高可用架构
0 条评论
下一页