处于这个互联网开发时代,作为一名软件工程师,我们经常会听到大型网站架构这个字眼,那到底什么是大型网站呢,这样的网站又是一种什么样的架构设计呢?今天我们就开始谈谈大型网站架构设计系列,首先我们今天讲讲大型网站架构设计是如何演变的,跟着我一起出发吧。

大型网站系统的特点

  • 高并发,大流量:需要面对高并发用户,大流量访问;

  • 高可用:系统24小时不间断的提供服务;

  • 海量数据:需要存储、管理海量的数据,需要使用大量的服务器;

  • 用户分布广泛,网络情况复杂:很多大型网站都是为全球用户服务,用户的分布范围广泛,各地网络情况差异大;

  • 安全环境恶劣:互联网的开放性,导致网站更容易受黑客的攻击;

  • 需求快速变更,发布频繁:相比传统软件,互联网产品为了快速适应市场,满足用户的需求,产品发布的频率是极高的;

  • 渐进式发展:与传统行业软件不同,互联网产品不是事先就规划好了整个产品的全部功能,几乎每个大型互联网网站都是从一个小网站,慢慢根据市场和用户的改变而慢慢渐进发展成大型网站的;

大型网站架构发展历程

大型网站的技术挑战主要来自三个方面:庞大的用户体系高并发的访问以及海量数据的存储管理。基于这三点,我们就来看看,整个架构设计方面是如何演变的。

初始阶段:这个阶段一般网站用户量也不多,访问量都不大,数据量也不多,因此一般一台服务器就能搞定,应用程序,数据库和文件都可以部署在一台服务器上,架构图如下:

应用服务和数据服务分离阶段:随着用户数量的增加,越来越多的用户访问导致性能越来越差,数据也越来越多导致存储空间不足,此时我们就需要考虑将应用和数据分离,此时网站需要3台服务器:应用服务器+数据库服务器+文件服务器,架构设计如下图:

使用缓存改善性能阶段:随着数据库压力越来越大,我们需要考虑从数据上优化性能,大家都知道80%的业务访问集中在20%的数据上,既然大部分业务集中访问这少部分数据,那为何我们不考虑把这部分数据缓存在内存中呢,不就可以减小对数据库访问的压力了嘛;

缓存又分为2种,一种是本地缓存(本地缓存是基于内存的,因此数据量有限,但是访问速度快),另一种是远程缓存(一些中间件缓存服务器例如redis,这部分数据理论上不限容量,而且可以做成集群模式)。

应用服务器集群优化网站并发能力阶段:当用户越来越多时,对网站的访问量也越来越多,应用服务器处理请求越来越慢,此时我们可以考虑将应用服务器做成集群模式部署,再通过负载均衡调度器,将用户的请求分发给集群上不同的应用服务器。

数据库读写分离阶段:网站在使用了缓存之后,使部分数据可以不通过数据库就能完成,但是对于数据库的修改操作,还是需要访问数据库的,这个时候,数据库的负载压力过高,能为网站的性能瓶颈,此时我们就要考虑数据库的读写分离了,数据库的读写分离是建立在主从热备的基础上的,基本目前大多数主流数据库都支持主从热备,通过配置两台或者多台数据库的主从关系(1主1从,1主多从,多主多从),实现数据的读(从库)写(主库)分离,主库主动将数据同步到从库。

向代理和CDN加速网站响应阶段:为了加快网站的访问速度,我们主要考虑的手段为CDN和反向代理,CDN是部署在网络提供商的机房,用户在访问时,可以从距离自己最近的网络提供商机房获取数据;反向代理是部署在网站自己的中心机房,当用户请求到达机房时,优先访问的服务器是反向代理服务器,如果反向代理中缓存了用户请求的资源,那么就直接返回给用户,加快了响应的速度,也减轻了后端负载的压力。

分布式文件系统和分布式数据库系统阶段:当读写分离之后如果还不能满足网站的需求,那就只能考虑最后的手段了:分布式数据库,网站常用的数据库拆分手段是业务分库,将不同的业务数据库部署在不同的物理机上。

NoSQL和搜索引擎阶段:随着网站业务越来越复杂,对数据的检索和存储的需求也越来越复杂,网站需要采用一些非关系型数据库(NoSQL)和非数据库查询(搜索引擎)技术。

业务拆分阶段:分而治之思想,将整个网站业务划分为不同的产品线,根据不同的产品线划分将网站拆成不同的应用,每个应用独立部署维护如一个电商网站可以分为:首页,订单,商品,活动,优惠卷,个人中心,购物车等等多个应用,应用之间可以通过消息队列来传递数据。

分布式服务阶段:随着业务复杂度提升,我们会发现很多系统之间有着共同的业务,我们可以把这部分业务抽取出来,做成一个共通的基础服务。

网站架构设计的误区

  • 一味追求大公司的解决方案:大公司的架构和成功案例当然值得借鉴,但是不能盲从;

  • 为了技术而技术:技术是为业务而存在的,在技术选型和架构设计中一定要结合具体业务,脱离业务的架构毫无意义;

  • 企图用技术解决所有问题:技术是用来解决业务问题的,而业务本身的问题,是可以通过业务去解决,而没有必要企图用技术是解决;

总结

设计网站架构时一定要从小开始,架构随业务演变而演变,切记不要在业务还是0的时候去追求1的架构设计,那样的架构只会舍本逐末,得不偿失;

大型网站架构之架构演变相关推荐

  1. Mysql在大型网站的应用架构演变

    原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/ 本文链接地址: Mysql在大型网站的应用架构演变 本文已经被多处转载,包括CSDN推荐以及码农周刊等等, ...

  2. [转]Mysql在大型网站的应用架构演变

    原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/  本文链接地址: Mysql在大型网站的应用架构演变 写在最前: 本文主要描述在网站的不同的并发访问量级下 ...

  3. 大型网站服务器的架构

    随着用户访问量的不断增加,网站的后台也会不断变化以应对需求.本文主要从一个小型网站到大型网站的过度与变化来陈述. 1.1 网站后台架构 主要指由web server .应用服务器.数据库.存储.监控等 ...

  4. 【推荐】大型网站图片服务器架构的演进

    构建在Windows平台之上的网站,往往会被业内众多架构师认为很"保守".很大部分原因,是由于微软技术体系的封闭和部分技术人员的短视造成的.由于长期缺乏开源支持,所以只能" ...

  5. 说说大型网站可伸缩性架构的设计原理

    可伸缩性架构指的是:不改变网站的软硬件设计,只通过改变部署的服务器数量就可以扩大或缩小网站的服务处理能力. 大型网站中的 "大型",可以表现在以下几个方面: * 用户方面 - 大量 ...

  6. 图说大型网站的技术架构

    一.大型网站的软件系统的特点 高并发,大流量 高可用 海量数据 用户分布广泛,网络情况复杂 安全环境恶劣 需求快速变更,发布频繁 渐进式发展 二.大型网站的架构演化发展历程 1.初始阶段的网站架构 最 ...

  7. 三:大型网站的核心架构要素

    2019独角兽企业重金招聘Python工程师标准>>> 需要关注性能.可用性.安全性.伸缩性,可扩展性五个要素 性能: 浏览器端可以浏览器缓存,启用gzip,但是这样会增加CPU的压 ...

  8. 大型网站架构演变史(含技术栈与价值观)

    这篇文章是参考李智慧的<大型网站技术架构:核心原理与案例分析>和现蘑菇街CTO曽宪杰的<大型网站系统与Java中间件实践>写的一篇读书笔记. 前言 何谓大型网站?大型网站的特点 ...

  9. 大型网站系统架构演化之路(转)

    前言 一个成熟的大型网站(如淘宝.京东等)的系统架构并不是开始设计就具备完整的高性能.高可用.安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式.技术架构.设计思 ...

  10. 大型网站系统架构分析--转

    大型网站系统架构分析 原文地址:http://www.cnblogs.com/Mainz/archive/2009/04/28/1445424.html 千万级的注册用户,千万级的帖子,nTB级的附件 ...

最新文章

  1. html背景mov,科技常识:html5自动播放mov格式视频的实例代码
  2. Attention Mechanism
  3. for里面调用方法 vue_Vue源码阅读连载之Vue实例
  4. 最优二叉查找树(动态规划)——详解
  5. 初识c语言教程,第1课C语言教程一: 初识C程序.doc
  6. Python3.5 学习八 附加知识点 paramiko和rsa非对称秘钥的适用
  7. linux python虚拟环境 error_阿里云Linux系统配置python3-虚拟环境-mysql --踩坑实践(Ubuntu系统转centOS7)...
  8. 大数据系统如何提供抗击疫情信息
  9. 微信小程序sass不编译怎么办_不吹牛,四款免费实用的微信小程序,打开立即使用!...
  10. 人工智能十大算法及应用,十大人工智能算法公司
  11. AutoCAD(英文版)中所有英语词汇的翻译
  12. Cesium 获取经纬度的几种方法
  13. 给大家分享【CDR基础教程】
  14. 3.2Abstraction data type
  15. 关于ubantu安装cmake
  16. kindle不支持html,你的Kindle不支持夜间模式,也许是这个原因
  17. android 5.1 壁纸路径,Android5.1 壁纸来源选项中有两个“壁纸”选项
  18. 【QCM2150】WCN3680 WFA认证11ac AP 4.2.23测试FAIL
  19. 链接:https://pan.baidu.com/s/1joRvLQ7nbti0Wp4t2CkX5w 提取码:ZMTD
  20. 计算机科学与技术3d仿真设计,三维仿真

热门文章

  1. 识别图书ISBN号并输出查询结果的示例
  2. 互联网酒店预订系统的服务端架构图-4
  3. 系统分析与设计 - Chapter 1 系统分析与设计概述(思维导图)
  4. DPLL 算法(求解k-SAT问题)详解(C++实现)
  5. day 03 字符串
  6. 三分钟基础:CPU 到底是怎么认识代码的?
  7. apache dophinscheduler 3.1.0 编译
  8. 211大学计算机复试不机试,2019清华大学计算机考研912考试复试常问问题?
  9. c语言cache,高速C/C++编译工具ccache
  10. Flutter 插件库