美文网首页编程思想
白话集群的编程思想

白话集群的编程思想

作者: IT楠老师 | 来源:发表于2019-08-27 16:18 被阅读0次

编程悟道—学习前人怎么解决问题(一)

从"搬石头问题"引发的"集群搭建问题"

小记:很多的文章都是纯理论和操作手册,我想通过写一些类似小故事的文章启发自己和大家养成一个程序员的思维,这样读起来会更容易一些。我觉得这是很重要的,他能帮助我们快速理解很多框架的实现原理。千峰的李卫民老师讲过道德经里的一句话“有道无术,术可求;有术无道,止于术”,我的目标是和大家一同“修道论术”。

博客https://mrznan.github.io/blog/

  首先给咱一个明确的定位,咱的工作就是搬石头!工头(客户端)是你老大,让你干啥就得干啥。

  工头老大也没事别的事难为你,就是让你去搬石头(需求),刚开始你一个人还可以,一块大石头也就100来斤,老骨头还受得了。突然某一天,让你搬个300斤的石头,你没日没夜的搬石头,练就了一身肌肉,终于也勉强给抬起来了。

  这就是所谓的垂直扩展,也就是提升自身硬实力,能从搬一百斤的石头飙升到三百斤,估计你的工资也翻了两三倍了吧!所以持续提升硬实力永远是不会错的,这是真理啊!(买牛逼服务器)。

  更可恶的是,突然又一天,你接到的命令是抬起一块一吨重的石头,这下你可是犯了难了。

  俗话说,人多力量大,你机智的选择了找你的狐朋狗友们来帮忙,一起抬。(所谓水平扩展)

  当然请了朋友来、打个电话、吃顿饭是免不了的了。思来想去,罗列步骤大致如下:

  1、想一想,都有谁能够帮我搬这块石头呢?于是拿小笔笔写了个名单。或者发个朋友圈,说我需要帮忙搬石头,愿意帮我的明天来“大同刀削面”集合。(配置,可以是互相寻找,也可以是主动注册

  2、开始打电话,“老张”,过来帮咱搬一下石头呗!(老张心想,这货打电话准没好事!),同时又给单子上的其他人都打了电话。(首次进行了通信

  3、你约定好定在“大同刀削面”给大家吃顿好的(真是小气),饭局中,你想到这搬石头的时候可不能瞎搬,万一弄不好砸了脚可不太好。你大概看了看,说道:“老李啊,你是我们这群人里,年纪最大的,你搬过的石头比我们吃过的盐还多,到时候,你可得给大家组织组织啊”。(选了个主节点

  4、吃了饭,铆足了劲,大家开始活动了。工头见状:“哎呦,不错欧,懂得请后援了”,“工头大哥,一会我们搬得时候有啥问题,您就和我们老李说,他可是搬石头能手啊!”(对外只暴露一个入口)

  5、“老李啊,你组织大家把这块巨石从咱们喜马拉雅山低搬到山顶去哈!”,“我靠,一碗刀削面,你让我干了喜马拉雅山顶...算了,搬吧!真坑”。老李开始安排:"小王啊、你最年轻有劲,你就在最下边顶住啊 ...."。(资源分配)咱们下边的人先上一个台阶,上边的人再上哈,迈步子要整齐,可别乱了...(资源调度,任务调度)

  6、不巧老李上到半山腰病倒了下山回家去吧,你急了,老李现在不在了,我们怎么合作啊,再选一个指挥吧!那了大家投票吧,当然不能选自己,于是大家开始投票,有一半以上的人选了老赵,于是老赵有开始指挥大家去完成搬石头大任。(灾备

  大致基本的流程就是这样,从单机到集群。最大的难点莫过于怎么把集群做成一台足够强大且永不挂机的单机,无限强大意味着cpu要多少核有多少核,内存,磁盘要多大有多大,还有永远不挂。我们同样围绕这句话去思考,开始划重点了:1、一台,2、足够强大,3:永不挂机。

  1、一台机器意味着对外要一致

先秦时期,很多有大权势,大财富的人都喜欢招收门客,当有人向他询问事情时,他们经常会寻求门客建议,大家共同商榷,那时的百家争鸣可能也和这多少有些关系,对外却仅仅只是你一个人而已。所谓“吕府”,大伙只知有吕不韦不知有其他耳。

  2、足够强大意味着扩展要灵活

你家老爷再牛逼,个人能力再强大也是解决不了所有事情的,毕竟能当老爷的都是些大人物,事情都比较繁忙。所以广收天下门客才是硬道理,收门客有很多钟办法,但最常用的有两种:一是我知道诸葛亮是人才,所以我三顾茅庐,另一种是打出“广招门客”大旗,让天下人知我,投奔我,我则择优录用。(集群的搭建)

  当然,这么多门客的管理会让你有些又疼。

  首先你要对这些门客统统进行备案,统计一下他的年龄,兴趣,爱好,有啥特长,是否娶妻等等(元数据),当有新的门客得到批准(在你这注册成功)加入这个团队后,还要有人把以上信息再补充上(服务注册与发现)。你时不时还要请大家一起吃个饭、点个名,看看谁没来,是请假了,还是出门发现自己生父是秦王直接撂挑子不干了(服务上下线)。

  门客再多也不能解决无限多的问题,所以像这种有身份的人,一般会有一个看门老大爷和两三个门卫。他们的工作就是一天杵在哪里,看看谁来拜访我家老爷,如果拜访的太多了(并发太高),或者不合时宜(维护中),或者不想见(攻击者),这老大爷就会说:“各位请回吧!老爷今天不见客了。”,你压根连门也进不去!,(熔断,服务降级)。

  3、永不挂机意味着在你能承受的风险面前他永远能用

  一帮劫匪绑架了老爷,意图勒索钱财,这时就要选一个说了算的人出来主持大局,人选大致会有两种办法,一、老爷早就定了主持大局之人,潘小莲。二、没定的话就大家选举一个吧。(master挂了怎么办,高可用)最好得有个主心骨,要不然,我该听谁的,想想都脑袋疼。(脑裂)

  老爷被绑架我觉得是一个家族能够承受的风险,在这种情况下选一个主心骨,这个家一样能撑起来。什么是不能承受,比如你家老爷写了首诗“不教胡马度阴山”,皇帝一看,这胡马是不是在说我,一气之下诛九族。(灾备)

  这一切的目地就是,客户端要知道访问谁,服务端要一直知道我这有啥,我能干啥(鸡鸣狗盗随便来)

  敲黑板了,

  总结一下重点要解决的问题,1、这么多门客,怎么管理,2、门客之间的关系,怎么维护,3、老爷或者门客出问题了该怎么办

  翻译过来也就是,这么多节点,怎么建立联系形成集群,怎么管理节点分配任务和资源,怎么保持持续通信动态上下线,怎么保证持续可用实现永不挂机。看看大数据的hadoop,kafka,spark,包括现在的微服务等等都是在解决这些问题,这些问题得解决就使你在使用他们时就如同操作一台强大的单机。

相关文章

网友评论

    本文标题:白话集群的编程思想

    本文链接:https://www.haomeiwen.com/subject/qhweectx.html