2022-03-08_星期二

Pulsar 和其他消息队列最大的区别是,它采用了存储计算分离的设计。存储消息的职责从 Broker 中分离出来,交给专门的 BookKeeper 存储集群。这样 Broker 就变成了无状态的节点,在集群调度和故障恢复方面更加简单灵活。

Pulsar 与其他消息队列在架构上,最大的不同在于,它的 Broker 是无状态的(Stateless)。也就是说,在 Pulsar 的 Broker 中既不保存元数据,也不存储消息。

20220308112604.png

  • ZooKeeper 集群的作用和在 Kafka 中是一样的,都是被用来存储元数据
  • BookKeeper 集群则被用来存储消息数据

BookKeeper

BookKeeper 有点儿类似 HDFS,是一个分布式的存储集群,只不过它的存储单元和 HDFS 不一样,在 HDFS 中存储单元就是文件。而 BookKeeper 的存储单元是 Ledger。

Ledger 就是一段 WAL(Write Ahead Log),或者你可以简单地理解为某个主题队列的一段,它包含了连续的若干条消息,消息在 Ledger 中称为 Entry。

只有创建 Ledger 的进程可以写入数据,Ledger 这个资源不共享,也就不需要加锁,是一种很巧妙的设计。

其他的消息队列,分区与 Broker 的对应关系是相对稳定的,只要不发生故障,这个关系是不会变的。 而在 Pulsar 中,这个对应关系是动态的,它可以根据 Broker 的负载情况进行动态调整,而且由于 Broker 是无状态的,分区可以调整到集群中任意一个 Broker 上,这个负载均衡策略就可以做得非常简单并且灵活。如果某一个 Broker 发生故障,可以立即用任何一个 Broker 来替代它。

Pulsar 是如何来完成消息收发的

客户端在收发消息之前,需要先连接 Service Discovery 模块,获取当前主题分区与 Broker 的对应关系,然后再连接到相应 Broker 上进行消息收发。

存储计算分离的设计有哪些优点

在 Pulsar 这种架构下,消息数据保存在 BookKeeper 中,元数据保存在 ZooKeeper 中,Broker 的数据存储的职责被完全被剥离出去,只保留了处理收发消息等计算的职责,这就是一个非常典型的“存储计算分离”的设计。

对于计算节点来说,它不需要存储数据,节点就变成了无状态的(Stateless)节点。一个由无状态节点组成的集群,管理、调度都变得非常简单了。

  • 支持水平扩展
  • 负载均衡策略可以做得非常灵活
  • 故障转移(Failover)也更加简单快速

缺点:

  • BookKeeper 依然要解决数据一致性、节点故障转移、选举、数据复制等等这些问题
  • 存储计算分离之后,原来一个集群变成了两个集群,整个系统其实变得更加复杂了
  • 存储计算分离之后,系统的性能也会有一些损失

后端技术面试 38 讲

而对于搜索引擎来说,要对海量文档进行快速内容检索,主要使用的是倒排索引技术。

互联网一方面是将全世界的人和网络应用联系起来,另一方面,也将全世界的网页通过超链接联系起来,几乎每个网页都包含了一些其他网页的超链接,这些超链接互相链接,就让全世界的互联网构成了一个大的网络。

Google 使用了一种叫 PageRank 的算法,计算每个网页的权重,搜索结果就按照权重排序,权重高的网页在最终结果显示的时候排在前面。

PageRank 算法认为,如果一个网页里包含了某个网页的超链接,那么就表示该网页认可某个网页,或者说,该网页给某个网页投了一票。

20220308114553.png 开始的时候,所有网页都初始化权重值为 1,然后根据超链接关系计算新的权重。

  • 比如 B 页面包含了 A 和 D 两个页面的超链接,那么自己的权重 1 就被分成两个 1/2 分别投给 A 和 D
  • 而 A 页面的超链接包含在 B、C、D 三个页面中,那么 A 页面新的权重值就是这个三个页面投给它的权重值之和:1/2 + 1/3 + 1 = 11/6
  • 经过一轮 PageRank 计算后,每个页面都有了新的权重,然后基于这个新的权重再继续一轮计算,直到所有的网页权重稳定下来,就得到最终所有网页的权重,即最终的 PageRank 值

在一个网页中包含了另一个网页,是对另一个网页的认可,认为这个网页质量高,值得推荐。而被重要网页推荐的网页也应该是重要的,PageRank 算法就是对这一设想的实现,PageRank 值代表了一个网页受到的推荐程度,越受推荐越重要,就越是用户想看到的。

有时候,我们更期望搜索结果按照内容和搜索词的相关性进行排序,这种情况可以使用词频 TF 进行排序,词频表示某个词在该文档中出现的频繁程度,也代表了这个词和该文档的相关程度。 20220308114715.png

而对于淘宝这样的平台型应用,搜索引擎技术甚至驱动其核心商业模式:

  • 一方面,淘宝海量的商品需要通过搜索引擎完成查找
  • 另一方面,淘宝的主要盈利来自于搜索引擎排名

本质上,淘宝的核心技术和盈利模式跟百度、Google 都是一样的。

正面管教

孩子们基于对自己生活经历的理解,总是在对自己、他人以及周围的世界做着决定并形成着信念。

非常普遍的情况是,孩子们会把自己和兄弟姐妹相比较,而且会认定,如果自己的某个兄弟姐妹在某个方面做得很好,自己的唯一“生存”选择只能是以下四项之一:

  • 在一个完全不同的方面发展自己的能力
  • 竞争,努力做得比家中其他孩子更好
  • 反叛或者报复
  • 因为相信自己赢不了而放弃

孩子们有很好的察觉能力,但他们的解释能力却很差。

排行最小的孩子常常善于利用自己的魅力来激励别人为他们做事。他们常常富有创造性,并且爱玩儿。他们大部分的创造性、精力以及智力都会用在通过魅力操纵来得到自己的价值感。

对于受到娇纵的孩子来说,最大的危险是只要他们没得到别人的照顾或自己的要求没有得到满足,就往往认为生活不公平。

在孩子 3 岁以后,如果父母继续为孩子穿衣服,就是在剥夺孩子发展责任感、自立和自信意识的机会。孩子就不大可能培养出对自我能力的信心。

当父母因为自己做会更容易、更快、更好,而无意中剥夺了孩子培养生活技能的机会时,他们没有真正考虑过这样做的长期影响。

永远不要替孩子做任何他自己会做的事情。

当两个孩子年龄相差 4 岁或 4 岁以上时,他们之间的相互影响就会减少。年龄的差距让他们觉得彼此之间竞争会较少。

在一个推崇竞争并且塑造竞争气氛的家庭里(正如很多美国家庭那样),孩子们之间的差异就会增强。在一个推崇合作并塑造合作气氛的家庭里,孩子们之间的不同就会减少。

那些对彼此的养育方法认同的父母,营造的是一种合作的家庭气氛。

过度补偿:心理学专用词汇,指为克服自卑等心理而发生的过度反应。

对绝大多数老大来说,告诉他们只要努力就会做得更好是灾难性的。老大做得可能不尽人意的原因,在于因过于追求完美而造成他们过于紧张,以至于表现得没那么好。

仅仅让另一个人知道,你能明白、理解并且尊重他的观点,就已经是你所能做的最具有鼓励作用的事情了。

婚姻方面老大和老小通常更容易相互吸引:老小喜欢被人照顾,而老大愿意照顾别人,这种组合看来非常般配。

当两个老大结婚时,通常是出于赏识对方身上与自己相同并且令自己引以为傲的特点;当两人无法就到底谁说了算、谁的方式最好而达成一致时,麻烦就开始了。

两个老小结婚通常因为他们发觉俩人一起会很快乐,可到了后来,他们可能会埋怨对方对自己照顾得不够周到。

只要有相互间的理解、尊重、合作以及幽默感,任何人之间的结合都可能是成功的。

身为老大的老师通常喜欢负责。他们通常愿意为学生组织一些有趣而复杂的项目。他们偏爱条理和秩序,最乐意看到学生们坐得整整齐齐,按照他们说的去做。

那些排行中间的老师,对自己学生的心理健康往往抱有与对他们的学业成绩同样的兴趣。他们会关注那些反叛的学生,并希望自己能给予他们积极的影响。

如果你把责任感看成是一种解放——某种基于你知道自己想改变就能改变的事情——而不是负疚,你就能做得更好。

所谓不良行为无非是缺乏知识(或意识)的行为、缺乏有效技能的行为,以及发展适宜性行为、因失望而产生的行为——或者因为一个偶然事件导致我们转向受“原始脑”操纵的行为(此时唯一的选择只有权力争夺或退却,而无法沟通)。

四个错误观念和错误行为目的:

  1. 寻求过度关注——错误观念:只有在得到你的关注时,我才有归属感。
  2. 寻求权力——错误观念:只有当我说了算或至少不能由你对我发号施令时,我才有归属感
  3. 报复——错误观念:我得不到归属,但我至少能让你同样受到伤害。
  4. 自暴自弃——错误观念:不可能有所归属。我放弃。

所有人的首要行为目的都是归属感和价值感。孩子们(以及很多大人)之所以会在上述四个错误目的中选择一个或几个,是因为他们相信:

  • 寻求过度关注或寻求权力有助于他们获得归属感和价值感
  • 报复会使他们在没有能获得归属感和价值感的经历中受到的伤害得到补偿
  • 放弃是他们的唯一选择,因为他们真的相信自己不够格

错误目的表

20220308184232.png 20220308184240.png

在你觉得自己受到了伤害时,要注意不能反击,而应该表示理解孩子的感受:“你现在一定觉得受到了很大的伤害。我能理解。要是换成我,我可能也会有那种感觉。”对孩子的感受表示理解,是消除报复循环的一种非常有效的方法,但是还需要紧跟着解决问题:“当我们都觉得好受些以后,为什么不一起来谈谈这个问题呢。”

一个行为不当的孩子就是一个丧失了信心的孩子。这种信心的丧失来自于其失望的信念,以及没有归属感和自我价值感。

帮助识别错误目的和观念的线索:

大人对孩子行为的情感反应

  • 如果你的感受是恼怒、着急、内疚或烦恼,孩子的目的很可能是寻求过度关注
  • 如果你觉得受到了威胁(你也和孩子一样想要主导一切)、受到了挑战、被激怒或被击败了,孩子的目的很可能是寻求权力。如果你以权力回应,就会陷入权力之争
  • 如果你感觉受到了伤害(你那么努力地想做个好父母或者好老师,这孩子怎么能这么对你?)、感到失望、难以置信或者憎恶,孩子的目的很可能是报复
  • 如果你觉得很无能为力(我到底怎样才能走进这孩子的内心,帮孩子鼓起劲头来啊?)、绝望、无望或无助,孩子的目的很可能是自暴自弃。如果任由自己的感觉支配你,你也就和孩子一样会放弃。

当你要求孩子停止其行为时,孩子的反应

  • 寻求过度关注:孩子会停下来一会儿,但通常不久就重新开始原来的行为,或能够引起你的关注的其他行为
  • 寻求权力:孩子继续其不良行为,并且可能对你的要求进行言语顶撞,或者消极抵抗。这通常会升级为你和孩子之间的权力之争
  • 报复:孩子以一些破坏性的行为或伤害你的话来反击你。这常常会升级为你和孩子之间的报复循环
  • 自暴自弃:孩子往往很消极,希望你快点放弃努力,别再打扰他。有时候,这样的孩子会把这种感觉“以行动表达出来”(或许会成为经常在班上闹笑话的人)来掩盖他们在学业上的不胜任感

愤怒至少让我们有一种虚假的力量感——我们可以做些事情,尽管这些“事情”只是怒吼、咆哮或者对孩子的猛烈攻击。

一个行为不当的孩子其实是在说:“我是一个孩子,我只是想有所归属。”

当我们不理解孩子行为背后的错误观念和目的时,我们只是对孩子的行为作出反应,而没有对其行为背后的观念作出反应。

一个受到鼓舞的孩子不需要行为不当。

对每一种错误目的的有效鼓励方式

寻求过度关注

  • 把孩子引向建设性的行为。
    • 在教室里,给他们分派一项能给他们积极关注的任务
    • 在家里,给孩子一项对大人有帮助的任务,比如给孩子一个秒表,你打电话时让孩子替你计时
  • 做孩子意料不到的事情。
    • 一个满怀的拥抱常常很有效。
  • 设定特别时光的时间表,定期陪孩子
  • 用会意的一笑让孩子明白你不会被纠缠于此,然后说:“我期待着六点钟的特别时光。”
  • 约定一些无言的信号:把手放在胸口上表示“我爱你”,用手捂住耳朵表示等孩子不哼唧了你就会听她说话
  • 给予孩子安慰,表达你对他的信任。
    • “我爱你,我知道你会自己处理好的。”
  • 不要管孩子的行为,要以关切的方式把手放在孩子肩膀上,继续你和孩子的对话
    • 不管孩子的行为,而不是不管孩子。
  • 在大家都愉快的时候,花时间训练孩子,用角色扮演来向孩子演示其他行为方式,比如使用语言而不是哼哼唧唧
  • 闭上嘴,采取行动
    • 比如,停止哄劝,从沙发里站起来,拉住孩子的手,把她带到洗漱间去刷牙。你不妨挠挠她的胳肢窝,既保持你的态度坚定,又增添点儿乐趣。
  • 说出你的爱和关怀

寻求权力

  • 从权力之争中退出来,让双方都有时间冷静,然后再按照下面的一项或几项去做
  • 承认你不能强迫孩子做任何事情,并请孩子帮助你一起找到对彼此都有用的解决方案
  • 用“赢得合作的四个步骤”
  • 随后开个一对一地解决问题的小会
  • 引导孩子建设性地使用他们的权力
  • 让孩子参与问题的解决
  • 决定你自己要做什么,而不是试图让孩子做什么。重要的是,你的这些行为都必须是和善而坚定的。闭紧你的嘴——避免提醒和说教——会尤其有效
    • “等大家都准备好以后,我会继续讲课。”
    • “我会洗放在洗衣篮里的衣服,但不会洗扔在地上的衣服。”
    • “我现在把车开到路边停下来,直到你们不再打架。”
  • 设定特别时光的时间表,定期陪孩子
  • 让孩子参与建立日常惯例,然后让惯例说了算
  • 提供有限制的选择
  • 让孩子把他们的问题放到家庭会议或班会的议程上
  • 说出你的爱和关怀

报复

孩子会以寻求报复(这使他们有一种控制感)来掩盖受到伤害的感觉(使他们觉得软弱无力)。

  • 不要还击,要从报复循环中退出来
  • 保持友善的态度,等待孩子冷静下来
  • 猜测孩子因为什么受到了伤害,要表达出同情,表达出你对孩子受到伤害的感觉的理解
  • 坦诚地告诉孩子你的感受
    • 我对于_______觉得________,因为________,我希望________。
  • 反射式倾听:通过将你听到的反射回去,以走进孩子的内心世界
    • “看来你很伤心。”
    • 反射式倾听可以包括启发式提问:“你能多告诉我一些吗?后来发生了什么?这件事带给你的感受是什么?”
    • 关键是你要理解孩子的观点,而不是要告诉孩子你的观点
    • 如果是你造成了对孩子的伤害,请用“矫正错误的三个 R”
    • 用“赢得合作的四个步骤”
    • 让孩子和你一对一地讨论问题的解决办法
    • 表达你的关切,鼓励孩子
    • 设定特别时光的时间表,定期陪孩子。在学校里老师可以是偶尔陪孩子
    • 用语言表达你的爱和关怀

自暴自弃

  • 花时间训练孩子,把事情细分到能让孩子体验到成功的足够简单的基本步骤
  • 向孩子演示他能够照着做的小步骤
    • “我来画这一半圆,你画另一半。”
    • 安排一些小的成功。找出孩子能够做得到的任何事情,给他们提供大量的机会显示他们在这些方面的技能
    • 肯定孩子的任何积极努力,不论多么微小
    • 放弃你对孩子的任何完美主义的期待
    • 关注孩子的优点
    • 不要放弃
    • 定期安排特别时光陪孩子
    • 在课堂上鼓励孩子选择一个伙伴或同龄的“小老师”来帮助他们
    • 用语言表达你的爱和关怀

孩子更愿意遵守他们自己参与制订的解决方案。

寻求过度关注和自暴自弃的区别:

  • 一个寻求过度关注的孩子也会表现得无能为力,但当你关注他时,他会振作起来
  • 而一个相信自己无能的孩子却希望你别去打扰她。

赢得合作的四个步骤

  1. 表达出对孩子感受的理解。一定要向孩子核实你的理解是对的。
  2. 表达出对孩子的同情,而不是宽恕。同情并不表示你认同或者宽恕孩子的行为,而只是意味着你理解孩子的感受。这时,你如果告诉孩子,你也曾有过类似的感受或行为,效果会更好。
  3. 告诉孩子你的感受。如果你真诚而友善地进行了前面两个步骤,孩子此时就会愿意听你说了。
  4. 让孩子关注于解决问题。问孩子对于避免将来再出现这类问题有什么想法。如果孩子没有想法,你可以提出一些建议,直到你们达成共识。

矫正错误的三个 R

  1. 承认(Recognize)——“啊哈!我犯了一个错误!”
  2. 和好(Reconcile)——“我向你道歉。”
  3. 解决(Resolve)——“让我们一起来解决问题。”
updatedupdated2022-03-092022-03-09