1. 单点集中式Web应用

图1.1 分布式系统发展历程——单点集中式Web应用

单点集中式Web应用系统架构总体上比较简单。

特点:

  • 数据库(比如MySQL)及应用的 War 包都是共同部署在同一台服务器上,文件的上传存储也是上传到本台机器上。
  • 适用于小型项目,发布便捷(只需要打包成War包,并进行解压即可),对于运维的工作量也比较小。

缺点:

  • 如果该台服务器宕机了,整个应用将无法访问。

2. 应用与文件服务及数据库单独拆分

背景:

随着时间的推移,数据库及文件的数据量越来越多,由于服务器的容量是有限的,原有系统架构已经不足以支撑,此时需要将Web应用、数据库、文件存储服务拆分出来作为独立的服务,以此来避免存储瓶颈。

图1.2 分布式系统发展历程——应用与文件及数据库服务单独拆分

特点:

  • 三个服务独立部署,不同服务器宕机了,其他的仍然可以使用。

3. 引入缓存与集群,改善系统整体性性能

背景:

当请求并发量上去了,而单台 Web 服务器(比如Tomcat)不足以支撑应用的时候,此时我们会考虑引入缓存及集群,以改善系统的整体性能,此种系统架构如图1.3所示。

图1.3 分布式系统发展历程——引入缓存与集群,改善系统整体性能
  • 引入缓存:把大量用户的读请求引导至缓存(如Redis)中,而写操作仍然直接写到数据库DB中。这点性能上的优化,可以将数据库的一部分数据或者系统经常需要访问的数据(如热点数据)放入缓存中,减少数据库的访问压力,提高用户并发请求性能。
  • 引入集群:目的在于减少单台服务器的压力。可以通过部署多台 Tomcat 来减少单机带来的压力,常见手段是 Nginx+Lvs,最终是多台应用服务器构成了负载均衡,减少了单机的负载压力(需要注意的是,对于用户的 Session 需要调整为使用 Redis 或者 Spring-Session 进行管理)。
  • 注:ILVS,是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器。通过 LVS 提供的负载均衡技术和 Linux 操作系统实现一个高性能、高可用的服务器群集,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

4. 数据库读写分离,并提供反向代理及 CDN 加速访问服务

背景:

调查发现,在大多数互联网应用系统中,用户的读请求数量往往大于写请求,它们会相互竞争,在这个时候往往写操作会受到影响,导致数据库出现存储瓶颈(可以参考春节抢票高峰期12306的访问情况)。因此会对数据库采取读写分离,从而提高数据库的存储性能。

除此之外,为了加速网站的访问速度,尤其是加速静态资源的访问,会将系统的大部分静态资源存放到CDN 中,并加入反向代理的配置,从而减少访问网站时直接去服务器读取静态数据。

图1.4 分布式系统发展历程——数据库读写分离并提供反向代理及CDN加速访问服务

特点:

  • DB 的读写分离将有效地提高数据库的存储性能,而加入 CDN 与反向代理将加速系统的访问速度。

注:CDN 的全称是Content Delivery Network,即内容分发网络。CDN 依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取内容,降低网络延迟,提高访问速度。简单来讲,CDN 是用来进行加速的,它可以让用户更快获得所需的数据。

例如:某个网站的服务器在北京,如果深圳的用户想要获取服务器上的数据,就需要跨越很远的距离,由于传输速度和路由转发等因素,就会导致访问速度非常缓慢。但如果我们在深圳建立一个CDN服务器,上面缓存了一些服务器数据,那么深圳用户只需要访问这个CND的服务器就能获取相关的内容,这样速度就提升了很多。

5. 分布式文件系统与分布式数据库

当系统对于某些表有大量的请求时,此时为了减少DB的压力,我们会进行分库分表,即根据业务来拆分数据库,此种系统架构如图1.5所示。

图1.5 分布式系统发展历程——分布式文件系统与分布式数据库

分布式系统的特性

  • 内聚性和透明性:分布式系统是建立在网络之上的软件系统,所以具有高度的内聚性和透明性。
  • 可扩展性:分布式系统可以随着业务的增长动态扩展自己的系统组件,从而提高系统整体的处理能力。通常有两种方式:其一,优化系统的性能或者升级硬件,即垂直扩展;其二,增加计算单元(如服务器等)以扩展系统的规模,即水平扩展。
  • 可用与可靠性:说直白点,可靠性量化的指标是给定周期内系统无故障运行的平均时间,而可用性量化的指标是给定周期内系统无故障运行的总时间;一个是“平均”时间,一个是“总”时间。
  • 高性能:不管是单机系统还是分布式系统,性能始终是关键指标。不同的系统对性能的衡量指标是不同的,最常见的有“高并发”(即单位时间内处理的任务越多越好和“低延迟”(即每个任务的平均处理时间越少越好)。分布式系统的设计初衷便是利用更多的机器,实现更强大的计算和存储能力,即实现高性能。
  • 一致性:分布式系统为了提高可用性和可靠性,一般会引入冗余(副本)。为了保证这些节点上的状态一致,分布式系统必须解决一致性问题,其实就是在多个节点集群部署下,如何保证多个节点在给定的时间内,操作或者存储的数据只有一份。

分布式系统常见的问题

1、网络并没有那么可靠

  • 分布式系统中,节点间本质上是通过网络通信,而网络有些时候并没有那么可靠。
  • 常见的网络问题有网络延时、丢包和消息丢失等。

2、节点故障无法避免

  • 当分布式的节点数目达到一定规模后,整个系统出现故障的概率将变高。而分布式系统需要保证故障发生时,系统仍然是可用的,即在某个或者某些节点发生故障的情况下,需要将该节点所负责的计算和存储任务转移到其他节点。

总之,分布式系统在给我们带来诸多好处的同时,也带来了许多挑战和不确定性,可谓是一把“双刃剑”。

分布式系统的发展历程相关推荐

  1. 分布式系统漫谈【壹】_发展历程

    今天开始写一个新的系列的文章,就是围绕着分布式系统说说它的技术栈.实现思路和问题挑战等等.这个内容不是很好写,太大太广,而且在技术日新月异的今天它也在不断发展探索更好的实现.我只能尽我所知,尽可能把这 ...

  2. 微服务架构深度解析与最佳实践-第一部分:微服务发展历程和定义

    微服务架构的概念,现在对于大家应该都不陌生,无论使用 Apache Dubbo.还是 Spring Cloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒度且独立部署的 Rest 服务 ...

  3. 【操作系统】操作系统的发展历程——手工阶段、批处理阶段、分时操作系统、实时操作系统

    [操作系统]操作系统的发展历程--手工阶段.批处理阶段.分时操作系统.实时操作系统 说明:本系列用于记录学习操作系统时的知识点,主要参考资料:王道考研. 不骗各位,博主真的是小菜鸡,如有纰漏还请指出. ...

  4. Service Mesh发展历程

    一.服务网格从何而来? 服务网格模型的起源可以追溯到过去几十年服务器端应用程序的演变. 考虑 2000 年代中型 Web 应用程序的典型"三层"架构.在此模型中,应用程序逻辑.We ...

  5. 云计算机的发展史,三分钟看懂云计算的发展历程

    原标题:三分钟看懂云计算的发展历程 为什么要用云计算?技术发展的需要. 云计算的发展历程 ①最开始,人们使用算盘. ②后来,人们有了网络,也开始普及电脑. ③再后来,人多事少,都去上网,于是服务器吃不 ...

  6. java概述,发展历程

    1. java概述 首先对于刚刚接触java的小白来说,可能连java是什么,为什么叫这么名字都不知道.其实,Java语言是有个曾用名的~叫Oak,而且起这个名字的时候也是很随心的,只是因为看到了窗口 ...

  7. Web开发技术发展历程

    Web开发技术发展历程 互联网就是指通过TCP/IP协议族互相连接在一起的计算机网络.而Web是运行在互联网上的一个超大规模的分布式系统. Web设计初衷是一个静态信息资源发布媒介,通过超文本标记语言 ...

  8. 百度PHP高级顾问惠新宸:PHP在百度的发展历程

    惠新宸,百度PHP高级顾问,年二十有八,好追根究底,有不良嗜好, 幸性本善.乙酉年识互联网,丁亥年入雅虎,翌年入百度.虽性好安稳,然经变无数,唯常叹"人生,菠菜汤尔". 大家好,今 ...

  9. vue 发展历程时间轴动画_PPT时间轴如何做出创意感?海量素材免费分享,网友:收藏...

    时间轴页面,是工作型PPT中常见的页面之一.个人述职或者公司介绍PPT中,使用时间轴,能够让观众更加清晰地了解公司的发展历程. 但是,很多人在制作时间轴页面时,往往是这样的效果: 只有几行字和一根线, ...

  10. 7 大主题!梳理神经网络中 Normalization 的发展历程

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本篇文章用于总结近年来神经网络中 Normalization 操作 ...

最新文章

  1. html事件绑定的方法,javascript实现简单的on事件绑定
  2. Python当中的a += a 与 a = a + a 的区别,可变类型与不可变类型的数据类型,引用传参...
  3. python 遍历usb设备_python程序员教你写脚本玩微信跳一跳,只要有耐心,你就是王者!...
  4. Jquery技巧:使用ajax技术提交表单数据
  5. 20164319 刘蕴哲 Exp1 PC平台逆向破解
  6. 程序员的能力模型与沟通技巧
  7. js判断移动端或是pc端
  8. (转)AI vs 深度学习 vs 机器学习:人工智能的 12 大应用场景
  9. SQL SERVER 2012 附加数据AdventureWorks2012失败解决方案
  10. 高效能人士的7个习惯
  11. uniapp获取本机ip地址
  12. 怎样在 iPhone 或 iPad 上使用“快捷指令”?
  13. 根据两点的经纬度求方位角和距离等问题
  14. Python循环读取文件夹内视频
  15. ftp服务器上传文件卡顿,FlashFXP连接FTP服务器很慢,原因可能是这样
  16. 链表、数组、跳表时间复杂度
  17. 【Unity使用UGUI实现王者荣耀UI界面(四)】游戏开始界面
  18. Keras 主要的层函数
  19. 该文件没有与之关联的程序来执行该操作。请安装应用,若已经安装应用,请在“默认应用设置“页面中创建关联
  20. 信贷系统——增加2种模式访问模式A模式(通过销售人员入户的)B模式(通过Erp入户的)

热门文章

  1. DNS的作用是什么?为什么一定要配置DNS才能上网
  2. threejs的shader材质 颜色混合函数mix
  3. linux查看外网IP
  4. Python爬虫爬取豆瓣TOP250
  5. HZD区块链导航网站好站点,你知道的都在这里
  6. Latex文档中 插入符号和编号
  7. 第五章-----Java数组及排序
  8. TeamViewer远程连接
  9. 青铜时代 —— 相机算法
  10. html中怎么设置字体形状,html如何设置字体样式 HTML里怎么设置字体大小?