架构实战--以海量存储系统讲解热门话题:分布式概念

关注我,持续分享逻辑思维&管理思维; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;

有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》《做好面试准备,迎接2024金三银四》。

-------------------------------------正文----------------------------------------

分布式概念是指在分布式计算环境中,一个软件系统或应用程序的功能和数据可以在多个服务器之间分散,以实现更高的可用性、灵活性和 scalability。这种方式可以使得系统的整体性能和可用性提高,同时也可以减少单个服务器的负担。

分布式概念通常包括以下几个方面:

  1. 分布式存储:将数据存储在多个服务器之间,以提高数据的可用性和访问速度。

  2. 分布式处理:将计算任务分散到多个服务器上,以减少单个服务器的负担和提高系统的总性能。

  3. 分布式应用程序:将应用程序分散到多个服务器上,以实现更高的可用性和灵活性。

  4. 分布式网络:将网络结构分散到多个服务器和网络设备之间,以提高系统的可用性和灵活性。

  5. 分布式数据库:将数据库分散到多个服务器上,以提高数据的可用性和访问速度。

  6. 分布式计算:将计算任务分散到多个服务器上,以减少单个服务器的负担和提高系统的总性能。

  7. 分布式文件系统:将文件分散到多个服务器上,以提高文件的可用性和访问速度。

以上图为例,是比较简单的一个存储分布式引擎。

Proxy介绍

  • Proxy可以分配域名,这样用户的请求可以均匀分配到任何一台Proxy上。Proxy无状态,可以无差别承担任何一个请求。
  • Proxy在承担服务前,先从Master获取所有数据路由(路由的概念:存储系统由Key+Value组成,一个Key对应一个Value。Key可以认为是文件名+路径,也可以是自定义的唯一Key。Value对应的是内容。路由是指每个Key在哪个Data节点的位置信息。显然,每个Key保存对应的Data IP不大可能。一般把Key直行Hash,Hash后得到一个int,然后进行数学取模。模的大小大家可以自己取。比如模100000,意味着每个Key可以散列成一个10万以内的数字。我们保存这个数字和Data IP的对应关系即可。比如数字1-10000在Data节点1, 10000-20000在节点2......)。对于写请求,Proxy收到Key+Value,以Key散列后看数字为多少,如果数字为30005,则把这个Key+Value写发到Data节点3去服务。读请求类似,Key散列后,转发到对应Data节点去获取数据。
  • Proxy同时和Master保持心跳。当路由信息有变化时,Master会通知Proxy。比如我们发现Data3节点快被写满了,决定扩容,申请了Data3.1,Data3.2两组节点,Data3.1承担30001-35000的路由数据,Data3.1承担35001-40000的路由数据。这样,Data节点可以一直扩容到10万组(如果上面的模改为1000万,则可以扩容到1000万组)。
  • 对于写请求,Proxy将数据写到Data节点组的主备机,都写成功了才返回成功。而读请求,可以到任何一台机器上进行。
  • 任何一个Proxy节点挂了,可以在DNS中将其剔除。用户请求将会转发到其他Proxy节点上,所以Proxy节点机器死机,对用户无影响。

Data介绍

  • Data有2台,互为主备。可以互相不知道对方。每个Data节点只负责读写自己的数据。
  • 当一个Key+Value写过来,Data节点按自己的组织方式写到磁盘里。下次读的时候,再从对应的磁盘里读出来。因为涉及数据案例,所以一逻辑上经比较简单,二有主备机器。任何一个Key,在主或备上都可以读出相同的数据来。
  • Data要定期向Master上报心跳。让Master知道这组Data是正常的。如果哪台有异常,才好让其下线,以另一台向用户服务。所以,任意死机一台Data都不影响服务。
  • Data节点有状态,但也可以任意扩容、缩容。当需要扩容时,告诉Master有新的Data节点。然后控制Master分裂路由。

Master介绍

  • Master逻辑简单,只保存全量路由。这个路由数据可以以文件方式保存,一旦这个Master挂了,可以拿到这个文件快速启动另一台Master并服务。
  • Master也以DNS进行服务。这样,随时可以切换到另一台Master进行服务。因此,Master也是可以死机的。

以上,就是简单的一个分布式存储系统。

亮点

  • 高性能:Proxy缓存全量路由,查找路由快速、精准。能一步定位到数据在哪台Data节点;
  • 扩展性:路由可以任意扩容,Data节点可以无限扩容;
  • 可用性:Data有主备两台机器,任何一台挂了,也不影响继续读取和写入。同时Proxy和Master死机也不会影响系统可用性。

这里只是拿这个架构来分析、讲解分布式概念。真正的存储系统还是比较复杂。

比如写2份数据,一份成功一分失败怎么办。

比如下线一台Data节点,只有另一台节点服务,此时数据只有一份,就比较危险。

比如下线节点后,这个节点再次起来,数据与互备的可能就不一样了怎么办?

分布式概念的主要优势包括:

  1. 提高系统可用性:通过将数据和应用程序分散到多个服务器上,可以在多个服务器之间进行数据和应用程序的存储和处理,从而提高系统的可用性。

  2. 提高系统性能:通过将计算任务分散到多个服务器上,可以在多个服务器之间进行数据并发、加速和优化,从而提高系统的性能。

  3. 减少服务器负担:通过将应用程序和数据分散到多个服务器上,可以在每个服务器上只需要一定量的计算 ressources,从而减少单个服务器的负担。

  4. 提高系统灵活性:通过将应用程序和数据分散到多个服务器上,可以在多个服务器之间进行数据和应用程序的更新、升级和扩展,从而提高系统的灵活性。

  5. 降低系统沟通成本:通过将数据和应用程序分散到多个服务器上,可以减少在多个服务器之间进行数据和应用程序的传输和沟通,从而降低系统的沟通成本。

然而,分布式概念也存在一些挑战,包括:

  1. 复杂性增加:由于多个服务器之间进行数据和应用程序的交互,因此会增加系统的复杂性。

  2. 可用性和灵活性难以确保:由于分布式系统存在多个服务器和网络设备之间的交互,因此可能会出现系统不可用或灵活性异常的情况。

  3. 安全性难以保证:由于分布式系统存在多个服务器和网络设备之间的交互,因此可能会出现安全性问题或攻击。

  4. 数据重复和随机访问异常:由于分布式系统存在多个服务器之间进行数据的存储和访问,因此可能会出现数据重复或随机访问异常的情况。

  5. 扩展性困难:由于分布式系统存在多个服务器和网络设备之间的交互,因此可能会出现扩展性问题或兼容性问题。

对架构、技术、管理、逻辑思维有兴趣的同学,欢迎点赞&关注和博主沟通交流。持续分享逻辑、算法、管理、技术、人工智能相关的文章。

博主其它经典原创:《管理心得--工作目标应该是解决业务问题,而非感动自己》,《管理心得--如何高效进行跨部门合作》,《管理心得--员工最容易犯的错误:以错误去掩盖错误》,《技术心得--如何成为优秀的架构师》、《管理心得--如何成为优秀的架构师》、《管理心理--程序员如何选择职业赛道》。欢迎大家阅读。

相关推荐
shinelord明12 分钟前
【大数据技术实战】Kafka 认证机制全解析
大数据·数据结构·分布式·架构·kafka
小龙报27 分钟前
《彻底理解C语言指针全攻略(6)-- qsort、sizeof和strlen》
c语言·开发语言·职场和发展·创业创新·学习方法·业界资讯·visual studio
Swift社区2 小时前
LeetCode 402 - 移掉 K 位数字
算法·leetcode·职场和发展
墨染点香3 小时前
LeetCode 刷题【124. 二叉树中的最大路径和、125. 验证回文串】
算法·leetcode·职场和发展
BUTCHER54 小时前
Kafka多网卡环境配置
分布式·kafka
怪兽20144 小时前
请例举 Android 中常用布局类型,并简述其用法以及排版效率
android·面试
鸿蒙小白龙4 小时前
openharmony之分布式蓝牙实现多功能场景设备协同实战
分布式·harmonyos·鸿蒙·鸿蒙系统·open harmony
南一Nanyi5 小时前
才知道 DNS 还能基于 HTTPS 实现!
网络协议·安全·面试
xxxxxxllllllshi5 小时前
Java中Elasticsearch完全指南:从零基础到实战应用
java·开发语言·elasticsearch·面试·职场和发展·jenkins