高并发简单思路


    

高并发大流量网站架构简单思路

标签: 数据库架构高并发架构
2075人阅读 评论(0) 收藏 举报
本文章已收录于:
分类:
*******************************
前端
*******************************
1.增加必要的硬件和带宽,同时额外储备一部分,以备不时之需
2.特别监控网络数据流量是否正常,如是否有大规模的爬虫、DDOS等浑水摸鱼,可以针对iP和Cookie的限流
3.使用CDN同时做一些必要的算法改造,动静分离



*******************************
代码端
*******************************
1.必要的代码优化改造如软件升级、慢查询、客户端缓存、多线程之类
2.设计高峰期时的降级使用:关掉或暂停非核心的页面功能、后端统计功能
3.SOA做好横向扩展,最好是自动化扩展
4.负载选择七层还是四层,负载会不是瓶颈
5.各种高大上的缓存:reids、mongdb、memcache等
6.web到数据库端需要一个“隔离区”,让数据平稳、源源不断的进入数据库
7.尽量不要使用带复杂业务逻辑处理的存储过程(犹其是在N大数据结果集中做业务逻辑处理),减少数据库CPU和内存压力
8.功能模块间,做好隔离,不能因为一个功能加载不出数据,而影响其它非相互依赖功能。
9.合理的连接池设计



*******************************
后端
*******************************


1.主从复制:

情况1:很难做到实时,但是切换时,可能有部分数据没有同步过来,带来了数据的一致性问题。
可以在操作主数据库的同时,记录操作日志,切换到备时,会和操作日志做个check,补齐未同步过来的数据;


情况2:dbrd+master-slave模式或share eveything架构


2.PXC或MGC群集的share nothing架构


3.按照页面不同需求拆分数据库:如用户登录、购物车、下单、支付等分布在不同数据库


4.按区域划分DB:如华东、华北、华中、华南、华西不同区域用户到不同IDC的DB,最后数据汇总到总部IDC即可;当问题爆发时不会影响全局;单机房DB压力会降低.


5.数据库硬件:如使用SSD、闪存存储等.


6.纯内存数据库:如timesten、HANA或自己定制开发


7.杀手锏:
1)强行设置交易完成如起飞时间也过也不可能退款的数据归档,归档数据只供查询 .


2)如果第一种强行归档数据量依然巨大,可以按照天如10天之前的归档,毕竟
80以上的交易都会完成,在不大量修改代码的情况,如前端需要退款、改签处理,
将数据直接insert导入主库即可,毕竟数据库insert不是最大的瓶颈.


3)按照订单状态拆分:下单未支付、支付完成、处理中、支付完成,分别架构到不同的表.



---------多机房容灾探讨
1.异地机房容灾
A->P还是A->A


2.单机房可以考虑多路光纤


3.底层复制:硬件、软件(RSYNC、DBRD、OGG)



### 高并发处理的常规方法和架构设计 高并发系统架构的核心目标是确保系统在面对大量请求时仍然能够保持稳定、高效地运行。为了实现这一目标,需要遵循一定的方法论[^1],并结合实际需求进行架构设计。以下是高并发场景下常见的解决方案和架构设计思路: #### 1. 明确高并发应对思路 高并发系统架构的方法论是围绕性能优化展开的。核心思想在于通过分布式、异步化、缓存等手段降低单点压力,提升系统的吞吐量和响应速度。同时,高并发系统的设计需要基于真实场景的需求分析,例如微博、短视频、网约车等应用中的海量数据处理、高性能需求以及高可用性保障[^2]。 #### 2. 分布式架构设计 分布式架构是解决高并发问题的基础。通过将请求分散到多个节点上处理,可以显著提升系统的承载能力。分布式架构通常包括以下几个方面: - **负载均衡**:通过负载均衡器(如 Nginx、HAProxy)将请求分发到不同的服务器实例,避免单点过载。 - **分布式存储**:利用分布式数据库或文件系统(如 HDFS、Ceph)来存储海量数据,支持高并发读写操作。 - **消息队列**:使用消息中间件(如 Kafka、RabbitMQ)将同步操作转化为异步操作,缓解瞬时流量高峰的压力[^4]。 #### 3. 缓存策略 缓存是提升系统性能的重要手段之一。通过将热点数据存储在内存中,可以减少对后端数据库的压力,从而提高响应速度。常见的缓存策略包括: - **本地缓存**:使用内存级缓存(如 Guava Cache)来存储频繁访问的数据。 - **分布式缓存**:利用 Redis 或 Memcached 等分布式缓存系统存储全局共享的数据。 - **CDN 加速**:对于静态资源,可以通过内容分发网络(CDN)将其缓存到离用户更近的边缘节点上,减少延迟。 #### 4. 读写分离与分库分表 互联网系统通常具有“读多写少”的特点,因此可以通过读写分离来提升系统的吞吐量。一主多从的架构不仅可以抗量,还能保证数据一致性[^3]。此外,当数据量达到一定规模时,分库分表技术可以帮助解决单库 QPS 过高的问题,但需要注意的是,分库分表无法完全解决写入 TPS 过高的问题,此时需要结合读写分离或其他手段[^3]。 #### 5. 异步处理与限流降级 在高并发场景下,异步处理可以有效降低系统的响应时间。通过引入消息队列或异步任务框架(如 Celery),可以将耗时操作从主线程中剥离出来,从而提升系统的整体性能。此外,限流和降级策略也是保障系统稳定性的重要手段。例如,在秒杀抢购场景中,可以通过令牌桶算法限制请求速率,并在必要时关闭非核心功能以保护系统[^4]。 #### 6. 高可用与容灾设计 高并发系统必须具备高可用性,这意味着即使部分节点发生故障,整个系统仍能正常运行。为此,需要采取以下措施: - **冗余部署**:通过多机房、多区域部署实现系统的冗余备份。 - **自动切换**:利用 Zookeeper 或 Consul 等工具实现服务发现和故障转移。 - **数据备份与恢复**:定期备份重要数据,并制定完善的灾难恢复计划。 ```python # 示例代码:使用 Redis 实现简单的分布式锁 import redis def acquire_lock(redis_client, lock_name, acquire_timeout=10): identifier = str(uuid.uuid4()) end = time.time() + acquire_timeout while time.time() < end: if redis_client.set(lock_name, identifier, nx=True, ex=acquire_timeout): return identifier time.sleep(0.001) return None def release_lock(redis_client, lock_name, identifier): script = """ if redis.call("get", KEYS[1]) == ARGV[1] then return redis.call("del", KEYS[1]) else return 0 end """ return redis_client.eval(script, 1, lock_name, identifier) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值