大型网站架构演化

news/2024/5/17 10:51:56/文章来源:https://blog.csdn.net/qinyushuang/article/details/43306821

原文地址:http://www.cnblogs.com/leefreeman/p/3993449.html

前言

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

一、最开始的网站架构

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

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

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

三、利用缓存改善网站性能

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


缓存实现常见的方式是本地缓存、分布式缓存。当然还有CDN、反向代理等,这个后面再讲。本地缓存,顾名思义是将数据缓存在应用服务器本地,可以存在内存中,也可以存在文件,OSCache就是常用的本地缓存组件。本地缓存的特点是速度快,但因为本地空间有限所以缓存数据量也有限。分布式缓存的特点是,可以缓存海量的数据,并且扩展非常容易,在门户类网站中常常被使用,速度按理没有本地缓存快,常用的分布式缓存是Memcached、Redis。

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

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



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

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

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

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

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

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

七、使用分布式文件系统

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

八、使用NoSql和搜索引擎

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

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

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

十、搭建分布式服务

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

小结

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

 

 

参考资料:

《大型网站技术架构》 ——李智慧

《海量运维运营规划》 ——唐文



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

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

相关文章

大型网站的灵魂——性能

原文地址:http://www.cnblogs.com/leefreeman/p/3998757.html#3112162 一、前言 在前一篇随笔《大型网站系统架构的演化》中,介绍了大型网站的演化过程,期间穿插了一些技术和手段,我们可以从中看出一个大型网站的轮廓&#xff0c…

PHP绿色集成环境在云服务器上的应用,PHPWAMP在服务器上搭建网站案例

问:什么叫WAMP?答:Windows下的ApacheMysqlPHP,称之为WAMP。本文案例采用的PHP集成环境是我自己开发的纯绿色版WAMP软件(PHPWAMP)。我在这款集成环境里集成的组件都是完全版的,适合本地调试&…

编码 括号_如何知道自己的网站是utf8还是gbk编码

用过织梦建站的站长们应当都知道网站代码有utf8与gbk两种编码格式,如果两种编码混用网站就有可能出现乱码。而我们在初次搭建网站的过程中往往没有在意自己使用的是utf8编码格式还是gbk编码格式,导致自己在选用织梦模板、安装织梦插件时不知所措。今天跟…

jsp+jquery 音乐商城网站_JSP+Servlet+C3P0+Mysql实现的苹果网上商城

项目简介项目来源于:https://github.com/gpengDemo/Estore本系统基于JSPServletC3P0Mysql。涉及技术少,易于理解,适合JavaWeb初学者学习使用。难度等级:简单技术栈编辑器IntelliJ IDEA 2019.1.1 (Ultimate Edition)前端技术基础&a…

会不会网站建设,要看有没有网站建设技能认证证书了

会不会网站建设,要看有没有技能认证证书了,为什么会这样呢? 众所周知阿里在云服务器界,是做的最早也算是做的最好的一家空间服务商。阿里云最近又在搞各种优惠活动,一个云服务器的价格比那些虚拟主机还要便宜&#xff…

网站搭建教程(详细步骤 )

目录 网站组成 一、服务器 二、网站程序 三、域名 四、空间基本介绍 搭建网站的基本步骤流程(教程解说) 一、购买域名 二、购买服务器 三、相关配置 网站组成 一、服务器 什么是服务器? 我们可以理解为一个容器,用来存放网站的内容部分,我们在互联网上能够看到的网…

大型网站架构演变

一、最开始的网站架构最初的架构,应用程序、数据库、文件都部署在一台服务器上,如图:二、应用、数据、文件分离将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能…

background图片不显示_您的网站图片也不显示?禁用响应式图片加载属性srcset和sizes吧...

可能因为第一次有自己的网站所以更新网站兴趣比较高,没想到今天刚打开网站突然发现所有网站文章里的图片全部不能显示了,如图1图一但文章的预览图都还可以显示,而且进wordpress网站文章编辑后台也可以看到图片如图二图二甚至看到文章编辑源代…

linux 卸载redis_大数据学习路线,从Linux基础到大型网站高并发处理项目实战

相信大家在学习大数据的时候都不知道怎么来学习,因为知识点太多了,也太杂了,没有一个系统的路线来引导大家学习. 为了解决大家这个困惑,小编整理了从Linux基础到大型网站高并发处理项目实战的学习路线和知识点,希望大家…

经典flash_市面80%的模板站网站还都是flash,即将面临打不开的风险

最新消息:Adobe公司宣布,2020年12月31日,今年的最后一天,将是其旗下产品Flash Player生命终结之日,也就是 End-Of-Life Date。提到flash player相信大家绝对不陌生,无论是我们曾在网页播放器内满怀期待的观…

怎样将优酷网站下载的视频KUX转MP4格式

在休息之余,相信大多数人都会拿手机看电视剧听音乐之类的,最近拍了很多的新片子:《毒液:致命守护者》、《无名之辈》、《亡命救赎》《影》等等优质电影,但是很多的电影都只能在电影院观看的,如果不去电影院…

这些资源网站为什么能获得5万知乎大佬推荐,而我错失了什么吗?

现在很多朋友可能只要是一听到资源网站,想必就会好奇是什么网站,用用看是不是由说的那么厉害!其实资源网站给我们的诱惑是在是太大了,其主要原因是可以帮助我们搜索到很多意想不到的资源! 为了回应大家的需求&#xff…

oracle linux zfs,测试数据及结论分析(5) - Linux平台ZFS-FUSE与EXT4、Btrfs大比拼_Linux新闻_Linux公社-Linux系统门户网站...

最后一项测试,使用 IOzone 读取 8GB 数据中,ZFS-FUSE 的磁盘读取性能结果实际上和 EXT4 和 Btrfs 相近,不过那是因为 ZFS 模块在读取时使用了缓存的缘故。鉴于一些 Phoronix Premium成员要求在文件系统测试中同时提供 CPU 占用的结果&#xf…

mysql数据库优化课程---7、网站的搜索技术怎么选

mysql数据库优化课程---7、网站的搜索技术怎么选 一、总结 一句话总结: 1.量很小(像小网站)---like 2.量大一点()---标签 3.量超级大(像百度)---搜索引擎 1、数据库中取一列比取*要快给了我们什…

java常用网站有哪些类型有哪些类型_java常用的数据类型有哪些

java基本数据类型就8种,记住就好了。除了这些都是引用型的了。java常用的数据类型介绍:(推荐:java视频教程)java四类八种基本数据类型第一类:整型 byte short int long第二类:浮点型 float double第三类:逻…

linux隐藏文件怎么运行,Linux下如何隐藏文件_网站服务器运行维护

linux系统怎样安装软件_网站服务器运行维护linux系统安装软件的方法:1、使用apt命令进行安装,如【apt install app_name】;2、使用rpm命令进行安装,如【rpm -i app_name.rpm】。这篇文章主要介绍了Linux下隐藏文件方法&#xff0c…

python自动下载安装numpy_[Python]自动、使用镜像网站自动和手动安装Numpy

直接安装numpy模块在cmd输入直接pip install numpy若出现报错:ou are using pip version 18.1, however version 20.2.2 is available. You should consider upgrading via the ‘python -m pip install --upgrade pip’ command.根据提示:您使用的是pip…

大型网站架构技术

大型网站的挑战主要来自庞大的用户,高并发的访问和海量数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得棘手。大型网站架构主要就是解决这类问题。1 前端架构前端指的是用户请求到达网站应用服务器之前经历的…

宝塔linux优化wordpress,宝塔面板搭建的WordPress网站,如何进行服务器缓存优化 ?...

宝塔面板搭建的WordPress网站,如何进行服务器缓存优化 ?首先安装好必要的web环境,那么我们开始安装缓存了,有三个是必装的,这里以安装Wordpress建站为例。1.PHP版本我们最起码选择7.0以上的版本,越高越好&a…

网站云服务器需要数据库吗,网站云服务器需要数据库吗

网站云服务器需要数据库吗 内容精选换一换云数据库RDS服务支持开启公网访问功能,通过弹性公网IP进行访问。您也可通过弹性云服务器的内网访问云数据库RDS。准备弹性云服务器或可通过公网访问云数据库RDS。通过弹性云服务器连接云数据库RDS实例,需要创建一…