高并发场景下的服务器部署方案
- 什么是并发量?什么是吞吐量?
- 高并发场景下的服务器部署方案
- 实战环境中负载均衡策略
- 如何对项目应用进行拆分与划分
- 大型企业级项目容器化改造
响应时间RT:应用执行一个操作所需要的时间,包括从发出请求开始到最后收到响应所需要的的时间
并发量:同一时刻系统能同时处理的数量,服务器同时处理的请求数(查询类请求数,事务类请求数)
吞吐量:系统在单位时间内处理的请求的数量
TPS:每秒事务的处理数
QPS:每秒查询量
RPS:每秒请求数
QPS(TPS)=并发数/平均响应时间RT
分布式:系统中的多个模块在不同的服务器上部署
高可用:系统中部分节点失效,其他节点能够接替他继续提供服务
集群:一个特定领域的条件部署在多台服务器上,并且作为一个整体提供服务
负载均衡:请求发送到系统时,通过某些方式把请求均匀分布到多个节点,使得系统中的每个节点都能均匀的处理请求负载。
正向代理:代理服务器代替系统内部来访问外部的过程
反向代理:外部请求访问系统时通过代理服务器转发到内部服务器的过程
Spring:基于JavaEE的分布式开放平台
Redis:主从副用;即两个节点,一个节点挂了另一个节点可以备用。类似功能rabbitMQ\zookeeper
——>高可用
微服:所有服务拆分,部署到不同的服务器上。
——>集群
Tomcat架构中:Nginx实现负载均衡,同样实现正向代理。
正向代理:FQ(即知道目标但是拿不到)。举例来讲:我想买新疆羊腿但是不想自己过去,此时我可以在淘宝网上进行购买,淘宝就实现了正向代理,加强服务的功能。
反向代理:(即具体在什么位置不知道)比如想买一件衣服,这件衣服在国内无法购买,但我可以描述他的大概,具体的操作由海外代购进行购买,至于海外代购怎么去,去哪个专柜我们都不得而知。
发展初期——单服时代
输入域名——>DNS解析域名(店家购买域名——>绑定店家的IP地址)
Tomcat和DB数据库在同一个服务器终端中
第二时期——双服务器时代
大大提高了效率。
第三时期——增加缓存
矛盾的出现
随着数据库的体量越来越大,于是导致了数据库后台等待被执行的线程越来越多,可是数据库的读写的吞吐量是一定的,缓存数据库具有读写速度快的优点,为解决这一问题,memcached登场了
Memcached:是一套分布式的快取系统,与redis相似,通过缓存数据库查询结果减少数据库的访问次数,以提高动态Web应用的速度,提高可扩展性。是一种基于内存的服务,可承担几十万的并发量,tomcat负责负载均衡。
进一步
如果memcache仍无法满足如此之大的读写需要,此时缓存型数据库redis可用于辅助。Redis是一种缓存形势的数据库拥有读写速度快、内存小的特点。内存小就是仍然需要DB的原因。
再进一步
Tomcat可承载的访问需求进一步提升此时,tomcat无法承受如此大的访问量了,一般的解决方案是多加几个tomcat就可以顺利解决了
此时又存在一个问题,我们都知道线程是抢占式的执行方式,我们放三个tomcat,会不会有一个时刻的巧合是所有的任务都被一个tomcat抢占,而另外两个tomcat却没事可做呢?为了避免这种情况的出现于是就有了Nginx的出现来实现不同Tomcat的负载均衡。
此时仍然具有一个问题,Redis在存储达到阈值时会自动删除一些数据,
即大家听说过的Redis的缓存击穿、缓存雪崩、缓存穿透。
特别是例如秒杀活动等访问量过大的时候极易容易发生。
下一时期——读写分离
第五时期——分表
此时,数据库的体量进一步增大,导致每次查询的运行时间较长。解决的方式是将最近的数据拿出来,以时间维度重新排列数据表,如此检索的数据量将大大减小。Mycat可以实现数据库的读写分离,分表等
这么做的目的正是拆分流量。例如百度的网页每次只显示一页的内容,如果需要更多内容则需要点击下一页。
第六阶段--——LVS\F5
这一阶段产生的原因在于数据量的进一步加大。众所周知Nginx只能承载接近五万的并发量。此时将会从源头对于流量进行一定程度上的限制。如此我们便需要对Nginx进行负载均衡。在网络的第四层做负载均衡,从而部署多台Nginx。
此时LVS/F5出现了LVS是负责软件层面,F5则负责硬件层面。
到此,这就是一个完整机房的部署,同时我们需要注意到如果是单个机房,通常若服务挂掉了,则整个体系就会全部瘫痪,称之为宕机,为应对这种情况,通常会采取一台备用。
第七阶段——机房的负载均衡
按照上一阶段的部署,我们已经拥有不同的机房了,此时利用KEEPALIVED的技术可以帮助生成虚拟的IP地址。
第八节段——后台地址任不够用
基于上一步,用户需要进行多元化的数据存储(声音、视频等),这时就有可能出现后台地址不够用的情况,此时我们需要非关系型数据库(NOSQL)例如mongdb,来搭建分布式数据库。
进入这一阶段,无论是文件存储还是检索数据都受到极大的挑战。
提供搜索引擎全文检索功能的elasticsearch、分布式文件存储系统
Hdfs(用以存储GB级别的数据)、fastdfs(用于存储MB级别的数据)、七千云阿里云应运而生。
第九阶段——微服的时代
当今为大家所熟知的Spring全家桶正是微服时代的应用,通过对于应用或者业务的拆分来提升工作效率,例如我们所看到的聚划算、百亿补贴、物流查询、天猫都是基于此项微服的技术来实现的。