【浅淡程序“三高”:高并发,高性能,高可用】

文章目录

  • 一、什么是高并发?
  • 二、什么是高性能?
  • 三、什么是高可用
  • 四、如何有效实现高并发
    • 1.垂直方向扩展,也叫竖向扩展
    • 2.水平方向扩展,也叫横向扩展
    • 3.实现高并发的关键技术
      • 1.集群化:负载均衡
      • 2.数据库层面:分库分表+读写分离
      • 3.读多写少:缓存
      • 4.高写入:消息中间件
      • 5.避免挤兑:流控
  • 总结



一、什么是高并发?

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一。当多个进程或线程同时(或着说在同一段时间内)访问同一资源时会产生并发问题,因此需要通过专门的设计来保证系统能够同时(并发)正确处理多个请求。举个小例子,例如当下课了,大伙一起冲出教室的门去食堂抢饭,但是教室的后面锁着,大家只能从前门走,这时候就可能会造成堵塞等情况。但是如果后门打开了,而且窗户也打开了 ,大伙就可以有的从后面走,有的跳窗走等等,都能去食堂打到饭的情况就是高并发。

二、什么是高性能?

高性能(High Performance)就是指程序处理速度快、耗能少。与性能相关的一些指标如下:

  • 响应时间:系统对请求做出响应的时间。例如系统处理一个 HTTP 请求需要 200ms,这个 200ms 就是系统的响应时间。
  • 吞吐量:单位时间内处理的请求数量。
  • TPS:每秒响应事务数。
  • 并发用户数:同时承载能正常使用系统功能的用户数量。

三、什么是高可用

通常用来描述一个系统经过专门的设计,从而减少停工时间,保证服务的持续可用。

四、如何有效实现高并发

1.垂直方向扩展,也叫竖向扩展

垂直方向:提升单机能力
提升单机处理能力又可分为硬件和软件两个方面:

  • 硬件方向,很好理解,花钱升级机器,更多核更高主频更大存储空间更多带宽
  • 软件方向,包括用各快的数据结构,改进架构,应用多线程、协程,以及上性能优化各种手段

2.水平方向扩展,也叫横向扩展

水平方向:分布式集群
为了解决分布式系统的复杂性问题,一般会用到架构分层和服务拆分,通过分层做隔离,通过微服务解耦。
这个理论上没有上限,只要做好层次和服务划分,加机器扩容就能满足需求,但实际上并非如此,一方面分布式会增加系统复杂性,另一方面集群规模上去之后,也会引入一堆AIOps、服务发现、服务治理的新问题。
因为垂直向的限制,所以,我们通常更关注水平扩展,高并发系统的实施也主要围绕水平方向展开。

3.实现高并发的关键技术

1.集群化:负载均衡

负载均衡就是把负载(request)均衡分配到不同的服务实例,利用集群的能力去对抗高并发,负载均衡是服务集群化的实施要素

2.数据库层面:分库分表+读写分离

就是把一个库分成多个库,部署在多个数据库服务上,主库承载写请求,从库承载读请求。从库可以挂载多个,因为很多场景写的请求远少于读的请求,这样就把对单个库的压力降下来了。
如果写的请求上升就继续分库分表,如果读的请求上升就挂更多的从库,但数据库天生不是很适合高并发,而且数据库对机器配置的要求一般很高,导致单位服务成本高,所以,这样加机器抗压力成本太高,还得另外想招。

3.读多写少:缓存

缓存的理论依据是局部性原理。
一般系统的写入请求远少于读请求,针对写少读多的场景,很适合引入缓存集群。
在写数据库的时候同时写一份数据到缓存集群里,然后用缓存集群来承载大部分的读请求,因为缓存集群很容易做到高性能,所以,这样的话,通过缓存集群,就可以用更少的机器资源承载更高的并发。
缓存的命中率一般能做到很高,而且速度很快,处理能力也强(单机很容易做到几万并发),是理想的解决方案。
CDN本质上就是缓存,被用户大量访问的静态资源缓存在CDN中是目前的通用做法。

4.高写入:消息中间件

相同的资源下,数据库系统太重太复杂,所以并发承载能力就在几千/s的量级,所以此时你需要引入别的一些技术。
比如说消息中间件技术,也就是MQ集群,它是非常好的做写请求异步化处理,实现削峰填谷的效果。
消息队列能做解耦,在只需要最终一致性的场景下,很适合用来配合做流控。
消息队列本身也跟缓存系统一样,可以用很少的资源支撑很高的并发请求,用它来支撑部分允许异步化的高并发写入是很合适的,比使用数据库直接支撑那部分高并发请求要减少很多的机器使用量。

5.避免挤兑:流控

再强大的系统,也怕流量短事件内集中爆发,就像银行怕挤兑一样,所以,高并发另一个必不可少的模块就是流控。流控的关键是流控算法

  • 1.计数器算法(固定窗口)
  • 2.滑动窗口算法
  • 3.漏桶算法
  • 4.令牌桶算法

总结

高并发和高性能是紧密相关的,提高应用的性能,可以提高系统的并发能力。所以上面主要介绍了解决高并发所带来的问题的有效方案。
详情请查询:https://www.jb51.net/article/212772.htm
注意:此文章为学习记录文章,参考多篇文章,如有不正之处请指教

你可能感兴趣的:(java,开发语言)