分布式 - 谈谈你对分布式的理解,为什么引入分布式?

这篇具有很好参考价值的文章主要介绍了分布式 - 谈谈你对分布式的理解,为什么引入分布式?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

不啰嗦,我们直接开始!

划重点:

  1. 真正了解分布式系统的概念,日后工作中具有分布式系统设计思想。
  2. 能否在设计中对系统稳定性方面考虑周全。
  3. 能构建高 QPS 健壮的系统架构。

1、面试官:那谈谈你对分布式系统的理解

问题分析:

各种分布式框架层出不穷,Spring Cloud,阿里的 Dubbo,无论使用哪一个,原理都相同,考察下基本概念掌握的如何。

答:

为了解决传统单体服务架构带来的各种问题,代码数量庞大,迭代测试维护困难,可能因为一处改动测试不到位造成整个服务瘫痪等问题,分布式系统就是将一个大的服务拆分成几十个甚至上百个微小的服务。如果把单体架构服务器比做篮子,那代码就是鸡蛋,不要让所有鸡蛋别装在一个篮子里,也方便大家分工开发,代码不在一个项目里,也不会冲突,最主要的是项目自己维护,多好。

比如阿里的 Dubbo,还有 Spring 全家桶里的 Spring Cloud,都是解决分布式微服务架构的优秀框架。

2、面试官:那分布式系统环境下各自有什么优缺点?

问题分析:

优点是显而易见的,面试官主要是想看看意识到有哪些缺点和问题,不过好的方面还是要简单带过。

答:

优点很多呀,使用分布式不就是为了解决传统架构各种问题嘛,多人在一个下开发维护难,也不好控制容错能力。拆分成微服务问题就好办多了。主要从 4 个方面简单说下。

  1. 系统可用性提升
    一个系统全年可用时间在 99.999%,5 个 9 的服务可用率在设计合理的分布式系统中并不是一个触不可及的数字。
    传统的集中式计算或集中式存储在遇见单点故障时很容易造成整个服务不可用,分布式下的服务体系,单台机器有故障,不致于造成整个服务不可用。
  2. 系统并发能力提升
    请求通过 Nginx 负载均衡被分发到不同的服务器上,运行同样代码的服务器可以有 1 台或 N 台,通常情况下会根据实际用户访问量随时增加机器,无论是数据库或者服务,都可以做到随时水平扩展
    比如双 11 活动,平时订单少 50 台机器就够了,到了 11 订单量剧增,服务器增加到 100 台,每台机器之间相互独立,互不影响。
  3. 系统容错能力提升

    谈谈你对分布式的理解,Interview,java


    (手里有笔,能给面试官随便画画)
    同一组服务分别部署在北京上海杭州,杭州的机房突发断电或者火灾,杭州机房的流量会被自动分发到北京和上海的机房,不影响用户使用。
  4. 低延迟 
    参考上一个图,北京的用户请求自动分发到北京,上海的用户请求被分发到上海,服务器会根据用户的 IP 选择距离自己最近的机房,降低网络延迟。 

面试官:嗯,基本覆盖全面了,继续说说缺点。

凡事具有两面性,分布式服务带来很多好处的同时肯定还会带来麻烦,主要从 3 方面考虑。

  1. 分布式服务依赖网络
    服务器间通讯依赖网络,不可靠网络包括网络延时,丢包、中断、异步,一个完整的服务请求依赖一连串服务调用,任意一个服务节点网络出现问题,都可能造成本次请求失败。
  2. 维护成本高
    传统单体式服务只需要维护一个站点就可以。
    分布式服务系统被拆分成若干个小服务,服务从 1 变为几十个上百个服务后,增加运维成本。
  3. 一致性,可用性,分区容错性无法同时满足
    这个是最主要的,这三种特性就是平时说的 CAP 定理,在分布式系统中,这三种特性最多只能满足两种,无法同时满足,需要根据实际情况去调整牺牲掉其中哪个。

面试官:嗯,最主要的第三点意识到了。(面试官心理:如果能意识到 CAP 问题那就好办多了,提到 CAP,那可以继续聊聊)

成功给自己挖坑,关于 CAP,下一节单独讲解

深入分析:

关于分布式系统,通俗点讲就把整个业务系统拆分成很多的服务,每个服务责任到人,服务之间代码都没有冲突,服务可以自治,每个服务到技术也可以自己选型,只要遵循统一的服务调用协议就可以了。每次发布如果就改动一个服务那就上线一个服务,不用所有人一起联调,这样每次发布牵扯到的改动影响也是可控的。不像传统单体架构服务,动辄几百万行代码融在一起。

这个概念是 Jim Waldo 在 1994 年发表的题为 “ A Note on Distributed Systems ” 的论文中提出的,感兴趣的读者可以看看英文原文。

百度百科是这样解释的:
分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。

分布式系统并不是某一门具体的技术,也不是具体的框架。用大白话理解就是将计算能力和数据存储能力分散在不同服务器上,通过网络连接组成的一个整体的服务,不同服务器可能是物理机,也可能是虚拟机,分布式的概念可以理解成一种解决方案。

分布式系统总结来说是将数据存储能力和计算能力分布到不同的服务器上,作为一个整体对外服务。目的在于解决单台机器的故障问题,单机计算和 IO 性能问题,以及单机存储空间不足的问题。虽然单机故障的概率比较小,但是随着集群规模大了之后,集群宕机和磁盘损坏基本上是常态,分布式系统主要解决的是各种故障带来的问题。

比如,美团外卖,用户角度去看这就是一个能叫外卖的 APP,选商品,提单付款,等待配送后订单完成,如果从系统开发工程师角度去看,这个小小的 APP 后面却是一个非常庞大的系统,你点一次外卖,后台会经过几十次上百次服务调用才能完成整个流程。从大的角度去看,包括商品管理系统,订单系统,支付系统,结算系统,商家系统,配送系统,风控系统等等。每一个子系统又能分成若干个微服务,各个系统逻辑上构成一个整体统一对外服务。

3、分布式系统和微服务什么关系

关于分布式系统和微服务,两者都只是一种概念。如果你采用微服务,就意味着系统一定是分布式的,分布式系统具有的优缺点在微服务理都会体现,个人理解微服务是分布式系统的一种具体落地方案。

谈谈你对分布式的理解,Interview,java

 总结

 随着互联网的发达,传统单体项目已经完全不能适应现在互联网用户量需求,2010 刚刚毕业的时候只会 SSH/SSM 就能找到工作,不了解分布式,也没听说过,很多软件公司也是一套框架打天下。如今这个时代已经过去了,经常有读者问我初学者学什么语言好找工作。如果想收到大公司面试机会,拿到 offer,编程语言只是基础,对于分布式系统基础也很重要,光靠学一门语言就想找到一份工作应该很难,所有大一点的互联网公司系统都是分布式的,公司希望招到的人也都很了解分布式相关的知识。

分布式系统的优点:

  1. 提升服务可用性 / 稳定性
  2. 提升系统并发能力
  3. 提升系统容错能力
  4. 低延迟

分布式系统缺点:

  1. 依赖网络,会因为网络问题导致系统数据丢失或不一致性;
  2. 系统复杂化,系统监控维护,版本迭代发布变得相对复杂,成本高;
  3. 一致性,可用性,分区容错性无法同时满足。

不啰嗦,文章结束,期待三连!文章来源地址https://www.toymoban.com/news/detail-612944.html

到了这里,关于分布式 - 谈谈你对分布式的理解,为什么引入分布式?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (快手一面)分布式系统是什么?为什么要分布式系统?分布式环境下会有哪些问题?分布式系统是如何实现事务的?

    《分布式系统原理与泛型》中这么定义分布式系统: “ 分布式系统是若干独立计算机的集合, 这些计算机对于用户来说就像单个相关系统 ”, 分布式系统(distributed system)是建立在网络之上的软件系统。 就比如:用户在使用京东这个分布式系统的时候,会感觉是在使用一

    2024年02月08日
    浏览(48)
  • 为什么选择elasticsearch分布式搜索引擎

    elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: 在CSDN上搜索代码 在电商网站搜索商品 在百度搜索答案 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监

    2024年02月12日
    浏览(32)
  • 分布式缓存:什么是它以及为什么需要它?

      随着网络的快速发展,分布式应用变得越来越普遍。这种类型的应用程序需要访问多个组件和服务,而这些组件可能分散在不同的物理位置上。在这种情况下,由于网络通信的高延迟和低带宽,性能问题变得尤为明显。为解决这一问题,分布式缓存应运而生。   简单的

    2024年02月05日
    浏览(36)
  • 为什么需要分布式存储技术?IPFS价值在哪?

    IPFS中文翻译是星际文件系统,是硬盘共享的互联网底层协议,主要用于访问数据。简单来说,IPFS可以创建一个存储网络,让更多的人在分享闲置存储空间的同时获得收入。 这种人人都可以参与共享硬盘的存储模式,称为分布式存储。为什么我们需要这种分布式存储技术?要

    2024年02月13日
    浏览(40)
  • Zookeeper 和 Redis 哪种更好? 为什么使用分布式锁? 1. 利用 Redis 提供的 第二种,基于 ZK 实现分布式锁的落地方案 对于 redis 的分布式锁而言,它有以下缺点:

    关于这个问题,我们 可以从 3 个方面来说: 为什么使用分布式锁? 使用分布式锁的目的,是为了保证同一时间只有一个 JVM 进程可以对共享资源进行操作。 根据锁的用途可以细分为以下两类: 允许多个客户端操作共享资源,我们称为共享锁 这种锁的一般是对共享资源具有

    2024年01月16日
    浏览(38)
  • CloudNative:云原生(分布式云)的简介(发展&演变/为什么需要/优势&价值/安全/对比传统企业应用)、四大核心技术、CNCF云原生交互景观、云原生技术的使用经验及方法之详细攻略

    CloudNative:云原生(分布式云)的简介(发展演变/为什么需要/优势价值/安全/对比传统企业应用)、四大核心技术、CNCF云原生交互景观、云原生技术的使用经验及方法之详细攻略 导读 :从“ 软件正在吞噬世界 ”到“ 开源正在吞噬软件 ”,到如今“ 云原生吞噬开源 ”,开源项目

    2023年04月16日
    浏览(197)
  • 谈谈对OceanBase单机分布式一体化的思考

    关于作者: 杨传辉,OceanBase CTO。2010 年作为创始成员之一加入 OceanBase 团队,主导了 OceanBase 历次架构设计和技术研发,从无到有实现 OceanBase 在蚂蚁集团全面落地。同时,他也主导了两次 OceanBase TPC-C 测试并打破世界纪录,著有《大规模分布式存储系统:原理与实践》。目前

    2024年02月10日
    浏览(27)
  • 谈谈你对倒排索引的理解

    谈谈你对倒排索引的理解 在聊倒排索引之前,我们需要先了解一下‘索引’概念。 什么是索引呢? 索引是为了加速对表中数据行的检索而创建的一种分散的存储结构 。 通俗的来讲索引好比就是 新华字段中拼音的首字母还有偏旁 ,根据拼音的首字母和偏旁能很快的查找到你

    2024年02月07日
    浏览(25)
  • 18.谈谈你对JSON的理解

    JSON 是一种 基于文本的轻量级的数据交换格式 。它可以被 任何的编程语言读取 和作为 数据格式 来传递。 在项目开发中,使用 JSON 作为前后端数据交换的方式 。在前端通过将一个符合 JSON 格式的数据结构序列化为 JSON 字符串,然后将它传递到后端,后端通过 JSON 格式的字符

    2024年02月22日
    浏览(30)
  • 让我们谈谈你对 ThreadLocal 的理解

    从 JDK1.2 开始,ThreadLocal 是一个被用来存储线程本地变量的类。在 ThreadLocal 中的变量在线程之间是独立的。当多个线程访问 ThreadLocal 中的变量,它们事实上访问的是自己当前线程在内存中的变量,这能确保这些变量是线程安全的。 我们通常使用 ThreadLocal 解决线程中的变量冲

    2023年04月16日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包