服务器架构
业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再到分布式服务。
一个可以支持高并发的服务少不了好的服务器架构,需要有均衡负载,数据库需要主从集群,nosql缓存需要主从集群,静态文件需要上传cdn,这些都是能让业务程序流畅运行的强大后盾。
大致需要用到的服务器架构如下:
-
服务器
- 均衡负载(如:nginx,阿里云SLB)
- 资源监控
- 分布式
-
数据库
- 主从分离,集群
- DBA 表优化,索引优化,等
- 分布式
-
NOSQL
-
redis
- 主从分离,集群
-
mongodb
- 主从分离,集群
-
memcache
- 主从分离,集群
-
redis
-
CDN
- html
- css
- js
- imag
并发测试
第三方服务:
- 阿里云性能测试
- Apache JMeter
- Visual Studio性能负载测试
- Microsoft Web Application Stress Tool
实战方案
通用方案
日用户流量大,但是比较分散,偶尔会有用户高聚的情况;
场景: 用户签到,用户中心,用户订单,等
服务器架构图:
说明:
场景中的这些业务基本是用户进入APP后会操作到的,除了活动日(618,双11,等),这些业务的用户量都不会高聚集,同时这些业务相关的表都是大数据表,业务多是查询操作,所以我们需要减少用户直接命中DB的查询;优先查询缓存,如果缓存不存在,再进行DB查询,将查询结果缓存起来。
更新用户相关缓存需要分布式存储,比如使用用户ID进行hash分组,把用户分布到不同的缓存中,这样一个缓存集合的总量不会很大,不会影响查询效率。
方案如:
-
用户签到获取积分
- 计算出用户分布的key,redis hash中查找用户今日签到信息
- 如果查询到签到信息,返回签到信息
- 如果没有查询到,DB查询今日是否签到过,如果有签到过,就把签到信息同步redis缓存。
- 如果DB中也没有查询到今日的签到记录,就进行签到逻辑,操作DB添加今日签到记录,添加签到积分(这整个DB操作是一个事务)
- 缓存签到信息到redis,返回签到信息
注意
这里会有并发情况下的逻辑问题,如:一天签到多次,发放多次积分给用户。
-
用户订单
- 这里我们只缓存用户第一页的订单信息,一页40条数据,用户一般也只会看第一页的订单数据
- 用户访问订单列表,如果是第一页读缓存,如果不是读DB
- 计算出用户分布的key,redis hash中查找用户订单信息
- 如果查询到用户订单信息,返回订单信息
- 如果不存在就进行DB查询第一页的订单数据,然后缓存redis,返回订单信息
-
用户中心
- 计算出用户分布的key,redis hash中查找用户订单信息
- 如果查询到用户信息,返回用户信息
- 如果不存在进行用户DB查询,然后缓存redis,返回用户信息
-
其他业务
- 上面例子多是针对用户存储缓存,如果是公用的缓存数据需要注意一些问题,如下
注意
公用的缓存数据需要考虑并发下的可能会导致大量命中DB查询,可以使用管理后台更新缓存,或者DB查询的锁住操作。
以上例子是一个相对简单的高并发架构,并发量不是很高的情况可以很好的支撑,但是随着业务的壮大,用户并发量增加,我们的架构也会进行不断的优化和演变,比如对业务进行服务化,每个服务有自己的并发架构,自己的均衡服务器,分布式数据库,nosql主从集群,如:用户服务、订单服务;
消息队列
秒杀、秒抢等活动业务,用户在瞬间涌入产生高并发请求
场景:定时领取红包,等
服务器架构图:
说明:
场景中的定时领取是一个高并发的业务,像秒杀活动用户会在到点的时间涌入,DB瞬间就接受到一记暴击,hold不住就会宕机,然后影响整个业务;
像这种不是只有查询的操作并且会有高并发的插入或者更新数据的业务,前面提到的通用方案就无法支撑,并发的时候都是直接命中DB;
设计这块业务的时候就会使用消息队列的,可以将参与用户的信息添加到消息队列中,然后再写个多线程程序去消耗队列,给队列中的用户发放红包;
方案如:定时领取红包
- 一般习惯使用 redis的 list
- 当用户参与活动,将用户参与信息push到队列中
- 然后写个多线程程序去pop数据,进行发放红包的业务
- 这样可以支持高并发下的用户可以正常的参与活动,并且避免数据库服务器宕机的危险
附加:
通过消息队列可以做很多的服务。
如:定时短信发送服务,使用sset(sorted set),发送时间戳作为排序依据,短信数据队列根据时间升序,然后写个程序定时循环去读取sset队列中的第一条,当前时间是否超过发送时间,如果超过就进行短信发送。
一级缓存
高并发请求连接缓存服务器超出服务器能够接收的请求连接量,部分用户出现建立连接超时无法读取到数据的问题;
因此需要有个方案当高并发时候时候可以减少命中缓存服务器;
这时候就出现了一级缓存的方案,一级缓存就是使用站点服务器缓存去存储数据,注意只存储部分请求量大的数据,并且缓存的数据量要控制,不能过分的使用站点服务器的内存而影响了站点应用程序的正常运行,一级缓存需要设置秒单位的过期时间,具体时间根据业务场景设定,目的是当有高并发请求的时候可以让数据的获取命中到一级缓存,而不用连接缓存NOSQL数据服务器,减少NOSQL数据服务器的压力
比如APP首屏商品数据接口,这些数据是公共的不会针对用户自定义,而且这些数据不会频繁的更新,像这种接口的请求量比较大就可以加入一级缓存;
服务器架构图:
合理的规范和使用nosql缓存数据库,根据业务拆分缓存数据库的集群,这样基本可以很好支持业务,一级缓存毕竟是使用站点服务器缓存所以还是要善用。
静态化数据
高并发请求数据不变化的情况下如果可以不请求自己的服务器获取数据那就可以减少服务器的资源压力。
对于更新频繁度不高,并且数据允许短时间内的延迟,可以通过数据静态化成JSON,XML,HTML等数据文件上传CDN,在拉取数据的时候优先到CDN拉取,如果没有获取到数据再从缓存,数据库中获取,当管理人员操作后台编辑数据再重新生成静态文件上传同步到CDN,这样在高并发的时候可以使数据的获取命中在CDN服务器上。
CDN节点同步有一定的延迟性,所以找一个靠谱的CDN服务器商也很重要.
其他方案
- 对于更新频繁度不高的数据,APP,PC浏览器,可以缓存数据到本地,然后每次请求接口的时候上传当前缓存数据的版本号,服务端接收到版本号判断版本号与最新数据版本号是否一致,如果不一样就进行最新数据的查询并返回最新数据和最新版本号,如果一样就返回状态码告知数据已经是最新。
减少服务器压力:资源、带宽
转:https://blog.thankbabe.com/2016/09/14/high-concurrency-scheme/
相关推荐
本人十余年JAVA从业经验,精通JAVA高可用、分布式、高并发系统架构设计。有志于做JAVA职业规划、技术提升的可与我联系,交个朋友~ 本人十余年JAVA从业经验,精通JAVA高可用、分布式、高并发系统架构设计。有志于做...
"ORACLE+RAC:集群、高可用性、备份与恢复(60-90).pdf"这部分标签可能意味着文档将涵盖Oracle RAC的集群架构,如何实现高可用性,以及在RAC环境下的备份和恢复策略。这涵盖了Oracle RAC的核心要素,包括Grid ...
7. **功率与散热**:高性能处理器往往伴随着高功率消耗和热量产生,这需要有效的散热解决方案来维持稳定运行。处理器的热设计功率(TDP)是衡量其散热需求的重要指标。 通过对这些基础知识的深入学习,读者可以更好...
《大话Oracle.RAC:集群、高可用性、备份与恢复(第2版)》是一部深入探讨Oracle数据库Real Application Clusters(RAC)技术的专业书籍,主要围绕Oracle RAC的集群架构、高可用性策略以及数据库的备份与恢复策略...
大数据存储架构则需要面对海量数据、数据多样性和高并发访问等挑战。 综上所述,网络存储系统原理精解与最佳实践,涵盖了存储系统的基础架构、核心存储技术、数据保护与备份策略、系统管理优化以及特定场景下的解决...
首先整个售票系统是一个非常庞大而复杂的系统,是一个高负荷、高并发的云平台,其规模甚至比淘宝大2至3倍,而且对于数据的实时性要求非常高。光是12306网站系统的日访问量达到了15亿次,如果加上各个代售点和车站...
### 网络存储系统底层架构原理加强特训知识点概览 #### 一、课程背景与目标 ...通过两天高强度的培训,学员不仅能够理解存储系统的架构和原理,还能掌握一系列实用的技术细节,为未来的职业生涯奠定坚实的基础。
在集群文件系统中,数据的一致性和并发访问控制是核心问题,本文将深入探讨这些问题,并介绍主流厂商的文件系统技术架构和特点。 首先,要理解集群文件系统的基本概念。双机共享一个卷是集群文件系统的一个典型应用...
企业级应用对安全性有高要求,包括数据加密、API权限验证、SSL Pinning等。源代码可能展示了如何使用Android Keystore系统进行密钥管理,如何集成OAuth2.0或JWT(JSON Web Tokens)进行用户身份验证,以及如何确保...
8. **多线程和并发**:Android应用中处理耗时操作时,多线程和并发管理必不可少。书中可能讲解Handler、Looper、Thread和ThreadPoolExecutor等概念。 9. **权限管理**:随着Android版本的更新,权限管理变得越来越...
《大话企业级Android开发》是一本专注于深入探讨企业级Android应用开发的资源包。它涵盖了从基础到高级,从理论到实践的各种知识点,旨在帮助开发者提升在Android平台上的专业技能,以应对复杂的商业需求。这个...
这些架构设计使得OceanStor 9000能够实现高并发的IO读写能力,以及多样化的协议支持,包括NFS、CIFS和FTP等。 在安全性和权限管理方面,OceanStor 9000提供了多级权限细分和鉴权流程。例如,系统不仅支持ACL...
Java虚拟机实现、基于分布式架构的大型B2C电子商务网站(主要采用Struts+JPA+Spring)、具备承载大规模并发服务能力的SNS网站(主要采用LAMP)。 其他企业内部应用程序。 经历简介: 2008年前,B2C电子商务创业和SNS创业...
此外,还介绍了Oracle的高可用架构(Maximum Availability Architecture,MAA)以及RAC集群的具体层次结构,包括存储层、网络层、集群件层和应用层。书中还讨论了RAC集群可能遇到的特殊问题,如并发控制、健忘症(A...
2. **并行计算**:为了提高计算效率,云计算采用了并行计算的方式,将任务分解为多个小任务并发执行。 3. **效用计算**:云计算服务通常采用按需付费的模式,用户只需为实际使用的资源付费,类似于电力或水的使用。 ...
在数据库设计完成后,可以进行初步的索引设计,好的索引设计可以指导编码阶段写出高效率的代码,为整个系统的性能打下良好的基础 以下是性能要求设计阶段需要注意的: 1 、数据库逻辑设计的规范化 一般说来,...
这套源代码的学习和研究对于理解大型在线游戏服务端架构、网络编程、数据库操作、多线程并发控制、安全性设计等方面都具有极高的价值。无论是对于游戏开发人员还是对技术感兴趣的爱好者,都能从中获益,提升自己的...