分布式架构实现概述(大型网站技术架构-读后感)
分布式架构实现概述(大型网站技术架构-读后感)
主要包含4个篇章,第一篇介绍了网站的演化历程,大型网站架构的架构模式,开发大型网站应该具备的核心要素;第二篇主要围绕大型网站的具体架构实现方式进行讲解;第三篇对知名互联网公司的架构演变历程进行举例,让我看到了业务是技术的最强驱动力;第四篇说了什么是架构师,什么是好的架构师,架构师的职场攻略。
主要收获
服务器硬件选型
- 数据库服务器
需要快速的磁盘检索和数据缓存,因此需要更快的硬盘,更大的内存 - 文件服务器
需要存储大量用户的文件,不需要进行计算,缓存,因此可以减低对cpu和内存的需求,需要达到硬盘空间 - 应用服务器
需要处理大量的业务逻辑,运行应用容器同时需要内存支持,所有对cpu和内存的需求相对较大。 - 缓存服务器
将数据存储于内存的nosql数据库,不言而喻,主要是对内存的需求。
大型网站架构模式
- 分层,通过mvn三层架构的划分,对实现进行分层,实现层与层直接的解耦,同时后期还可以对层直接进行分割,来划分更小粒度的微服务模块。
- 分割,对应用根据进行垂直或水平拆分,拆解为微服务模块。水平拆分为对三层架构进行拆分,垂直拆分是对业务逻辑的拆分,例如:一个简单的个人博客系统,拆分为文章模块、评论模块,每个模块配置单独的数据库。
- 分布式,通过上面的分割,就把一个应用变成了多个微服务的分布式架构
- 集群,当一个微服务不足以支撑对用户请求的处理时,可以把这个微服务的代码部署在多个服务器上,达到集群的目的,注意,集群部署的微服务本身最好是无状态的,这样可以直接部署安装包,不用再考虑微服务本身维护的状态问题。
- 缓存,用户的请求不应该直接到达数据库,应该把热点数据放入分布式缓存系统,如redis,仅在缓存中不存在时,才直连数据库获取数据。
- 异步,通过消息队列实现异步处理,把那些与直接返回无关的数据,放入消息队列中,由消费者处理,达到快速响应目的。通过异步的订阅-发布模型,可以对模块进行解耦,利于扩展。消息队列同时还可以达到削峰的目的。
- 冗余,为了网站的高可用,对于应用、数据存储、缓存、消息队列都应该部署多份(集群),从而在主节点不可用的情况下,由备用节点提供服务。对于数据存储部分,应该有冷热双备,冷备份定期执行备份任务,冷备份的数据库最后可能会丢失一个备份周期的数据,所以还需要热备份,例如mysql的主从同步,主节点的每一次更新操作都会同步到从节点,由此实现了热备份。
- 自动化,通过自动化,减少人为干预,提高开发、运维、测试的工作效率与质量(具体的实现方式学习中,待了解清楚后,补充下方内容)。
• 自动化代码管理
简介:开发工程师提交自己参与开发的产品代号,系统自动创建分支,最后进行代码合并。
• 自动化测试
简介:开发完成,提交测试后,系统自动将代码部署到测试环境,启动自动化测试用例进行测试,向相 关人员发送测试报告,向系统反馈测试结果。
• 自动化安全检测
安全检测工具对代码进行静态安全扫描及部署到安全测试环境进行安全测试攻击,评估其安全性。
• 自动化部署
上面步骤都通过后,自动将代码部署到生产环境。 - 安全,密码加密,防范XSS/CSRF、sql注入攻击。
a. XSS, 用户提交内容包含恶意js脚本攻击,可以使用spring的HtmlUtils对用户提交内容进行转换。
b. CSRF,在同一浏览器,通过访问攻击网站的链接,可以利用浏览器存储的cookie,session等策略,实现恶意攻击,可以通过在请求连接中带上token等参数、验证码、请求头的referer check进行防范。
c. sql注入,在请求过程中加入恶意sql代码,达到避过sql执行条件的目的,这个可以通过参数绑定的方式避免,mybatis的#取值支持这种操作。
网站的伸缩性
应用服务器的伸缩性
前提:应用服务器最好是无状态的,这样直接进行扩展部署,不用考虑其他问题
应用服务器的伸缩性的核心就是集群部署,通过负载均衡选择出真正为用户提供服务的应用。
负载均衡策略:
- HTTP重定向负载均衡,请求首先到达重定向服务器,重定向服务器返回302重定向消息及真正提供服务的服务器地址,这种策略不用考虑,过时了。
- DNS域名负载,通过对同一个域名解析多个ip,把负载的任务交给DNS服务器,同时DNS服务器还支持基于地理位置的解析,返回距离用户地理位置最近的解析,不过DNS负载的缺点是域名绑定的IP更换了,不能马上响应过来,需要很长的时间才能真正替换完成。所有一般交给DNS解析的会是一个虚拟IP,虚拟IP后面是一个服务器集群。
- 反向代理负载均衡,也就是七层负载均衡(nginx),用户请求到达负载均衡服务器,服务器根据配置的负载均衡算法,将请求转发给真正处理用户请求的应用服务器,然后应用服务器把结果返回给用户。
- IP负载均衡,相当与一个网关,这里存储了用来提供服务的ip列表,用户请求到到网关,网关根据负载均衡算法从列表获取应用服务器地址,请求发送给真实服务器,服务器请求完成后,响应数据包返回给网关,网关发送给用户。
- 数据链路层负载均衡,给集群中的所有机器配置虚拟IP,和负载均衡服务器一致,达到不需要修改数据包地址就可以进行数据分发的目的。最典型的开源产品是linux的 LVS
存储服务器的伸缩性
数据存储的伸缩性不在于负载均衡,例如数据库分库,数据会分散存储在多个数据库中,这时,仅仅通过扩展机器是不行的,还需要对存储的数据进行迁移。同时,数据的访问也不是通过复制均衡的策略。通常我们所用的策略是取模运行,例如对3取模,会用三个数据库可能命中。这是时候如果加了一台机器,我们就需要对4进行取模,这时候会导致75%的缓存失效。故而,我们就引入了一致性hash算法。这里仅仅提一下,展开讲内容过多,通过一致性hash算法,我们可以保证,增加一个节点,仅25%的数据需要迁移。
读后感
成为一个优秀的架构师,是我前进的方向,现在,技术储备距离一个架构师的水平还远远不足,不要自满,不要懈怠,坚持学习的方向,补充自己的底层知识,满足自己的技术求知欲。
有比较了解自动化相关内容的同学,欢迎加微信沟通,比较想了解这方面的内容,也欢迎一起学习技术的同学,共同进步。
分布式架构实现概述(大型网站技术架构-读后感)相关推荐
- 大型网站架构模式【大型网站技术架构.核心原理与案例分析】(阅读分享)
这本书分几个章节,其中有一个值得和大家分享的技术知识. 大型网站架构模式中引入了模式概念:每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心.这样,你就能一次又一次地使用该方案而不 ...
- 《大型网站技术架构》1:概述
参考自<大型网站技术架构>第1~3章 1.大型网站架构演化发展历程 (1)初始阶段的网站架构:一台服务器分别作为应用.数据.文件服务器 (2)应用服务和数据服务分离:三台服务器分别承担上述 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
来源:http://www.cnblogs.com/edisonchou/p/3773828.html 一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术 ...
- 软件架构设计 大型网站技术架构与业务架构融合之道
前言 架构是一种综合能力,而不是某一方面的技能.也正因为如此,本书提供的是一个全面的解决方案.方法论.成体系的设计思维.因此,本书将从基础技术谈起,再到高层技术.再到业务.管理,提供一个架构能力的全局 ...
- 大型网站技术架构:核心原理与案例分析pdf
下载地址:网盘下载 编辑推荐 编辑 本书作者是阿里巴巴网站构建的亲历者,拥有核心技术部门的一线工作经验,直接体验了大型网站构建与发展过程中的种种生与死,蜕与变,见证了一个网站架构从幼稚走向成熟稳定的历 ...
- 《大型网站技术架构》《K8S进阶实战》等书籍!送45本!读完工资多个0!
学习如逆水行舟,不进则退.所以又来给各位读者送书了,这次送45本技术书,内容涉及深度学习.Python.Dubbo.Flutter等. 感谢本次活动的赞助商『电子工业出版社博文视点』 另外!急于购书的 ...
- 小白入门:大型网站技术架构负载均衡技术介绍及学习资源推荐
十年间,负载均衡的前沿技术层出不穷,令用户眼花缭乱.经常在技术网站.文档中出现的"四层负载均衡"."七层负载均衡"字眼有什么含义?有什么区别?对客户网络有哪些不 ...
- 大型网站技术架构:摘要与读书笔记
花了几个晚上看完了<大型网站技术架构>(https://book.douban.com/subject/25723064/)这本书,个人感觉这本书的广度还行,深度还有些欠缺(毕竟只有200 ...
- 《大型网站技术架构》读书笔记之六:永无止境之网站的伸缩性架构
首先,所谓网站的伸缩性,指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力.在整个互联网行业的发展渐进演化中,最重要的技术就是服务器集群,通过不断地向集群中 ...
最新文章
- Beta阶段事后分析
- 【openCV学习笔记】在Mac上配置openCV步骤详解
- 云计算之路-阿里云上:数据库连接数过万的真相,从阿里云RDS到微软.NET Core
- 2021第一季度云智能生态技术服务能力盘点
- HDU4546(优先队列)
- 【pyqt5学习——信号与槽】实例计时器(解决界面卡顿问题)
- 推荐时代的内容理解技术探索.pdf(附下载链接)
- LeetCode刷题(33)
- 你为什么选择计算机应用专业,致新生!我为什么选择信息工程系
- [转载] 老友记——潘石屹 任志强《天台论道》(下)
- 助教日志—请沈航13级同学将GIT地址和CNBLOG地址发到这篇博文的评论中
- 微信小程序抽奖转盘实现案例
- itunes一直显示正在验证iphone恢复_超全面iPhone实用技巧汇总,有用收藏
- 性能测试20--Analysis -- 内存与硬盘
- 75 颜色分类(排序)
- Vue项目实践——实现手机扫描二维码预览页面效果
- word恢复临时保存文件(.asd)无限循环另存为
- Outlook Connector用途
- 手推提升算法之AdaBoost
- (FSRCNN)_Accelerating the Super-Resolution Convolutional Neural Network——超分辨率(三)
热门文章
- Android 性能优化必知必会(转载)
- 有什么值得选择的VPS主机控制面板?
- mysql的redo与undo
- 海尔“灯塔”张瑞敏,一把锤子砸出的硬核人生
- Java之类的定义和实例化类
- c语言静态两个数码管显示0-99,按键控制计数,用两个数码管显示0到99。十位数为0的时候,显示为空白...
- 麻省理工学院、南加大等美国名校的网络安全:勉强及格
- 装了linux装不上win,在windos server 2008系统下装LINUX系统怎么装不上呢?
- 树莓派上的操作系统选择
- android usb采集卡,USB HDMI直播采集卡1805怎么用?