大型网站技术架构

news/2024/5/20 15:30:30/文章来源:https://blog.csdn.net/itjobtxq/article/details/53444603

大型网站技术架构(1)

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

作者:arno_好久不见来源:segmentfault|2016-11-07 21:00
收藏
分享

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

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

初始阶段

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

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

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

应用服务与数据服务分离

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

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

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

  • 应用服务器 要处理大量的业务逻辑,所以需要更好更快更强大的 CPU
  • 数据库服务器 需要快速的进行磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存
  • 文件服务器 需要存储用户上传的文件资源,因此需要更大的硬盘存储空间

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

使用缓存改善性能

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

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

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

  • 本地缓存 的访问速度会快一些,但是受应用服务器内存限制,缓存数据量很有限,而且会出现内存争用的情况
  • 远程分布式缓存 可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务

如下所示:

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

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

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

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

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

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

数据库读写分离

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

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

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

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

  • CDN 和 反向代理 的基本原理都是缓存
  • CDN 部署在网络供应商的机房,用户在进行请求时,会从距离最近的网络供应商机房获取数据

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

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

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

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

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

使用 NoSQL 和搜索引擎

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

业务拆分

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

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

分布式服务

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

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

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

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

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

相关文章

淘宝伏威关于12306网站解决方案:魔鬼在细节里

2月18日,CSDN在北京举行了TUP第19期活动:大数据系列研讨会——从12306谈起。本次研讨会汇集了来自百度、豆瓣网、搜狗、 淘宝、土豆、凡客诚品、新浪微博、IBM等公司的众多业内技术高管,就大数据及海量并发用户网络的需求分析、架构设计、产品…

YouTube的挑战者 JustinTV教你如何打造实时视频网站

Justin.TV每月有3000万个独立访问量,在游戏视频上传领域打败了YouTube ,他们每天每分钟新增30个小时的视频,而YouTube只有23。 下面从Justin.TV的实时视频系统使用到的平台,他们的架构细节,从他们身上应该学到的东西等…

前端开发工具,网站

浏览器插件,使用极简插件网站下载: FeHelper Web前端助手 react开发助手 前端网站合集:印记中文 - 深入挖掘国外前端新领域

VS2010 Web网站发布详解

对VS2010来说,发布Web是一件相当容易的事情,也许就是这个原因导致网上关于发布网站具体细节的资料很少。然而这些正是初学者所需要的,下面我详细介绍一下Web网站发布的具体过程。 第一步:在解决方案资源管理器中右击Web应用程序名…

项目一:摄影分享网站开发

本篇博客主要分享在该项目中遇到的一些问题及解决方法。 项目效果网站:http://zerored.3vhost.net/travel/index.html 1.设置背景半透明效果。 这里是一张背景图片加上一个半透明的遮罩层效果,首次开发的做法是先给大盒子背景图片,再在里面…

定时关闭和启动IIS和Web网站

目录 1、创建关闭、启动的批处理命令文件 2、通过“任务计划程序”定时执行批处理命令 1、创建关闭、启动的批处理命令文件 1.1 创建两个批处理文件 分别命名为IISStop.bat和IISStart.bat, 其中IISStop.bat中的命令代码为: echo off taskkill /f /…

php7.4升级php8.0后重启系统网站访问异常问题

安装完php8.0之后也禁用了旧版本php: 禁用php sudo a2dismod php7.4 启用php sudo a2enmod php8.0 也重启了php8.0-fpm服务: sudo service php8.0-fpm restart 但访问网站报如下异常: 错误日志: [proxy:error] [p…

WordPress网站优化加速的5个技巧

想让自己的wordpress网站访问速度更快,通过下面几个技巧,可轻松提速: 常规的前端性能优化 无论你的网站是基于什么后台技术实现的,被访问者访问的时候,总是会生成常规的 HTML、CSS、JavaScript 等文件发送回客户端。要…

宝塔面板启memcached加速wordpress网站访问速度

做网站的朋友一定知道一个网站的访问速度对于访客体验和seo优化的重要作用,提高网站打开速度的方法除了提升服务器性能和带宽以为还有很多地方可以优化,今天我们来介绍一下wordpress通过安装开提升网页访问速度的方式。 memcached加速原理 本质上是通用…

WordPress建站教程,纯代码实现wordpress防止发布文章出现标题重复,自动检测重复标题文章

WordPress代码实现防止发表重复标题的文章,如果对你有帮助就看看吧。 其实所有的插件这些的就等于放到function.php的代码片段。function.php里面的插件集成出来也可以做成一个插件,反过来插件也可以集成到function.php里面,插件的好处就是方…

VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程

原网址:http://www.cnblogs.com/gengaixue/archive/2010/08/13/1799112.html 开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件。(此文章也是总结了网上好多人写的文章,我只是…

项目管理实践【五】自动编译和发布网站【Using Visual Studio with Source Control System to build and publish website autom

在上一篇教程项目管理实践【三】每日构建【Daily Build Using CruiseControl.NET and MSBuild】 中,我们讲解了如何使用CCNETMSBuild来自动编译项目,今天我们讲解一下怎么使用MSBuildWebDeploymentRobocopy自动编译过和部署ASP.NET网站。 首先安装下面的…

分享一个运维同学常用的站点监测和测速网站17ce.com, 备用

https://www.17ce.com/功能挺多,记录下备用: 监测:Get, Ping, MTR, TraceRoute, Dns, Cdn, LDns 可以提供:趋势、区域、ISP、错误等分析报告 居然还有“赚钱路由器”,和前几年我们做的利用路由器分发app类似&#xff0…

利用Jsoup解析html 开发网站客户端小记。

这些天业余时间比较多,闲来无事,想起了以前看过开发任意网站客户端的一篇文章,就是利用jsoup解析网站网页,通过标签获取想要的内容。好了废话不多说,用到的工具为 jsoup-1.7.2.jar包,具体jsoup的相关文档&a…

python爬虫之12306网站--车站信息查询

python爬虫查询车站信息 目录: 1.找到要查询的url 2.对信息进行分析 3.对信息进行处理 python爬虫查询全拼相同的车站 目录: 1.找到要查询的url 2.对信息进行分析 3.对信息进行处理 1.找到车站信息的url 2.分析车站信息,发现每个车站信息以""分…

python爬虫之12306网站--火车票信息查询

python爬虫之12306网站--火车票信息查询 思路: 1.火车票信息查询是基于车站信息查询,先完成车站信息查询,然后根据车站信息查询生成的url地址去查询当前已知出发站和目的站的所有车次车票信息 2.json文件存储当前从出发站到目的站的所有车次的详细信息 3.对json文件…

python爬虫之天气预报网站--查看最近(15天)的天气信息(正则表达式)

python爬虫之天气预报网站--查看最近(15天)的天气信息(正则表达式) 思路: 1.首先找到一个自己想要查看天气预报的网站,选择自己想查看的地方,查看天气(例:http://www.tianqi.com/xixian1/15/) 2.打开"网页源代码",分析自己想要获取数据的特点 …

python爬虫之小说网站--下载小说(正则表达式)

python爬虫之小说网站--下载小说(正则表达式) 思路: 1.找到要下载的小说首页,打开网页源代码进行分析(例:https://www.kanunu8.com/files/old/2011/2447.html) 2.分析自己要得到的内容,首先分析url,发现只有后面的是变化的,先获得小说的没有相对路径,然后…

helper seo.php,Discuz首页为门户时SEO的关键词和描述出现”首页”浅析

SEO对于一个网站来说是尤其重要的,这个道理我想不管大网站还是小网站都是懂的,除非是BAT级别的网站或者某些不依赖搜索引擎的网站,在目前这种网站极其少。说实话,很多小网站的运营者花的时间最多的就是花在SEO上面了,可…

html上传后门,网站查后门软件 WebShellKiller

网站扫后门WebShellKiller软件截图:软件特性:特性一:多维度检测技术工具支持多种脚本文件(jsp,asp,aspx,php等),同时支持有后缀和无后缀两种风格的脚本文件的扫描,在检测文件上,通过对文件的语法和数据流分…