作者:icoder.long

https://blog.csdn.net/xulong_08/article/details/81395282


承接上文,继续我们关于大型分布式网站解决方案的讨论。

上篇中,我们一起研究了应用与数据库分离、集群、读写分离、缓存这几种大型网站的解决方案

经过上一章节的讨论,我们已经能够了解随着网站访问量的增加,如何逐步改造网站架构。

对于单机系统的处理能力无法满足需求时,需要多台服务器将应用和数据库分离开,减少服务器的负载压力。

访问量继续增加后,需要多台应用服务器共同提供服务,需要配置集群部署方式,但是需要引入负载均衡来解决让多台服务器共同提供服务,以及集群服务器间的Session共享问题。

多台应用服务器共同提供服务,这时我们的数据库压力变大,需要通过读写分离来减轻数据库压力,但是要处理好数据同步和数据源选择问题

网站快速响应可以提高用户体验,这是我们引入缓存服务器来存储一些热点数据,提高网站响应速度、减轻数据库压力。

至此为止我们网站已经能够应对一定量的并发请求,并且实现了快速响应等,接下来我们将讨论如何进一步增加网站的并发处理能力,以及服务优化等问题。

6、弥补关系型数据库的不足,引入分布式存储系统

之前我们的数据存储方式主要是数据库和缓存,数据库存储一些需要持久化的数据,缓存存储一些热点数据以及共享数据。

随着业务发展,关系型数据库已经不能满足日益增长的业务需求,这时我们就需要分布式存储系统来实现数据、文件等的存储功能。

常见的分布式存储系统主要有:

分布式文件系统

我们的网站包含了大量的图片以及其他文件,集群的每一台机器需要访问这些文件,所以我们引入分布式文件系统,将文件统一存储,通过URL存取文件。

分布式缓存系统

一般指Key-value形式的存储系统。

分布式数据库

需要多台数据库服务器功能提供读写操作,已经讨论了如何实现读写分离,其他的方案将在下文中描述。

7、读写分离无法突破数据库瓶颈,采用数据拆分分担压力

尽管我们已经采取了读写分离、添加热点数据缓存等措施来减少数据库压力,但由于数据库中数据越来越多,存取操作也越来越频繁,查询速度越来越慢,导致网站无法提供高效的服务。

基于以上问题,我们分析一下可能存在的问题,目前我们所有业务相关的变都存在一个库中,数据量越来越庞大,数据库变得臃肿、低效。

因此我们需要使用多个数据库分离数据,将这些数据分担到多个库中,这样就能是每个数据库里存储适量的数据,提高整体效率。一般我们将数据拆分的方法有垂直拆分和水平拆分两种。

专库专用,垂直拆分数据

即将不同业务的数据存储到不同的数据库中,比如交易、商品、用户可以存储在三个数据库服务器中,每个数据库中的数据就变少了,数据库压力随之减少。

不同业务的数据存储到不同的数据库中后,需要考虑单机中跨业务的事务处理。即如何解决不同业务之间的数据关联查询

使用分布式事务,但是其性能上比较低。

优化代码,去掉跨业务的事务,需要根据不同业务去优化代码。

解决单表数据量过大,数据水平拆分

当单表数据量过大时,数据查询效率就会非常低,所以我们需要减少一张表中存储的数据量

即将一张表中的数据存储到多个数据库中,即设置一个数据记录数的上限,一旦达到这个限制,就保存到存的数据库中。

这样会带来很多问题,一是查询时如何才能知道在哪个数据库,二是主键如何保证不重复,自增如何处理,三是分页如果涉及到两个库中的数据,如何处理。

关于这些问题需要很大的篇幅去介绍,我也将关于此事专门写一篇文章来介绍,敬请期待!

8、业务范围扩大、按模块拆分应用

数据库方面我们已经做足了工作,读写分离、分布式存储、数据拆分等,数据库已经有了很强的负载能力。

我们的应用服务器却随着业务扩大,代码量变大,变得臃肿复杂,这时我们就需要将原有应用拆分开,分别部署到不同的服务器中。

我们可以根据业务功能去拆分应用,比如讲用户、交易和商品拆分成三个不同的应用。

这样,拆分后的每个应用都可以有专门的团队去维护,代码变得简洁了,甚至我们还可以对小模块再次进行拆分,使之功能更加具体一点。但是这样我们会遇到以下问题

不同应用之间的调用问题

比如交易模块需要获取商品信息,也需要获取用户信息。

这些信息的获取需要商品和用户模块对外暴露接口,提供给其他模块进行调用,我们可以通过RPC框架来进行应用间的信息交换以及数据处理。

9、使用面向服务架构改造系统

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的 面向服务架构(SOA) 是关键。

SOA是将用访问层和服务层相分离,让用户访问层只接受用户请求,然后将请求发送给服务层处理,服务层暴露接口可由多个用户访问层调用。这时我们的服务层就相当于一个专门提供服务的服务中心。

这样改造后,我们系统不仅是单机内部的方法调用了,还引入了远程服务调用。共享的代码不用散落在不同的应用中了,二是统一交由服务中心去实现。

做到服务化需要一些基础组件的支撑,我们将在下一章节介绍相关的Java中间件。

10、消息中间件

这一节我们先来研究一下消息中间件,消息中间件在分布式系统中有着重要的作用,在解耦和消息处理上有着无可比拟的优势。

消息中间件是面向消息的系统,在分布式系统中完成消息的发送盒接收的基础软件。

消息中间件有着异步和解耦的作用,从上图中我们可以看出,应用A和B没有直接的联系,而是通过消息中间件来进行信息的传输,消息中间件可以将消息保存并记录,直到这条消息被接受。

对于应用来说不用关心消息来得来源和去向,只需要向消息中间件中发送或者获取消息即可。

11、总结

至此为止,我们的网站可以支撑大量并发并提供稳定的服务了,整个网站系统变得高效、安全稳定。

经历了应用和数据库分离、集群、读写分离、缓存、数据拆分、应用拆分、服务化的改造,相信我们已经对大型网站的架构有了一些初步的认识,但是详细的实现过程还需要我们一起去探索

下一章节我们将讲述Java中间件以及Java中间件的一些理论基础,会涉及到一些比较底层的东西,是时候展示真正的技术了。

长按订阅更多精彩▼

如有收获,点个在看,诚挚感谢

亿级流量压力来袭,你的网站会被击垮吗?(下篇)相关推荐

  1. 亿级流量压力来袭,你的网站会被击垮吗?(上篇)

    作者: icoder.long https://blog.csdn.net/xulong_08/article/details/81359364 本文我们将讨论大型网站的演进过程,随着用户量以及业务量 ...

  2. 大型电商架构亿级流量电商详情页系统--实战 缓存同步,热点key统计 降级

       35 我们之前的三十讲,主要是在讲解redis如何支撑海量数据.高并发读写.高可用服务的架构,redis架构 redis架构,在我们的真正类似商品详情页读高并发的系统中,redis就是底层的缓存 ...

  3. 大型电商网站详情页是如何支撑亿级流量访问的?

    作者:老顾 https://www.toutiao.com/i6671093883025228301/?group_id=6671093883025228301 目录 前言 方案一:网页静态HTML化 ...

  4. 大型电商网站的页面静态化方案是如何支撑亿级流量的?

    前言 我们小伙伴们在访问淘宝.网易等大型网站时有没有考虑到,网站首页.商品详情页以及新闻详情页面是如何处理的?怎么能够支撑这么大流量的访问呢? 很多小伙伴们就会提出他们都采用了静态化的方案,这样用户请 ...

  5. 亿级流量网站架构核心技术_关于大型网站系统架构你不得不懂的10个问题

    来自:JavaGuide(微信号:JavaGuide) 下面这些问题都是一线大厂的真实面试问题,不论是对你面试还是说拓宽知识面应该都很有帮助.之前发过一篇8 张图读懂大型网站技术架构 可以作为不太了解 ...

  6. 亿级流量网站架构核心技术

    网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击"普通下载" ...

  7. 亿级流量网站架构核心技术之“数据库分库分表策略”

    本文节选自<亿级流量网站架构核心技术--跟开涛学搭建高可用高并发系统>一书 张开涛 著 电子工业出版社出版 小编会从留言中选择获赞最多的前五名用户免费送出此书哦!规则见文末. 数据库分库分 ...

  8. 解秘亿级网站的一本书——亿级流量网站架构核心技术

    网站是直接面对广大客户的,是公司的门户,必须快速响应,必须持续可用,必须抗得住洪峰.任何一个网站的发展过程中都出现过问题,影响客户体验和商业利益,公司业务规模越大,网站出现问题的损失越大.此时此刻,有 ...

  9. 亿级流量网站架构核心技术 跟开涛学搭建高可用高并发系统

    亿级流量网站架构核心技术 跟开涛学搭建高可用高并发系统 1.高并发原则 1.1 无状态 1.2 拆分 1.3 服务化 1.4 消息队列 1.5 数据异构 1.6 缓存银弹 1.7 并发化 2 高可用原 ...

最新文章

  1. 亚洲与非洲:中国支付巨头的海外进击
  2. vs2010连接mongodb服务器,X64位
  3. LINUX技术讨论区
  4. 苏泊尔搭载华为鸿蒙系统,华为鸿蒙打算在一年内跨过生死线,拿下16%的市场份额...
  5. MySQL字段类型解析
  6. Laravel使用腾讯云COS服务
  7. 能源路由器 :分布式智能电网应用的混合通信体系结构
  8. VS2008SP1无法安装
  9. C#基础之vs2010安装与使用教程
  10. 不仅仅是游戏,王者荣耀如何突破次元壁?
  11. MySQL的金科玉律:“不要使用SELECT *”
  12. 自媒体必死 大家不要被马化腾忽悠了
  13. ROC和 区别p值和q值
  14. 本人GitHub网址https://github.com/LH34128
  15. MAC上自定义Office word快捷键
  16. 激活时显示图片上传资源服务器失败,720全景图上传时提示“切图失败”的处理办法...
  17. eclipse新建类auther自填充
  18. Keras学习| ImageDataGenerator的参数
  19. 正则表达式与自动机基础 NFA 驱动程序 手写 NFA 自动机
  20. html字体自动放大,让用户自己控制网页字体的大小的css书写方法

热门文章

  1. Codeforces Global Round 8 C. Even Picture 题解[巧妙法构造题]
  2. 多个tab可以组成一个表单吗 js_11个表单设计小技巧
  3. 通俗讲java反射机制ioc,结合反射说明SpringIOC的实现原理
  4. 牛客练习赛81 B. 小 Q 与彼岸花(FWT nlogn做法)
  5. java连接pda_程序文件直接拷贝到pda设备 (USB连接pc pda wince6.0 C#)
  6. 使用PostMan工具测试spring boot接口的若干请求参数形式
  7. 大战设计模式【23】—— 原型模式
  8. Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)
  9. Ajax异步XMLHttpRequest对象
  10. 【iOS10 SpeechRecognition】语音识别 现说现译的最佳实践