作为阿德勒心理学的下册,虽然内容没有前一本那么惊艳,但也还是有很多值得深挖的地方。

《幸福的勇气》主要内容可以概括成下面几个部分:

  1. 尊重。尊重就是实事求是的看待一个人,并认识到其独特个性。它也是一切人际关系的基础。怎么才能尊重呢——关心“他人兴趣”,产生共鸣。
  2. 改变。我们总是害怕改变,因为改变意味着否定过去的自己,为了维持现状,不断的拿过去作为借口。但过去其实并不存在,我们需要关注的唯有——以后该怎么做?
  3. 赏罚。不可以批评,也不可以表扬。因为这些其实都是一种“纵向关系”,是使对方处于自己的支配之下。那应该怎么做呢?告诉他们,自己的人生、行为都由自己决定。而我们在必要时提供一切帮助。
  4. 竞争&协作。竞争也是一种“纵向关系”,它使得相互之间敌视和猜忌,而是应该形成人人都是我伙伴的协作意识。
  5. 人际关系。一切烦恼是人际关系的烦恼,一切快乐也是人际关系的快乐。与人交往更多的应该是主动去信赖对方,只有这样才能收获别人的尊重和信赖。
  6. 爱。世界上不存在什么“命中注定的人”,这只是缺乏主动的勇气,用来逃避的借口罢了。要主动去爱,不要管对方如何看待你,毕竟那是他的课题你无法左右。爱需要勇气,只有一点点勇气的人,也就只能拥有一点点爱。最后爱是由两人共同完成的课题,它让“我”变成了“我们”,使我们从自我中心中解放出来,实现自立,接纳世界,产出共同体感觉,得到幸福。

幸福的勇气.png

Xmind下载地址:幸福的勇气.xmind

向心收缩、离心收缩、等长收缩

  • 对于增肌来说,离心收缩一般认为比向心收缩重要,且离心收缩时相对快一点更好;
  • 高阶离心收缩训练法(暂不推荐,要有人帮忙,初学容易受伤):

    • 增大训练重量/阻力,训练伙伴协助完成向心收缩,自己独立完成离心收缩;
    • 纯离心训练,即完全由训练伙伴完成向心收缩,自己完成离心收缩。

增肌训练要素

  • 每组个数:8 - 12RM,做到力竭
  • 组数:每个动作 3 - 6组
  • 组间休息时间:30 - 90秒
  • 动作速度:向心收缩时中速,离心收缩时稍快一点
  • 训练频率:每个部位肌肉,每周1 - 2次,在保证不过度训练的提前下,可以考虑提高频率

延迟性肌肉酸痛

  • 肌肉酸痛可能对增肌比较重要,但不是唯一标准
  • 不酸痛怎么办:换新训练动作、强调离心训练
  • 不建议肌肉酸痛期间继续训练

训练装备

  • 一副好的训练手套

增肌训练与有氧训练搭配

  • 中、高强度且长时间的有氧运动,才容易掉肌肉
  • 如果运动后营养和能量得到充足补充,失掉的肌肉一般还能补回去

训练动作

  • 没有绝对的标准动作,只有在一定正确区间的标准,根据个人情况做相应调整

肌肉运动解剖

  • 把握肌肉两个要点

    • 把肌肉想象成一根能收缩的链条,能长能短
    • 肌肉是附着在骨头上的,而且跨越关节的
  • 怎么判断一个动作训练什么肌肉

    • 这个动作使哪块骨头靠近哪块骨头,那么就是训练连接这两块骨头的肌肉的
    • 或者说,看这个动作哪个关节活动了,那么就是训练跨越这个关节的肌肉的

胸肌

  • 运动解剖

    • 上臂靠近胸部的动作,都能练到胸肌(或者说,肘部从身体后侧向身体前侧运动的动作)
    • 肘部从后下往前上方运动,偏重练上部胸肌;从后上往前下方运动,侧重练下部胸肌;平着运动,则两部分比重差不多。
  • 基本动作:推胸、夹胸

背阔肌

  • 运动解剖

    • 上臂靠近脊柱的动作,都能练到背阔肌(或者说,胳膊从前往后运动的动作)
    • 与胸肌是一对拮抗肌
  • 基本动作:下拉

    • 解剖原理:上臂从上往下靠近脊柱
    • 高位下拉:两手握杆稍远;双手下拉时保持挺胸,上身可稍稍后仰;拉杆基本触碰上胸部后还原。
  • 基本动作:划船

    • 解剖原理:上臂从前往后靠近脊柱
    • 坐姿划船:始终保持挺胸抬头,腰部挺直;后拉时可稍稍后仰,但不要明显后仰。

斜方肌

  • 运动解剖

    • 肩胛骨靠近脊柱的动作,可以练到斜方肌
    • 可以分为上部(肩胛骨靠近脖子和头,即耸肩)、中部(肩胛骨往内收,即往里夹)、下部(肩胛骨往下沉)

三角肌(肩部肌肉)

  • 运动解剖

    • 抬胳膊的动作,一般都可以练到三角肌
    • 可以分为前束(胳膊往前抬,或者胳膊水平面上从后往前运动)、中束(侧平举/上臂外展)、后束(胳膊往后台,或者胳膊水平面上从前往后运动)
  • 基本动作:推举

    • 侧重于练前束(因为身体会稍微后仰)
    • 始终挺胸抬头,腰部挺直
  • 基本动作:平举

    • 侧重于练中束
    • 哑铃侧平举:不要耸肩、举到手臂基本与地面平行即可
    • 直立提拉:双手握距比肩略窄、提杠铃到差不多碰下巴
  • 基本动作:俯立平举、蝴蝶机反用

    • 侧重于练后束
    • 腰部挺直、肘部自然弯曲,不需要伸得过直

肱二头肌

  • 运动解剖

    • 弯曲胳膊(屈肘)的动作,可以练到肱二头肌
  • 基本动作:弯举

    • 宽握侧重于练内侧的短头、窄握侧重于练外侧的长头

肱三头肌

  • 运动解剖

    • 弯曲的胳膊伸直(伸肘),以及上臂靠近肩胛骨(上臂后伸),可以练到肱三头肌
  • 基本动作:伸肘
  • 基本动作:推三头

腹肌

  • 运动解剖

    • 分为腹直肌(胸部靠近骨盆的动作,即上下半身靠近)、腹外斜肌(上半身旋转、侧屈)
  • 腹直肌基本动作:卷腹

    • 要点:要“卷”、要有负重
  • 腹直肌基本动作:举腿

    • 注意:腰部弯曲感觉膝关节向胸部运动、负重可双脚夹小哑铃

股四头肌

  • 运动解剖

    • 位于大腿前&两侧,分为股外侧肌、股内侧肌、股直肌、股中肌
    • 伸直膝关节(腿从弯曲到伸直),可以练到股四头肌;此外还可以让腿靠近骨盆(腿整个往起抬)
  • 基本动作:伸膝

    • 深蹲(用杠铃负重)
    • 腿举(固定器械),注意要点:把腰胯部顶住靠背板、腿不用完全伸直
    • 腿屈伸(固定器械)

腘绳肌群

  • 运动解剖

    • 位于大腿后侧
    • 屈膝(腿从伸直到弯曲)、伸髋(腿整个往后摆),可以练到腘绳肌群
  • 基本动作:屈膝

    • 腿弯举(固定器械)
  • 基本动作:伸髋

    • 硬拉。注意要点:腰绷直、杠铃杆尽量贴近身体、动作速度慢

小腿肌群

  • 运动解剖

    • 小腿后侧,分为腓肠肌(位于小腿外面)、比目鱼肌(位于小腿里面)
    • 踮脚尖,可以练到小腿肌群。其中屈膝还能练到腓肠肌
  • 基本动作:提踵(哑铃站姿提踵)

    • 脚尖踩在稍高地面的东西上,双手拿哑铃做负重
    • 建议单腿训练,这样不需要提太重的哑铃

训练计划三原则

  • 肌肉的训练互相之间不会产生干扰

    • 一次训练中,先练大肌群,再练小肌群;先做多关节复合动作,再做单关节动作
  • 满足肌肉的训练频率

    • 每块肌肉建议一周练2-3次
  • 满足肌肉训练后休息的要求

    • 恢复时间要基本足够(至少48小时)
    • 肌肉是否酸痛
    • 肌肉力量是否恢复
    • 肌肉泵感是否强烈

训练计划:肌肉位置安排

  • 拮抗肌一起训练

    • 例如:胸+背、肱二头肌+肱三头肌
  • 主动肌和协同肌群一起训练

    • 例如:胸+肱三头肌、背+肱二头肌
    • 对大肌群的训练,也相当于是给协同小肌群做了热身
  • 无关肌群一起训练

    • 例如:肩+腿、肱二头肌+腹肌

训练计划:训练动作安排

  • 一次训练多个部位的基本原则

    • 无关肌群搭配:先练大肌群,后练小肌群
    • 拮抗肌搭配:训练先后无所谓
    • 主动肌和协同肌搭配:先练主动肌(一般是大肌群),后练协同肌(一般是小肌群)
  • 尽可能把一个肌肉的几个维度都训练到

    • 例如肩(前、中、后束),胸(上部、下部),肱三头肌
  • 尽可能把一个肌肉部位的几个基本动作都覆盖进去

    • 例如练背(下拉、划船都选)

要不要经常换动作

  • 训练动作建议隔一阵子换一换
  • 换动作好处:对肌肉更全面的刺激、防止动作适应
  • 怎么换:一个部位的多个动作,每次替换50%即可
  • 多长时间换:单关节动作至少3~5个月;多关节复合动作至少4~6个月

增肌怎么吃总体原则

  • 建议每天200kcal的热量盈余

增肌怎么吃:蛋白质

  • 蛋白质摄入估算

    • 瘦肉(20g / 100g)
    • 蛋(6g / 个)
    • 奶(3g / 100ml)
    • 主食(面食 8g / 100g,米饭 3g / 100)
    • 豆类(豆腐 7~8g / 100g,豆干更高些)
  • 蛋白质由氨基酸组成;氨基酸又由碳骨架(产生能量)和氨基(无用排出)
  • 植物蛋白质的必需氨基酸搭配不太合理,所以需要适当多吃且注意搭配
  • 建议蛋白质摄入量:1.5 - 1.8g / kg体重,2g也没问题。以动物性蛋白质为主。
  • 训练前后补充:30g蛋白粉 + 0.5g/kg体重的糖。训练前15-30分钟补充,训练后即刻补充
  • 建议训练后6小时内,每隔2小时补充点蛋白质和碳水

增肌怎么吃:碳水化合物

  • 碳水摄入量估算

    • 各种粉丝(85g/100g)
    • 面条、燕麦片(60-75g/100g)
    • 其它豆类(65g/100g)、大豆(35g/100g)
    • 馒头(50g/100g)
    • 熟米饭、各种薯类、鲜玉米(25g/100g)
    • 大部分水果(15g/100g)
    • 大部分蔬菜(5g/100g)
  • 增肌建议摄入量:不低于3-4g/kg体重,或者总能量摄入的45-55%
  • 训练前后高GI碳水,日常时候中低GI碳水

增肌怎么吃:脂肪

  • 两种必须脂肪酸:ω-3(亚麻籽油、海鱼、核桃、松子仁、鲜栗子)和ω-6(日常足够不用多考虑)
  • 建议摄入量:总能量摄入的30-35%。不要太低,否则影响雄激素水平
  • 基本上清谈饮食,就已经可以保持适当的摄入比例了

增肌能喝酒吗

  • 强烈建议不喝酒
  • 能量高(700kcal/100g)、影响雄激素水平、影响几乎所有营养素吸收
  • 实在要喝,每天不超过15g

增肌补充剂

  • 总体原则:只起到补充作用,不能替代天然饮食
  • 种类划分

    • 基础营养补充剂(缺了不行,多了没用),例如:蛋白粉、增肌粉、碳水/维生素矿物质/氨基酸补充剂
    • 特殊营养补充剂(没有也行,补了可能有用),例如:肌酸、左旋肉碱、HMB、核酸
  • 蛋白粉:就是浓缩的蛋白质
  • 增肌粉:就是蛋白粉+糖,性价比不高,还不如自己配
  • ZMA

    • 锌、镁、维生素B6,三种组合在一起的补充剂
    • 不怎么建议补充
  • 支链氨基酸(BCAA)

    • 亮氨酸、异亮氨酸、缬氨酸,三种必须氨基酸组合的补充剂
    • 其中亮氨酸对增肌可能有比较重要的作用
    • 如果蛋白质摄入充足,没必要额外补充
  • 肌酸

    • 一般认为是明确有效的,且非常安全
    • 原理:肌肉存储磷酸肌酸用来对极高强度短时间运动提供能量,而它是由肌酸(无热量)+磷酸基团组成
    • 效果:训练时力量和耐力会增加一些
    • 怎么吃

      • 快速冲击(每天20-25g,分4-5次摄入,5-7天),慢速冲击(每天3g,28-30天)。冲击期后每天2g保持即可
      • 建议搭配高GI的碳水一起吃(不少于30g)
  • HMB(β-羟基-β-丁酸甲酯)

    • 被认为有促进蛋白质合成,抑制分解的作用
    • 偏向有用的多点,有条件的话使用可能比不用强
    • 安全性方面,短期(1年内)没问题,长期不明确
  • 谷氨酰酸

    • 非必须氨基酸,对免疫功能有帮助(有氧耐力运动后,免疫力会受到抑制)
    • 可有可无,营养充足的话补充意义不大
  • β-丙氨酸

    • 主要作用是提高“肌肽”的水平
    • 肌肽的作用则是抗疲劳(短时间、高强度运动)
    • 逐渐被更多人认可的补充剂,但不能说它有明确作用(可能是间接促进增肌)
    • 副作用研究还不明确

运动损伤的预防原则

  • 系统训练之前,最好做必要的医学检查
  • 训练前要热身

    • 5分钟轻松有氧 -> 全身关节活动 -> 每个训练动作先做一个热身组
  • 穿着要合适
  • 新手优先使用固定器械
  • 使用器械前,做好安全检查
  • 不要在健身房戴耳机训练
  • 做大重量训练时,要有保护者
  • 避免轻易使用过大重量,动作的离心阶段一定要保持好
  • 从地面拿起重物时,尽可能使用下肢的力量,腰部挺直
  • 恰当的呼吸

    • 发力时呼气,离心阶段吸气
    • 短时间憋气可以,但不要长时间憋气
  • 一旦训练时身体任何部位出现明显疼痛或不适,要马上停止训练

急性运动损伤的处理

  • 立刻就医
  • 处理五原则:保护、休息、冰敷、压迫、抬高

运动损伤后的恢复

  • 损伤后的运动康复原则:一切以无不适感为前提
  • 再然后,可以做点肌肉拉伸和等长运动
  • 最后再是轻重量训练

增肌减脂的顺序

  • 增肌减脂同时进行,可是可以,但会相互影响(一个要有热量盈余,一个要负热量,有本质矛盾)

    • 饮食搭配要很注意,不建议新手用
  • 先增肌还是先减脂,根据自己实际需要,没有绝对正确

    • 女生,或者体脂确实高的人,建议还是先减脂
  • 增肌同时减脂,则建议热量缺口不超过300kcal/天(不着急减脂的话,基本持平也行)

增肌者减脂饮食结构三原则:高蛋白

  • 不低于2g/kg体重的摄入

增肌者减脂饮食结构三原则:足碳水

  • 不低于每天总热量的45%的摄入
  • 运动人群尤其不建议低碳水饮食

增肌者减脂饮食结构三原则:低脂肪

  • 不高于每天总热量的25%的摄入(20-25%)
  • 吃低脂肪肉,选植物油(橄榄油)

增肌减脂“简单粗暴”的好习惯

  • 不吃肥肉、每天油不超过4可乐瓶盖
  • 零食、熟食、外卖尽量不吃,减少出去吃饭次数
  • 小口进食,细嚼慢咽
  • 咀嚼食物时放下餐具
  • 清淡低盐饮食
  • 吃饱就停下,少食多餐
  • 每天额外60分钟快步走(可以分几次)

增肌减脂怎么运动

  • 首选:低强度长时间运动,或者高强度短时间运动(HIIT)
  • 要做中等或以上强度运动的话,每次时间建议不超过30分钟
  • 强烈建议多注意NEAT(非运动性热消耗),即少坐多站、少站多走、多爬楼梯等活动来消耗热量

花了一周时间看完并整理了这本书的笔记。整体来说阿德勒心理学确实不像科学,更像是一种哲学——它无法被证伪或验证,但你知道它是对的。

全书的观点总的来说就是要发挥自己的主观能动性,过去的已经过去,客观条件你也无法选择,只能在此时此刻尽全力去做好能做的事情。

那如何去做呢?主要是以下几个部分:

首先从心理上,放弃原因论,相信自己能够改变,能够获得幸福。

行动上,追求良好的人际关系(横向关系);不回避自己的人生课题;分离不属于自己的课题;获得自由(不寻求认可、不害怕讨厌、不在意评价);通过接纳自己、信赖他人、他者贡献,得到自己“”有价值,能在这里”的共同体感觉;最后对他人的贡献,也给自己带来了幸福。

被讨厌的勇气.png

Xmind下载地址:被讨厌的勇气.xmind

基本思想和模式

  • 可扩展的基本思想:拆分
  • 拆分思路

    • 面向流程拆分:将整个业务流程拆分为几个阶段,每个阶段作为一部分。

      • 举例:TCP/IP协议的层次,即应用层 → 传输层 → 网络层 → 物理 + 数据链路层
      • 架构实现方式:分层架构
    • 面向服务拆分:将系统提供的服务拆分,每个服务作为一部分。

      • 举例:TCP/IP协议每层提供的服务,例如应用层的HTTP、FTP、SMTP 等
      • 架构实现方式:SOA、微服务
    • 面向功能拆分:将系统提供的功能拆分,每个功能作为一部分。

      • 举例:TCP/IP每个服务能提供的功能,例如HTTP 服务提供 GET、POST 功能等
      • 架构实现方式:微内核

511.png

CAP理论

  • 定义:在一个分布式系统(指互相连接并共享数据的节点集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。
  • 一致性:对某个指定的客户端来说,读操作保证能够返回最新的写操作结果
  • 可用性:非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)
  • 分区容错性:当出现网络分区后,系统能够继续“履行职责”
  • 实际应用中,必须选择P(分区容错性),因此只有AP、CP两种选择

    • CP(Consistency/Partition Tolerance)

      • 为了保证一致性,当发生分区现象后,客户端请求到未收到最新数据的节点时,节点返回Error,即不满足可用性
    • AP(Availability/Partition Tolerance)

      • 为了保证可用性,当发生分区现象后,客户端请求到未收到最新数据的节点时,节点返回当前持有的旧数据,因为该数据不是最新的,所以又不满足一致性

CAP理论细节

  • CAP细节阐述

    • CAP 关注的粒度是数据,而不是整个系统

      • 一个系统会涉及到多种数据,不同的数据可以各自选择CP还是AP
    • CAP 是忽略网络延迟的
    • 正常运行情况下,不存在 CP 和 AP 的选择,可以同时满足 CA

      • 架构设计的时候既要考虑分区发生时选择 CP 还是 AP,也要考虑分区没有发生时如何保证 CA
    • 放弃并不等于什么都不做,需要为分区恢复后做准备

      • 我们可以在分区期间进行一些操作,从而让分区故障解决后,系统能够重新达到 CA 的状态
  • ACID理论

    • Atomicity(原子性)

      • 要么做,要么全不做
    • Consistency(一致性)

      • 在事务开始之前和事务结束以后,数据库的完整性没有被破坏
    • Isolation(隔离性)

      • 允许多个并发事务同时对数据进行读写和修改的能力
      • 隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致
    • Durability(持久性)

      • 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失
  • BASE理论

    • 核心思想是即使无法做到强一致性(CAP 的一致性就是强一致性),但可以采用适合的方式达到最终一致性
    • 基本可用(Basically Available)

      • 分布式系统在出现故障时,允许损失部分可用性,即保证核心可用
    • 软状态(Soft State)

      • 允许系统存在中间状态,而该中间状态不会影响系统整体可用性
      • 这里的中间状态就是 CAP 理论中的数据不一致
    • 最终一致性(Eventual Consistency)

      • 系统中的所有数据副本经过一定时间后,最终能够达到一致的状态
  • ACID 是数据库事务完整性的理论,CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸

FMEA方法

  • FMEA(Failure mode and effects analysis,故障模式与影响分析),是一种通过对系统范围内潜在的故障模式加以分析,并按照严重程度进行分类,以确定失效对于系统的最终影响的方法。
  • 具体分析方法

    • 给出初始的架构设计图
    • 假设架构中某个部件发生故障
    • 分析此故障对系统功能造成的影响
    • 根据分析结果,判断架构是否需要进行优化
  • 分析维度

    • 功能点(指的是从用户角度来看的,而不是从系统各个模块功能点划分来看的)
    • 故障模式(指的是系统会出现什么样的故障,包括故障点和故障形式,这里不需要给出故障原因
    • 故障影响(功能点具体会受到什么影响,需要尽量准确描述)
    • 严重程度(严重程度 = 功能点重要程度 × 故障影响范围 × 功能点受损程度)
    • 故障原因(不同原因的概率、检测手段、处理措施会不一样)
    • 故障概率(高/中/低)
    • 风险程度(即故障等级,风险程度 = 严重程度 × 故障概率)
    • 已有措施(针对具体的故障原因,系统现在是否提供了某些措施来应对)
    • 规避措施(为了降低故障发生概率而做的一些事情,技术或管理手段)
    • 解决措施(为了能够解决问题而做的一些事情,一般都是技术手段)
    • 后续规划(技术/管理手段,规避/解决措施)
  • Xmind图
    411.png
  • 举例
    412.png

存储高可用架构:双机架构

  • 存储高可用方案的本质都是通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用
  • 常见架构:主备、主从、主主
  • 主备复制

    • 架构关系

      • 正常时:客户端-(读&写)->主机-(数据复制)->备机
      • 主机不可用时:客户端-(读&写)->备机
    • 优点:简单(客户端不感知备机、主备机仅需要数据复制)
    • 缺点:备机硬件成本浪费、不可用时需要人工切换
  • 主从复制

    • 架构关系

      • 客户端-(读&写)->主机-(数据复制)->从机
      • 客户端-(读)->从机
    • 优点

      • 主机故障时,从机能继续提供读服务
      • 从机提供读服务,发挥了硬件性能
    • 缺点

      • 客户端需要感知主从关系,增加复杂度
      • 如果主从复制延迟比较大,会出现数据不一致问题
      • 故障时仍需要人工干预
    • 双机切换

      • 互连式

        • 指主备机直接建立状态传递的渠道(主->从/备)
        • 通道的具体实现方式多样:网络连接、串口线
        • 客户端只记录虚拟IP;或者同时记录主备IP,能连哪个就哪个
        • 缺点:如果传递通道有问题,则从/备机会变成主机,造成有两个主机
      • 中介式

        • 在主备两者之外引入第三方中介,主备机都去连接中介,通过中介来传递状态信息
        • 优点:连接管理更简单、状态决策更简单
        • 缺点:中介自己如果不可用,则整个系统陷入双备状态
      • 模拟式

        • 备机模拟成一个客户端,向主机发起模拟的读写操作,根据读写操作的响应情况来判断主机的状态
        • 优点:实现更加简单,因为省去了状态传递通道的建立和管理工作
        • 缺点:模拟式读写操作获取的状态信息只有响应信息,没有互连式那样多样,基于有限的状态来做状态决策,可能出现偏差
  • 主主复制

    • 架构关系

      • 客户端-(读&写)->主机A
      • 客户端-(读&写)->主机B
      • 主机A<-(数据复制)->主机B
    • 存在问题

      • 必须保证数据能够双向复制,而很多数据是不能双向复制的(例如自增ID,库存数)

存储高可用架构:集群和分区架构

  • 数据集群

    • 数据集中集群

      • 架构关系

        • 客户端-(读&写)->主机-(数据复制)->从/备机1、2……n
      • 复杂度高

        • 主机如何将数据复制给备机
        • 备机如何检测主机状态
        • 主机故障后,如何决定新的主机
    • 数据分散集群

      • 多个服务器组成一个集群,每台服务器都会负责存储一部分数据;同时,为了提升硬件利用率,每台服务器又会备份一部分数据(类似RAID)
      • 均衡性
      • 容错性
      • 可扩展性
  • 数据分区

    • 数据分区指将数据按照一定的规则进行分区,不同分区分布在不同的地理位置上,每个分区存储一部分数据
    • 数据量

      • 数据量越大,分区规则会越复杂,考虑的情况也越多
    • 分区规则

      • 例如:洲际分区、国家分区、城市分区
    • 复制规则

      • 集中式

        • 指存在一个总的备份中心,所有的分区都将数据备份到备份中心
        • 优点

          • 设计简单,各分区之间并无直接联系,可以做到互不影响
          • 扩展容易
        • 缺点

          • 成本较高,需要建设一个独立的备份中心
      • 互备式

        • 指每个分区备份另外一个分区的数据
        • 优点:成本低,直接利用已有的设备
        • 缺点

          • 设计比较复杂,各个分区除了要承担业务数据存储,还需要承担备份功能
          • 扩展麻烦
      • 独立式

        • 指每个分区自己有独立的备份中心
        • 优点

          • 设计简单,各分区互不影响
          • 扩展容易,新增加的分区只需要搭建自己的备份中心即可
        • 缺点

          • 成本高,每个分区需要独立的备份中心

计算高可用架构

  • 计算高可用的本质是通过冗余更多计算机器来规避部分故障的风险
  • 常见架构:主备、主从、集群
  • 主备架构

    • 架构关系

      • 任务分配器-(计算任务)->主机
      • 任务分配器-(计算任务,故障时人工切换)->备机
    • 任务分配器将所有任务分配给主机,当主机不可用时,人工切换至备机
    • 备机类型:冷备、温备

      • 冷备:备机上的程序包和配置文件都准备好,但备机上的业务系统没有启动
      • 温备:备机上的业务系统已经启动,只是不对外提供服务
    • 优点:简单;缺点:人工切换
  • 主从架构

    • 架构关系

      • 任务分配器-(计算任务A)->主机
      • 任务分配器-(计算任务B)->从机
    • 正常情况下,计算任务A分配给主机,计算任务B分配给从机;当主机故障时,人工将从机升级为主机,此时任务A&B均分配给新主机
    • 优点:发挥从机硬件性能;缺点:需要任务分类,且任务分配会复杂一点
  • 集群架构

    • 对称集群

      • 集群中每个服务器的角色都是一样的,都可以执行所有任务
      • 具体设计

        • 正常情况下,任务分配器按照一定分配算法将任务分配给不同的机器
        • 当检测到某机器故障时,不再给它分配任务
        • 当故障机器恢复正常后,重新分配任务
      • 设计关键点

        • 任务分配算法:随机、轮询
        • 检测服务器状态:通过心跳来传递信息,包括服务器信息和任务信息
    • 非对称集群

      • 一台master,多台slaver。部分任务是 Master 服务器才能执行,部分任务是 Slave 服务器才能执行。
      • 具体设计

        • 集群会通过某种方式来区分不同服务器的角色(ZAB算法选举)
        • 任务分配器将不同任务发送给不同服务器
        • 若master故障,则从多台slaver中重新选举新的master;如果slaver故障,则只要剔除掉它即可
      • 复杂点

        • 任务分配策略更加复杂
        • 角色分配策略实现比较复杂

业务高可用:异地多活

  • 应用场景

    • 异地就是指地理位置上不同的地方;多活就是指不同地理位置上的系统都能够提供业务服务。
    • 代价:系统复杂度会发生质的提高;成本会上升。
  • 架构模式

    • 同城异区

      • 定义:同一个城市的不同机房
      • 优点:由于同城,逻辑上我们可以将它们看作同一个机房,这样的设计大大降低了复杂度,减少了异地多活的设计和实现复杂度及成本
      • 不足:城市级别的灾难无法解决(例如新奥尔良大水灾)
    • 跨城异地

      • 存在问题:网络传输速度会显著降低;中间传输过程中不可控因素增加;造成的数据短时间内不一致
    • 跨国异地

      • 适用场景:为不同地区用户提供服务;只读类业务做多活

异地多活设计4大技巧

  • 保证核心业务的异地多活

    • 举例:登录功能比注册核心,而登录所需数据可同步至其它中心
  • 保证核心数据的最终一致性

    • 尽量减小异地多活机房的距离,搭建高速网络
    • 尽量减少数据同步,只同步核心业务相关的数据
    • 保证最终一致性,不保证实时一致性
  • 采用多种手段同步数据

    • 消息队列
    • 二次读取

      • 第一次读取本地,本地失败后第二次读取对端
    • 存储系统同步

      • MySQL 的主备复制、Redis 的 Cluster 功能等
    • 回源读取

      • 判断数据属于的中心,直接读它
    • 重新生成数据

      • 例如:session读取失败,则重新生成即可
  • 只保证绝大部分用户的异地多活

异地多活设计4步走

  • 业务分级

    • 按照一定的标准将业务进行分级,挑选出核心的业务设计异地多活,降低方案整体复杂度和实现成本
    • 评价维度:访问量大、核心业务、产生大量收入业务
  • 数据分类

    • 挑选出核心业务后,需要对核心业务相关的数据进一步分析,目的在于识别所有的数据及数据特征,这些数据特征会影响后面的方案设计
    • 分析维度:数据量、唯一性、实时性、可丢失性、可恢复性
  • 设计数据同步方案

    • 存储系统同步

      • 优点:使用简单
      • 不足:无法针对业务数据特点做定制化的控制
    • 消息队列同步

      • 适合无事务性或者无时序性要求的数据
    • 重复生成

      • 数据不同步到异地机房,每个机房都可以生成数据。例如session,cookie
  • 异常处理

    • 多通道同步

      • 采取多种方式来进行数据同步,例如存储系统+消息队列
      • 一般情况下,两种通道即可,不然维护成本也很高
      • 不能采用相同的网络连接,否则一旦网络故障,两个通道都同时故障
      • 需要数据是可以重复覆盖的,即无论哪个通道先到哪个通道后到,最终结果是一样的
    • 同步和访问结合

      • 不能让数据库同步和接口访问都走同一条网络通道
      • 数据有路由规则,可以根据数据来推断应该访问哪个机房的接口来读取数据
      • 由于有同步通道,优先读取本地数据,本地数据无法读取到再通过接口去访问
    • 日志记录

      • 每个关键操作前后都记录相关一条日志,然后将日志保存在一个独立的地方,当故障恢复后,拿出日志跟数据进行对比,对数据进行修复
      • 常用日志保存方式

        • 服务器上保存日志
        • 本地独立系统保存日志
        • 日志异地保存
    • 用户补偿

如何应对接口级的故障

  • 典型表现

    • 系统并没有宕机,网络也没有中断,但业务却出现问题(业务响应缓慢、访问超时或出现异常)
  • 故障原因

    • 内部原因:程序bug、慢SQL,程序逻辑不完善导致耗尽内存等
    • 外部原因:黑客攻击(DDoS)、大量正常请求(双十一秒杀)
  • 应对思想

    • 优先保证核心业务优先保证绝大部分用户
  • 应对措施

    • 降级

      • 指系统将某些业务或者接口的功能降低,可以是只提供部分功能,也可以是完全停掉所有功能
      • 降级方式

        • 系统后门降级(优点:成本低。缺点:存在安全隐患、要一台台搞效率低)
        • 独立降级系统
    • 熔断

      • 指的是当依赖的系统或服务出现异常故障时,停止访问该服务,而是直接报错返回
      • 设计关键:阈值的设定。一般先根据分析确定阈值,然后上线观察效果,再进行调优。
      • 与降级的区别:降级是服务提供方的操作(我不行了,只保证部分功能,或者直接给你返回个结果);而熔断则是服务消费方的操作(我依赖你,你不行了,我就不再调你,省的我自己被拖累)。
    • 限流

      • 限流是从系统访问压力的角度来应对故障的方式。只承受能够承受的访问请求,超过部分丢弃。
      • 限流方式

        • 基于请求限流,例如QPS。设计关键仍是阈值,一般采用压测分析,上线观察,调优。
        • 基于资源限流,例如CPU使用率、线程数。设计关键也是如何选择资源以及对应的阈值。
    • 排队

      • 是限流的变种,它不丢弃请求,而是全部扔在队列里面,调度处理(若队列满了还是要丢弃的)。