大型网站技术架构(1)

news/2024/5/19 0:27:55/文章来源:https://blog.csdn.net/weixin_33736048/article/details/91504845

为什么80%的码农都做不了架构师?>>>   hot3.png

网站都是从小网站一步一步发展为大型网站的,而这之中的挑战主要来自于庞大的用户、安全环境恶劣、高并发的访问和海量的数据,任何简单的业务处理,一旦需要处理数以 P 计的数据和面对数以亿计的用户时,问题就会变的很棘手

下面我们就来说说这个演变过程:

初始阶段

大型网站都是由小型网站演变而来的,网站架构也一样

小型网站最开始没有太多人访问,只需要一台服务器就绰绰有余,就像这样:

bVFaIv?w=423&h=297

应用程序、数据库、文件等所有资源都在一台服务器上,通常使用 Linux PHP MySQL Apache 就可以完成整个项目部署,然后再买个域名,租一个廉价的服务器就可以开始我们的网站之旅了

应用服务与数据服务分离

随着业务的发展,逐渐的一台服务器已经不能满足需求,这时我们可以将 应用与数据分离

分离之后我们使用到三台服务器:应用服务器、文件服务器和数据库服务器,如下所示:

bVFaIO?w=606&h=372

对于这三台服务器要求各不相同:

  • 应用服务器 要处理大量的业务逻辑,所以需要更好更快更强大的 CPU

  • 数据库服务器 需要快速的进行磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存

  • 文件服务器 需要存储用户上传的文件资源,因此需要更大的硬盘存储空间

应用与数据分离后,各个的职责变得更加专一,网站的性能得到进一步的提升,但随着用户的继续增加,我们需要对网站架构进一步优化

使用缓存改善性能

网站的访问一样遵循二八定律:80% 的业务访问集中在 20% 的数据上面

因此我们要对这一小部分的数据进行缓存来减轻数据库的访问压力,以提高整个网站的数据访问速度,改善数据库的读写性能

网站的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存

  • 本地缓存 的访问速度会快一些,但是受应用服务器内存限制,缓存数据量很有限,而且会出现内存争用的情况

  • 远程分布式缓存 可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务

如下所示:

bVFaIQ?w=638&h=522

使用缓存后,数据访问压力得到了有效的缓解,但单一的应用服务器能够处理的请求连接数有限,在访问的高峰期,应用服务器又会成为网站性能的瓶颈

使用应用服务器集群改善网站并发处理能力

使用集群是网站解决高并发,海量数据问题的常用手段,当你纵向提升到一定程度后,那就该开始横向提升了

当一台服务器的处理能力不足时,与其换一台更强大的服务器,不如增加一台服务器去分担原有的服务器压力。对于大型网站而言,无论多么强大的服务器,都满足不了持续增长的业务需求,更高效的方式就是增加服务器来分担压力

对于网站架构而言,如果增添一台新的服务器可以改善负载压力,那么就可以使用同样的方式来应对源源不断的业务需求,从而实现系统的可伸缩性

bVFaIT?w=719&h=476

通过负载均衡调度服务器,可以将用户请求分发到应用服务器集群里的任何一台服务器上,如果有更多的用户,可以增加更多的应用服务器,使应用服务器的负载压力不再成为网站的性能问题

数据库读写分离

在使用了缓存后,大多数的操作不经过数据库访问就能完成,但仍有一部分读操作(缓存访问未命中,缓存过期)和所有的写操作需要访问数据库,在网站的用户量达到一定时,数据库的负载问题就来了

目前大多数的数据库都支持主从热备份,通过配置两台服务器的主从关系,可以将一台数据库服务器的数据更新同步到另一台,网站利用这一功能,实现数据库读写分离,从而进一步改善数据库负载压力

bVFaJa?w=668&h=505

应用服务器在写操作的时候,访问主数据库,主数据库通过主从复制机制把数据同步更新到从数据库,这样当应用服务器进行读操作的时候,就能访问从数据库获取数据

使用反向代理和 CDN 加速网站响应

CDN 和 反向代理 的基本原理都是缓存

  • CDN 部署在网络供应商的机房,用户在进行请求时,会从距离最近的网络供应商机房获取数据

  • 反向代理 则部署在中心机房,当用户请求到达中心机房后,会首先访问反向代理服务器,如果反向代理服务器中缓存这用户请求的资源,就直接返回给用户

bVFaJd?w=777&h=558

使用 CDN 和 反向代理 都是为了尽快返回给用户数据,一方面加快用户访问速度,另一方面也减轻了后端服务器的压力

使用分布式文件系统和分布式数据库系统

随着网站业务的继续发展,这时候就可以像分布式应用服务器一样,对数据库系统和文件系统进行分布式管理

分布式数据库 是网站数据库拆分的最后手段,一般我们可以采取业务分库,根据不同业务的数据库部署在不同的数据库服务器上

bVFaJe?w=673&h=455

使用 NoSQL 和搜索引擎

这两个方式都是依赖于互联网的技术手段,应用服务器通过一个统一的数据访问模块来访问各种数据,从而减轻应用程序有多个数据源的麻烦

bVFaJf?w=657&h=419

业务拆分

对于大型网站,我们可以分而治之,把整个网站的业务分为不同的模块,比如大型的交易购物完整可以分为首页、店铺、订单、买家等,分别交给不同的业务团队来负责

同时我们将一个网站根据模块划分拆分成多个应用,每个应用进行单独的部署和维护,应用之间通过超链接建立关系(指向不同的应用地址),最后通过相同的数据存储系统来构成一个互相关联的完整系统

bVFaJh?w=775&h=442

分布式服务

随着业务拆分,整个系统越来越大,应用的整体复杂度呈指数级增加,部署维护越来越困难,并且所有的应用服务器都要与数据库服务连接, 在数万台服务器规模的情况下,这些连接的数目是服务器规模的平方,导致资源不足

这时候就要对相同的业务进行提取,独立部署,把这些可重用的业务和连接数据库等,提取出来作为公共业务服务,而应用系统只需要通过分布式服务访问公共业务服务完成业务操作

bVFaJi?w=732&h=427

到这里,基本上大多数的技术问题都能得到解决,还有一些实时同步等具体业务问题也都可以通过现有的技术解决

转载于:https://my.oschina.net/bysu/blog/787554

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

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

相关文章

超详细新手建站指南

概述 对于一个建站新手来讲,最重要的莫过于2件事 时间效率性价比换句话讲,对于非专业选手,在整个建站过程,如何省时省力,用相对简单的方式,花更少的钱建好网站是关键。 基于上述,给大家带来一版…

大型网站压力测试及优化方案

木桶理论应用在系统优化中 木桶理论又称短板理论,其核心思想是一只木桶盛水多少,并不取决于最高的木板,而取决于最短的那块木板。木桶原理应用在系统分析中,即系统的最终性能取决于系统中性能表现最差的组件,为了提升系…

从入侵到变现——“黑洞”下的黑帽SEO分析

概述 由于互联网入口流量主要被搜索引擎占据,网站在搜索引擎中的排名直接影响到市场营销效果,因此SEO服务应运而生。SEO(Search Engine Optimization)全称为搜索引擎优化,是指利用搜索引擎的规则提高网站在相关搜索引擎内的自然排名。SEO服务…

Linux学习网站

2019独角兽企业重金招聘Python工程师标准>>> 分享一个Linux学习网站 http://www.linuxprobe.com/ 转载于:https://my.oschina.net/bob1900/blog/847041

安全篇 Web网站类 CC防护

大家好,云吞铺子又和大家见面了;我叫枫凡,是技术服务中心的工程师;借这个机会主要和大家分享一下,Web网站应用在受到CC攻击的情况分析以及防护的一些心得。 一键防护 当网站受到CC攻击时,第一优先级为想办法…

服务器搭建网站完整教程

服务器最大的用途,就是可以搭建网站,许多人都认为搭建网站是一件很难的事情,因为包含许多的比较专业东西,比如服务器、编程之类的,确实,在几年前是这样的,普通人想要自己做一个网站太难了 但是随…

《Axure RP7网站和APP原型制作从入门到精通(60小时案例版)》一1.4 交互基础...

本节书摘来自异步社区《Axure RP7网站和APP原型制作从入门到精通(60小时案例版)》一书中的第1章,第1.4节,作者 金乌,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.4 交互基础 该部分内容可参考视频教程基础…

2017-11-28 在线编程网站对中文代码的支持

参考哪些比较好的在线编程网站?, 测试各个网站对中文命名的代码的支持, 包括调试信息等(见向LeetCode报告编译信息中Unicode显示问题). 有趣的是, 在范围有限的评测中, 国产的在线编程网站似乎对中文命名的代码普遍支持更好. 不知开发者是否对这个功能有特别的关注,…

文章被爬取到几十个网站?居然还出现了伪简书站点

不要笑,也许你的文章也已经被爬取... 微信截图_20190527162755.png上面的图片,第一眼,你肯定认为是简书站点吧?其实你错了,这只是一个伪站点而已... 今天一看,我的文章居然被几十个网站爬取,被爬…

09、搭建门户网站子模块、运营商广告列表的实现、广告CRUD、广告状态修改、门户网站轮播图广告、实现广告排序,状态等条件的设定、Linux安装redis、广告列表保存到redis、广告数据同步问题

搭建门户网站子模块 在父工程下新建门户子模块protal—web 注意springmvc.xml文件中需要对dubbo进行设置导入静态原型,controller实现类等文件。 搭建广告service模块 1、在父工程下引入两个子模块,分别是广告content的service接口,一个是…

实现基于LNMP的电子商务网站的搭建

一 环境准备:centos系统 yum源(安装mysql,nginx,和php-fpm)二:安装步骤:用yum的方式安装mariadb,mariadb-server,php-mysql,php-fpm,nginx下载需要搭建网站的源码,我搭建的是基于小米网站的搭建&#xff0…

如何从word中复制内容到网站后台编辑器中

很多时候我们用一些管理系统的时候,发布新闻、公告等文字类信息时,希望能很快的将word里面的内容直接粘贴到富文本编辑器里面,然后发布出来。减少排版复杂的工作量。 下面是借用百度doc 来快速实现这个word 粘贴到 富文本编辑器里面 方法一&…

16个时髦的扁平化设计的 HTML5 CSS3 网站模板

创建网站最好办法之一是使用现成的网站模板或使用开源 CMS 应用程序。所以,今天这篇文章给大家带来的是16款基于 HTML5 & CSS3 的精美的扁平风格网站模板,大家可以借助这些优秀的网站模板创建自己的优秀网站。这些网站模板虽然是收费,但是…

多域名同一个IP在IIS环境下架设多个网站 主机头

由于各种原因,我们有时候需要在一个IP地址上建立多个web站点,在IIS5中,我们可能通过简单的设置达到这个目标。在IIS中,每个 Web 站点都具有唯一的、由三个部分组成的标识,用来接收和响应请求:(1) IP地址(2) 端口号(3) …

一步步学习SPD2010--第十章节--SP网站品牌化(11)--使用CSS报表

一步步学习SPD2010--第十章节--SP网站品牌化(11)--使用CSS报表 和使用其他自定义技术一样,你可能很容易在开发样式时犯错误或创建难以维护的解决方案。这是SPD CSS报表能帮到你的地方。CSS报表在你网站中核查一个或更多页面,产生使…

转:大型网站架构演变和知识体系

理论不懂就实践,实践不会就学理论! 转载:大型网站架构演变和知识体系 之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果&am…

烽火18台之五--如何拯救你我的网站

欧洲杯在历时1个月后,终在11日落下帷幕。作为第三方球迷,首先恭喜葡萄牙,也祝贺C罗,老天夺走了他的下半场,却还给了这个队长整个葡萄牙的胜利。他下场时的泪水没有白流。法国虽然没能第三次捧杯,但也让我们…

Java 开发牛人必备的网站

以下是我收集的 Java 开发牛人必备的网站。这些网站可以提供信息,以及一些很棒的讲座, 还能解答一般问题、面试问题等。质量是衡量一个网站的关键因素,我个人认为这些网站质 量都很好。接下来,我会跟大家分享我是如何使用这些网站…

VS发布网站详细步骤

1、打开你的VS2012网站项目&#xff0c;右键点击项目》菜单中 重新生成一下网站项目&#xff1b;再次点击右键》发布&#xff1a; 2、弹出网站发布设置面板&#xff0c;点击<新建..>,创建新的发布配置文件&#xff1a; 输入你自己定义的配置文件名&#xff1a; 3、点击下…

Linux Centos服务器宝塔一键安装配置LNMP/LAMP网站环境——宝塔建站可视化(无需敲命令)...

Linux网站环境LAMP/LNMP环境配置宝塔面板的安装流程本文提供全图文流程&#xff0c;中文翻译。 Chinar 坚持将简单的生活方式&#xff0c;带给世人&#xff01;&#xff08;拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例&#xff09; Chinar —— 心分享、心…