百万级访问量—高并发问题的解决历程

简介: 代理是一个接收和转发请求的过程。正常情况下,「正向代理」代理的对象是客户端,「反向代理」代理的对象是服务端,它完成这些功能:

一、单台服务器+数据库(原始)


原始架构


二、增加反向代理


反向代理


代理是一个接收和转发请求的过程。正常情况下,「正向代理」代理的对象是客户端,「反向代理」代理的对象是服务端,它完成这些功能:


健康检查功能,确保我们的服务器是一直处于运行状态的
路由转发功能,把请求转发到正确的服务路径上
认证功能,确保用户有权限访问后端服务器
防火墙功能,确保用户只能访问允许使用的网络部分等等


三、引入负载均衡器


引入负载均衡器


反向代理还有另外一个功能:他们也可以充当负载均衡器。


Nginx经过配置,可以反向代理多台服务器。


部署多台Nginx(反向代理服务器),防止宕机,提升系统运行稳定性。


Nginx反向代理以及负载均衡配置参考:nginx配置反向代理示例 - 四喜 - 博客园


四、扩展数据库


负载均衡器的使用使得我们可以在多个服务器之间分配负载,但是现在所有的服务器还是使用的一个数据库进行存储和检索数据。我们可以用同样的方式,再扩展几台数据库出来,减轻存储检索压力,但是这里存在一个数据一致性的问题。


(1)主从模式或者单实例写多副本读


其中一台数据库负责数据写入修改,其他服务器负责读,这个方案的好处是保证了一致性,因为数据只能被单实例一台数据库写入,之后把写入数据同步到其他部分即可,所以该方案适合读多写少的情景。


I、如何进行同步?


同步机制


通过使用消息队列进行异步数据同步,来实现数据的最终一致性。当然消息队列的各种异常也会造成数据不一致,所以我们又引入了实时监控服务,实时计算两个集群的数据差异,并进行一致性同步。


II、主从模式弊病


主从模式架构


当主库DB1出现问题时,DBA会将DB2切换为主库,并通知项目组,项目组使用DB2替换原有的主库DB1,重启web服务器,这样web服务将使用新的主库DB2,而DB1将不再被访问,整个数据库服务得到恢复,等DBA修复DB1时,再将DB1作为DB2的从库即可。

这里有个很大的问题,就是不管主库或从库出现问题,都需要DBA和项目组协同完成数据库服务恢复,这很难做到自动化,而且恢复工程也过于缓慢。


所以数据库如何做到高可用呢?


高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。


数据库高可用架构


如上图所示,web服务器将不再直接连接主库DB1,而是连接KeepAlive虚拟出的一个虚拟ip,再将此虚拟ip映射到主库DB1上,同时添加DB_bak从库,实时同步DB1中的数据。正常情况下web还是在DB1中读写数据,当DB1宕机后,脚本会自动将DB_bak设置成主库,并将虚拟ip映射到DB_bak上,web服务将使用健康的DB_bak作为主库进行读写访问。这样只需几秒的时间,就能完成主数据库服务恢复。

同样的,web服务器将不再直接连接从库DB2和DB3,而是连接LVS负载均衡,由LVS连接从库。这样做的好处是LVS能自动感知从库是否可用,从库DB2宕机后,LVS将不会把读数据请求再发向DB2。同时DBA需要增减从库节点时,只需独立操作LVS即可,不再需要项目组更新配置文件,重启服务器来配合。


(2)分库分表操作


参考:高并发数据库设计 - zjone391 - 博客园

分库分表需要考虑的问题及方案 - 简书


五、微服务


将所有服务放在一个服务器上,放在一个JAR包,降低了复杂性,但是随着规模的增加,事情会变得复杂和低效,更多的开发人员加入进来,在同一台服务器同一个项目代码里面进行开发,造成的冲突会越来越多,互相依赖性太高,同时不利于新入开发人员阅读理解代码。

这时候微服务架构产生了。


微服务架构


每个服务都可以单独扩展,更好地适应需求

开发团队之间相互独立,每个团队都负责自己的微服务生命周期(创建,部署,更新)等。

每个微服务都有自己的资源,比如数据库,进一步缓解了数据库的问题。

微服务的划分大多是基于业务进行拆分,实现低耦合。


六、缓存和内容分发网络(CDN)


缓存架构


网络应用的很大一部分由静态资源构成,如图片、CSS样式文件、JavaScript脚本以及一些针对特定产品提前渲染好的页面等,通过使用缓存,对于一些客户的请求,不一定都去重新处理一遍,使用缓存,提高访问速度。缓存的加强版叫内容分发网络(Content Delivery Network),遍布全球的大量缓存。 这使得用户可以从物理上靠近他们的地方来获取网页内容,而不是每次都把数据从源头搬到用户那里。


七、消息队列


消息队列


将客户的任务请求放到一个队列当中,进行管理任务,优点:


解耦了任务和处理过程。有时需要处理大量的图片,有时很少。有时有大量服务可用,有时很少可用。简单地把任务添加到待办事项而不是直接处理它们,这确保了系统保持响应并且任务也不会丢失。

可以按需扩展。启动大量的服务比较耗时,所以当有大量用户上传图片时再去启动服务,这已经太晚了。我们把任务添加到队列中,我们可以推迟提供额外的处理能力。


八、总结


大道至简,不管采用什么方案,优化的根本都是分而治之,大事化小,小事再化小,没有啥是一个中间件解决不了的,如果有,那么再加一个!

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3月前
|
缓存 安全 API
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的API网关设计实现
公司对外开放的OpenAPI-Server服务,作为核心内部系统与外部系统之间的重要通讯枢纽,每天处理数百万次的API调用、亿级别的消息推送以及TB/PB级别的数据同步。经过多年流量的持续增长,该服务体系依然稳固可靠,展现出强大的负载能力。
73 9
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的API网关设计实现
|
3月前
|
存储 消息中间件 Java
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的高可靠消息服务设计实现
在深入研究了 **“【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的API网关设计实现”** 设计实现后,我们意识到,尽管API网关为服务商提供了高效的数据获取手段,但实时数据的获取仍然是一个亟待解决的问题。
45 1
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的高可靠消息服务设计实现
|
9月前
|
设计模式 架构师 算法
这个时代,达不到百万以上并发量都不叫高并发!!收藏学以致用
成为一名年薪百万的顶尖架构师,实现财富自由,是大多数JAVA高级程序员的职业追求。 这不仅是技术发展的趋势,同时也是个人职业价值的体现。 但最终能否成为IT架构中的「灵魂人物」,做出亿级用户量的产品、搭建承载百万级并发的架构,还要取决于你能不能翻过并发量这道坎。
|
消息中间件 缓存 监控
小记 | 一周上线百万级高并发系统
本文是鱼皮在腾讯实习期间,从零开始一周紧急上线百万高并发系统的相关经验、思路及感悟,分享给大家。花 5 分钟阅读本文,你将收获:1. 加深对实际工作环境、工作状态的了解2. 学习高并发系...
556 0
|
设计模式 架构师 算法
阿里资深架构师:天天高并发,达不到百万以上并发都不配叫高并发
成为一名**年薪百万**的顶尖架构师,实现财富自由,是大多数JAVA高级程序员的职业追求。 这不仅是技术发展的趋势,同时也是**个人职业价值**的体现。 但最终能否成为IT架构中的「灵魂人物」,**做出亿级用户量的产品、搭建承载百万级并发的架构**,还要取决于你能不能翻过并发量这道坎。
164 0
阿里资深架构师:天天高并发,达不到百万以上并发都不配叫高并发
|
存储 缓存 Java
《重学Java高并发》disruptor是如何做到百万级吞吐?
《重学Java高并发》disruptor是如何做到百万级吞吐?
《重学Java高并发》disruptor是如何做到百万级吞吐?
|
存储 缓存 算法
刘志勇:微博短视频百万级高并发架构
本文来自新浪微博视频平台资深架构师刘志勇在LiveVideoStackCon 2018讲师热身分享,并由LiveVideoStack整理而成。
2574 0
|
消息中间件 缓存 负载均衡
抗住百万高并发的 6 个关键技术!
高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。 高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),每秒事务处理量TPS(Transaction Per Second),并发用户数等。 响应时间:系统对请求做出响应的时间。
618 0
抗住百万高并发的 6 个关键技术!
百万级高并发mongodb集群性能数十倍提升优化实践(下篇)
本文是oppo互联网某百亿级数据量/百万级高并发mongodb集群线上真实优化案例,荣获mongodb中文社区2019年度一等奖,上篇地址:https://developer.aliyun.com/article/779084?spm=a2c6h.13148508.0.0.37d34f0e4AZoIg
百万级高并发mongodb集群性能数十倍提升优化实践(下篇)

热门文章

最新文章