前面已经描述了大型网站系统的特点,而对一个大型网站系统,其架构也是重要的一个环节。

  大型网站技术主要的挑战来自于庞大的用户、高并发以及海量的数据这三个方面。大型网站的形成就像一颗大树的成长,历尽长时间的磨练,最后枝繁叶茂,服务他人。

初始网站架构结构

起初的网站鉴于用户量、访问量较少,只需要一台服务器足以,应用程序、数据库、文件等其所有资源放在一太服务器上就已经足够满足此时的需求,这时候网站的架构就几个简单组成部分如下图

应用和数据服务分离

  随着网站业务需求的发展,越来越多的用户进行访问,此时一台服务器渐渐不能满足需求,数据的存储空间出现屏障。于是应用程序、数据库、文件三者面临分离,各自为首分配一台服务器,这三台服务器对硬件的要求各取所需,应用服务器处理大量的业务逻辑,需求更快更大的CPU;数据库服务器对数据库的处理需要快速搜索以及缓存,需求对内存更大,对硬盘读写能力更迅速;文件服务器需求放入大量的用户资源,对硬盘空间要求更大。此时的网站的架构组成部分展示如下图

使用缓存

  网站的架构进一步改进后可以满足了业务的发展,但是随着网站知名度提升,用户量的进一步增加,访问数据相比之前愈加频繁,数据库压力急剧上升导致网站访问出现延迟,用户的性能体验出现下滑,面临此时网站出现的性能问题,网站架构设计需要再一次的进化,鉴于网站访问也遵循二八定律,例如:新浪微博,只有经常登录的用户才会发微博,看微博,而这些用户对于总用户数只是冰山一角。既然出现这一现象,那么缓存这部分的数据是不是可以解决这现象呢?网站缓存可以分为本地缓存和分布式缓存这两种,二者的区别是本地缓存速度快但是受服务器内存限制缓存的数量有限,而分布式缓存采用的是集群处理,理论上是可以避免内存瓶颈。此时网站的架构组成部分如下图

应用服务器集群改善网站并发能力

  使用缓存后,数据库的压力得到缓解,但是在面临网站高峰期时,应用服务器处理单一的请求连接出现瓶颈,万事都有解决的办法,只是看你愿不愿去想,愿不愿去尝试做,采用集群,集群多台应用程序服务器分布原有的应用程序服务器,从而实现了系统的可伸缩性,网站架构此时演化成这样如下图

数据库读写分离

  使用缓存,虽然使用户请求数据操作大部分不直接通过数据库,但是仍有一部分数据(缓存过期、缓存数据没有命中)读写操作需要访问数据库,面对这部分数据,可能出现数据访问负载压力,把数据库读写操作分离性能效果理当会如何呢?效果无言而喻。

CDN和反向代理加速网站响应

  网络覆盖范围地区广泛,造就了网络环境复杂,从而用户访问网站性能体现也各有差异,鉴于这问题,网站架构使用CDN和反向代理以技术加速网站响应,二者原理都是缓存,CDN可以从距离用户最近网络提供点获取数据;反向代理则是首先从反向代理服务器中获取数据。

分布式文件、数据库系统

  任何单一的服务器最后都是满足不了业务需求发展。虽然前面数据库读写分离能够改善数据库负载压力但是随着业务不断壮大最终还是难以维持此时使用分布式数据库,该技术不到不得以建议不使用,而对于这个技术解决方案更常用的使用业务拆分,将不同的业务数据库部署在不同的物理服务器上。

NoSQL和搜索引擎

  该技术对于可伸缩的分布式提供更好的支持,减轻应用程序管理诸多数据源的麻烦。

业务拆分

  大型网站日益发展壮大,业务需求越来越复杂,使用分而治之手段分离整个网站的业务变成不同的产品线。具体到技术上,将一个网站拆分成许多不同的应用,每个应用独立部署,而应用与应用之间通过超链接关联,不过最多的还是通过访问同一个数据存储来构成一个关联的完整系统。

分布式服务

  一个应用系统需要执行相同业务操作,那么可以将共同的业务提取出来,独立部署,由这些可复用的业务连接数据库,提供共用业务服务,而应用系统只需要管理用户界面,通过分布式调用共用业务服务完成具体业务操作。

  大型网站结构演化到这里,基本上大多数的技术问题都得以解决了,但是事物发展到一定的阶段就会摆脱初衷向更强的方向发展。目前许多的大型网站都建立自己的云平台,将计算作为一种资源进行出售。

大型网站架构演化历经了长时间磨练才发展如此,在过程中也是出现一些易步入的误区

  一味的追随大公司解决方案,大公司的经验和成功固然重要,但是不能盲目的追从,要与实际的具体业务需求有所改动;

   为了技术而技术,网站技术是为业务而存在的,但是一味的追求新技术,可能会导致结构技术之路越走越难;

  企图用技术解决所有问题,技术虽是解决业务问题的,但也不是万能钥匙,有些业务的问题也是可以通过业务手段解决。

转自:http://www.cnblogs.com/JustOnly/p/4899615.html

转载于:https://www.cnblogs.com/cheng5x/p/4899816.html

(转)大型网站架构演化发展历程相关推荐

  1. 大型网站架构演化发展历程

    1初始阶段的网站架构   2应用服务和数据服务分离   3使用缓存改善网站性能   4使用应用服务器集群改善网站的并发处理能力   5数据库读写分离   6使用反向代理和CDN加速网站响应   7使用 ...

  2. 大型网站架构演化历程

    http://www.hollischuang.com/archives/728 本文内容大部分来自<大型网站技术架构>,这本书很值得一看,强烈推荐. 大型网站系统的特点 高并发,大流量 ...

  3. 1. 大型网站架构演化

    如果把上世纪90年代初CERN正式发布Web标准和第一个Web服务的岀现当做互 联网站的开始,那么互联网站的发展只经历了短短20多年的时间.在20多年的时间里, 互联网的世界发生了巨大变化,今天,全球 ...

  4. 《大型网站技术架构》读书笔记一:大型网站架构演化

    来源:http://www.cnblogs.com/edisonchou/p/3773891.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...

  5. 读《大型网站技术架构:核心原理与案例分析》第一章:大型网站架构演化

    写在前面 从开始写代码到现在,已经做了好几个项目了,BS和CS的都有,一直都以一个码农自居.但,作为一个进步的程序员,都有一个成为架构师的理想.于是,在平时的工作中,也积极的去看各种书籍,看园子里面的 ...

  6. 大型网站架构的发展演变过程

    大型网站架构的发展演变过程 原文地址 什么是大型网站 如何定义一个网站是不是大型网站,一般我们会从两个纬度去考衡,访问量以及数据量,二者缺一不可. 我们以javaweb为例,来搭建一个简单的电商系统, ...

  7. 2.大型网站架构演化的价值观

    这个世界没有哪个网站从诞生起就是大型网站:也没有哪个网站第一次发布就拥有 庞大的用户,高并发的访问,海量的数据:大型网站都是从小型网站发展而来.网站的 价值在于它能为用户提供什么价值,在于网站能做什么 ...

  8. 大型网站架构演化(一)——初始阶段的网站架构

    大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得很棘手.大型网站架构主要是解决这类问题. 大型网站都是从小型 ...

  9. 大型网站技术架构(一)大型网站架构演化

    2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书,就应该有所收获,有所总结,最近把<大型网站技术架构>一书给看完了,给人的印象实在深刻,再加上之前也 ...

最新文章

  1. hp服务器维护开关,HP服务器开机无显维修案例
  2. 分享一次 Java 内存泄漏的排查
  3. IDC公司对未来5年的10项IT预测
  4. c语言手机通讯录退出程序,通讯录小程序(C/C++)C语言练习小程序
  5. python opencv实时显示测量数据_python OpenCV 宽度测量
  6. ROS | ROS2安装(Ubuntu 16.04版本:通过Debian包安装)
  7. asp.net(c#)两时间段每天是星期几,周几(时间段日历显示)的问题解
  8. 【Linux】Linux基本命令(一)
  9. Android中如何下载文件并显示下载进度
  10. 1.7 编程基础之字符串 27 单词翻转 4分 python
  11. 30 MM配置-采购-采购申请-采购申请审批策略-编辑类
  12. vue.js点击更多加载更多数据,双数组合并
  13. 在JS/jQuery中,怎么触发input的keypress/keydown/keyup事件?
  14. oracle 表名拼接_Oracle之3种表连接方式(排序合并连接、嵌套循环、哈希连接)...
  15. 使用Cocos creator开发一个文字游戏
  16. UniWebView笔记
  17. 开发板 集成下载器 jtag_迅为i.MX6ULL开发板原理图分析介绍
  18. js实现微信表情回显
  19. python如何识别特殊字符_Python怎么判断过滤特殊字符
  20. 华米科技Amazfit GTR2不负众望,获得创新智能手表奖

热门文章

  1. Android开发-屏幕常亮的方法
  2. 加密生成指定长度_那些奇奇怪怪的需求(一):PinyinHelper的使用、生成指定长度的随机码...
  3. 关于linux内核描述正确的是 牛客网,在Linux系统,关于硬链接的描述正确的是()...
  4. mysql2005错误_sql-server-2005 – SQL Server 2005错误701 – 内存不足
  5. tp5 excel 导入 mysql_TP5框架下MySQL通过LOAD DATA INFILE批量导入数据详细操作
  6. matplotlib 标签_Python可视化matplotlibamp;seborn14热图heatmap
  7. python怎么将输入的数字变成列表_Python键盘输入转换为列表的实例
  8. mysql自动编号_MySQL自动编号与主键
  9. vue子组件调用父组件内的方法
  10. 字符串扩展_JAVA