大型网站架构演变

news/2024/5/14 3:30:52/文章来源:https://blog.csdn.net/weixin_34163553/article/details/85995261

前言

一个成熟的大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线(大型网站的架构不是设计出来的,而是演化出来的)。所以成熟的系统架构是随业务扩展而完善出来的,并不是一蹴而就;不同业务特征的系统,会有各自的侧重点,例如淘宝,要解决海量的商品信息的搜索、下单、支付,例如腾讯,要解决数亿的用户实时消息传输,百度它要处理海量的搜索请求,他们都有各自的业务特性,系统架构也有所不同(因事成人,而不是因人成事)。尽管如此,我们也可以从这些不同的网站背景下,找出其中共用的技术,这些技术和手段可以广泛运行在大型网站系统的架构中,下面就通过介绍大型网站系统的演化过程,来认识这些技术和手段。(没有银弹

如何应对高并发?

 定位瓶颈

 

 

 

 

 

 

一、最开始的网站架构

最初的架构,应用程序、数据库、文件都部署在一台服务器上,如图:

 

PV:浏览了多少个页面

 UV:一个网站独立的访客,通过cookie识别,每次打开一个浏览器都是一个独立的访客

  IP

 

 

 

 

 

 

 

 

二、应用、数据、文件分离

随着业务的扩展,一台服务器已经不能满足性能需求,故将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。(水平扩展)

 

文件服务器关注IO、 应用服务器CPU、内存 数据库服务器CPU、内存(临时表)、IO

不需要将每个服务器都弄成高配置的

 

 

 

 

 

三、利用缓存改善网站性能(网站性能优化的第一步,就是使用缓存)

在硬件优化性能的同时,同时也通过软件进行性能优化,在大部分的网站系统中,都会利用缓存技术改善系统的性能,使用缓存主要源于热点数据的存在,大部分网站访问都遵循28原则(即80%的访问请求,最终落在20%的数据上),所以我们可以对热点数据进行缓存,减少这些数据的访问路径,提高用户体验。

 

 

缓存实现常见的方式是本地缓存、分布式缓存。当然还有CDN、反向代理、客户端缓存等。本地缓存,顾名思义是将数据缓存在应用服务器本地。本地缓存的特点是速度快,但因为本地空间有限所以缓存数据量也有限。分布式缓存的特点是,可以缓存海量的数据,并且扩展非常容易,速度按理没有本地缓存快,常用的分布式缓存是Membercache、Redis。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、使用集群改善应用服务器性能

应用服务器作为网站的入口,会承担大量的请求,我们往往通过应用服务器集群来分担请求数。应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点(用户持久化)。

在请求之前DNS也是一种负载均衡服务器,分发到最近的服务器上。

有两个缺点:一个是无法区分服务是否挂掉,即时某个NGINX服务器挂掉了,DNS仍然会分配。另一个是DNS缓存的问题,用户访问网站,网站域名被DNS服务器解析为某个IP。这个IP一般情况都会在客户端本地进行缓存,短时间内下次再访问这个域名,会直接从缓存中拿,无法达到真正的均匀,但这对服务器影响不算太大。重要的请求个数无法真正的做到均衡,比如每个Nginx服务器拿到100个请求,但是所有的耗时大请求都集中到某一台服务器中,那么这个服务器压力将会很大。其他的会比较空闲。

 

常用的负载均衡技术硬件的有F5,价格比较贵,软件的有LVS、Nginx、HAProxy。LVS是四层负载均衡,根据目标地址和端口选择内部服务器,Nginx和HAProxy是七层负载均衡,可以根据报文内容选择内部服务器,因此LVS分发路径优于Nginx和HAProxy,性能要高些,而Nginx和HAProxy则更具配置性,如可以用来做动静分离(根据请求报文特征,选择静态资源服务器还是应用服务器)。

 

五、数据库读写分离和分库分表

随着用户量的增加,数据库成为最大的瓶颈(木桶理论),改善数据库性能常用的手段是进行读写分离以及分表,读写分离顾名思义就是将数据库分为读库和写库,通过主备功能实现数据同步。分库分表则分为水平切分和垂直切分,水平切换则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务不同来切换,如用户业务、商品业务相关的表放在不同的数据库中。

 

 

 

 

六、使用CDN和反向代理提高网站性能

假如我们的服务器都部署在成都的机房,对于四川的用户来说访问是较快的,而对于北京的用户访问是较慢的,这是由于四川和北京分别属于电信和联通的不同发达地区,北京用户访问需要通过互联路由器经过较长的路径才能访问到成都的服务器,返回路径也一样,所以数据传输时间比较长。对于这种情况,常常使用CDN(互联网的第一心跳)解决,CDN将数据内容缓存到运营商的机房,用户访问时先从最近的运营商获取数据,这样大大减少了网络访问的路径。比较专业的CDN运营商有蓝汛、网宿。

而反向代理(FQ、客户端游戏代理,服务端代理),则是部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有没有缓存数据才会继续走应用服务器获取,也减少了获取数据的成本。反向代理有Squid,Nginx。

 

 

 

 

 

 

七、使用分布式文件系统

用户一天天增加,业务量越来越大,产生的文件越来越多,单台的文件服务器已经不能满足需求。需要分布式的文件系统支撑。常用的分布式文件系统有NFS,淘宝的TFS、google的GFS。

 

 

 

 

八、使用NoSql和搜索引擎

对于海量数据的查询,我们使用nosql数据库加上搜索引擎可以达到更好的性能。并不是所有的数据都要放在关系型数据中。常用的NOSQL有mongodb和redis,搜索引擎有Lucene。

 

 

 

 

九、将应用服务器进行业务拆分

随着业务进一步扩展,应用程序变得非常臃肿,这时我们需要将应用程序进行业务拆分,如百度分为新闻、网页、图片等业务。每个业务应用负责相对独立的业务运作。业务之间通过消息进行通信或者同享数据库来实现(垂直切分、水平切分)。

 

 

 

 

十、搭建分布式服务

这时我们发现各个业务应用都会使用到一些基本的业务服务,例如用户服务、订单服务、支付服务、安全服务,这些服务是支撑各业务应用的基本要素。我们将这些服务抽取出来利用分部式服务框架搭建分布式服务。淘宝的Dubbo是一个不错的选择(服务注册、查找、通信、稳定)。

 

 

 

 

小结

大型网站的架构是根据业务需求不断完善的,根据不同的业务特征会做特定的设计和考虑,本文只是讲述一个常规大型网站会涉及的一些技术和手段。

 

 

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

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

相关文章

宝塔面板设置wordpress主题网站伪静态的最简单的方法

WordPress日记 2018-02-27 WP主题开发 4,224 次 最近网站更换了服务器,安装了宝塔面板,安装好以后发现安装管理网站还是非常的直观方便的,但是有一点让我折腾了好久,那就是网站设置伪静态固定连接后,总是出现404错误…

支付宝网站支付即时到帐(一) 参数的文档地址

必备物品:企业支付宝账号 官网 : https://open.alipay.com/platform/home.htm 第一步 创建网站应用 并完善信息 这一步很简单 添加上网站支付的功能 第二步 找到即时到帐的文档 https://docs.open.alipay.com/62/103566 上面有获取pid的方法 https…

SEO关键词排名下降,5个方法帮你恢复排名!

作为一名SEO人员我们每天的工作除了做推广以为,最主要的内容就是监控关键词的排名,很多初入SEO行业的小伙伴特别紧张,如果并不是大面积的关键词排名下降,还请大家放轻松,你可以通过下面5个方法来恢复你的关键词排名&am…

怎样解决Internet Explorer无法访问网站的现象

去掉"自动检测设置"的复选框 1 打开Internet Explorer浏览器,点击右上角齿轮 2 点击Internet选项 3 点击连接 4 点击局域网设置 5 将“自动检测设置”的勾去掉,单击“确定” END 指派IP地址和DNS服务器 1 打开网络和共享中心 2 活动…

一例千万级pv高性能高并发网站架构

一个支撑千万级PV的网站是非常考验一个架构是否成熟、健壮(本文不涉及软件架构的层面,有兴趣也可以讨论)。现抛出一个系统层面的架构,不保证是最优的方案,但也许适合你。理由是再优秀的架构都不具备通用性,需要根据每种应用特点针…

大型网站框架从单台服务器到群集的演变过程

之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结 果,而没有很详细的讲为什么需要做这 样的演变,再加上近来感觉有不少同学都很难明白为什…

study-19: LAMP企业网站集群架构搭建(自己实战)

一,架构图 二,安装软件 1,WEB-A (192.168.1.241): 1)安装LAMP(MYSQL安装到make && make install即可) 2)安装rpcbind:yum install rp…

WebStack-Laravel 和宝塔导航网站部署

中国所有网站上的人才。。。没有一个教程是完整的。。 效果网站: nav.yzdzy.com www.liuan.wiki 安装宝塔教程 无 命令行工具: 感谢阿里云 升级镜像命令 官方地址 先看下后面要用 https://developer.aliyun.com/composer 我写一份完整的教程 …

html 树形结构_合排名的网站结构是怎样的?

网站结构是网站的骨架,就像人也有骨架一样,及其重要。在搜索引擎打分规则中,网站的得分占比还是非常大的,我们下面会给大家分享下网站结构优化建议。什么是网站结构网站的结构,可以理解为网站的内容分类。通常可以从网…

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

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

已阻止网站自动通话怎么回事_Chrome 86默认阻止网站滥用通知功能

我们在上网的过程中不仅要面临各种广告,还可能遭到各种通知的侵扰。为了改善网络环境,在 Chrome 86 版本中,谷歌将引入一项新功能来阻止网络滥用通知,并传达某些误导性的内容。事实上,这是谷歌第三次针对网页通知进行调…

html 域名随机跳转_已拥有服务器和域名,怎样搭建网站

网站有三个要素:域名、服务器、程序,有了域名、服务器、静态网页接下来我们需要做的就是把这三个要素链接起来。接下来小编就来告诉大家我们怎么样把这三个要素整合成一个可以浏览的动态网站。首先我们需要把域名解析到服务器,我们进入域名服…

html设置文字超过字数_设置网站关键词的方法

设置网站关键词的方法看似很简单,但实际上设置好还是很难的一件事情,就拿我的SEO博客的标题,一个20多字的标题就能覆盖上百个关键词,这种效果和方法你会吗?关键词是SEO的根,是开展一切SEO工作的源头。而网站…

python 网站开发环境_搭建Python+Django开发环境

第一步:安装python。常见的windows系统,直接python网站下载 最新的版本python3.5.python安装好之后,配置好环境变量。使得python和 pip命令能够正常使用。第二步:安装Django用pip命令可以直接安装 django 。 pip install django检…

网站优化之->升级RDS 网站访问速度直接提升10倍

今天给宝塔面板添加了RDS(阿里云家的产品) 访问地址:RDS 产品介绍 首次购买优惠地址:新用户购买优惠地址 土豪可以不用点这个。。。 为啥rds 快 我提交工单咨询了下 原因RDS走的是内网 速度是G级别的 。。然后rds 优化了算法 然后就特别快 之前我的…

PHPNOW 与ASP网站共存

首先安装phpnow,这个跳过了,官方有 其实phpasp的搭建官方也有说,只是说的比较隐晦 1、安装IIS,ASP站的端口可以是除了80以外的其他任意你能用的端口 2、打开PHPNOW目录下的PnCp.cmd,选择10(添加代理虚拟主机…

Python | 使用Python爬取Wallhaven网站壁纸并上传百度网盘

更多详情请查看Honker Python | 使用Python爬取Wallhaven网站壁纸并上传百度网盘 给大家推荐一款超好用的壁纸下载网站—— wallhaven 第一次知道这个网站的时候,惊为天人。顿时有一种挖到宝藏的feel。给用户带来的是丝滑的体验。壁纸全都是免费下载。对比国内相…

WordPress 精品在线聊天插件之 02 如何将Tidio添加到您的WordPress网站?

如何将Tidio添加到您的WordPress网站? 所有网站中有35%使用WordPress。考虑到竞争,这是一个相当大的市场份额。而且这一份额逐年增加。Tidio实时聊天应用程序为60,000多个WP网站提供了动力。 从技术角度来看,用户喜欢Tidio应用程序,因为它轻巧,简单。从业务方面来说,要…

JavaScript 炫酷第一步 抓取别人网站数据

//访问这个网站 并打开控制台https://en.wikipedia.org/wiki/Category:Boulevards_in_Paris 审查元素后我们发现 他的selector对应 #mw-pages > div 所以第一行代码有了 const category document.querySelector(#mw-pages > div); 根据分析得来 我们要拿a标签的数据…

wap网站制作教程

wap网站制作教程 用QuickWAP组件建设Wap站点教程 用QuickWAP组件建设Wap站点教程-准备篇首先我们要简单了解一下什么是QuickWAP,QuickWAP V1.0精简版是一款基于WAP1.2协议,利用VB6开发的一个辅助ASPWML语言编写WAP网页的组件。其次我们要安装安装QuickW…