百科问答小站 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万分之一。你觉得,如果百万分之一的概率丢失这个数字如果发生,那你就辞职也无妨,如果这个工作对你实在太重要,那就让更多的人同时记住这个数字,忘记的概率会进一步降低,你可以海专精算一下。


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




  

相关话题

  野指针危害真的很大吗? 
  公司如何保护源代码不被员工泄漏? 
  准大一,零基础自学C语言,有什么简单易懂的自学书籍和课程推荐吗? 
  智能手机的流行,是否会造成年轻人不会用电脑只会用手机的现象? 
  面向对象中接口应该更抽象还是更具象? 
  这篇博文c#比JAVA慢这么多 为什么? 
  如何以最小的改动尽量不改变已有代码的情况下适应不断变更的需求? 
  为什么很多人认为Macbook触控板好用可以替代鼠标? 
  今天和搞计算机的朋友争论了,关于格斗游戏顶级玩家和电脑打的问题,谁赢?例如拳皇97,DNF? 
  学习编程照着别人的代码敲进去有效率吗? 

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





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