架构前生今世与流量负载架构设计

Posted 冷妆pro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了架构前生今世与流量负载架构设计相关的知识,希望对你有一定的参考价值。

写在前面的话:

时间:2021.12.25

地点:陕西西安(居家办公)


人物:冷妆,刚入行的java小菜鸡

事件起因:在哪吒社区得到《亿级流量java高并发与网络编程实战》

事件经过:西安因为疫情居家办公,而我的电脑落在办公区域,大型社4现场

续前文:系统设计要点

引入正题之大型系统的演进

有图有真相

对于架构演变的认知,上图来自于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中的问题,督促笔者进一步改善,你的建议是笔者坚持的动力

 

以上是关于架构前生今世与流量负载架构设计的主要内容,如果未能解决你的问题,请参考以下文章

一文带您了解微服务的前生今世

一文带您了解微服务的前生今世

应用架构设计之学习路线

不懂高性能的负载均衡设计?没关系,架构师带你飞

不懂高性能的负载均衡设计?没关系,架构师带你飞

分布式架构知识整理-服务降级设计与实践