百科问答小站 logo
百科问答小站 font logo



如何通俗地理解「分布式系统」,它解决了哪些问题,有什么优缺点? 第1页

  

user avatar   huo-gu-itpang-zi 网友的相关建议: 
      

第一个故事

你要找人算一个很难的数学问题:123+789 = ?


你有两个选择:

第一,问bobo,他可以瞬间告诉你答案,因为他是做题家;

第二,我们村有几个傻子,每人只会算个位数加法;


一般人肯定选择问bobo,但他日薪大概2万1千元人民币,你雇不起,或者你觉得不值得这个价格;

我们村的傻子,只要30人民币算一天;


你拿着123+789去问村支书结果是什么,


村支书不会帮你算,但他知道傻子家的住址,于是他帮你把数字拆开

1+7

2+8

3+9

然后他分别敲门三个傻子家

第一个傻子说1+7得8

第二个傻子说2+8得10

第三个傻子不在家,敲了半天门也没人

但支书找到第四个傻子在家,他说3+9 = 12


村支书拿着8,10,12三个结果回来了,支书水平高,知道进位,会算两位数,而且记住了你说的123+789顺序,最后综合出结果,是912,然后还给你;


村支书花了1个小时完成了这个任务,bobo只需要36秒(包括交流等耗费),差了100倍。但是考虑到bobo的日薪是一个傻子的700倍,而老板给你一天时间找出123+789的答案,你还是选择用更便宜的方式来解决问题。


这个故事告诉我们成本控制很重要,算简单的东西,不需要太聪明的人。

第二个故事

老板给你一个极大的数字相加问题:

123456789098765432 + 987654321012345678 = ?


你这次觉得bobo能接这个活,但你还没念完数字就被他撵走了,因为他嫌你烦,他说他在思考架构问题;


你只好找村支书,但村支书说他也做不了,村子里没这么多傻子,村支书自己也不会处理三位数以上的加法。你只好多走几个村子,发现每个村子都有几个傻子提供计算服务,于是你就人为地把问题拆开,每三个数字相加


123 456 789 098 765 432 +

987 654 321 012 345 678


然后多走几个村子:

村支书A帮你算123+987

村支书B帮你算456+654

...

最后你自己再把他们的结果合在一起,交给老板。


这个故事告诉我们,太复杂的问题,一个聪明人可能算不了或是不愿意算,但是人多的话就怎么都行;


第三个故事

老板这次让你记住一个非常重要的商业伙伴的电话号码:136 599 3340。你自己怎么都记不住,太复杂了,只能花钱找人。

这次你直接找村支书了,支书告诉你说傻子一次只能记住一个数字,而且过一段可能有很低的概率忘记。


于是你的做法是:一个村子只记一个数字,由三个傻子去记。10位数的电话号码只需要10个村子。


比如到了A村,记第一个数字,让三个傻子记住1;每天村支书就会挨个问三个傻子:你记住的数字是多少啊?他们都只会答1,或是说忘记了。如果三个人都回答1,村支书就回去休息;偶尔有个人会说忘记了,或是这人摔到池塘里淹死了,那么支书找到第四个傻子,让他记住1,保证每时每刻都有三个傻子记住了1这个数字。


假设每个傻子每天有1%的概率忘记这个数字,他们同一天发生都忘记这数字的概率是1%的3次方,也就是100万分之一。你觉得,如果百万分之一的概率丢失这个数字如果发生,那你就辞职也无妨,如果这个工作对你实在太重要,那就让更多的人同时记住这个数字,忘记的概率会进一步降低,你可以海专精算一下。


这个故事说明非常复杂难记的东西,只要肯人多,并且有一定简单机制去保证部分人忘记也没事,就差不多可以永远保险。聪明人自己反而不见得能做到。




  

相关话题

  对容器类做改变的设计是否存在天生的错误? 
  如何看待王垠对数据库的理解? 
  Golang 为什么要发布一个新的字体? 
  Linux 系统有没有关于 rm -rf /* 的保护机制? 
  如何评价「线程的本质就是一个正在运行的函数」? 
  为什么绝大多数电子产品的时间设定都只能调到1970年? 
  编程新手如何提高编程能力? 
  Qt出最近版本了,支持全平台开发,而我以前没接触过,一直java,现在如何选择呢? 
  如果计算机语言是中国人发明的,hello world 会变成什么? 
  逃逸分析为何不能在编译期进行? 

前一个讨论
如何看待今日头条抄袭知乎?
下一个讨论
普京到底有多少钱?





© 2024-11-24 - tinynew.org. All Rights Reserved.
© 2024-11-24 - tinynew.org. 保留所有权利