个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈
今天我们来总结一下高性能架构的设计
高性能架构可以分为为计算高性能和存储高性能
计算高性能架构
高性能架构设计主要集中在两方面:
- 尽量提升单服务器的性能,将单服务器的性能发挥到极致 。
- 如果单服务器无法支撑性能,考虑服务器集群方案 。
单服务器高性能
单服务器高性能的关键之一就是服务器采取的网络编程模型,网络编程模型有如下两个关键设计点 :
- 服务器如何管理连接。
- 服务器如何处理请求 。
以上两个设计点最终都和操作系统的 I/O 模型及进程模型相关 。
- 1/0 模型:阻塞、非阻塞、同步 、异步
- 进程模型:单进程、 多进程、多线程。
常用的2种模型是
Reactor I/O多路复用 复用进程/线程 非阻塞同步,高性能
Proactor 异步 非阻塞异步 操作系统主动通知
集群高性能
高性能集群的本质很简单,通过增加更多的服务器来提升系统整体的计算能力。计算本身 存在一个特点:同样的输入数据和逻辑,无论在哪台服务器上执行,都应该得到相同的输出 。 因此高性能集群设计的复杂度主要体现在任务分配这部分
任务分配主要通过负载均衡来进行
不同的任务分配算法目标是不一样的,有的基于负载考虑、有的基于性能考虑、有的基于业务考虑
负载均衡类型
- DNS负载均衡 简单成本低,更新有延迟,扩展性不高,策略简单
- 硬件负载均衡 功能强大 性能强大 稳定性高 支持安全防护 价格高 扩展性低
- 软件负载均衡 简单,便宜,扩展性好,性能一般,功能一般
负载均衡架构
- 地理级别负载均衡
- 集群级别负载均衡
- 机器级别的负载均衡
负载均衡的算法
- 任务平分类 平均分配
- 负载均衡类 根据资源分配
- 性能最优类 根据性能好的分配
- Hash 类 相同id分配到同一台
存储高性能架构
mysql
mysql的高性能架构主要为读写分离和分库分表
读写分离 主要目的为 分散读压力 但是可能导致 主从一致性问题
分库分表 主要目的为分散写压力
问题是 无法join 导致分布式事务 查询复杂度提升(count join order by)
实现形式 主要有 通过代码封装 或者中间件实现
nosql
关系数据存在一些局限性
- 无法存储数据结构
- schema扩展不方便
- I/0 性能低
- 全文搜索 性能低
我们可以通过Nosql数据库来解决
- K-V 存储 解决数据结构的问题
- 文档数据库 解决schema扩展问题(场景 属性差异较大)
- 列式数据集 解决IO问题 (场景 大数据统计)
- 全文搜索引擎 解决全文搜索问题
缓存
需要经过复杂运算后得出的数据,存储系 统无能为力 。 读多写少 的数据,存储系统有心无力
缓存就是为了弥补存储系统在这些复杂业务场景下的不足 , 缓存的基本原理就是将可能重 复使用 的数据放到内存中 ,一次生成,多次使用, 避免每次使用都去访问存储系统。
缓存可能带来的问题
- 缓存穿透
- 缓存雪崩
- 缓存热点
附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读/书籍书单大全:
(点击右侧 即可打开个人博客内有干货):技术干货小栈
=====>>①【Java大牛带你入门到进阶之路】<<====
=====>>②【算法数据结构+acm大牛带你入门到进阶之路】<<===
=====>>③【数据库大牛带你入门到进阶之路】<<=====
=====>>④【Web前端大牛带你入门到进阶之路】<<====
=====>>⑤【机器学习和python大牛带你入门到进阶之路】<<====
=====>>⑥【架构师大牛带你入门到进阶之路】<<=====
=====>>⑦【C++大牛带你入门到进阶之路】<<====
=====>>⑧【ios大牛带你入门到进阶之路】<<====
=====>>⑨【Web安全大牛带你入门到进阶之路】<<=====
=====>>⑩【Linux和操作系统大牛带你入门到进阶之路】<<=====天下没有不劳而获的果实,望各位年轻的朋友,想学技术的朋友,在决心扎入技术道路的路上披荆斩棘,把书弄懂了,再去敲代码,把原理弄懂了,再去实践,将会带给你的人生,你的工作,你的未来一个美梦。
转载:https://blog.csdn.net/weixin_41663412/article/details/104953524