网站架构之架构演化

news/2024/5/20 22:12:24/文章来源:https://blog.csdn.net/liuyiming0822/article/details/73251054

网站从构建之初的很少有人问津,用户数量较少,并发量较低,到之后的拥有千万上亿用户,数万量级的高并发,之间经历了怎样的过程,小型网站架构是怎样逐步演化的,本文简单探讨下这方面的内容,主要参考《大型网站架构设计》,这本书知识点总结的还是比较全面的。

1. 初始阶段

网站开始是没有太多访问量的,只需一台服务器就绰绰有余了,应用程序,数据库,静态资源等全部都在一台服务器上,一般使用LAMP/LNMP(Linux+Apache/Nginx+MySQL+PHP/Python等)就可以实现自己的网站了,具体架构如下所示:

2. 应用服务与数据服务分离

随着网站业务的发展,用户访问量的增加,存储数据的增长,单台服务器逐渐不能满足需求,需要将应用服务与数据服务分离,具体如下图所示:

由于负责提供的服务不同,每台服务器对硬件资源的需求是不同的,具体如下所示:

不同服务所需资源表
服务器类型处理业务所需资源
应用服务器处理所有业务逻辑更快、更多CPU
文件服务器存储用户上传文件或服务自身所需文件资源更大的磁盘空间
数据库服务器做数据缓存以及进行数据检索更大的内存以及更快的磁盘

 

 

 

 

 

3. 缓存

随着用户逐渐增多,数据库压力太大,导致访问延迟,影响用户体验,而网站性能优化最优先考虑的就是缓存

网站访问特点所遵循的二八定律:80%的业务访问集中在20%的数据上;

 网站使用缓存又可分为应用服务器本地缓存和远程分布式缓存,远程分布式缓存一般可采用集群的方式部署,对服务器内存有比较高的要求,具体如下图所示:

4. 应用服务器集群部署

随着访问量进一步增大,单台应用服务器已逐渐不能应对越来越多的请求连接,单台服务器硬件资源再强,也会逐渐满足不了业务高峰时的负载压力;

网站解决高并发、海量数据问题最常用的手段还是使用集群,做横向扩展,集群可以很好地满足伸缩性

负载均衡服务器实现可以有比较多的方案,LVS,Nginx,F5等,可以和HA软件,如Heartbeat与Keepalived等一起使用;

通过应用服务器集群部署,使用负载均衡调度器,可以将用户的请求分发到多台应用服务器集群中的任一台机器上,而且根据用户访问量的多少,可以很容易增删服务器,是每台服务器负载都在可接受范围之内,具体如下图所示:

5. 数据库读写分离

对于缓存没命中和缓存过期的数据,仍需要从数据库中来读取,并且所有写操作也都需要访问数据库,数据库压力还是会随着访问量增加而增大;

可采用主从热备的方案,实现读写分离,例如mysql的master-slave模式,当读操作量级更高时,还可采用一主多从的方式来实现;

应用程序中的数据访问模块需要保证数据库的读写分离对应用透明; 

具体如下图所示:

6. 使用CDN和反向代理加速网站

中国网络环境复杂,不同地区用户访问相同网站,速度差别较大,而网站访问延时和用户流失率正相关;

主要加速网站访问速度,减轻后端服务器负载压力的方式就是使用CDN反向代理

CDN和反向代理的基本原理都是缓存

CDN部署在网络提供商的机房,缓存网站的一些热点静态资源,用户在请求网站服务时,从距离自己最近的网络提供商机房获取数据,如视频、图片等;

反向代理部署在网站的中心机房,属于网站前端架构的一部分,当用户请求到达中心机房后,首先访问反向代理服务器,如果缓存着用户请求的资源(静态),就直接返回;

反向代理比较成熟的开源软件:Squid、Varnish,推荐使用Varnish,从稳定性、访问速度、并发连接数目比较来看,Varnish都更强大一点;

1
2
3
使用缓存的前提条件:
1. 数据访问热点不均衡,某些数据会被频繁访问;
2. 数据在某个时间段内有效,不会很快过期,否则可能造成缓存数据已经失效,产生脏读,影响结果正确性

具体如下图所示:

7. 分布式文件系统和分布式数据库系统

 随着业务量的增长,网站最常用的数据库拆分是按业务分库,将不同业务的数据库部署在不同的服务器上;

一般分布式数据库是网站数据库拆分的最后手段,只有在单表规模非常庞大的时候才使用;

具体如下图所示:

8. 使用NoSQL和搜索引擎

全文检索对于大型网站来说已成为不可或缺的一部分,例如LuceneSolr等;

对非格式化的数据使用NoSQL存储更为方便,NoSQL也更适合大数据计算,较为流行的NoSQL数据库有HBase、MongoDB、CouchDB、Redis、Cassandra等;

不同NoSQL数据库使用的存储方式不同,例如Redis,Memcache等采用的是Key/Value键值对存储,MongoDB,CouchDB等采用的是按文档存储,一条记录中所有数据都存储在文档中,HBase,Cassandra等采用的是列存储;

具体如下图所示:

9. 按业务拆分

网站在发展壮大之后,往往包含了多种复杂的业务场景,使用分而治之的手段将整个网站业务分成不同的产品线,将网站拆分成多个不同的应用,每个应用独立部署维护,应用之间可以通过超链接、消息队列等关联起来,具体如下图所示:

10. 分布式服务

在上面业务拆分的基础上,将一些公共的业务抽取出来,独立部署,如给用户管理、商品管理等,这些可复用的业务连接数据库,提供公共服务,而应用系统只需管理用户界面;

具体如下图所示:

1
2
3
4
5
6
分布式主要还是为了解决高并发问题,但也引入了一些其他问题:
1. 服务调用必须通过网络,可能会对性能造成较大影响;
2. 服务器越多,故障概率越大,一台服务器宕机可能会导致连锁反应(滚雪球效应),导致很多应用不可访问,网站可用性降低,设计时应尽量避免;
3. 数据在分布式环境保持数据一致性也比较困难,分布式事务难以保证,这对网站业务正确性和业务流程可能造成影响;
4. 导致网站依赖错综复杂,开发管理维护困难;

简单总结

1
2
3
4
5
驱动网站技术发展的主要力量永远是网站业务的发展;
网站都是逐渐演化而来的,根据需要灵活应对才是最重要的;
技术是为了业务而服务的,永远不要为了技术而技术;

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

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

相关文章

基于renren.com和google map的sns网站

基于renren.com和google map的sns网站 网站介绍及寻找合作伙伴 站点名称 网站的功能 意见及建议 支持与合作 站点名称 本网 站基于renren.com和google map的开放的api,充分利用了renren的sns属性和google map的直观视图,故网站暂定名RenrenMap 。 回…

搭建网站之路

我是在申请一个阿里云服务器之后才想起搭建网站的,哈哈,我的驱动力就是好玩。下面说下我搭建人生中中第一个网站(博客)的心里路程 1、首先申请一个服务器 我申请的是阿里云服务器,centos6.6的操作系统,1G内存,20G的磁…

打开网站工程时遇到配置bower显示404的问题。

在装了mongodb和nodejs准备打开一个网站项目时(网页包含angular),却发现,打开后网页的内容全是混乱的。然后查看nodejs的运行状况,发现有些包含bower的项目(特别是有些angular的项目)显示的是40…

Python学习记录-网站爬点句子

背景 想用python上网爬点句子,于是花一下午的时间来做这件事,这只是一个简单的例子,不过对于入坑来说nn conda使用 顺便添加一下conda的使用,之前一直是用python自带的virtualenv工具,安装了anoconda后还是觉得cond…

不同网站和页面爬虫知识点

1、json.loads()解码python json格式 json.load()加载python json格式文件 因此使用requests.get(url)和urllib.urlopen(url)获取内容的方式如下: 2、关于爬取Ajax动态加载(翻页时url不变)的网页网站 (1)中国票房网&a…

Github 无法登陆,网站超时问题

网络诊断为:电脑配置没有问题,但是该网站服务器资源无法访问。 简单点直接上解决办法:在hosts文件中添加网站IP。 在文件目录下:C:\Windows\System32\drivers\etc 中,将hosts文件复制到桌面,右键 【属性】…

基于httpd搭建web静态网站

.搭建静态网站 要求: >基于ip实现web网站访问 建立一个xxx.xxx.xxx.100的网站,文件放在/www/100,内容显示this is xxx.xxx.xxx.100. 建立一个xxx.xxx.xxx.200的网站,文件放在/www/200,内容显示this is xxx.xxx.xxx.200. 安装httpd&#x…

android源码常用网站

泡在网上的日子http://www.jcodecraeer.com/plus/list.php?tid31 2.安卓源码服务专家http://www.javaapk.com 3.伯乐在线http://hao.jobbole.com/category/android/ A5源码:http://down.admin5.com/ 安卓巴士:http://www.apkbus.com/ 当然还有开源中国&…

大规模网站架构缓存

一、前端Cache机制 1. 域名转为IP地址(域名服务器DNS缓存) 我们知道域名其实只是一个别名,真实的服务器请求地址,实际上是一个IP地址。获得IP地址的方式,就是查询DNS映射表。虽然这是一个非常简单的查询, 但…

查看IIS日志以及网站对应的IIS日志文件夹

1.为什么要查看IIS日志? 有时,我们在部署了一个程序之后,虽然程序里面记载了log日志,但有些类似503这样的错误在程序里面是无法记载的,所以我们需要通过查看IIS日志来查找问题。 2.IIS日志目录 点进去之后,…

极其简洁的购物商城静态网站

极其简洁的购物商城静态网站 首先介绍一下使用了那些东西做的。 整体使用html5cssjs(少量)jquery(一点点 ) 实现内容有 js轮播图,canvas实现飘雪,背景音乐。这些比较垃圾的功能大部分都借鉴了其他人的实现…

Python 网站开发(一)环境搭建

前些天看到小阳买回来的一本 Python 基础教程,于是就产生了使用 Python 来开发一个小博客的想法。这个 Python 网站开发系列文章将不会过多说 Python 基本语法,主要是面向实践的。使用 Python 2.7、框架为 Django 1.3、数据库为 Sql Server(没…

毕业设计-微信公众平台开发与设计(三:网站)

网站为 java web类型,在My Eclipse中完成。 微信类代码可在我网盘下载:http://yun.baidu.com/share/link?shareid4115214330&uk1662955403 网站的类包结构如图: 其中核心——微信公众账号“反应”直接代码在CoreServlet类中,…

Python爬虫借助Genecards网站将基因全名转换为Gene Symbol——历时8小时!

历时8小时的爬虫:基因全名与基因名缩写的转换——Genecards 在爬取了TCMSPW的中药材的靶向基因后,得到的靶向基因名称是全名,但是后续分析需要的是基因名称缩写(即Gene Symbol)。最初尝试用R语言的org.Hs.eg.db包来进…

谭云财SEO:优化网站权重,往往可以从这三个方面入手

通过在不断的工作生涯路上,接触到了各行各业的网站,做过cms系统,也和开发人员从0起步做一个网站的优化,有的人或许以为ip起来了,权重就增加了,然并卵,百度权重从0到1的提升需要很多因素在其中&a…

谭云财:网站更换ip之后对百度排名存在多大的影响呢?

之前听到很多人会纠结于网站是否可以更换ip地址,换句话说就是域名和ip做绑定解析的关系,这也难怪了,更换解析中途基本没有遇到网站不能访问的情况,之前分享过一篇网站更换空间影响SEO优化吗,其他的因素暂且不说&#x…

谭云财SEO顾问:什么样的文章倾向于被收录,原来是这样子

由于百度搜索引擎经常性的变更百度算法,所以这种机制会促使爬虫根据算法来调整和收录规则,谭云财SEO顾问分析,也许有人会说自己的网站比较小巧不会被碰钉子,那你就想错了,凡是在搜索引擎中检索的主页站点,都…

谭云财:SEO优化当中的网站不停复制采集内容,有哪些影响呢?

网站SEO优化过程中最大的难题并不是一个网站的SEO结构做的有多好,谭云财SEO顾问(www.tanyuncai.com)分析了网站优化当中存在的几个问题,这些都是有固定化的东西可寻的,而且程序员也很容易的去实现,SEO优化过…

谭云财成都SEO:在网站价值中,点击率和关键词排名存在什么关系?

随着SEO工作的不断深入学习和挖掘,我们会发现有更多的资源和渠道进行展出,这个时候我们往往会更加考虑到互联网的后期发展优势和资源投入力度,无论是继续投放资源,还是放弃优化,就会让人感觉到些许的消沉。针对SEO优化…

谭云财分享做好seo工作该有的一套流程计划,赶快收藏吧!

有的时候我们或许会觉得自己做的对或错,谭云财SEO顾问教你一项技术分析,更多时候需要找到一种计划流程,假设没有相应的seo计划或者说流程,那我们做seo优化就会变得没有任何意义,也许这个时候你会想我们做seo计划表能够…