使用pp架构形成计算机集群请求的地址无效_干货!史上最详细脑图《大型网站技术架构》...

1a053e447d9346365837edbc78a33736.png

1. 介绍一下

《大型网站技术架构》这本书可能很多人都看过,小编个人觉得真的是非常不错的一本书。

看完这本书后,你会对如何设计大型网站架构,有非常清晰的思路。

如果还没有读过的小伙伴,赶紧去读一读吧。

PS:小编这里有这本书的Kiddle电子版,如有需要可联系我获取哦!

324f856924c0973efccb5dddca1bbb35.png

2. 架构思路

1. 大型网站系统特点

既然谈的是大型网站架构,所谓“大型”网站,首先需要了解大型网站系统具有什么样的特点。一般大型网站系统都具有如下共同特点:

  • 高并发,大流量
  • 高可用
  • 海量数据
  • 用户分布广,网络情况复杂
  • 安全环境恶劣
  • 需求快速变更,发布频繁
  • 渐进式发展和演化

2. 大型网站架构核心要素

基于大型网站系统的特点,需要围绕这些特点来设计系统架构。基于此,可以概括出设计大型网站需要考虑的核心架构要素。

设计大型网站系统的核心架构要素:

  • 高性能
  • 高可用性
  • 可伸缩性
  • 可扩展性
  • 安全性

本书的核心内容其实就是针对这几个核心架构要素一一展开。

1. 设计『 高性能 』的网站架构

对于大型网站,设计高性能的架构一般从以下几个方面考虑:

  • 优化网站响应速度
  • 优化网站处理并发请求的能力
  • 优化数据存储的性能

所谓高性能,

从网站的用户角度来看,无非就是访问网站的『 响应速度要快 』。

从系统角度看,由于同时访问的用户数巨大,因此同时到达系统服务器的『 并发请求数 』非常大。

从后端数据存储来看,优化『 海量数据存储 』的能力,避免后端数据存储性能缓慢而成为系统性能瓶颈。

优化网站响应速度

重要提示:
网站性能优化第一定律:优先考虑使用缓存技术优化性能

优化网站响应速度的主要手段是使用『 缓存 』,使用缓存是提高网站响应速度效果最显著的办法。

例如对于前端,可以使用CDN,反向代理,这些都是利用的缓存技术。对于应用服务器的性能优化,一个主要的手段也是使用缓存,在提高响应速度的同时,也减轻了对后端数据库的压力。如果是有海量数据的超大型系统,甚至需要用到分布式缓存系统。

另外一个优化响应速度的手段是『 异步消息处理 』。异步消息处理是指,在应用服务器与后端服务之间使用消息队列,应用服务器总是将用户请求扔进消息队列,并立即返回用户,后端服务异步从消息队列中取出请求数据进行处理。由于请求发送到消息队列后就立即返回了,因此用户会感知到更快的响应速度。

使用消息队列还具有削峰的作用,当瞬间有大量请求到达系统后,这些请求数据会进入消息队列,而不会瞬间涌入后端服务器,从而起到保护后端服务的作用。

优化网站处理并发请求的能力

除此之外,还要支持巨大的并发请求数,一般手段是使用『 集群 』。

应用服务器一般需要从单台服务器扩展为多台服务器,构成应用服务器集群,然后引入负载均衡服务器,将用户请求分摊到不同的应用服务器进行处理。

集群可以很容易进行伸缩(增加或减少服务器数量),因此可以有效支持在不同场景下的不同并发请求量。如秒杀场景下,可以快速增加服务器到集群中,从而分摊用户请求,减轻其他服务器的压力。

优化数据存储的性能

单从优化数据存储性能方面来看,主要的优化手段有:

  • 使用性能更高的硬盘,如使用固态硬盘,读写速度更快。
  • 替换传统关系型数据库,使用NoSQL数据库。NoSQL数据库的数据读写速度一般优于传统关系型数据库。
  • 使用分布式文件系统。分布式文件系统具有并发读写能力,因此可以有效提高数据存储的并发能力。

2. 设计『 高可用 』的网站架构

重要提示:
实现高可用架构的主要手段是数据和服务的『 冗余备份 』和『 失效转移 』

所谓高可用,即在任何时刻,应该尽量保证系统是可用的。

使用集群实现数据和服务的冗余备份,当集群中某个服务器宕机时,失效转移机制会将用户请求分发到集群中其他可用服务器上,从而可以保证用户请求被正确处理。

使用集群有个前提条件是,各个服务器上运行的服务应尽量是无状态的这样各个服务器之间就不会存在差异。但是对于应用服务器,如果保存了用户Session数据,那么它们就是有状态的。这种情况下需要考虑如何处理Session状态数据。可以采用独立的分布式Session服务器集群来专门缓存用户Session数据,从而使应用服务器变成无状态的。

冗余备份与失效转移手段适用于网站系统的各个逻辑层,包括应用层,服务层和数据层。

3. 设计『 可伸缩 』的网站架构

系统的可伸缩性,通常容易与可扩展性混淆。

可伸缩性意味着当网站流量变大时,可以很容易通过增加系统部署实例来支持。可扩展性意味着系统架构可以很容易扩展,从而支持新业务功能系统。

为达到可伸缩的目的,通常需要将系统进行拆分。纵向进行逻辑分层,如分为应用层,服务层和数据层。横向进行业务分割,把不同的业务功能拆分出来,并且独立部署。

对于拆分出来的单一功能,也需要采用集群方式进行部署。但是对于不同类型的集群,实现伸缩的方式不太一样。

对于应用服务器集群,通常使用『 负载均衡 』来实现伸缩。当有新服务器加入集群时,负载均衡可以自动将用户请求分发到新服务器。

对于分布式缓存集群,当有新服务器加入集群时,为了保证缓存命中率,通常使用『 一致性 』算法,从而使请求能够绝大部分指向已经缓存了所需数据的服务器。

对于数据存储服务器集群,对传统关系数据库来说,通常的手段是进行『 主、从数据库复制 』实现读写分离,或者『 数据分库分片 』等。然而对于NoSQL数据库,很多NoSQL数据库天生就是为可伸缩海量数据存储而设计的,如HBase。

4. 设计『 可扩展 』的网站架构

网站系统架构应该是易于扩展的。通常的设计手段包括:

  • 使用分布式消息队列降低系统与系统之间的耦合性。当开发新系统后,只需要订阅消息队列的数据即可进行整合,而不需要修改已有其他系统。
  • 利用分布式服务抽取可复用的服务。对于通用业务功能,可以把它们抽取成可复用的服务。对于新业务需求,通常可以使用这些可复用的服务,进行简单的组装即可实现。
  • 使用具有可扩展的数据库。如使用支持ColumnFamily结构的NoSQL数据库,可以在现有数据表结构之上增删数据列。
  • 开放平台。通过开放平台接入第三方开发者开发的系统,扩展系统周边应用,形成生态圈。

5. 设计『 安全 』的网站架构

系统安全性,对于任何网站系统都是至关重要的。

对于大型网站,由于用户分布广,网络安全环境会更加复杂和恶劣,设计具有良好安全性的网站架构会更加具有挑战性。

一般可以考虑以下几个方面:

  • 防御常见的网站攻击手段。如XSS,注入攻击,CSRF攻击等。
  • 信息加密。对在网络中传输的数据进行加密后再传输。
  • 信息过滤。过滤掉垃圾信息,防止垃圾信息进入系统内部。

思维导图

以下是我亲自整理的思维导图

2506fa05a5be6d8d39ab912af638870c.png

如果上面的大图看着不方便,我也把它放在了Github,访问我的Github地址https://github.com/longyg/Study下载,然后用XMind打开轻松看,包括图里的详细标注也可以看得到啦。

7cf9cb03f8b4e48b3e8d12e1335c8ce4.gif

图: 网络

文: 新码农客栈

排版: 新码农客栈

扫码关注公众号,查看更多内容

64b9b84ee6b632ebf184af5628ef930d.png

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

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

相关文章

linux 启动rsyslog服务_linux rsyslog服务部署

软件安装在centos7,rsyslog默认安装,重点在于配置文件。[rootlocalhost samba]# vim /etc/rsyslog.conf$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)$ModLoad imjournal # provides access to the systemd…

泰坦尼克号数据_数据分析-泰坦尼克号乘客生存率预测

项目背景目标预测一个乘客是否能够在泰坦尼克号事件中幸存。概述1912年4月15日,泰坦尼克号在首次航行期间撞上冰山后沉没,船上共有2224名人员(包括乘客和机组人员),共有1502人不幸遇难。造成海难失事的原因之一是乘客和…

linux mysql服务器安装_Linux服务器MySQL安装

Linux服务器MySQL安装1. MySQL官网下载如图:2. 安装MySQL[rootiZ2zebb0428roermd00462Z /]# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch#过滤MySQL:[rootiZ2zebb0428roermd00462Z /]#yum repolist all |grep mysql#ena…

客户端渲染换为服务器端渲染_服务器与客户端渲染(AngularJS与服务器端MVC)

客户端渲染换为服务器端渲染关于服务器与客户端应用程序渲染的讨论很多。 虽然没有“一刀切”的解决方案,但我将尝试从不同的角度主张客户端(特别是AngularJS)。 首先是建筑。 建筑 做得好的架构已经明确定义了关注点分离(SoS&am…

python3 array为什么不能放不同类型的数据_来自俄罗斯的凶猛彪悍的分析数据库ClickHouse...

点击上方蓝色字体,选择“设为星标”回复”资源“获取更多资源大数据技术与架构点击右侧关注,大数据开发领域最强公众号!暴走大数据点击右侧关注,暴走大数据!ClickHouse相关文章推荐:战斗民族开源 | ClickHo…

php mysql 实现原理_PHP底层和mysql的通信原理

要清楚的几个概念:FPM进程:进程数在php-fpm.ini中设置。没有设置 max_requests ,那么进程是不会销毁的,也就是说当一个进程里面出现死循环或者内存溢出等导致进程僵死的情况出现的时候,处理的进程就会少一个。mysql连接…

通过READ-BEHIND CACHE来控制缓慢的生产者

在我们的互联世界中,我们经常使用我们不拥有或无权改善的API中的数据。 如果一切顺利,他们的表现就会很好,每个人都会感到高兴。 但是太多次,我们不得不使用延迟小于最佳延迟的 API。 当然,答案是缓存该数据 。 但是&…

mysql用户名锁定_MySQL用户锁定

修改方式:set global log_warnings2;MySQL 5.5版本官方文档中,并没有用户锁的状态。因此不存在用户会被锁。。The account-locking capability depends on the presence of the account_locked column in themysql.user table. For upgrades to MySQL 5.…

python package和目录_PyCharm中Directory与Python package的区别

对于Python而言,有一点是要认识明确的,python作为一个相对而言轻量级的,易用的脚本语言(当然其功能并不仅限于此,在此只是讨论该特点),随着程序的增长,可能想要把它分成几个文件,以便逻辑更加清…

mysql过滤器_MYSQL复制过滤器

vim /etc/my.cnf.d/mariadb-server.cnf[mysqld]binlog-do-dbdb1 #白名单模式,仅允许主服务器上生成db1的二进制日志,此选项不支持一行指定多个参数,需要每个参数写一行binlog-do-dbdb2重启服务systemctl restart mariadb.service主服务器…

mysql锁表查询_Mysql数据库锁情况下开启备份导致数据库无法访问处理分享

[背景简介]MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。mysql虽然功能未必很强大,但因为它的开源、广泛传播&#xf…

junit编写测试代码_编写数据访问代码测试-不测试框架

junit编写测试代码当我们向数据访问代码编写测试时,是否应该测试其公共API的每种方法? 一开始听起来很自然。 毕竟,如果我们不测试所有内容,那么如何知道我们的代码可以按预期工作? 这个问题为我们提供了重要的线索&…

mysql直接执行文件格式_Windows 环境下执行 .sql 格式文件方式

windows 命令行中有2种执行 .sql 文件的方式:直接行文件 和 先进入mysql命令行然后执行文件。具体操作如下:1. 直接在windows命令行执行。打开windows命令行(winR打开运行窗口然后输入cmd,回车),进入mysql的本机地址,如果配置了环…

python输入多个坐标点_判断多个坐标是否在同一条直线上|Python练习系列[13]

练习内容:判断多个坐标是否在同一条直线上完整代码和注释如下print(请输入几个点的横纵坐标,程序将会返回这几个点是否在同一条直线上)def coor_nums():#获得每个值的横纵坐标int_list[]#初始化坐标列表wrong_list[]#初始化错误列表judgement#判断是否需要修正坐标值while True…

Java大数据处理的流行框架

大数据挑战 在公司需要处理不断增长的数据量的各个领域中,对大数据的概念有不同的理解。 在大多数这些情况下,需要以某种方式设计所考虑的系统,以便能够处理该数据,而不会随着数据大小的增加而牺牲吞吐量。 从本质上讲&#xff0c…

工信部python证书多少钱_python requests SSL证书问题

错误信息如下:requests.exceptions.SSLError: ("bad handshake: Error([(SSL routines, tls_process_server_certificate, certificate verify failed)],)",)python做爬虫,对于有的网站,需要验证证书,比如:1…

mysql binlog线程恢复_使用MySQL SQL线程回放Binlog实现恢复

[toc]1. 需求部分1.1 基于MySQL复制同步特性,尝试使用Replication的SQL线程来回放binlog,可基于以下逻辑模拟场景做全量xtrabackup备份模拟日常备份执行sysbench压测4张表,20个线程,压测10分钟,模拟大量binlog删除实例…

带有Prometheus的Spring Boot和测微表第6部分:保护指标

以前,我们使用Prometheus成功启动了Spring Boot应用程序。 Spring应用程序中的一个端点正在公开我们的指标数据,以便Prometheus能够检索它们。 想到的主要问题是如何保护此信息。 Spring已经为我们提供了强大的安全框架 因此,将其轻松用于…

列举python中常用的数据类型_列举Python常用数据类型并尽量多的写出其中的方法...

#1 把字符串的第一个字符大写string.capitalize()#2 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串string.center(width)#3 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数string.count(str, beg0, endl…

mysql 二元分词_MySQL 中文分词原理

一,首先我们来了解一下其他几个知识点:1. Mysql的索引意义?索引是加快访问表内容的基本手段,尤其是在涉及多个表的关联查询里。当然,索引可以加快检索速度,但是它也同时降低了索引列的插入,删除…