拉巴力的纸皮箱


  • 首页

  • 标签

  • 归档

  • 关于

  • 搜索

《人性的弱点》摘要

发表于 2020-07-19

十年前看过这本书,现在早就忘掉差不多了,重新整理一下。


  1. 与人相处的大秘窍:献出你真实,诚恳的赞赏。
  2. 如果这样做,你将到处受欢迎:真诚的对别人发生兴趣。
  3. 在辩论中,获得最大利益的唯一方法,就是避免辩论。
  4. 要真诚的以他人的观点去看事情。
  5. 在批评对方之前,不妨先谈谈你自己的错误。
  6. 请对方帮忙。

第一篇 待人的基本技巧

第一章如欲采蜜,勿蹴蜂房

  • 批评是没有用的,因它使人增加一层防御,而且竭力的替自己辩护。批评也是危险的,它会伤害了一个人的自尊,和自重的感觉,并激起他的反抗。
  • 人类自然的天性,是做错事只会责备别人,而绝不会责备自己,我们每个人都是如此的。
  • 不要批评,责怪或抱怨。

第二章 与人相处的大秘窍

  • 自重感,这是一种痛苦的,而且急待解决的人类「饥饿」,如果能诚挚的满足这种内心饥饿的人,就可以将人们掌握在他手掌之中。
  • 寻求自重感的欲望,是人类和动物间,一项重要的差别。它使人努力成为伟人或强盗。
  • 献出你真实,诚恳的赞赏。

第三章 左右逢源的方法

  • 如果有一个成功秘诀的话,那就是如何得到对方『立场」 的能力;由他的观点设想,正同由你自己的观点一样。
  • 一个人能设身于他人境地,能了解他人意念活动,他不必考虑到将来的前途如何。
  • 永远站在别人立场去打算、设想,并由对方的观点,去观察事物的趋向。
  • 先激起对方某种迫切的需要,若能做到这点就可左右逢源,否则到处碰壁。
  • 威立姆.温德,有一次说过:「表现自己,那是人性最主要的需要。」可是,为什么在我们事业上,不用这种同样的心理学呢?
    引起别人的渴望。
●提要
不要批评,责怪或抱怨。
献出你真实,诚恳的赞赏。
引起别人的渴望。

第二篇 使人喜欢你的六种方法

第一章 如果这样做,你将到处受欢迎

  • 真诚的对别人发生兴趣。

第二章 如何给人好印象

  • 微笑!
  • 如果你希望别人用一副高兴、欢愉的神情来接待你,那么你自己先要用这样的神情去对别人。
  • 遇到人就展开一个轻松的微笑。
  • 行动该是追随着一个人自己的感受………可是事实上,行动和感受,是并道而驰的。所以你需要快乐时,可以强迫自己快乐起来。
  • 没有给人微笑的人,更需要别人给他微笑。

第三章 你要避免发生麻烦,就请这样做

  • 你要记住你所接触中,每一个人的姓名。
  • 最简单、最明显、而又是最重要的如何获得好感的方法,就是记住对方的姓名,使别人感到自己很重要

第四章 如何养成优美而得人好感的谈吐

  • 做一个善于静听的人,鼓励别人多谈谈他们自己。
  • 很少人能拒受那专心注意所包含的谄媚。
  • 专心静听着对你讲话的人,那是最重要的,再也没有比这个更重要的了
  • 最爱挑剔的人,最激烈的批评者,往往会在一个怀有忍耐、同情的静听者面前软化下来
  • 他们所喜欢的,不是善于谈话的人,是那些静静听着的人。能养成善于静听能力的人,似乎要比任何好性格的人少见。
  • 要使别人对你感到兴趣,先要对别人感到兴趣。

第五章 如何使人感到兴趣

  • 就别人的兴趣谈论。

第六章 如何使人很快的喜欢你

  • 使别人感觉到他的重要–必需真诚的这样做。
  • 如果我们是那样的卑贱自私,不从别人身上得到什么,就不愿意分给别人一点快乐,假如我们的气量比一个酸苹果还小,那我们所要遭遇到的,也绝对是失败。
  • 自重的欲望,是人们天性中最急切的要求。
  • 最重要的定律:「你希望别人怎样待你,你就该怎样去对待别人。」
  • 真诚,一股出自内心的赞赏的力量。
  • 爱默生所说的:「凡我所遇到的人,都有比我优越的地方,而在那些方面,我能向他学习。」
    ●提要
    使人喜欢你的六种方法
    第一项规则:真诚的对别人发生兴趣。
    第二项规则:微笑。
    第三项规则:记住你所接触中,每一个人的姓名。
    第四项规则:做一个善于静听的人,鼓励别人多谈谈他们自己。
    第五项规则:就别人的兴趣谈论。
    第六项规则:使别人感觉到他的重要--必需真诚的这样做。
    

第三篇 得人同意于你的十二种方法

第一章 你不可能在争辩中获胜

  • 在辩论中,获得最大利益的唯一方法,就是避免辩论。
  • 「永远避免正面的冲突!」
  • 天下只有一种方法,能得到辩论的最大胜利,那就是尽量避免辩论………避免辩论,就像避开毒蛇和地震一样。
  • 「我们绝不可能用辩论使一个无知的人心服口服。」
  • 「跟这种冷厉,傲慢,固执的稽查员讲理,那等于是废话…….跟他争辩愈久,他愈是固执,所以我决定避免跟他争论,换个话题,赞赏他几句。
  • 释迦牟尼曾这样说过:「恨永远无法止恨,只有爱可以止恨。」
    所以误会不能用争论来解决,而需要用外交手腕,和赋予对方同情来解决。

第二章 如何避免制造敌人

  • 你可以用神态、声调,或是手势,告诉一个人他错了,就像我们用话一样的有效……而如果你告诉他错了,你以为他会感激你?不,永远不会!因为你对他的智力、判断、自信、自尊,都直接的给予打击,他不但不会改变他的意志,而且还想向你反击。如果你运用柏拉图、康德的逻辑来跟他理论,他还是不会改变自己的意志,因为你已伤了他的自尊。
  • 我所知道的只有一件事,那就是我什么也不知道。
  • 很少人有逻辑性,我们大多数的人,都怀有成见,我们之间,都受到嫉妒、猜疑、恐惧,和傲慢所毁伤。
  • 任何事情只要运用若干的手腕;并不需要告诉对方,他是如何的错误。
  • 尊重别人的意见,永速别指摘对方是错的。

第三章 如果你错了就承认

  • 迅速、坦白的承认错误
  • 假如我们已知道一定要受到责罚,那我们何不先责备自己,找出自己的缺点,那是不是比从别人嘴说出的批评,要好受得多?
    你如在别人责备你之前,很快的找个机会承认自己的错误,对方想要说的话,你已替他说了,他就没有话可说,那你有百分之九十九会获得他的谅解。
  • 任何一个愚蠢的人,都会尽力辩护自己的过错………而多数愚蠢的人是这样的一个能承认自己错误的人,却可使他出类拔萃,并且给人一种尊贵、高尚的感觉。
  • 若是我们对了,我们巧妙婉转的让别人赞同我们的观点。可是,当我们错误的时候,我们要快速的、坦直的承认我们的错误。运用这种方法,不但能获得惊人的效果,而且在若干情形下,比替自己辩护更为有趣。
  • 「用争夺的方法,你永远无法得到满足。可是当你谦让的时候,你可以得到比你所期望的更多。」

第四章 使你走上理智的大路

  • 以友善的方法开始。
  • 温柔、友善的力量,永远胜过愤怒和暴力。
  • 『让我们坐下一起商量,如果我们之间意见不同,我们不妨想想看原因到底何在,主要的症结是什么?。我们不久就可看出,彼此的意见相距并不很远,不同的地方很少,而相同的地方却很多。也就是说只要忍耐,加上彼此的诚意,我们就可以更接近了。」

第五章 苏格拉底的秘密

  • 跟人们谈话时,别开始就谈你们意见相左的事,不妨谈些彼此间赞同的事情。
  • 有说话技巧的人,开始的时候就能得到很多「是」的反应,唯有如此,他才能将听者的心埋,导向正面方向。
  • 他的处世技巧,现在被称为「苏格拉底辩论法」,就是以「是,是,」作为他唯一的反应观点。他问的问题,都是他的反对者,所愿意接受而同意的。他连续不断的获得对方的同意、承认,到最后,使反对者在不知不觉中,接受了在数分钟前,他还坚决否认的结论。

第六章 处理一个抱怨者的安全手法

  • 这是实在的,即使是我们的朋友,也宁愿多谈他们自己的成就;喜欢听我们吹嘘的人,可说少之又少。
  • 法国哲学家洛希夫克,曾这样说过:「如果你想得到仇人,你就胜过你的朋友,可是,如果想获得更多的朋友,就让你的朋友胜过你。」
  • 因为当朋友胜过我们时,那就可以满足了他的自重感。可是,当我们显出胜过朋友时,那会使他有种自卑的感觉,并会引起猜疑和妒忌。
  • 德国人有句俗语,那是:「当我们所猜疑、妒忌的人,发生一桩不幸的事时,会使我们有一种恶意的快感。」
  • 所以,别让我们表现出太多的成就来,我们要虚怀若谷、处处谦冲,那样会永远使人喜欢你,谁都愿意跟你接近。
  • 生命是短促的,别把我们不值一提的成就,作为谈话的资料,令人听了厌烦。我们要鼓励别人多说话。仔细想一想,你实在没有什么可以夸耀的。

第七章 如何使人跟你合作

  • 没有人喜欢强迫自己去买一样东西,或是被人派遣去做一件事。我们都喜欢随自已的心愿买东西,或是照着自己的意思去做事情。同时,希望有人跟我们谈谈我们的愿望、需要、想法。
  • 要让他觉得这是他自己的意思。

第八章 一个创造奇迹的公式

  • 要真诚的以他人的观点去看事情。
  • 你接触到每一件事时,会处处替别人着想。而且以对方的观点,去观察这件事情。

第九章 每个人所需要的

  • 同情对方的意念和欲望。
  • 你是不是愿意得到一句神妙的语句?一个可以停止争辩,消除怨恨,制造好感,使人们注意的听你谈话的语句。
    是的,就有这样一句话,让我告诉你。你对人开始这样说:「对你所感觉到的情形,我一点也不会责怪你,如果我是你的话,我也有同样的感觉。」
    就这样一句简单的话,世界上最狡猾,最固执的人,也会软化下来。可是你必需极是真诚的说出那些话来,假如你是对方的话,你当然有他同样的感觉。
  • 你明天遇到的人,其中可能有四分之三都饥渴似的需要同情….!如果你同情他们,他们就会喜欢你。
  • 当你接到这样一封信的时候,第一件事,就是如何用严正的措辞,去对付一个不礼貌而鲁莽的人,接着,或许你就动笔写信了。
    可是,如果你是一个聪明的人,你会把这封信放进抽屉里锁起来,经过两天后,再把这封信拿出来……像这类的信,迟上几天寄出,也不会受到什么影响。但当你两天后再拿出这封信来看时,你就不会投入邮箱,那就是我所采取的途径。
  • 盖慈博士在他那一部著名的「教育心理学」书上,这样写着:一人类普遍的追求同情,孩子们会急切的显示他受伤的地方。有的甚至于故意自己割伤、弄伤,以博得大人们的同情。」
    成人们也有类似的情形,他们会到处向人显示他的损伤,说出他们的意外事故,所患的疾病,特别是开刀手术后的经过。「自怜! 实际上是一般人的习性。」

第十章 人人都喜欢的吸引力

  • 事实确实是如此,凡你所见到的人–甚至你照镜子时所看到的那个人- 都会把自己看得很高尚,他对自己的估计,都希望是良好而不自私的。
    银行家摩根,在他一篇分析的文稿中说:人会做一件事,都有两种理由存在……一种是好听的,一种是真实的。
  • 要改变一个人的意志,需要激发他高尚的动机

第十一章 实行、推进,别停顿下来

  • 现在是表演的时代,只是叙述其中的原理,还不能有具体的效果。这种原理需要生动、活泼,需要使它更有趣、更戏剧化,所以必需用有效的「表演术」。
  • 使你的意念戏剧化。

第十二章 当你无计可施时,不妨试试这个

  • 让司华伯用他自己的话来解释:「如果我们想要完成一件事,必须鼓励竞争,那并不是说争着去赚钱,而是要有一种胜过别人的欲望。」
    争胜的欲望加上挑战的心理,对一个有血气的人来说,是一种最有效的激励。
  • 激将法
    • 党魁伯位德用了激将法,他转身向罗斯福大声的说:「难道圣巨恩山的英雄,竟是这样一个弱者?」
    • 司密斯见他犹疑不决的样子,微笑说:「年轻人,我不会怪你感到害怕……是的,那边确实不是一个太平的地方,那是需要一个有、大人物。才干的人,才能有这份魄力去做的。」
  • 只有竞争,才能发挥他们的工作效能。
  • 争强的欲望,自重感的欲望。
● 提要
得人同意于你的十二种方法
第一项规则:在辩论中,获得最大利益的唯一方法,就是避免辩论。
第二项规则:尊重别人的意见,永远别指摘对方是错的。
第三项规则:如果你错了,迅速、郑重的承认下来。
第四项规则:以友善的方法开始。
第五项规则:使对方很快的回答「是!是!」。
第六项规则:尽量让对方,有多说话的机会。
第七顼规则:使对方以为这是他的意念。
第八项规则:要真诚的以他人的观点去看事情。
第九项规则:同情对方的意念和欲望。
第十项规则:激发更高尚的动机。
第十一项规则:使你的意念戏剧化。
第十二项规则:提出一个挑战。

第四篇 使人同意你的九种方法

第一章如果你必须批评,这是开始的方法

  • 当我们听到别人对我们的称赞后,如果再听到其它不愉快的话,就比较容易接受了。
  • 不使对方难堪、反感,而改变一个人的意志
  • 用称赞和真诚的欣赏作开始。

第二章 如何批评才不致招怨

  • 我们要劝阻一件事,永远躲开正面的批评这是必需要记住的。如果有这个必要的话,我们不妨旁敲侧击的去暗示对方。对人正面的批评,那会毁损了他的自重,剥夺了他的自尊。如果你旁敲侧击,对方知道你用心良善,他不但接受,而且还会感激你。
  • 间接的指出人们的过错。

第三章 先说出你自己的错误

  • 如果批评的人,开始先谦冲的承认自己也不是十全十美的、无可指责的,然后再指出人们的错误,这样就比较容易让人接受了。
  • 在批评对方之前,不妨先谈谈你自己的错误。

第四章 没有人喜欢接受命令

  • 你不妨可以考虑一下。」或者是「你认为那个有效吗?」
  • 运用那种方法,他保持了对方的自尊,而且使那人有了自重感。那种方法,也很容易取得对方的真诚合作,而对方不会有任何的反抗,或是拒绝。
  • 发问时,别用直接的命令。

第五章 让对方保持他的面子

第六章 如何鼓励人们成功

  • 即使只有稍微的进步,我们也要称赞,这样可以鼓励别人继续进步。
  • 我们具有各种潜在的能力,可是却惯于不会利用。这潜在的能力,其中一项,就是称赞别人、激励别人,让他们知道自己这股潜在的能力,所蕴藏的神奇效力。

第七章 给狗取个好名字

  • 一般人,都会愿意接受指导,如果你得到他的敬重,并且对他的某种能力表示敬重的话。」
    我们也可以这样说,如果你想改善一个人某方面的缺点,你要表示出,他已经具有这方面的优点了。
  • 莎士比亚说:「如果你没有某种美德,就假定你有。」是好是「假定」对方有你所要激发的美德,给他一个美好的名誉去表现,他会尽其所能,也不愿意使你感到失望的。
  • 几乎包括了富人、穷人、乞丐、盗贼,每一个人都愿意竭尽其所能,保持别人赠予他的「诚实」的美誉。
  • 给人一个美名让他去保全。

第八章 使错误看起来容易改正

  • 告诉一个孩子、一个丈夫,或是一个员工,他在某一件事上愚蠢至极,没有一点的天伦,他所做的完全不对。那你就破坏了他想要进取、上进的心情。可是,如果运用一种相反的技巧,多给人们一些鼓励,把事情看成很容易。使对方知道,你对他有信心,他有尚未发展出的才干,那他就会付出最大的努力,争取到这个胜利。
  • 用鼓励,使你要改正的错误,看来很容易做到;使你要对方所做的事,好象很容易做到。

第九章 使人们乐意做你所要的事

  • 人与人之间关系中,一项重要的规则,那是:「永远使人们乐意去做你所建议的事。」
  • 可是就有这样一件事,发生在拿破仑身上。当他训练荣誉军时,发出一千五百枚十宇徽章给他的士兵,封他的十八位将军为「法国大将」,称他的军队为「伟大的军队」的时候,人们也说他「孩子气」,讥笑他拿玩具给那些出生入死的老军人。拿破仑回答说:「是的,有时人就是受玩具所统治。」
    这种以名衔、或权威赠予的方法,对拿破仑有效,对你同样有效。
● 提要
改变人而不触犯或引起反感的九种方法
第一项规则:用称赞和真诚的欣赏作开始。
第二项规则:间接的指出人们的错误。
第三项规则:在批评对方之前,不妨先谈谈你自己的过错。
第四项规则:发问时,别用直接的命令。
第五项规则:顾全对方的面子。
第六项规则:称赞最细微的进步,而且称赞每一个进步。
第七项规则:给人们一个美名让他去保全。
第八项规则:用鼓励,使你要改正的错误,看来很易做到;使你要对方所做的事,好象很易做到。
第九项规则:使人们乐意去做你所建议的事。

第五篇 创造奇迹的信件

  • 这封信里的语气、含意,使人很愿意为发信人做一点事情,并且使对方有一种自重、高贵的感觉。因为请对方帮忙,使对方有了自尊、自重的感觉。
  • 巧妙的运用这种「帮我一个忙」的心理学。
  • 我们需要尽量鼓起对方的自尊心,但不是运用谄媚,或是虚伪,如果引误了这个出发点,是绝不会有效果的。
    必需记住:我们每一个人,都是希望如何被人欣赏、如何被人重视……甚至会不顾一切的去达到这个目的。可是,没有人会接受不诚恳的、虚伪的奉承。
    我愿意再说一遍:这书中所告诉你的原则,必需出自由衷才会有效果出现。

如何预估开发时间

发表于 2020-07-19
  1. 大的需求应预留时间方案设计和评审
  2. 方案时间( 包括跟相关依赖方确认方案时间)
    • 确定依赖方工作量和时间点
    • 工作项拆分
  3. 需求细节确认预留
  4. 开发时间
  5. 联调时间
  6. 配合测试时间(改bug)
  7. 单元测试
  8. 产品验收(测试环境)
  9. 需求改动预留
  10. 代码审核时间
  11. 处理其他突发事情预留
  12. 上线跟进
  13. 记录延期原因(需求变更,需求优先级调整,方案改动等;并同步相关人)
  14. 数据需求(可能影响方案实现细节)

参考场景

  1. 需求方需要一个相对准确的时间点;
  2. 给自己一个合理靠谱,相对科学的心理预估,避免坑人坑自己;
  3. 紧急情况特事特办。。。

职场生存小小总结

发表于 2020-07-19

不只局限于做需求本身

  1. 可以考虑把原本不合理的东西进行优化(当然要考虑分享和成本以及必要性);
  2. 基于基础通用的角度设计方案;
  3. 只做需求本身和想同时做更多的事,时间成本肯定不一样,如何解决两者之间的矛盾:
    1. 透明!把方案抛出来,由团队共同决策选择;
    2. 提供短期方案和长期优化方案。

及时反馈

  1. 发生故障及时反馈,不独自默默处理,避免由小故障变大故障;
  2. 工作进度和成果及时反馈,避免无用功;
  3. 其实还是要透明。
  4. 凡事有交代,件件有着落,事事有回音。
  5. 在不确定的场景下,尽量可以在多个假设中做多套方案(代价不会特别大),这样在对方案的时候,才不会导致得先重做才能继续讨论。

按流程做事

  1. 大公司的流程虽然繁琐,但很多流程其实有其存在的道理,毕竟来源于很多历史教训;保持敬畏,可以减少错误;
  2. 当然紧急情况除外,但是要保持透明,和坚持底线;

总结

  1. 尽量透明;
  2. 站在对方的角度考虑问题;
  3. 保持底线;

To Be Continued …

扩展

寻帮助 - 《认知觉醒》

  • 原来出现特殊情况时,飞行员的注意力会被巨大的危险所俘获,心智带宽降低,容易陷入单一视角,而此时,指挥员可以给飞行员提供有效的外部视角,帮助他们更好地处置特殊情况。
  • 同理,当我们对情绪问题或工作问题百思不得其解的时候,不要一个人闷头苦想,要学会主动寻求外部帮助,借助他人的多维视角来克服自己单一视角的局限。

监控告警要留意哪些点?

发表于 2020-07-16
  1. 告警信息要标明:机器、业务和环境等信息
  2. 制定合理的告警规则,梳理告警项,优化项目error日志等;避免大量无用的告警导致麻木
  3. 重要的特定业务可以单独配告警
  4. 是不是经常遇到临时打开某个开关,最后又忘记修改回来的事情?其实这种可以通过告警来解决,通过配置常规状态的固定值,定时检查告警即可。

扩展

  • 对 Java 意义重大的 7 个性能指标
  • 对业务系统的监控 No.118
  • 一些好用的开源监控工具汇总

使用“自旋”降低业务失败率

发表于 2020-07-16

业务场景描述

不说废话,直接描述以下两个业务场景

  1. 使用分布式锁控制并发
    请求----------> 服务A
           [1.尝试获取锁]
           [2.获取锁失败]
           [3.返回失败(提示操作太快)]


2. 强依赖服务超时或”请求处理中”

请求----------> 服务A
          [1.强依赖请求]----------> 服务B
                           [2.执行慢(网络抖动等原因)]
          [3.请求服务B超时]   
          [4.返回失败(提示服务繁忙)]

问题描述

  1. 场景1在获取锁失败时直接返回业务失败,可以考虑二次尝试;
  2. 场景2因为服务B执行慢,直接返回上层失败。
    • 服务A重试请求服务B时,可能请求已经执行完,很快就返回成功;或者服务B仍在执行该请求,返回“执行中”错误码。

解决方案

  1. 场景1可以使用“自旋”减少失败率:在抢锁失败时,当前线程“自旋”100m以内的随机数,再二次获取锁;
  2. 场景2同样可以使用“自旋”减少失败率:服务A在请求超时或收到“执行中”错误码时,同样自旋后再次重试,较大概率得到成功结果。

扩展

  • 自旋同样需要考虑“比例”问题,不然大量自旋会影响服务的吞吐量,具体可参考:由灾备工作中引发的对“比例”的思考

canal使用总结

发表于 2020-07-15

前言

本文只讲自己在使用canal之后的一些总结,关于canal的基础用法和介绍,不在这里赘述。

原理

  • canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能,建议配置binlog模式为row

  • 原文:https://blog.csdn.net/liupeifeng3514/article/details/79687130

  • mysql的自带复制技术可分成三步:

    1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);
    2. slave将master的binary log events拷贝到它的中继日志(relay log),这里是I/O thread线程;
    3. slave重做中继日志中的事件,将改变反映它自己的数据,这里是SQL thread线程。
  • 基于canal&otter的复制技术和mysql复制类似,具有类比性:

    1. Canal对应于I/O thread,接收Master Binary Log;
    2. Otter对应于SQL thread,通过Canal获取Binary Log数据,执行同步插入数据库;
  • 两者的区别在于:

    1. otter目前嵌入式依赖canal,部署为同一个jvm,目前设计为不产生Relay Log,数据不落地;
    2. otter目前允许自定义同步逻辑,解决各类需求;
      a. ETL转化. 比如Slave上目标表的表名,字段名,字段类型不同,字段个数不同等.
      b. 异构数据库. 比如Slave可以是oracle或者其他类型的存储,nosql等.
      c. M-M部署,解决数据一致性问题
      d. 基于manager部署,方便监控同步状态和管理同步任务.
  • canal的工作原理:

    • canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
    • mysql master收到dump请求,开始推送binary log给slave(也就是canal)
    • canal解析binary log对象(原始为byte流)

使用简述

  1. 对MySQL给canal-server授权
    • CREATE USER 'canal_server' IDENTIFIED BY 'canal_server';
    • GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal_server';
  2. canal使用ZK来做HA,因为涉及多个client时,消费计算的业务较为复杂的问题,所以目前在使用上只是单点部署,基本能满足需求。

使用总结

  1. 可以通过指定binlog文件和position来重放binlog数据:
  2. 如何查看MySQL位点:https://blog.csdn.net/c1052981766/article/details/80604083
    • show master status
    • show binary logs
    • show binlog events in 'binlog.000368' limit 10; //pos 就是位点, 重启 canal
    • 如何查到旧记录的位点?
      1. 由canal-server中meta.dat记录
      2. 通过 mysqlbinlog 命令分析 mysql-bin.xxx 文件内容,确定增量恢复到的时间点(运维协助)。
  3. 除了用pos点的办法进行恢复,也可以通过指定时间区间进行恢复,按时间恢复需要用mysqlbinlog命令读取binlog日志内容,找时间节点。
    • 使用mysqlbinlog工具进行基于位置或时间点的数据恢复
  4. 重跑。修改instance.properties文件设置重跑起始位点,删除meta.dat文件并重启。注意回放数据时视业务情况,可能要忽略第一个位点对应的数据。
  5. 重启之后batchId会变,所以不能使用batchId来做幂等处理
  6. 使用mysql主从同步和使用canal同步的区别? 同步数据为什么不直接用主从同步机制?
    1. mysql版本不一致,不支持主从同步
    2. 并不是自己的库,只需要同步几张表,运维不会做这种定制化
    3. 完成同步目标后,可方便拆卸和控制
  7. client重启如何对应原来的位点
    • canal client和server交互之间的身份标识,目前clientId写死为1001. (目前canal server上的一个instance只能有一个client消费,clientId的设计是为1个instance多client消费模式而预留的,暂时不需要理会)

canal和MySQL相关资料

  1. 下载:https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
  2. canal.instance.gtidon 是否启用mysql gtid的订阅模式
    • Mysql GTID 模式详解
  3. https://github.com/alibaba/canal/wiki/QuickStart
    https://github.com/alibaba/canal/wiki/AdminGuide
    https://github.com/alibaba/canal/wiki/ClientExample
  4. MySQL数据库的授权原则
  5. canal 高可用介绍
  6. canal和otter的高可靠性分析

如何接手一个旧项目

发表于 2020-07-14

改变心态,以前会抱怨业务乱,但是业务在发展过程中乱是很正常的,也要有人来主动整理,同时也在考验和锻炼整理人的能力。

  1. 梳理现有业务文档,进行归类(如果有的话?)
  2. 拉代码,服务本地跑起来,并跑通单元测试
  3. 梳理服务现有的所有监控平台和数据
  4. 梳理服务的依赖关系和超时时间
  5. 梳理服务的依赖组件(MQ,Redis,DB等)和部署情况
  6. 数据库表梳理
  7. 了解服务的部署和灾备架构(机器数,机房,流量入口)
  8. 代码核心逻辑阅读(核心流量接口)
  9. 了解服务的监控情况,常用配置和开关,相关告警配置通知人
  10. 待优化任务和遗留问题接手

扩展

  • 软件泥潭真体验
    • “定时炸弹”
附录1: 交接列表示例(设计与开发)

## 项目管理
    - 项目日程 
    - 会议记录
    - 体制图 
## 项目要件
    - 业务功能清单 
    - 业务流程图 
    - 需求变更记录 
    - 操作说明书/用户手册 
    - 常见问题一览 
## 界面设计
    - UE设计稿
    - 高保真画面设计稿
    - 需求变更一览
## 系统设计
    - 系统架构设计图
    - 部署架构图DB关联图(ER图)和DB详细设计
    - 系统间集成关系图
    - 对接系统一览表和对接系统接口清单
## 开发制作
    - 源代码
    - 代码运行说明
## 测试
    - 系统测试用例与系统测试报告书
    - 性能测试用例与性能测试报告书
    - 用户测试用例
    - 用户测试签字

附录2: 交接列表示例(运维相关)

## 上线相关
    - 上线判定表
    - 上线操作记录
    - 历次上线版本说明
    - 临时对应体制
## 基础设施
    - 硬件资源一览
    - 软件资源一览
    - 服务器/系统账号权限
    - 系统工具 - 付费/免费软件
## 运维体制
    - 运维工作一览表
    - 近半年运维工作应对流程
    - 运维体制
    - 故障对应流程
    - SLA(服务水平协议)
## DEVOPS(开发运维一体化)
    - CI/CD工具与使用
    - 监控工具
    - 备份管理
    - 代码库与分支管理
    - 数据库相关配置与策略

单元测试的工具和技巧

发表于 2020-07-14

提高单元测试覆盖率

  • 提高bean类的覆盖率

    1. pojo-tester
    2. lombok [lɒmˈbɒk]
    3. kotlin
  • 定义一些过滤规则

工具

  • mock神器:mockito
  • sql模拟测试:h2
  • 对测试进行参数化: JUnitParams
  • Awaitility: 一个小型的Java领域专用语言(DSL),用于对异步的操作进行同步。
    https://www.ctolib.com/topics-109441.html
  • WireMock: 用于模拟HTTP服务的工具 (对外部服务打桩)
  • Selenium:编写UI驱动的端到端测试

其他

  • 使用 集成测试 覆盖若干个完整的核心流程

  • 测试金字塔(深度好文)

业务重构实践总结

发表于 2020-07-14

业务重构似乎是必然且合理的过程。一个项目刚开始为了快速上线和试错,总会或多或少出现不合理的地方。当项目活下来了,为了寻求下一步的发展,服务的稳定和扩展性提升了优先级,自然就需要有人来重构了,这也是项目历史遗留的技术债务。

项目背景

  • 公司原有的业务几乎都是PHP编写的,并且处于一个很大的项目里维护和运行,可以说是大杂烩。随着业务发展和用户量的提升,渐渐得暴露了很多问题:
    1. PHP运行效率较低,业务未进行隔离,出问题时相互影响;
    2. PHP 过于灵活的语言特性,导致后期较高的后期维护成本;
    3. 基础框架和服务对PHP支持不足;
    4. 实现灾备比较困难。

重构语言选择

  • 我们选择Java作为开发语言进行重构
    1. 静态类型,多人协作开发和维护更加安全可靠;
    2. 内部基础组件的 Java 版生态比较完善;
    3. 学习成本低,且开发效率较 PHP 没有明显降低。

重构的工作是什么?

  1. 最简单直接的主要工作:就是充当PHP到Java语言的翻译,将PHP代码转化成Java代码,并保持逻辑不变,对上层业务是无感知的;
  2. 除此之外,对业务逻辑进行优化和简化,提高后续的可维护性和开发效率;对服务架构进行优化,提升服务的稳定性和可靠性。这是重构的主要意义;
  3. 重构完成之后,制定完善的验证和上线方案。

实施过程

  • Step 1. 用 Java 重构逻辑
    • 对外暴露的协议(HTTP 、RPC 接口定义和返回数据)与之前保持一致(保持协议一致很重要,之后迁移依赖方会更方便)
    • 尽量翻译而不是重构优化(至少第一版重构采取这样的策略)
  • Step 2. 验证新逻辑正确性
    • 当代码重构完成后,在将流量切换到新逻辑之前,我们会先验证新服务的正确性。
    • 考验对业务的熟悉程度和翻译的准确度(代码太久远,最熟悉的可能只有你自己)
    • 单元测试保证
  • Step 3. 灰度放量
    • 当一切验证通过之后,我们会开始按照百分比转发流量。
    • PHP入口对接底层新逻辑(验证逻辑正确性;之所以不直接从流量入口切换,是为了保证稳定性,在出现问题时可以迅速回滚。)
    • 外网代理切到新接口(保持协议一致,无需前端修改,切换彻底)

经验总结

  1. PHP代码太复杂,项目又不容易跑起来怎么办?
    • 默默睁大眼睛翻译还能怎样。。。
    • 如何验证是否翻译正确?
    • 找个在线PHP执行平台把复杂的代码片断跑起来,按照执行结果编写测试用例
  2. PHP代码太狗血太久远,万一翻译到半死发现这段逻辑根本已经没用了怎么办?
    • 把你的服务当nginx用,参数不符合条件的转发到旧服务,记录入参和返回结果,打日志和监控观察流量

最后

  1. 不能相信自己
  2. 不能相信别人
  3. 只能相信自己
  4. 乖乖覆盖测试用例

由灾备工作中引发的对“比例”的思考

发表于 2020-07-13

前言

  • 关于文章的题目我想了很久,暂时没想到合适的题目,姑且先这样吧
  • 之前在做灾备工作的时候,经常涉及服务的强弱依赖,超时时间,降级,以及业务折中方面的思考,下面将通过一些例子简要进行描述

场景描述

  • 从服务所依赖的重要程度上来区分有“强依赖”和“弱依赖”。

    1. 通常上,针对“弱依赖”我们会设置较小的超时时间(比如100ms以内),并且在失败率较高是进行降级;
    2. 而针对“强依赖”我们会设置一个较大的超时时间,当接口失败时返回“服务繁忙“,表示暂不可用(当然可以产品层面进行合适的引导)
  • 我们在灾备演练中,通过停其中一个机房,触发以下的问题

    1. 强依赖超时问题(停机房瞬间)
    2. 弱依赖多变长的问题(停机房期间)
  • 从而导致停机房瞬间接口失败率高,停机房期间接口时延上涨严重。由此引发我对“比例“问题的思考。

    1. 强依赖超时时间设长,可以减少失败率,但也有可能导致服务worker线程池被占满而拒绝请求。
    2. 弱依赖虽然每个都设置100ms以内,但是当依赖的服务超过10个时(真实业务真的有),可能导致总时长超过一秒(弱依赖慢但都没熔断,所以没降级;可异步并发的弱依赖的另说)

解决方案

  1. 对强依赖,可设置超时时间的比例(比如只有20%的请求可以超过1s,其他的控制在100ms以内),解决停机房瞬间,线程池占满拒绝请求的问题
  2. 对弱依赖,可控制多个弱依赖的总超时时间,解决停机房期间跨机房调用导致时延一直上涨的问题
    • 单个调用超时时间可分级设置比例;多个调用(可熔断)可聚合在一起设置总超时时间比例
    • 降级优先级排序,控制总时间。熔断线程池,控制比例超时。允许一定的时间超时。流量控制。物理隔离。

扩展

  1. 针对使用回调机制提高接口安全性所讲的,某些网络场景可以考虑针对大金额的请求才回调,减少RPC次数,这其实也是一个“比例”问题。
<1…141516…18>

172 日志
199 标签
RSS
© 2025 Kingson Wu
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4