架构前生今世与流量负载架构设计
Posted 冷妆pro
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了架构前生今世与流量负载架构设计相关的知识,希望对你有一定的参考价值。
写在前面的话:时间:2021.12.25 地点:陕西西安(居家办公) |
续前文:系统设计要点
引入正题之大型系统的演进
有图有真相
对于架构演变的认知,上图来自于dubbo官网:单一应用架构-垂直应用架构-分布式服务架构-流动计算架构
接下来所说的架构演进从不同类型的服务器-->集群服务和动静分离-->分布式系统-->提高数据的性能-->跨语言rpc组合
从不同类型服务器的选择(必需三台服务器)->集群服务和动静分离的优化-->并发增加,搭建分布式系统->完成之后就是提高数据的访问速度-->兼容一致性处理
不同类型的服务器
大型项目,高性能,至少三台服务器
1.应用服务器:处理业务逻辑(强大cpu支持)
2.数据库服务器:依赖磁盘检索的速度和数据缓存的容量(速度较快的硬盘的支持和大容量内存)
3.文件服务器:存储文件(大容量硬盘或内存)
集群服务与动静分离
以上搭建的只是单一应用服务器,能够处理的连接请求时有限的
集群的优势:1.负载均衡(分担服务器的压力)2:失败迁移(不会受到服务器宕机的影响)
这又让我想起西安一码通挂掉,修复了好久,难道。。。不敢想象
集群也相当于可以存放数据,处理请求,所以动静分离的优化是必然的
静:CDN一般将这些静态资源部署在各地边缘的服务器上,html,css这些资源可以缓存在反向代理服务器上,前端还有webpack打包工具,统一打包
动:crud动态请求访问到应用服务器
分布式系统
并发数增加,项目扩大,分布式来拆分
所谓分布式系统:拆分部署,网络整合模块
其实根据上面三个必需的服务器可以理解到分布式系统可以分为
分布式应用:
垂直拆分:将项目根据业务功能拆分成不同的模块,然后再整合各个模块
水平拆分:经典的三层架构(各层部署在不同的机器上)
分布式文件系统:所有文件分散存储到多台计算机上
分布式数据库:所有数据库分散存储在多台计算机上
提高数据的性能
1:在应用服务器上使用缓存
缓存分为本地缓存和远程缓存
本地缓存:访问速度块
远程缓存:无限制扩容,CPU能力
2.对数据进行读写分离,主从同步的热备份
处理海量数据的话(ES搜素引擎)-->(Hdoop,Spark,Storm进行大数据技术处理)
3.关系型数据库与非关系型数据库搭配使用
跨语言组合RPC整合(Thrift,gRPC)
这听着有点生硬,说白了就是编程语言不兼容,需要给系统加一层跨语言的中转结构来强制整合,所以这是不得已的选择
限流与多层负载
1)拦截非法的请求,从而进行一定的限流
2)通过Keepalived实现LVS多机部署,LVS进行客户请求分流
3)通过nginx进行动静分离
4)集群的服务,通过Nginx进行整合
5)Maven进行依赖管理,GIt进行版本控制
多级负载架构
相比较而言就是DNS绑定了多个LVS集群
Nginx将动态请求的路径转发到特定的服务器上
重点说明:
级联的层次越多,就会造成请求在系统中路径越长,系统性能有了很大影响
结合实际项目具体情况以及压力测试的结果权衡考虑
写在后面的话:事件结果:现在的时间完全按照自己的规划走下去,所以写下了以上blog 碎碎念:欢迎大家指出blog中的问题,督促笔者进一步改善,你的建议是笔者坚持的动力 |
以上是关于架构前生今世与流量负载架构设计的主要内容,如果未能解决你的问题,请参考以下文章