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

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

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

初始网站架构结构

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

应用和数据服务分离

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

使用缓存

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

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

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

数据库读写分离

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

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

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

分布式文件、数据库系统

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

NoSQL和搜索引擎

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

业务拆分

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

分布式服务

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

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

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

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

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

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

 

  参考资料:《大型网站技术架构核心原理与案例分析》

转载于:https://www.cnblogs.com/JustOnly/p/4899615.html

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

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

相关文章

dts数据库迁移工具_传统数据库迁移上云利器-ADAM

自1970年关系型数据库被提出以来,至今已有50年历史。但在关系型数据库领域正在发生着巨大的变化,首先是互联网的发展,使得开源数据库越来越受欢迎,可扩展性成为支撑业务发展的重要特性,比如WebScaleSQL就是几个互联网公…

python解zuobiaoxi方程_吴恩达《Machine Learning》精炼笔记 2:梯度下降与正规方程

作者:Peter红色石头的个人网站:红色石头的个人博客-机器学习、深度学习之路​www.redstonewill.com今天带来第二周课程的笔记:梯度下降与正规方程。主要内容:多维特征多变量梯度下降梯度下降法实践正规方程多维特征Multiple Featu…

计算机房按几类防雷,计算机机房防雷方案

常见问题计算机机房防雷方案2461一键分享这些微电子网络设备的普遍应用,使得防雷的问题显得越来越重要。由于微电子设备具有高密度、高速度、低电压、和低功耗等特性,这就使其对各种诸如雷电过电压、电力系统操作过电压、静电放电、电磁辐射等电磁干扰非…

webpack最新版本_webpack小结-开发环境构建优化

刚刚对我们前端项目做了一顿分析优化操作,因为接手时每次构建要花两分钟左右的时间,实在忍受不了,只能动手了。通过这次优化,重新温习了下 webpack 的一些知识。接下来会关于 webpack 展开写几篇心得:构建分析开发环境…

Xamarin Mono for VS开发窗体标题(Title)乱码解决方案

利用mono for VS开发一个手机程序,结果只有窗体的标题 title部分是乱码,其他所有地方中文都显示正常,很郁闷。百度很久无果。最后发现只要在 VS菜单中 的 文件->高级保存选型中奖编码设置为 Unicode或者UTF8就行了。更改所有有乱码的文件&…

nlp 命名实体识别 算法_中文命名实体识别算法 Lattice LSTM

中文命名实体识别 (NER) 算法按照输入的类型,可以大致分为 Character-based (字符) 和 Word-based (单词) 两种。这两种方法都存在一些缺陷,Character-based 不能利用词汇和词汇序列信息;Word-based 需要分词,分词的错误会对 NER …

margin background_margin:auto与布局展示

margin:auto 的作用机制。使用margin:auto居中,是css的基本操作。但会发现时不时的失灵。 这篇文章是对该属性的深度分析。首先,以下事实(自动填充)必须明确(1)有时候元素就算没有设置width 或height&#…

智能客户端ios_为什么现在的客户端开发越来越不吃香了

这是Kevin的第 672 篇原创,持续日更,做产品经理的创业斜杠青年。年底上线APP,是我们今年PMTalk在产品研发上的一个最终目标。启动这个项目前,团队、和身边创业朋友都不看好这件事,因为客户端开发太重了,小公…

用计算机录制声音让音质更好,电脑如何录屏?电脑录屏如何把声音也录制下来...

电脑如何录屏?电脑录屏如何把声音也录制下来2019年09月24日 14:25作者:黄页编辑:黄页分享电脑如何录屏?当你看到精彩的视频内容时,往往经常会出现,无法下载视频或者是下载很麻烦的问题。那么这个时候,可以…

第九周 10.25-10.31

10.25 HDU 4117 GRE Words 卡了很久的一个题目。比较综合。 看了很久题解还是各种写挫。 毕竟除了模拟题都没敲过那么长的。 题意:按顺序给N个单词,每个单词有权值,删去其中任意单词,使得前面的单词为后面单词的子串,求…

芯片设计中的latch_Latch-up (闩锁效应)

------------------------------------WeChat subscription account:Analog CMOS------------------------------------每周分享Analog IC学习资料/笔记。关注获取。。。。。00 - 本文内容CMOS 中的闩锁效应(latch-up)的来源具体的避免 latch…

pythonopencv算法_python opencv之SURF算法示例

本文介绍了python opencv之SURF算法示例,分享给大家,具体如下: 目标: SURF算法基础 opencv总SURF算法的使用 原理: 上节课使用了SIFT算法,当时这种算法效率不高,需要更快速的算法。在06年有人提…

c++判断ftp服务器文件存在性判断_BitTorrent协议与传统文件分发协议对比

一、文件传输前端时间做了和文件传输相关的工作,今天抽空做个总结。总结一下平常使用的几种协议以及BtTorrent协议。其实BitTorrent协议也不是什么新协议,它诞生也十几年了。咱也蹭个热点,最近几年大火的区块链技术也和BitTorrent协议有着异曲…

java基础全套

这是我自己早前听课时整理的java基础全套知识 使用于初学者 也可以适用于中级的程序员 我做成了chm文档的类型 你们可以下载 笔记是比较系统全面,可以抵得上市场上90%的学习资料。讨厌那些随便乱写的资料还有拿出来卖钱的人!在这里我免费的分享出来供…

顺丰快递单号的规律_顺丰速运顺丰快递单号查询大全

如何一键查询快递单号顺丰快递单号查询跟踪,鸡蛋是我们日常生活当中最为常见的一种食材啦,相信在每一个家庭当中每天都会吃到鸡蛋,因为鸡蛋的营养价值非常高,它含有丰富的蛋白质,可以为我们身体提供能量,别…

用计算机求正有理数算术平方根的步骤,用计算器求算数平方根、用有理数估计算数平方根的大小.ppt...

用计算器求算数平方根、用有理数估计算数平方根的大小.ppt 上传人:jw****88文档编号:85573818上传时间:2020-06-11格式:PPT页数:20大小:2.14MB下载提示(请认真阅读)1.请仔细阅读文档,确保文档完…

【整理】强化学习与MDP

【入门,来自wiki】 强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益。其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期&#x…

nginx 根证书 服务器证书,Nginx双向证书校验(服务器验证客户端证书)

1、创建Root CA私钥openssl genrsa -out root-ca.key 10242、创建Root CA证书请求openssl req -new -out root-ca.csr -key root-ca.key3、签发Root CA根证书openssl x509 -req -in root-ca.csr -out root-ca.crt -signkey root-ca.key -CAcreateserial -days 36505、生成服务器…

移动app测试的多样性_做移动APP功能测试,这些因素你得都考虑到~

对于刚入行的测试新手来说,无论是做手动测试还是自动化测试,前期都避免不了学习前人经验,从而尽可能减少自己的漏测问题。作为一个过来人,今天,我就将自己的移动APP功能测试分享给大家,希望对新手有一定帮助…

pytorch dropout_PyTorch初探MNIST数据集

前言:本文主要描述了如何使用现在热度和关注度比较高的Pytorch(深度学习框架)构建一个简单的卷积神经网络,并对MNIST数据集进行了训练和测试。MNIST数据集是一个28*28的手写数字图片集合,使用测试集来验证训练出的模型对手写数字的识别准确率…