文本已收录至我的GitHub仓库,欢迎Star: https://github.com/ZhongFuCheng3y/3y
这本书买了一段时间了,之前在杭州没带过去,现在读完第三章,来做做笔记
这本书前三章都在 科普和回顾 中间件/分布式的基础,讲得非常通俗易懂。在之前已经我写过基础分布式相关文章,大家可以先去看看:
在之前的文章( 外行人都能看懂的SpringCloud,错过了血亏! )也提过为什么要分布式:
在书上给出的观点:
其实在没接触过分布式之前,在逛论坛的时候,经常会出现一些 看起来 很牛逼的词,诸如”读写分离“、”分库分表“、”主从架构“、”负载均衡“、”单点故障“等等名词,就觉得很高大上。下面我就稍微顺着”大型网站架构演进过程“来讲解一下这些词
在我们最开始接触Java项目的时候,一般来说是单机的(数据库、Web服务器都是同一台机器)
网站对外开放以后,访问量增大,服务器的压力也随之提高。此时,我们最简单的做法就是可以将 数据库和应用分开 ,这样可以缓解一下当前系统的压力
应用服务器的压力继续增大,我们可以把应用服务器做成集群(说白了,就是加了台机器)
加了台应用服务器以后,就出现 新的 问题了:
解决用户走哪台服务器,我们就在用户请求到达应用服务器之前,加了一个”负载均衡器“,这个”负载均衡器“说白了就写了 用户请求会到哪台应用服务器的逻辑
而Session的问题,我之前写 什么是单点登录(SSO) 已经讲过了,一般来说我们可以将Session保存在Redis上就行了。
随着业务的发展,我们的数据量和访问量都在增长,现在有不少的业务都是 读多写少 的,对于这种业务也是会直接反应到 数据库 上。
于是,我们可以增加一个 读库 。写入的操作走服务器C的MySQL,读取的操作走服务器D的MySQL。这样就实现了 读写分离 。
一般来说,我们的写库也叫做主库,读库也叫做从库,在互联网架构中,这叫做 主从架构 ,比如常见的架构: 一主多从 (详细的参考资料: 如何给老婆解释什么是 Master-Slave )
针对读多写少的业务,我们还有优化策略,引入 搜索引擎和缓存 。
搜索引擎和缓存的参考资料:
注:这里说的索引和缓存就未必特指ES和Redis,比如缓存我也可以用本地缓存而不一定是Redis的。这里用Redis和ES只是我画图方便。
继读写分离之后,数据库还是遇到了瓶颈,此时我们就可以采用 分库分表 策略了:
注:单表行数 超过500万行或者单表容量超过2GB 才推荐进行 分库分表 (如果预计三年都达不到这个数据量,不要在创建表的时候就分库分表!) —《阿里巴巴 Java开发手册》
在数据存储方面,除了关系型数据库之外,如果有别的业务场景,可能还需要引入 分布式存储系统
数据库问题解决之后,应用也面临着挑战(应用的功能会越做越多,应用也随之越做越大),为了不让应用持续变大,这就需要 把应用拆开 ,从一个应用变为两个/多个应用。
不同功能/模块之间的调用不再单纯通过本机调用,引入了 远程的服务调用 。
某个应用只有一台机器上运行着,如果这台机器上出现了问题,导致这个应用无法运行,这就叫 单点故障 。
这本书《大型网站系统与Java中间件》的前三章主要是铺垫什么是中间件、什么是分布式(从单机演进到分布式的过程)以及讲述了网站的架构演进过程,剩下的是回顾一些基础。比如说:
这些我都曾经多多少少都做过笔记,不妨在我的公众号下找找相关的文章。总的来说,还是读得很过瘾的!后面读完下面的章节,我会继续分享,敬请期待。
乐于输出 干货 的Java技术公众号: Java3y 。公众号内 有200多篇原创 技术文章、海量视频资源、精美脑图, 关注即可获取!
觉得我的文章写得不错,点 赞 !