• 《大型网站技术架构_核心原理与案例分析》阅读笔记一


      网站架构概述:

      网站架构是基于网站基础上的,随着网站规模的不断扩大,网站架构也随之调整。大型网站都是从小型网站发展而来,网站架构也是一样,是从小型网站架构逐步演化而来。下面简单概述一下网站架构的发展史:

      1、最开始的网站架构是应用程序、数据库、文件等所有的资源都在一台服务器上。

      2、随着网站规模的不断发展,一台服务器显然不能满足需求,这时候的网站架构就将应用和数据分离,由最初的一台服务器变成了三台服务器:应用服务器、文件服务器和数据库服务器。

      3、但是随着网络的普及,用户逐渐增多,网站数据库的压力越来越大,这时人们开始使用缓存改善网站性能,那么问题来了,该缓存哪些数据呢?在这里网站访问特点和现实世界的财富分配是类似的,都遵循二八定律:80%的业务访问集中在20%的数据上。而我们所要做的就是把这20%的数据缓存在内存中,以减少数据库的访问压力。一般我们可以把数据缓存到应用服务器的本地缓存,这样做虽然访问速度快一些,但是很吃应用服务器的内存,适合数据量相对较少的网站使用;还有一种则是把数据缓存在专门的分布式缓存服务器上的远程缓存,这样一来就解决了缓存的内存问题,但是速度也会下降。总体来说,要么是空间换时间,要么是时间换空间。

      4、使用缓存后,虽然数据库访问压力得到一定的缓解,但是在网络访问高峰期,应用服务器成为了网站新的瓶颈(由于当时应用服务器只有一台,其处理请求的能力有限),针对这一情况,不要妄想换一台更强大的服务器,这样解决不了根本问题,只有使用应用服务器集群才能改善网站的并发处理能力。这时我们需要通过一台负载均衡调度服务器,将来自用户浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,使应用服务器的负载压力不再成为整个网站的瓶颈。

      5、网站在使用缓存后,使得大多数数据的访问不用通过数据库完成,但是仍有一部分数据需要通过数据库完成,在网站的用户到达一定数量后,数据库服务器会成为网站的新瓶颈。数据库的访问无非就是对数据库的读和写,网站可以将数据库的读写分离来改善数据库的负载压力,由于目前大部分数据库都提供主从热备功能,所谓主从热备功能就是通过配置两台数据库主从关系,可以将一台数据库服务器的数据同步更新的另一台服务器上。网站利用数据库的这一功能,就可以实现数据库的读写分离。

        其实到目前为止,网站架构已经具备了大体上的框架,接下来也就是对架构的进一步优化:

      1、使用反向代理和CDN加速网站响应,反向代理和CDN的基本原理都是缓存,CDN可以使用户可以从距离自己最近的网络机房获取数据;而反向代理的原理是当用户请求到达中心机房后,首先访问反向代理服务器,如果有用户请求的资源,则将其直接返回给用户。一般来说,网站会把反向代理和CDN相结合来使用。

      2、使用分布式文件系统和分布式数据库系统,阅读完上面的内容后这个就比较容易理解了,应用服务器可以采用分布式、缓存可以采用分布式,那么文件服务器和数据库服务器当然也可以采用分布式。

      3、使用NoSQL和搜索引擎对数据进行存储和检索,在应用服务器上通过一个统一数据访问模块访问各种数据。

      4、业务拆分,简单来说就是根据业务将网站拆分成不同的应用,通过访问同一个数据存储系统来进行数据的存储。

      5、分布式服务,对业务拆分的进一步优化,由于业务越分越小,个数越来越多,而且每个业务都需要和数据库系统进行连接,这样的结果显然是我们不愿看到的。针对有些业务都有的业务操作,比如与数据库有交互的业务操作,我们可以将其独立出来,连接数据库,而应用系统则只需要管理用户界面就可以了。

      纵观各个大型网站的发展历程,无一不是从一个默默无闻小网站做起,逐步完善自我,最终达到现在的成就。所以说,不要执着于他们的网站架构,不要为了追求架构而架构,适合自己,能为用户提供价值就是成功。在进行网站架构时,不要盲目追随大公司的解决方案,要找到属于自己的路;不要一味地追求新技术,脱离业务发展的实际,这样做毫无意义;不要妄想用技术解决所有问题,技术是用来解决业务问题的,理所当然业务的问题也可通过业务手段去解决。

  • 相关阅读:
    获取某年某月有几天
    ps怎么修改gif动图播放速度
    Swing滚动条重写
    Swing自定义JScrollPane的滚动条设置,重写BasicScrollBarUI方法
    你真的了解UIButton、UILabel 吗?
    问题:-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "BlueView" nib but the view outlet was not set.
    李洪强漫谈iOS开发[C语言-043]-练习
    iOS开发基础知识--碎片46
    iOS开发基础知识--碎片45
    iOS开发基础知识--碎片44
  • 原文地址:https://www.cnblogs.com/qianmo123/p/12296461.html
Copyright © 2020-2023  润新知