• 后台服务架构的演变


    说到高并发,往往离不开分布式系统。人们往往将二者联系在一起的,因为高并发是分布式系统架构设计必须要考虑的因素之一。目前,很多社交网路和游戏后台都是分布式系统。下面具体看看分布式系统是如何演变而来的。

    初始阶段的网络架构

    在互联网的初始阶段,网站基本都是小型的网站,用户量小,通常将应用程序,文件,数据库存放在同一个服务器上,因为这样已经能满足当时的需求。
    

    应用服务和数据分离

    随着用户量的不断增加,服务器的压力越来越大,用户的访问速度越来越慢,而且数量存储空间也不足,这时候原来的单服务器架构已经不满足原来的需求了。**这时候需要将Web应用和数据分离,分别存放到不同的服务器。这个时候服务器就分为:应用服务器,数据库服务器,文件服务器。这样不仅提高了单台机器的服务器的负载能力,也提高了容灾能力。
    

    使用缓存改善网站性能

    随着用户的不断增加,数据库的压力有再次的增加,不再能满足市场的需求。其实大部分的网站80%的业务访问都是在访问20%的数据。所以就出现这样的系统,直接先将这常见的数据缓存到内存中,这样就不需要每次都去访问数据库提取数据,这样就大大减少了数据库的压力,而且速度更加快。
    缓存又分为本地缓存和分布式缓存服务器,前者速度更快,但是容量有限,后者理论上容量没有限制,
    

    使用集群改善并发处理能力

    使用缓存后,数据库服务器的压力就大大下降了,但是单个应用服务器的处理的链接数并没有提高,所以当大量用户进行访问的时候,应用服务器就成为整个网站的瓶颈。因此使用负载均衡处理器是必然的结果。使用负载均衡处理器后,当用户访问,它可以把任务分配给任何一个集群的应用服务器。使用集群还有一个好处,就是应用程序的更新可以做到用户无感知。
    大部分负载均衡都是通过软件来实现的,常用的就是Nginx
    

    数据库读写分离

    当用户的规模达到一定的规模后,数据库服务器压力也会大大增加,虽然前面已经提到利用缓存可以让数据库的查询压力减小,但是还是有很多的操作需要数据库来完成,所以单个服务器处理能力也会达到一个瓶颈。因此现在很多的数据库都提供了主从热备功能。因此通过配置两台数据库服务器,设置好主从关系,可以实现将一台服务器上的数据更新到另外一台服务器。利用这一功能可以实现数据库的读写分离。
    

    当应用程序需要写数据的时候访问主数据库,然后主数据库通过主从复制机制,将数据更新到从数据库,然后当应用程序需要读数据时候,访问的是从数据库。为了方便应用程序访问读写分离后的数据库,通常在应用程序服务器使用专用的数据访问模块,使数据库读写分离对应用程序透明。
    

    反向代理CDN加速

    随着网站名气越多越大,用户规模越来越大,网站业务也随着继续壮大。为了满足不同地区的用户快速访问网站的需求,需要提高网站的访问速度。主要手段有使用 CDN 和反向代理。
    
    同时 Ajax 技术的出现,Web 应用会将数据(内容和图片)和页面框架(指 HTML 文件以及其中的标签)。页面框架内容存放到 CDN 服务器上,数据存放到数据库服务器上。当用户使用浏览器访问网站,会显示页面框架,然后页面框架发起 HTTP 请求加载数据。
    
    而反向代理是部署在网站的中心机房,当用户请求到达中心机房后,首先访问的反向代理,如果反向代理缓存着用户请求的资源,则直接返回给用户。
    


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

    使用分布式文件系统和分布式数据库系统

    任何强大的单一服务器都满足不了大型网站持续增长的业务需求。
    
    分布式数据库时网站数据库拆分的最后手段,只用在单表数据规模非常大的时候才使用。不到不得已时,网站更常用的数据库拆分手段是业务拆分,将不同业务的数据部署在不同的物理服务器上。
    

    使用NoSQL和搜索引擎

    随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂。网站需要采用一些非关系数据库技术如 NoSQL 数据库和非数据库查询技术如搜索引擎。而常见的 NoSQL 数据库有 Mongodb、HBase等。
    

    业务拆分

    大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将真个网站业务拆分成不同的产品线。如大型购物交易网站都会将首页、商铺、订单、买家、卖家等拆分成不同的产品线,分归不同的业务团队负责。
    
    

    分布式系统

    随着业务拆分越来越小,存储系统越来越庞大,应用系统的整体复杂度呈指数级增加,部署维护越来越困难。
    
    既然每一个应用系统都需要执行许多相同的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。由这些可复用的业务连接数据库,提供共用业务服务,而应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成具体业务操作。
    

  • 相关阅读:
    ubuntu上部署ceph集群
    Ceph介绍及原理架构分享
    搭建家庭 NAS 服务器
    Android让屏幕保持常亮,不熄屏的三种方法
    IP流 TS流 PS流之间的关系及区别
    【WPF】Command 自定义命令
    WPF的路由事件、冒泡事件、隧道事件(预览事件)
    WPF之路路由事件
    c# string按指时间格式转化成datetim
    WPF样式(Style)入门
  • 原文地址:https://www.cnblogs.com/linshuhui/p/9796652.html
Copyright © 2020-2023  润新知