《大型网站系统与Java中间件》读书笔记(上)

news/2024/5/19 22:42:29/文章来源:https://blog.csdn.net/Java_3y/article/details/91361022

前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

这本书买了一段时间了,之前在杭州没带过去,现在读完第三章,来做做笔记

豆瓣评分

这本书前三章都在科普和回顾中间件/分布式的基础,讲得非常通俗易懂。在之前已经我写过基础分布式相关文章,大家可以先去看看:

  • 外行人都能看懂的SpringCloud,错过了血亏!
  • 什么是ZooKeeper?
  • 什么是消息队列?
  • 什么是单点登录(SSO)

一、为什么分布式?

在之前的文章(外行人都能看懂的SpringCloud,错过了血亏!)也提过为什么要分布式:

  • 模块之间独立,各做各的事,便于扩展,复用性高
  • 高吞吐量。某个任务需要一个机器运行10个小时,将该任务用10台机器的分布式跑(将这个任务拆分成10个小任务),可能2个小时就跑完了

在书上给出的观点:

  • 升级单机的处理能力的性价比越来越低,单机的处理能力存在瓶颈
  • 分布式系统更加稳定和可用(单机挂了就挂了,分布式挂了一般还有备用/不至于整个链路全挂)

1.1 大型网站架构演进过程

其实在没接触过分布式之前,在逛论坛的时候,经常会出现一些看起来很牛逼的词,诸如”读写分离“、”分库分表“、”主从架构“、”负载均衡“、”单点故障“等等名词,就觉得很高大上。下面我就稍微顺着”大型网站架构演进过程“来讲解一下这些词

在我们最开始接触Java项目的时候,一般来说是单机的(数据库、Web服务器都是同一台机器)

数据库、Web服务器都是同一台机器

网站对外开放以后,访问量增大,服务器的压力也随之提高。此时,我们最简单的做法就是可以将数据库和应用分开,这样可以缓解一下当前系统的压力

数据库服务器和应用服务器分开

应用服务器的压力继续增大,我们可以把应用服务器做成集群(说白了,就是加了台机器)

给应用服务器加了一台

加了台应用服务器以后,就出现新的问题了:

  • 用户请求的时候,走哪台服务器啊?
  • Session是依赖单台服务器的,那Session怎么搞?

两个直面而来的问题

解决用户走哪台服务器,我们就在用户请求到达应用服务器之前,加了一个”负载均衡器“,这个”负载均衡器“说白了就写了用户请求会到哪台应用服务器的逻辑

  • 比如说,一个用户请求过来,负载均衡器指派这个请求到服务器A。另一个用户请求过来,负载均衡器指派这个请求到服务器B。这样就平摊了请求— 这种方式就叫做轮询
  • …策略还有很多种,就看你想怎么实现了,反正这个逻辑的代码放在负载均衡器上。

而Session的问题,我之前写什么是单点登录(SSO)已经讲过了,一般来说我们可以将Session保存在Redis上就行了。

解决请求指派和Session的问题

随着业务的发展,我们的数据量和访问量都在增长,现在有不少的业务都是读多写少的,对于这种业务也是会直接反应到数据库上。

于是,我们可以增加一个读库。写入的操作走服务器C的MySQL,读取的操作走服务器D的MySQL。这样就实现了读写分离

读写分离

一般来说,我们的写库也叫做主库,读库也叫做从库,在互联网架构中,这叫做主从架构,比如常见的架构:一主多从(详细的参考资料:如何给老婆解释什么是 Master-Slave)

主从架构

针对读多写少的业务,我们还有优化策略,引入搜索引擎和缓存

  • 搜索引擎也相当于一个读库,使用搜索引擎的倒排表方式,能够大大提升检索的速度
  • 缓存则将热数据放入内存中,如果查询的数据在缓存中存在,则直接返回

增加缓存和搜索引擎

搜索引擎和缓存的参考资料:

  • Redis合集
  • 什么是Lucene
  • Elasticsearch入门

:这里说的索引和缓存就未必特指ES和Redis,比如缓存我也可以用本地缓存而不一定是Redis的。这里用Redis和ES只是我画图方便。

继读写分离之后,数据库还是遇到了瓶颈,此时我们就可以采用分库分表策略了:

  • 垂直拆分— 不同的业务数据分到不同的数据库
  • 水平拆分— 将同一张表的数据拆分到不同的数据库中(原因是这张表的数据量/更新量太大了)

垂直拆分示例图

注:单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表(如果预计三年都达不到这个数据量,不要在创建表的时候就分库分表!) —《阿里巴巴 Java开发手册》

在数据存储方面,除了关系型数据库之外,如果有别的业务场景,可能还需要引入分布式存储系统

  • 分布式文件系统
  • 分布式Key-Value系统
  • 分布式数据库

数据库问题解决之后,应用也面临着挑战(应用的功能会越做越多,应用也随之越做越大),为了不让应用持续变大,这就需要把应用拆开,从一个应用变为两个/多个应用。

应用拆分

不同功能/模块之间的调用不再单纯通过本机调用,引入了远程的服务调用

某个应用只有一台机器上运行着,如果这台机器上出现了问题,导致这个应用无法运行,这就叫单点故障

最后

这本书《大型网站系统与Java中间件》的前三章主要是铺垫什么是中间件、什么是分布式(从单机演进到分布式的过程)以及讲述了网站的架构演进过程,剩下的是回顾一些基础。比如说:

  • bio/nio/aio
  • HTTP/Session
  • JVM
  • Java多线程以及并发的基础知识
  • JUC包下的常见类

这些我都曾经多多少少都做过笔记,不妨在我的公众号下找找相关的文章。总的来说,还是读得很过瘾的!后面读完下面的章节,我会继续分享,敬请期待。

乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,关注即可获取!

转发到朋友圈是对我最大的支持!

觉得我的文章写得不错,点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_725914.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《大型网站系统与Java中间件》读书笔记 (二)

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y回顾上一篇:《大型网站系统与Java中间件》读书笔记(一)这周周末读了第四章,现在过来做做笔记&#xff0…

《大型网站系统与Java中间件》读书笔记 (中)

前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾上一篇: 《大型网站系统与Java中间件》读书笔记(一) 这周周末读了第四章,现在过来做做笔记&am…

几个简单步骤可以提高网站浏览体验

摘要: STEP 1确定网站定位 你的网站定位是要以企业形象官网为主,或是以单纯贩售商品的购物网站,还是要跟使用者做互动活动的网站? 每个网站的目的都不尽相同,形象官网,可能需要着重于品牌理念、品牌故事、…

一次面试引发的思考(中小型网站优化思考)

前言 故事的起因是这样的,由于本人地处偏僻工作地点在美丽的冰城哈尔滨虽然地方很美丽,但是这里的软件行业实在是算不上“美丽”,这么多年由于个人原因或者公司原因经常换工作,因为这里都是中小型公司,没有什么大公司。…

我采访了同事,让他掏出了每天都会浏览的干货网站...这几个网站也太牛了吧!

前言 在周六的晚上,我日常去到公司写文章。想写一篇程序员常浏览的网站,刚好同事在我后面看我在干什么。于是我就对他进行了采访,问了一下他常去的网站有哪些。 这次我采访的是鸡蛋,他跟我一样大,但是技术比我优秀实在…

Django项目实践4 - Django网站管理(后台管理员)

http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类站点, 管理界面 是基础设施中很重要的一部分。这是以网页和有限的可信任管理者为基础的界面,它能够让你加入&#xff0…

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

高并发原则无状态拆分系统维度:根据系统功能/业务进行拆分功能维度:对一个系统进行功能再拆分读写维度:根据读写比例进行拆分AOP维度:根据访问特征模块维度:比如按照基础或代码维护特征进行拆分服务化:进程…

Python教程 - 廖雪峰的官方网站

2019独角兽企业重金招聘Python工程师标准>>> https://www.liaoxuefeng.com/ 转载于:https://my.oschina.net/u/3563297/blog/1622686

这也许是破解所有网站

您还担心各种资源获取不到吗?这里聚集了广大网友的智慧结晶所在! 现在的技术真的是越来厉害了,而且相比于以往复杂的操作 现在的黑科技仿佛特别“亲民” 比如 我之前发过在“baidu”后面加“wp” 就能高速下载百度云资源 而且自己不需要…

thinkphp5项目--企业单车网站(五)

thinkphp5项目--企业单车网站(五) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps://github.com/fry404006308/BicycleEnterpriseWebsite 一、BeyondAdmin使用 1、里面的功能真的超级全,连编辑器都有&…

使用Nginx实现多台服务器网站负载均衡的配置方法介绍

使用Nginx实现网站负载均衡的配置方法介绍1.准备工作1.1 Linux系统安装Nginx1.2 准备三台服务器1.3配置主服务器nginx访问路径1.4访问主服务器2.Nginx负载均衡的几种不同方式介绍2.1 轮询2.2 权重2.3 iphash2.4 最少连接2.5 fair服务器的响应时间来分配3.Nginx配置1.准备工作 …

Laravel访问网站页面空白

配置好了Laravel之后进行网站访问,发现是空白页面,第一次使用Laravel很迷茫。使用fiddler查看的时候出现500错误,网上查了下是因为根目录下的storage目录没有777权限,如图: 解决方法:使用chmod -R 777 s…

访问网站的时候出现Discuz! Database Error (2002) notconnect错误

自己用dz做的网站一直好好的,今天访问的时候出现了:Discuz! Database Error (2002) notconnect错误,如图: 解决方法: 修改/config/config_global.php中的config[‘db′][‘1′][‘dbhost′]‘localhost′;改为&…

知乎有哪些适合大学生浏览的网站?

2019独角兽企业重金招聘Python工程师标准>>> 作者:Adam 链接:https://www.zhihu.com/question/20136746/answer/299592153 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 公开课 …

SEO新站与老站,如何解决网站降权问题?

针对网站降权的问题,百度与谷歌的评定标准基本相同,都是完全基于搜索引擎的用户体验,进行基础性的判断。简单理解:网站被降权,实际上是被搜索引擎降低信任评级的一个过程,那么你一定触碰了相关算法的识别机…

SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎 .

IDE使用的MyEclipse6.5,数据库使用MySQL 5.0.37 , 另装了Navicat for MySQL , jdk版本是6.0 工程做完的效果图如下,com.zly.indexManager中两个类,分别创建索引和搜索索引, com.zly.test.entity中是使用的实体类,分别是…

微软正式发布Azure Storage上的静态网站

微软正式宣布了Azure Storage上的静态网站,提供了从托管在Azure Storage上的HTML、CSS和JavaScript文件提供内容的能力。静态网站包含内容固定的Web页面,同时仍然允许利用JavaScript等客户端代码来创建丰富的用户体验。 有了这个新功能,继用于…

收藏了很久的:5款电影网站!高清大片任意看!就没有找不到资源!

一放假就剧荒?没有时间去电影院看?那这5款电影网站你很需要!Top1:中国高清网各种大片任意看!最新上映还是好莱坞大片,想看什么就看什么!还怕剧荒?Top2:BT天堂热门综艺总是…

Wordpress 插件出现漏洞,网站可能被攻击者接管

百度智能云 云生态狂欢季 热门云产品1折起>>> 据安全研究人员警告,因旧版 Wordpress Simple Social Button 插件出现漏洞,使用这个插件的网站应该尽快更新软件,避免攻击者攻击并接管网站。Simple Social Button 是由 WPBrigade 公…

前嗅ForeSpider教程:网站登录配置

当我们在采集中碰到:所采集的网站数据需要登录,才可以看到所需信息时,则需要在软件中模拟登陆环境,采集数据,此时需要配置登录信息。今天小编就教大家:如何进行网站登录配置,具体步骤如下&#…