当前位置: 首页 > news >正文

初步认识了解分布式系统

背景认识:我们要学习redis,还是得了解一下什么是分布式。为什么呢?因为redis只有在分布式系统中才能发挥它最大的作用,也就是领域展开,所以接下来我们就简单过一下什么是分布式系统

一些术语认识:

(1)应用(Application)/系统(System)

一个服务器程序

(2)模块(Module)/组件(Component)

 一个应用中有许多的功能,每一个单独的功能就是一个模块/组件

(3)分布式(Distributed)

引入多个主机/服务器,协同配合完成一系列的工作(物理上的主机)

(4)集群(Cluster)

引入多个主机/服务器,协同配合完成一系列的工作(逻辑物理上的主机,范围更大)

(5)主(Master)/从(Slave)

分布式系统中一种比较典型的结构。多个服务器节点,其中一个为主,其他都是从;从中的数据都需要从主节点同步过来

(6)中间件(Middleware)

中间件是和业务无关的服务,比如数据库、缓存、消息队列

(7)可用性(Availability)

系统整体可用的时间/总的时间,衡量系统的第一标准

(8)响应时长(Response Time RT)

衡量服务器的性能的指标,响应时长越小越好

(9)吞吐(Throughput)vs 并发(Concurrent)

衡量系统的处理请求的能力,衡量性能的一种方式


其实分布式,就是对一个系统引入更多的硬件资源,也是从一台机器逐步演变过来的。下面的七个步骤,也就是一个庞大分布式系统慢慢演变过来的大致步骤。

1.单机架构

(1)介绍

所谓的单机架构,也就是只有一台服务器,这台服务器完成所有的功能,包括应用服务、数数据存储等,大致如下面的图

(2)优点

绝大多数的产品都是此种架构,不需要过多的机器就可以应对大多数的业务场景,因此成本也就更加的低

(3)缺点

如果业务越来越多,用户和数据都逐步提高,那么只有一台服务器就无法满足需求,就只能引入更多的主机进行应付。

因此,下一个等级也就是进行数据库和应用分离。

2.数据库和应用分离

(1)介绍

上述的单机架构只有一台服务器,负责管理应用和数据库。因此到这里,就可以将它们分开进行管理。得出下面的图

(2)优点

进一步提高系统的稳定性和承载能力

(3)缺点

机器进一步增多,成本增加,包括人力成本、时间和金钱成本。

3.引入负载均衡

(1)介绍

当服务器逐步增多后,可以处理业务的服务器也不止一台,因此就需要有一个“leader”进行任务的分发,所以也就引入了负载均衡,负责业务的分配,使得每一台服务器都能平衡的处理业务,不会让一台机器干到冒烟。

(2)优点

不再是一台服务器处理所有的请求,服务器所承担的任务进一下下降;即时某一台服务器挂了,也不会影响全局

(3)缺点

成本更高

4.数据库读写分离

(1)介绍

处理请求的服务器的虽然多了,但是数据库承担的压力还是很大,因此采取读写分离。在日常中,读的次数远远大于写的次数,因此也能进一下降低数据库服务器的压力。

(2)优点

更快

(3)缺点

产生了主从关系,数据更新需要及时同步

5.引入缓存(Redis返回的地方)

(1)介绍

虽然读的次数远大于写,但是有时候只有大部分的数据会被频繁读写,成为热点数据,所以还可以进行拆分。把热点数据放入缓存中,访问数据的速度还能进一步提高。

(2)优点

只需要20%的数据,就能满足80%的访问量

(3)缺点

成本高

6.数据库分库分表

(1)介绍

有时候某个数据库或者数据表存放的数据很庞大,因此还可以将一个库或者表拆分,分别存储到多个机器上。

(2)优点

能存储的数据量更大了

(3)缺点

成本高

7.引入微服务

(1)介绍

所谓微服务,就是将一个业务功能拆分成多个,分发给更多的人去完成。

(2)优点

每个业务的功能更加单一,也解决了人的问题

(3)缺点

成本高


小结:分布式系统,就是尽可能的引入更多的机器。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 货拉拉高级大数据平台算法工程师社招一面
  • 服务器数据恢复—SAN环境下LUN映射出错导致文件系统一致性出错的数据恢复案例
  • useCallback()
  • Linux安装vim超详细教程
  • Qt-QGroupBox容器类控件(39)
  • FortiGate 无线组网
  • Lucene 倒排索引原理详解:深入探讨相关算法设计
  • 精简解析:二叉树的遍历方法及其应用场景
  • 【TabBar嵌套Navigation案例-新特性页面-代码位置 Objective-C语言】
  • Git 撤销一个已经push到远端仓库的commit
  • 数据结构之栈和队列——LeetCode:150. 逆波兰表达式求值,224. 基本计算器,232. 用栈实现队列
  • 深度学习自编码器 - 得益于深度的指数增益篇
  • Qt-QTreeWidget多元素控件(38)
  • 复制他人 CSDN 文章到自己的博客
  • MK米客方德SD NAND参考设计
  • [译] React v16.8: 含有Hooks的版本
  • 【Leetcode】104. 二叉树的最大深度
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • echarts花样作死的坑
  • JavaScript 奇技淫巧
  • java正则表式的使用
  • Node + FFmpeg 实现Canvas动画导出视频
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 阿里云应用高可用服务公测发布
  • 包装类对象
  • 盘点那些不知名却常用的 Git 操作
  • 三栏布局总结
  • 设计模式走一遍---观察者模式
  • 算法之不定期更新(一)(2018-04-12)
  • 交换综合实验一
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (学习日记)2024.01.09
  • (转)Android学习笔记 --- android任务栈和启动模式
  • ./和../以及/和~之间的区别
  • .Family_物联网
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .Net FrameWork总结
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET程序集编辑器/调试器 dnSpy 使用介绍
  • .Net的C#语言取月份数值对应的MonthName值
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [ABC294Ex] K-Coloring
  • [AX]AX2012 R2 出差申请和支出报告