• 经典分布式系统设计


    作者:潘罡 (Van Pan) @ Microsoft

    在正式介绍Service Fabric之前,我们认为应该首先介绍分布式系统的经典架构。

    理解了分布式系统的演进过程可以极大程度上帮助理解Service Fabric以及Azure服务中所有针对分布式系统的优秀产品。

    简单系统模型

    在IT时代初期,如果需要自行构建一个系统,需要完成以下工作。

    • 采购服务器
    • 在服务器中安装Web服务器
    • 在服务器中安装数据库
    • 向ISP申请静态IP
    • 向服务器部署静态IP
    • 向服务器中部署网站
    • 向服务器中部署数据库原始数据
    • 向域名供应商购买域名
    • 将域名和静态IP进行绑定
    • 向证书供应商购买证书
    • 向服务器中部署证书
    • 对Web服务器配置证书,监听域名等
    • 网站启动外部服务监听,比如HTTP,HTTPS

    经典分布式模型

    随着网站访问量逐渐增加,系统压力逐渐上升。

    此时根据实际情况不同,会对站点服务器做以下调整。

    • 使用性能更好的服务器,简称垂直升级。该做法已经不是主流做法,除非在无法实现下列解决方案前提下才会考虑。
    • 数据库迁移至单独服务器。
    • 数据库水平升级
      • 数据库主从分离,读写分离。使用单独服务器作为写服务器,其他服务器作为读服务器。成熟数据库都可以配置主从分离。
      • 数据库垂直拆分。将数据库数据不同的表放到不同的服务器。
      • 数据库水平拆分。将数据库表根据特征拆分至不同表。比如2016年数据和2017年数据分表存储。
    • Web服务器垂直拆分,将子系统拆分至单独服务器
    • Web服务器负载均衡,有以下几种做法
      • 动态域名解析
        • 将服务器放置在不同物理地域。比如北京上海两台服务器分别针对华南华北用户。对于同一个域名,华南华北用户解析到的服务器IP不同。
        • 同一台服务器,不同ISP线路优化。有些机房有电信联通双线。网站管理员申请电信联通不同IP,用户在电信联通环境下针对同一个域名解析到不同IP。
        • 同域名多IP负载均衡。即使是同一个ISP,同一个机房的服务器,也可以通过动态域名解析返回多个不同IP。用户的请求会在不同IP间切换,同样达到了负载均衡效果。
      • 网络负载均衡
        • 硬件负载均衡。商业负载均衡服务器,例如F5。从硬件层面将网络连接负载均衡至不同后台Web服务器。
        • 软件负载均衡。现在有大量开源反向代理服务器,例如Nginx。使用该服务可以在前端监听端口,并且将请求分发至后台的不同服务器。

    当服务器面临突发的请求压力(可能是被DDos攻击,也可能是因为业务营销活动,比如双十一),客户开始电话轰炸站点卡死不可用,如何快速解决问题?

    如果发现是数据库压力过大,应该怎么办?

    对数据库进行拆分吗?

    这几乎是不可能的,因为数据库的任何改动都会反向影响代码修改。而且拆分数据库需要大量的时间。

    比较可行的解决方案,有以下几种。

    • 部署新的读数据库服务器,减少当前数据库服务器承担的并发压力
    • 关闭一部分线上功能,减少数据库整体请求

    当然最完美的解决方案,就是数据库设计本身就是针对分布式的。

    如果数据库也可以动态扩容,就不会遇到数据库性能瓶颈。

    如果发现是Web服务器压力过大,应该怎么办?

    最行之有效的方法就是通过网络负载均衡添加服务器。

    但这又引入了另一个问题。

    • 通常情况下,Web服务器的性能瓶颈通常都是由某个部件导致的,仅仅针对这个组件,就需要部署一整套Web服务,看起来非常不合理。
    • 因为现在服务器压力很大,所以完全不知道需要部署多少台服务器才够支撑。
    • 每台服务器都需要做相同的部署操作,简陋一点是每台都需要人工操作,高级一些是部署脚本,但是因为新增加了服务器,都需要修改负载均衡配置。

    如果有某种解决方案,可以准确定位性能瓶颈组件,并且在服务器自动增加后自动扩展该组件,就可以同时解决自动化以及经济性需求。

    在下一节中,我们将会详细介绍在现在的云服务环境中,分布式系统的演进以及系统架构师对于分布式系统更深的理解。

    在掌握了云时代分布式系统的最新概念后,才能理解Service Fabric中所有抽象概念以及使用场景。

  • 相关阅读:
    disruptor笔记之一:快速入门
    React-高阶函数_函数柯里化
    解决跨域、同源策略-React中代理的配置
    React中key的作用
    React三种路由参数传递方式
    React生命周期(好玩的讲解方式)
    React数据共享插件-PubSub
    React中路由基本&高级使用
    React中嵌套路由
    React中网络请求(axios和fetch)
  • 原文地址:https://www.cnblogs.com/mschiefevangelist/p/6358788.html
Copyright © 2020-2023  润新知