高容错性商城项用到什么框架?
我们先来说高并发吧。
什么是高并发?高并发是互联网分布式系统架构设计中必须考虑的因素之一,它通常指:通过设计保证系统能够同时并行处理很多的请求。
高并发有哪些指标?响应时间:系统对请求做出 响应的时间。例如:处理一个HTTP请求需要200ms,那200ms就是响应时间。
吞吐量:单位时间内处理的请求数量。
QPS:每条响应的请求数量。其实这个指标和吞吐量区分不明显。
并发数量:同时承载正常使用系统功能的用户数量。例如:QQ同时在线的用户数量其实也就是并发数量了。
如何提高并发能力?提高系统的能发能力,主要有两种方式:垂直扩展和水平扩展
垂直扩展
其实就是提升单机的处理能力,一般又有两种方法:
1)增强单机硬件性能
这个方法简单暴力,升级CPU,升级硬盘,升级内存,升级网卡。
2)提升单机架构性能
这个方式就是委婉一点了,我们通过缓存,尽量的减少IO的次数,使用异步的线程处理,增加服务的吞吐量,使用无锁的数据结构,减少响应时间等等。
在互联网飞速发展的时期,提升单机硬件性能往往是最快的方法,因为这个阶段,时间是最包括的,升级硬件是最能够有效解决问题的方式,而且时间成本几乎可以不考虑。
但是这个方法有一个致命的缺点,就是,单机的性能是有极限的,但是用户的增长理论上可以是无限的,所以,解决问题的根源,这个方式并不适用,我们更多的还是选择水平扩展的方式
水平扩展
水平扩展,其实就是增加服务器的数量,从而线性扩充系统的性能,但是,这个就对系统的架构设计有要求了,如何让架构各层能够进行水平扩展的设计,就是系统设计的重点了。
常见的分层架构常见的分布式架构如上图:
客户端层:浏览器或者手机APP
反向代理层:系统入口、反向代理
站点应用层:实现核心的逻辑,返回html或者json
服务层:这一层可以有,也可以没有,如果我们没有实现服务化,也就没有这个了
数据缓存层:缓存部分数据,加速访问速度,减少数据库的IO
数据库层:固化数据的存储
水平扩展架构实践反向代理层的水平扩展
其实是通过DBS轮询实现的:DNS-SERVER对于一个域名配置了多个解析IP,每次DNS解析请求来访问DNS-SERVER,会轮询返回这些IP。
当Nginx成为瓶颈的时候,只要增加服务器数量,部署Nginx服务,增加IP,就可以扩展反向代理层的性能,理论上是可以实现无限高并发的。
站点层的水平扩展
站点层的水平扩展是通过Nginx实现的,通过修改Nginx配置,设置多个web后端。当web后端成为瓶颈时,增加web服务器,加入Nginx配置中,就可以理论上实现无限高并发了。
服务层水平扩展
服务层的水平扩展,是通过服务连接池实现的。
站点层通过RPC-client调用下游服务层RPC-server时,当服务层成为瓶颈时,增加服务器,部署到RPC-client下游服务连接中,就可扩展性能了。
数据库层的水平扩展
缓存想要扩展是很简单的,只需要细化缓存的颗粒就行了,例如某一个服务器,缓存哪些类型的数据,我们一般缓存的数据并不会很多,通常都是变化频率不高的数据进行缓存,变化频率高的数据,缓存的意义相对较小。
但是,数据库其实是有极限的,随着我们数据量的增加,数据库的压力越来越大。
一般我们的处理就是,分库分表。
将数据层水平拆分,例如服务器A存储用户数据,服务器B存储订单数据。这样,我们就可以实现服务器的水平扩充。
但是有时候,一个表,例如订单表的数据量就会非常的大。
我们又会对这样类型的表进行垂直的拆分。
将表分为order1,order2……
通过orderid的范围来确定应该查询那个数据库。
例如:order1库,存储orderid1—1kw
order2库,存储orderid1kw-2kw
这样,我们就能很好的对数据进行路由,并且数据均衡性较好,也容易扩展。
小结其实,能够实现高并发的技术很多。
好像我们在做秒杀的时候,其实我们从客服端、站点层,到服务层,每一层都有一个过滤,让无效的访问能够被过滤,减少数据层的IO,其实,数据层是最容易产生瓶颈的一层,所以,我们的所有工作,就是尽可能的少对数据层进行访问,提高吞吐量。
所以,类似队列,缓存,负载均衡都是一些常用的手段。
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有