大型网站系统架构的演化

news/2024/5/9 22:22:50/文章来源:https://blog.csdn.net/yaoyanzhu/article/details/84703516

前言

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

一、最开始的网站架构

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

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

小结

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

 

本文摘自:http://www.cnblogs.com/leefreeman/p/3993449.html

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

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

相关文章

用PS去设计食品网站的展示

首先点击PS,进入PS以后我们先CtrlN创建一个宽度为25cm,高度135cm分辨率为300的图层, 创建以后我们就往图层里面放东西或者是自己已经做好的网页,还有不能让背景太过于单调,我们就往图层里面做装饰,至于放什么装饰就要看自己做的东西或者是网页是什么类型的,颜色不能太过于鲜艳还…

食品网站和学校官网的对比

首页我把食品的网页和学校的网页放进来进行对比和区分,学校官网都是严谨的规规矩矩的,而食品官网呢可以各式各样,如果食品官网和学校官网一样的话就不怎么好看了,而且食品类型的官网或者是网站都是主题性和偏人喜欢的类型,如果学校官网和食品类型的官网一样的话就会给人觉得学校…

分析自己做的后台网站

一, 布局 首先布局要有规整,然后界面要整洁还有要统一画板的大小,再然后就要适配在设计中,要清楚明白布局然后根据布局去添加东西或者是文字,然后就是排版在设计中排版也是非常重要的,还有排的版要根据具体情况判断是…

总结分析icon和食品网站

icon总结: 设计思路(灵感来源于漫威电影里面的蜘蛛侠)我利用了休息时间的时候因为当时没事做我自己也不知道要干嘛,然后就去网上玩了一下突然看到了蜘蛛侠的图片,上课的时候就开始了一系列的想跟设计最后就选定了做蜘蛛…

后台网站总结

后台网站也是我们的最后一个课程了,在学习后台的时候有点懵不知道是什么,然后老师就给了我们一些临摹的后台网站让我们去临摹,临摹的时候挺有意思的,然后老师还叫我们去收集后台网站的图片让我们去学习别人做的后台网站的优秀的地…

制作金融后台网站

首先进去PS,下面的话就不多说了,新建一个画板,画板的大小为:宽1024px,高1152px,分辨率为:72.然后把画板的颜色白色改为灰色.灰色的数字为:ebebeb. 2.下面把顶部和旁边的做出来,画一个宽164px和高590px的矩形颜色为蓝色,颜色的数字为:ebebeb.上面的顶部也是一样的,长1026和高56p…

Laravel+Nginx轻松实现读写分离、负载均衡,网站并发能力提升N倍

前言: 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。 为此,我们需要…

生成网站后,在浏览器中浏览时只能出现网页中的内容,不能与数据库相连接的部分?

生成网站,在浏览器中输入http://localhost/oa后,出现以下内容: ,解决办法: ,解决这个问题后,继续浏览又出现下面的错误: ,而他的解决方案是: 连接字符串&am…

在发布网站后,出现“未将对象引用设置到对象的实例”的错误时,是什么原因?

这个有两个原因:一、在IIS中没有设置“默认文档”;二、session没有赋值。 这两个原因是在做项目时发现的,可能还有其它的。

博客网站软件需求分析说明书-软件工程作业

1.导言 1.1编写目的 该文档描述了个人博客网站的功能和性能的要求,将作为对该项目在概要设计阶段的设计输入。 本文档的预期读者包括: 1.设计开发人员 2.项日管理人员 3.测试人员 4.用户 1.2项目范围 该文档的月的是解决整个项月系统中“做仁么”的问题。对于开…

【学习笔记】分布式爬虫打造搜索引擎|笔记02|scrapy爬取博客网站

scrapy框架 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例…

Nginx配置SSL证书部署HTTPS网站

一、什么是 SSL 证书,什么是 HTTPS SSL 证书是一种数字证书,它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现: 1、数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安…

兄弟们,我打算抠100个网站JS加密代码召唤,一个也跑不掉,这次轮到小虎牙

本次研究虎牙登录密码加密JS代码,难度不大,依然建议各位读者参考文章独自完成,实在抠不出来再参考这里的完整代码:从今天开始种树 准备 打开网站虎牙,点击登录标签,跳到登录界面: 按下F12&am…

服务端编程(三)- 背景知识 - web服务器 HTTP服务器 application 服务器 动态网站 静态网站 域名 URL 详解

文章目录 前言 ・ᴗ・概述web serverHTTP serverapplication server 应用服务器动态网站 静态网站总结 ◡ 前言 ・ᴗ・ 本篇将简化的几个简单却又容易混淆的概念 网站 网页 搜索引擎 web服务器 本文可以带给你… 网页的概念网站的概念…

服务端编程(九)- Django - 创建网站的基本骨架 创建你的主页

文章目录 前言 ・ᴗ・url参数制定url规则制定url规则什么时候需要获取url?为什么我们操作catalog的url 而不是根目录的url?服务器如何响应——view.py模板的制作render函数的运用彩蛋总结 ◡ 前言 ・ᴗ・ 本节…

服务端编程(十)- Django -创建网站页面

文章目录 前言 ・ᴗ・ListviewListView 的细节修改编辑每本书的详情页detailView分页的编辑结语( ̄︶ ̄)↗ 前言 ・ᴗ・ 上一节我们建立了主页 这里我们来创建一些别的网页 比如关于books…

网站优化问题:雅虎网站优化35条

1. Make fewer HTTP requests 尽可能少的http请求。。我们有141个请求(其中15个JS请求,3个CSS请求,47个CSS background images请求),多的可怕。思考了下,为什么把这个三种请求过多列为对页面加载的重要不利…

用phpstudy正确配置阿里服务器 网站就是不能浏览原因

用phpstudy 配置PHPMYSQL阿里云服务器, 所有配置都正确,服务器本地上也正常浏览, 但是用绑定服务器的域名打开浏览就是不行。 原因是阿里云服务器上的安全设置问题 阿里云服务器默认不能访问的,需要在阿里云服务器上增加安全规…

2017 年最受欢迎的 10个编程挑战网站

热文导读 | 点击标题阅读 如何看待中通讯42岁员工坠楼事件?背后深层原因剖析! 吊炸天!74款APP完整源码! 成为 Android 大牛的10大独门秘籍 原文:The 10 most popular coding challenge websites for 2017 https://med…

IIS6、IIS7.5设置网站默认首页方法(Directory Listing Denied)

这篇文章主要介绍了IIS6、IIS7.5设置网站默认首页方法,如果不设置访问目录就会提示Directory Listing Denied,就是不允许列出文档,为了安全网站都会设置不设置默认,需要的朋友可以参考下 今天有个客户问我他的网址访问目录就打开网站出现Directory List…