大型网站系统架构的演化

news/2024/5/9 23:24:35/文章来源:https://blog.csdn.net/weixin_30794851/article/details/94791987

http://www.cnblogs.com/leefreeman/p/3993449.html

 

前言

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

一、最开始的网站架构

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

image

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

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

image

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

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

251844453265971

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

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

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

251844471702801

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

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

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

260851219209749

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

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

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

260851254513595

七、使用分布式文件系统

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

260851282647353

八、使用NoSql和搜索引擎

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

260851321075527

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

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

260851352481788

 

十、搭建分布式服务

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

260851397174320

小结

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

 

转载于:https://www.cnblogs.com/diegodu/p/4832447.html

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

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

相关文章

软件体系结构---优酷网站架构分析

1.web环境下架构特性 可扩展、可靠、简单核心、模块化 2.优酷网站分析 1)前端框架 模块分离、前端可扩展、分层UI分离 2)存储结构 在体系结构上,优酷网采用分布式的结构,服务器和存储设备分布在全国各地,用户就近访问,…

大型网站架构系列:分布式消息队列(一)

以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统)。本次分享大纲消息队列概述消息队列应用场景消息中间件示例JMS消息服务(见第二篇:大型网…

JS基础17-网站效果

一、鼠标移入触发显示框和更改属性 要实现的效果 window.οnlοadfunction(){ //获取到div框里的li数组var oToplistdocument.getElementById(top-list);var oToplistlioToplist.getElementsByTagName(li);var oPulldocument.getElementById(pull-down);//鼠标移入时&#xff0…

Python_记一次网站数据定向爬取实现

记一次网站数据定向爬取实现 by:授客 QQ:1033553122 测试环境: Python版本:Python 3.4 Win7 请勿用于商业及非法用途,仅供学习研究用,否则后果自负 数据爬取场景 如下,打开网站查询页面,输入关…

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

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

v2013调试无法访问此网站 localhost 拒绝了我们的连接请求

问题描述: 别人给的服务器代码,在本地部署以后调试的,localhost:8080 可以访问,localhost:2524访问不了需要改什么配置吗 解决思路: 这种只能在服务器上访问,可能端口号2524…

如何优化您的网站以提高速度

大家好! 今天,我们有一个来宾帖子,介绍有关如何加快网站速度的一些提示! 他目前正在一家电子商务网站上工作,他的任务之一是使网站快速加载。 因此,请在下面阅读! 〜迈克 网站速度已成为诸如Go…

如何优化程序提高运行速度_如何优化您的网站以提高速度

如何优化程序提高运行速度大家好! 今天,我们有一个来宾帖子,介绍有关如何加快网站速度的一些提示! 他目前正在一家电子商务网站上工作,他的任务之一是使网站快速加载。 因此,喜欢在下面阅读! 〜…

网站托管平台_托管Kubernetes平台综述

网站托管平台在容器协调器的竞争中,Kubernetes不断前进。 但是,就像我在Docker主机上撰写我的文章时一样,人们经常被困在将基础架构投入生产的步骤上。 与我最初写这篇文章时不同,该行业取得了长足的发展,正如您将看到…

PHP的网站主要攻击方式有哪些?

1、命令注入(Command Injection) 2、eval注入(Eval Injection) 3、客户端脚本攻击(Script Insertion) 4、跨网站脚本攻击(Cross Site Scripting, XSS) 5、SQL注入攻击(SQL injection) 6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF) 7、Session 会话劫持(Session …

Xshell命令行学习,宝塔创建网站

参考链接 :https://blog.csdn.net/u014074697/article/details/86241642 宝塔创建面板-在安全组新添加一个端口 浏览器输入Bt-panel网址,登入用户名和密码即可进入

curl网站开发指南

整理curl命令: curl www.sina.com curl -o [文件名] www.sina.com curl -L www.sina.com curl -i www.sina.com curl -I www.sina.com curl -v www.sina.com curl --trace output.txt www.sina.com curl --trace-ascii output.txt www.sina.com php-curl这个库也不…

电商购物网站(登陆注册购物车详情页等)(仿jd)

电商购物网站(仿jd) 源码链接: https://gitee.com/ZRXXUAN/shopping https://github.com/ZRXXUAN/shopping 介绍 仿照jd写的电商购物网站 可以实现基本功能,登录、注册与数据库交互,购物车,详情页&…

BS4+Openpyxl循环爬取114网站黄页信息存入excel + tinker界面输入(开源代码)

使用beautifulSoup框架爬取114黄页数据。 代码开源在gitee地址: https://gitee.com/aismarter/ScrapySpider_bs4_openpyxl_tinker github地址: https://github.com/Aismarter/ScrapySpider_BS4_openpyxl_tinker 分析网站 首先打开网页,分析爬取网页的…

简易购物网站JSP

下载源码 开发工具: 1.myeclipse2014 2.SQLServer2012 开发思路: 开发思路及过程请详看附件内开发文档 项目构造: 数据库说明: 需创建一个数据库(shopDB),三个表(users、goods、shopCart),空表即可,后…

宝塔部署java项目建站最全爬坑博客-为啥叫最全,因为我爬的坑最多

1.首先你要有阿里云域名,然后在阿里云上解析A类你的域名,这就不多说了 2.进入宝塔面板后,你要先安装环境,最好是编译安装,因为求稳,急速安装不稳定,但是像tomcat这类app程序没有编译安装哦 环境如果都安装好了,那么我们就开始配置项目了 首先,要看我们需要运行的项目是什么,…

Java-POI大数据分析 -实体店选址POI数据分析-5天,多网站爬虫数据融合处理

实体店选址大数据分析-保定地区-POI数据-powermap-爬虫获取真实数据讲一下项目的思路 预期通过获得poi数据进行分析,以为实体店选址进行决策 数据源 58同城店铺转让数据 安居客小区详细信息数据 安居客小区平均房价数据 上爬虫代码 package wubaSpider;import java.io.FileO…

网站漏洞扫描工具AWVS相关问题——Access Denied for your user role. Contact your Administrator.

在AWVS登录用户后,在选择自己要使用的功能时会出现“Access Denied for your user role. Contact your Administrator.”问题,即“拒绝访问您的用户角色。请与管理员联系。” 此问题的出现是由于在软件处于未激活状态所致。 解决方案: 1、AW…

AWVS启动后显示“无法访问此网站”的解决方法

当双击桌面的“Acunetix图标”,自动打开浏览器跳转页面,结果页面显示“无法访问此网站” 按WindowsR键输入services.msc打开服务界面查看Acunetix服务是否开启,一般是两个服务 右键选择服务,选择启动,将两个服务全部启…

网站漏洞扫描工具AWVS_v13下载和安装

Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫描工具,它能够测试你的网站安全,检测网站的安全漏洞,如sql 注入,交叉站点脚本等等。 AWVS_v13软件的下载 1、AWVS漏洞扫描工具是一款…