后端技术 by Tim Yang https://timyang.net Tim's blog, 关于架构、互联网、技术人生等思考 Tue, 29 Apr 2025 21:15:41 +0000 en-US hourly 1 https://wordpress.org/?v=6.7.2 课题分离与他人叙事:认识自己的人生脚本 https://timyang.net/life/task-separation-and-others-narratives/ https://timyang.net/life/task-separation-and-others-narratives/#comments Tue, 29 Apr 2025 20:48:04 +0000 https://timyang.net/?p=1590 引言:被“主流”绑架的困惑

你可能见过成功人士最爱的活动列表,包括滑雪、马拉松、高尔夫……它们似乎构成了一种特定的“主流”叙事。坦白说,我对这些活动一直没什么特别感觉。但过去很长一段时间,我会强迫自己去关注,甚至在别人问起时言不由衷地说:“那是一项非常有意思的运动。”我害怕自己显得“不合群”、“不成功”,仿佛不符合这个外部设定的模板,我的人生就减色几分。

然而,随着时间的推移,我慢慢意识到,他人的体验、偏好或他们构建的“主流”叙事,对我来说并没有内在的价值。它们是外部世界的喧嚣,试图定义我应该成为谁,应该喜欢什么。别人的这些喜好本身也没什么问题,真正的困惑和束缚,恰恰来自于我试图去迎合这些与我内心不符的外部设定。

当我谈跑步时,这是我健康的课题,不是你的叙事

比如跑步,我每周确实会跑十几公里,但这仅仅是我保持健康的个人习惯,来保持每周150分钟的有氧运动,与那些关于“征服马拉松”、“挑战极限”的叙事毫无关系。人生有很多值得坚持和体验的事,它们以无数种形式存在,远不只局限于马拉松的跑道。

我读过村上春树在《当我谈跑步时我谈些什么》中描写的长跑经历。书中那些关于沿途风景、人文气候的细腻描绘,我读来非常有共鸣,甚至让我对那些地方心生向往,可能会去观光。但跑步本身——那种长距离、高强度的奔跑体验——依然不是我的追求。村上构建了他的跑步世界观和体验叙事,那非常有价值,但那是“他的”叙事,我可以欣赏,却不必复制到“我的”课题中。

生育的外部叙事:我不是繁衍的工具

我也见过一些小圈子,对于“繁衍”这件事有着特别强烈的执着和一套完整的叙事。比如推崇生养大量后代,甚至像马斯克那样,将其拔高到“繁衍高智商后代是拯救人类文明”的高度。在接触这些叙事时,我曾不自觉地产生自我怀疑:我没有致力于“拯救人类文明”的大量繁衍事业,是不是就不够成功?

后来我醒悟过来,这正是我落入了别人世界观的设定和叙事之中。这套关于“成功”和“价值”的定义是他们构建的。他们或许有自己的理由和价值观(我们暂不评判其对错),但这套叙事体系属于他们,而非我。如果我用这套外部叙事来衡量自己的价值,我就成了它思想的奴隶。

核心理念:阿德勒的课题分离

这种试图迎合外部期待、被他人观点或叙事困扰的现象,在心理学中可以找到深刻的解释。哲学家阿尔弗雷德·阿德勒(Alfred Adler)有一个非常有名的概念叫做“课题分离”(Task Separation)。其核心思想是清晰地划分“自己的课题”和“他人的课题”,并且只关注和解决好“自己的课题”。通过明确责任边界来减少内耗,实现自我成长。其本质是:​​谁承担后果,谁负责解决​​。

我们都苦恼于人际关系。首先要思考一下“这是谁的课题”​。然后进行课题分离——哪些是自己的课题,哪些是别人的课题,要冷静地划清界限。而且,不去干涉别人的课题也不让别人干涉自己的课题。这就是阿德勒心理学给出的具体而且有可能彻底改变人际关系烦恼的具有划时代意义的观点。

放下别人的课题,烦恼轻轻飞走

被讨厌的勇气——“自我启发之父”阿德勒的哲学课

其要义在于:

  • 明确课题与责任归属: 每个人都有自己的课题。你的行为、你的选择、你的情绪、你如何看待自己——这些都是你的课题。而他人的想法、他人的感受、他人的评价、他人的选择、他人的人生如何——这些都是他人的课题,不由你直接控制或负责。
  • 学会分辨边界和避免过度干涉: 试图去改变他人的课题,或者为他人的课题负责,都会导致冲突、焦虑和沉重的心理负担。例如,父母不能强迫孩子学习(这是孩子的课题),但可以提供支持、创造环境、给出建议(这是父母的课题)。
  • 专注自我: 将时间和精力聚焦在自己的课题上,这是你能掌控的,比如提升自己的能力、管理自己的情绪、追求自己的目标、活出自己认为有价值的人生。
  • 避免取悦他人:这个概念可以帮助那些倾向于取悦他人的人,提醒他们无需控制他人的感受或行为。
  • 减轻焦虑:接受你无法控制他人的观点或反应,你就能减少对他们评判的焦虑。

本质上,任务的划分鼓励个人对自己的生活和行为负责,同时尊重他人的自主权。这可以带来更充实的人际关系和更强的个人自由感。

套用课题分离的概念,你的上级领导因部门绩效不佳而脸色阴沉,你可能因为害怕领导不满而自动加班,甚至不知道该如何是好。但绩效不佳这是他作为领导的课题(如何管理团队、如何满足上级期望,以及他的情绪管理)。而你作为一个团队成员,你的课题是做好你本职工作,贡献你的力量。他的情绪和评判,是他需要面对和处理的,你不需要为此感到忐忑不安并试图去“解决”。

他人的叙事:制造不必要课题的温床

很多时候,我们误以为是自己的课题,实际上是由“他人的叙事”产生的。这是另外一种自我课题的陷阱。

一个人的“叙事”是他理解和解释世界的方式,他认为“事情应该是怎样的”,“成功是什么样的”,“人应该怎么活”。当我们将这些外部的“叙事”内化,用它们来要求自己时,我们就无意中承担了不必要的课题。

落入叙事陷阱的几种表现:

人设的牢笼:困于他人期待的表演

为了迎合特定人群或情境的期待,我们常不自觉地构建一个“人设”——一种符合他人叙事的形象。比如,在新认识的伴侣面前,你可能刻意展现优雅、精致的一面,以为这样才“符合标准”;在朋友圈中,你可能经常扮演幽默或成功的角色,以打造自我或者融入群体。你会对自己说,如果我的朋友圈没有人点赞或者互动,或者不发朋友圈,会不会成为大家眼中的孤僻分子或者怪人?

但带表演性的朋友圈并非简单伪装,而是深陷于他人的期待叙事,偏离了真实的自我课题。维持人设需要持续投入精力,一旦“表演”中断,你可能因担心“人设崩塌”而焦虑,害怕失去他人的认可。你仿佛听到朋友在说,“最近几个月都没看到你朋友圈积极向上和精致的生活,本以为你是个很特别的人,没想到你也变普通了”。

当然更深层的牢笼可能来自父母的期望。比如,你向往自由的工作环境,父母却希望你追求稳定的工作单位,所以你不敢跳出舒适区。在一些家庭中,父母的期待近乎苛刻——别人考100分,自己的孩子考99分仍被视为失败。这种高压叙事可能伴随你到成年,让你在父母的期望阴影下压抑真实渴望,难以活出自我。

阿德勒的“课题分离”对此一针见血:父母希望你成为什么样的人,是他们的课题;而你的课题,是勇敢做自己,追求真正符合内心的人生。

过度追求归属感:群体叙事的隐形束缚

作为社会动物,我们天生渴望归属感。然而,过分在意某个群体或社会阶层的认同,就可能让我们努力迎合他们的“叙事”——关于成功、生活方式或价值的集体定义,以及那些不成文的规则。为了融入,我们可能压抑真实的自我,放弃个人偏好,无意中承担了“符合群体叙事”这一外加的课题。

例如,职场中流行的“主流”职业叙事,如“毕业进大厂”、“考公上岸”或“成为高P”,常常让选择非传统路径的人感到压力。无论是创业、成为数字游民,还是追求工作与生活的平衡,这些选择常被视为“偏离正轨”,引发自我怀疑或外界质疑。然而,所谓的“正轨”只是他人设定的叙事。人生没有统一的轨道——十亿人可以有十亿种独特的生活方式。 

没有学会屏蔽噪音:被宏大叙事裹挟

这个世界充满了各种信息和观点,很多构成了强烈的外部叙事:关于经济走向的、关于社会变革的、关于名人的八卦等等。比如看到加了关税就立刻要钻研细节,听到名人争论就想了解前因后果。这些信息本身可能是中性的,但它们往往包裹在特定的“叙事”里,试图吸引你的注意,让你产生情绪(担忧、愤怒、好奇)。

如果我们不加分辨地被卷入,就会消耗大量精力,去关注那些对他人甚至是领导人才需要关心的课题,或者对一个更大的、个人无法掌控的系统的叙事,而忽略了自己脚下的路(自己的课题)。

社交媒体的滤镜:跳出“完美生活”的叙事陷阱

社交媒体上不经意之间充斥着“完美生活”叙事:旅行中的绝美风景、精致的美食、幸福的家庭瞬间,或是职场上的高光时刻。这些画面构成了关于“成功”“幸福”和“有趣生活”的特定叙事,诱导我们不自觉地与自己的生活对比,产生落差感、焦虑甚至自我否定。这种“他人的叙事”无处不在,却往往掩盖了一个事实:展示的只是对方想让外界看到的片段,而非他们生活的全貌。

更重要的是,这些光鲜的内容反映的是发布者的课题——他们如何呈现自己、希望被如何看待。而你的课题,是过好自己的生活,而不是为了迎合或超越这些虚拟标准,去改变日常习惯、人生目标,甚至压抑真实的自我。放下“让别人羡慕”或“追赶他人生活”的念头,专注于自己的内心需求和价值,才能从社交媒体的叙事陷阱中解脱。

觉醒与对抗:找回你的人生脚本

如何识别并跳出这些“他人的叙事”陷阱,回到“自己的课题”上来?

意义由内而生,而非外部赋予: 这是最根本的。你的价值不是由你赚多少钱、生几个孩子、开什么车、住在哪里来定义的。这些都可能是外部叙事试图告诉你的“成功”或“意义”。真正的意义来自于你内心的选择、你的价值观、你对人生的体验和贡献(即使是小范围的)。当你清楚自己的内在价值时,外部的评判和叙事就很难动摇你。认识到这一点(意义由内生)是摆脱外部叙事束缚的基石,而实践课题分离,正是将这份内在清晰转化为外在行动的关键。

设定清晰的边界:课题分离的实践

这意味着在行动上划清界限。管好自己的事情,不越界去替别人承担责任或操心他们的人生。同时,也要守住自己的界限,不轻易让别人把他人的课题丢给你,或者用他们的叙事来定义你。学会拒绝那些消耗你精力、与你的核心课题无关的事情。

案例分析:识别宏大与微观叙事

“乱纪元”的叙事陷阱:

最近可能流行一种关于世界进入“乱纪元”的叙事,充满了不确定性、冲突和衰退的论调。这种叙事会制造恐慌,让人担忧工作、财务和未来前景。但仔细分析,这其实是一个充满特定视角(往往偏重地缘政治、贸易冲突等)的宏大叙事。

这个叙事是关于一个庞大系统(国家、全球经济)的课题,它更像是国家领导人需要每天关注的,而不是你个人的课题。对于绝大多数人而言,你的核心课题依然是你的本职工作、你的个人财务管理、你的健康、你的家庭。诚然,经济波动可能波及个人,比如增加失业风险。但这些宏观趋势是无数因素作用的结果,个人无法掌控。

与其沉浸在无法改变的担忧中,不如将精力放在自己能掌控的课题上,比如提升工作或者投资能力。再次,即使是最悲观的预测,通常也只是增长放缓,而非经济彻底倒退。耗费大量精力沉浸在这种宏大叙事中,很多时候只是在进行无益的精神内耗。

饭桌上的叙事主角:识别社交陷阱

你或许有这样的经验:在一群人吃饭时,总有那么一两位“社交主角”,他们讲述的经历或观点引人入胜,有时甚至让你听得“颠覆三观”。“看看人家隔壁老王”,会让你对你的人生走向产生怀疑,但这些大多是他们精心构建或擅长表达的个人叙事或对某个领域的解读。

认识到这一点非常重要:这是一种“叙事”,它属于讲述者。比如我是个工程师,我也可以在饭桌上滔滔不绝地讲述“AI奇点已至,人类即将被奴役”的叙事,并信手拈来各种论据。但这有意义吗?AI确实重要,但是不是所有人的全部,说AI是全部只是一种叙事而已。而且未来是概率性的,将一个概率性的推测叙述成确定的结果,并试图让别人接受,既无趣也无必要。

在饭桌上,你可以是一个友好的倾听者,可以交流,但要保持一份清明:对方的精彩讲述是他们的叙事,你不必将其内化为自己的现实,更不必因此质疑自己的“三观”或人生。你的生活体验和对世界的认知,是你自己的课题和叙事。

结论:活在自己的课题里,构建自己的叙事

认识并区分“自己的课题”与“他人的课题”的关系,识别并警惕“他人的叙事”的陷阱,是活得更清明、更自在的关键。

这意味着:

  • 专注于你能掌控的事情:你的行为、你的选择、你的努力方向。
  • 放下你无法掌控的事情:他人的想法、他人的情绪、宏观世界的复杂走向。
  • 勇敢定义自己的价值和意义,而非采纳外部世界的标准。
  • 允许他人拥有他们的世界观和叙事,但不让其定义你的现实。
  • 设定健康的边界,将精力投入到真正与你的成长和幸福相关的“自己的课题”上。

当我们不再被他人的课题和外部的叙事所裹挟,我们就能拿回自己人生的主导权,在喧嚣的世界中,清晰地听到自己内心的声音,构建并活出真正属于自己的、独一无二的人生脚本。对于那些与你无关的喧嚣,可以引用查理芒格那句口头禅,淡然来一句“我没什么要说(I have nothing to add)”,然后转身,继续去关注你自己的人生脚本。

Similar Posts:]]>
https://timyang.net/life/task-separation-and-others-narratives/feed/ 3
我的半年健身心得:重塑精力与效率之路 https://timyang.net/misc/half-year-fitness/ https://timyang.net/misc/half-year-fitness/#comments Fri, 18 Apr 2025 19:00:53 +0000 https://timyang.net/?p=1578

作为一个在互联网行业摸爬滚打多年的老兵,常年的久坐、长时间面对屏幕以及伴随而来的精神压力,是很多同行,包括我自己,都绕不开的日常。虽然体检报告上没有特别异常,但说实话,身体状态长期处于一种“够用但不好”的平庸状态:容易疲惫、眼带血丝,开会容易走神打哈欠、体重和体脂率悄悄攀升……我相信这可能是很多技术朋友们的写照。

坦白说,我的体质基础其实算是偏弱的。 比如,以前看到很多人能轻松以10-11(KM/h)的配速跑步,而我按配速10连续跑不到半小时,大部分时候只能维持在8-8.5左右(当然,找到适合自己的节奏最重要)。在开始系统健身前,我甚至连一个标准的引体向上都做不了。正因为起点不算高,我才觉得健身这件事对我个人,或许更具改变的意义。

转折发生在大概半年前。我决定不再敷衍,而是像对待一个重要项目一样,开始认真规划和执行我的健身计划。目标很明确:不追求成为健美先生,而是为了提升整体生命系统的效率和稳定性,让身体和大脑都能更好地支持高强度的工作和生活。

我设定的最低标准是:每周至少150分钟的中等强度有氧运动,外加1-2小时的力量训练。这里的“训练”是专注的、有计划性的,不包括日常零散的步行。

为什么是这个组合?科学依据与个人感悟

这个目标并非凭空而来。它符合世界卫生组织(WHO)等权威健康机构对成年人的基本运动建议。早些年我也曾“佛系”地跑过步,但回过头看,每周零星一两次、没有持续性和时长的保证,更多是心理安慰,远未达到能带来显著改变的“起步线”。

而加入力量训练,是基于我深入分析了解后做出的决定。它不仅仅是练肌肉,更是为了:

  1. 优化身体的“能量系统”:肌肉是储存糖原的主要场所,增加肌肉量有助于提高胰岛素敏感性,降低血糖波动和二型糖尿病的风险。这对于细粮高糖现代饮食结构的人来说,尤其重要。
  2. 构建强大的“身体架构”:力量训练提升关节的稳定性和整体的力量平衡,这是对抗衰老、预防伤病、保持中老年后身体机能不快速下滑的关键。把它想象成给你的身体这台精密仪器打好结构基础、加固关键部件。

而最令我惊喜的“可量化成果”,体现在最大摄氧量(VO2 Max)的显著提升上。短短半年,我的VO2 Max提升了约 15%,而大部分人这个指标是随年龄下降的。

借用一下定义:

最大摄氧量 (VO2 max) 是指人体在剧烈运动中所能消耗的最大氧气量。它是衡量有氧健身水平的指标,表明身体向工作肌肉输送和利用氧气的能力。最大摄氧量越高,通常意味着进行耐力活动的能力越强,患心血管疾病的风险也越低。

— 根据 Google Gemini

VO2 Max可以被视为你身体的“发动机功率”或者“处理氧气的峰值能力”。它的提升,直接体现在:

  • 有氧耐力显著增强,可以轻松完成1小时甚至更长时间不间断训练。
  • 日常精力大幅改善:这也是我最看重的生命时间的质量。比如开会时能注意力集中,很少出现犯困或打哈欠的情况;处理复杂问题时,感觉大脑供氧充足,思维更敏捷;一天工作下来,不再是电量耗尽的感觉,晚上睡觉时候身体不再像一个放了气的皮球。
  • 睡眠质量提升。
  • 长期来看,高VO2 Max是心血管健康的积极信号,甚至与预测寿命相关。

这些实实在在的改变,让我更加确信,把一定的时间和精力投入到健身上,是一笔高回报的投资,它直接服务于我的工作效率、生活品质甚至生命的质量。

实践心得:如何将健身融入日常?

理解了“是什么”和“为什么”,接下来的挑战就是“怎么做”——尤其是在我们这种工作节奏快、时间宝贵的行业里。分享几个我的实践心得,或许能给朋友们一些启发:

1. 时间管理:将其视为一项非协商的日程

150分钟有氧+1-2小时力量,每周总计约3-4小时的训练时间,加上路途往返和拉伸,单次可能需要1.5-2小时。这确实需要挤时间。我的做法是:

  • 排入固定日程:像重要的会议一样,将锻炼时间锁定在每周的日历中,比如下班后7-9点、周末的早晨等。一旦排定,除非有紧急情况,不随意取消。
  • 选择“近”和“快”:优先选择离家或公司最近的健身房,最大限度减少路途时间。家门口或办公室楼下健身房通常是最佳选择。
  • 提高优先级:在有限的闲暇时间里,健身的优先级需要高于刷手机、看剧甚至阅读等活动。一开始可能需要一些意志力,但当身体反馈给你积极信号时,动力会越来越强。

2. 地点选择:效率与效果优先

我在户外跑步和健身房之间做过尝试和权衡,最终选择了健身房,这主要出于效率和综合性考虑:

  • 时间效率:健身房通常是室内恒温,不受天气影响,启动阻力低(尤其冬天)。
  • 训练全面性:户外跑步难以进行系统的力量训练。健身房器械齐全,能同时满足有氧和力量的需求。
  • 有氧的可控性:在跑步机、椭圆机、单车等器械上,更容易维持目标心率区间,确保有氧训练的质量。
  • 当然,选择你最容易坚持的环境是第一位。如果户外跑步让你感到愉悦放松,更容易坚持,那就去户外。关键是开始并持续。

3. 心率是你的最佳“传感器”:理解Zone 2和HIIT

有氧训练并非心率越高越好。我的有氧时间里,大部分时间会放在Zone 2(约最大心率的70%-80%)。也有定义为60%-70%的,如果你觉得困惑,Zone 2的共识是,这个强度下,你通常还能维持基本的对话(即所谓的“跑步时能聊天”)。

  • 为什么是Zone 2? 它是建立有氧基础、提高身体脂肪供能效率、增强毛细血管网络的关键区域。想象它在为你身体的“发动机”构建更庞大高效的燃料输送系统。很多新手容易全程冲刺到Zone 3、4,那更多是提高“峰值性能”,而不是“基础排量”。
  • HIIT(高强度间歇训练):为了进一步提高VO2 Max这个“发动机功率上限”,我每周会加入至少一次HIIT。典型的做法是高强度(心率冲到Zone 4-5,约80%-90%最大心率)持续3分钟,然后低强度(心率降到Zone 1,约50%-60%最大心率)活动3分钟,重复5-8组。
  • 为了科学监控心率和运动效果,运动手环或手表几乎是必备工具。它们能实时显示心率及区间,长期记录还能看到VO2 Max等数据的变化。我日常使用Apple Watch设备来监控心率,包括记录睡眠。
  • 最高心率简易算法(HRmax) = 每分钟心跳(220 – 年龄)

4. 力量训练:务实为王,安全第一

力量训练的目标并非要追求极限重量或块头,而是提高功能性力量、改善身体成分和代谢健康。对于我们来说:

  • 选择基础动作:深蹲、卧推、硬拉(谨慎尝试)、划船、引体向上(或器械辅助)、肩推等复合动作是效率较高的选择,能锻炼到主要的肌群。
  • 重量适度,动作标准:安全永远是第一位的。先用轻重量掌握正确的动作模式,再逐步增加重量。宁可重量轻一点,也要保证动作不变形,避免受伤。
  • 无需频繁练到力竭:除非有特定的增肌目标,大部分时候训练到接近力竭(还能做1-2次的程度)即可。

5. 要不要教练?初期入门的好帮手

有氧入门相对容易,更在于坚持。但力量训练,尤其是自由器械,对动作标准要求高。

  • 优势:如果你预算允许,并且是力量训练新手,初期请10-20节私教课是非常值得的投资。一个好的教练(注意甄别,优先有运动科学背景、沟通好的)能帮你建立正确的动作模式,避免走弯路和受伤,这能为你省去很多麻烦。尤其是女性的健身者,力量训练可能更需要一些正确理念的指引。
  • 替代方案:如果不想请教练,互联网上有大量高质量的训练视频教程(建议选择有运动康复或健身认证背景的博主),多看多学,从小重量开始模仿练习。

6. 换个词:这不是“坚持”,而是“习惯”

“坚持”听起来是需要咬牙、反人性的。一旦松懈,就可能前功尽弃。我更喜欢把它看作是培养一种生活习惯,就像每天要洗脸刷牙一样自然。

  • 奖励机制:找到你运动后的“小奖励”。我的健身房有泳池和桑拿,因此大部分时候我练完会去放松一下,是很好的激励,并且桑拿还可以促进生长激素分泌。
  • 减少阻力:随时可以准备好运动装备出发、选择便捷的地点、有合适的搭子、找到喜欢的运动方式(听音乐、听书)都能降低启动的心理门槛。
  • 从小目标开始:如果设定“今天要练2小时”让你望而却步,那就改成“今天先去做30分钟有氧”。往往当你迈出第一步后,身体进入状态,内啡肽分泌,很容易就愿意完成更多。我很多时候只打算练30分钟,但是练完30分钟身体没有停下来的意愿,不知不觉就练了1小时甚至更多。

7. 让过程更有趣:知识的“加油站”

长时间的有氧训练可能略显枯燥。这正是利用“碎片化”脑力进行学习的好时机。

  • 听书/播客:我利用在跑步机或椭圆仪上的时间,听完了不少之前没时间读的书或播客,包括微信读书上很多很枯燥的比如凯恩斯,哈耶克等经济学图书。
  • 内容选择:选择那些信息密度适中、不需要高度专注消化的内容,比如财经评论、商业访谈、人物传记、科普类播客(AI相关非常热门),因为太烧脑的技术内容可能影响运动节奏。有趣的音频内容能让你觉得时间过得飞快,同时收获知识。Spotify、微信听书等平台有很多优质资源。

8. 关于分享与衡量:外部监督是动力,内在提升是关键

分享健身进展,是获得外部监督和持续动力的一种有效方式。朋友圈或社交网络上,经常能看到大家晒跑步轨迹、配速,或者展示健身后的肌肉线条、马甲线。这无可厚非,也是记录成果的一种方式。

但从我以提升整体功能性为目标的实践经验来看,真正关键的“指标”,不完全是这些“表面”的成果展示。

对于有氧训练,如我们前面强调的,真正决定心肺功能提升效果的,不是你跑了多远的距离或多快的配速(这些更多是结果),而是你持续训练的时长以及训练过程中的心率是否维持在目标区间(尤其 Zone 2)。如果你选择通过分享来激励自己或影响他人,不妨也关注你的运动时长和心率区间分布图。这能让你更关注训练的“过程质量”,有氧收益源于科学的训练过程。

对于力量训练,情况又有所不同。很多业余锻炼者,即使科学训练了一段时间,可能并不会像健身杂志封面人物那样迅速练出引人注目的、棱角分明的肌肉线条。如果过于看重外部视觉变化,看不到预期的“大块头”或“马甲线”,确实可能会感到沮丧,甚至因此羞于分享或产生灰心。

我想再次强调,我们健身目的是为了提升整体健康和功能性,是为了一个更好身体状况的自己。力量训练是为了提升身体的稳定性、力量基础和平衡能力,是为了让你在日常生活中更轻松、更不容易受伤,是为了为对抗衰老打下基础,而不是为了炫耀或者仅追求外部的认可和视觉效果。

所以,请关注那些更实在的“内部提升”:你在卧推时感觉身体更稳定了吗?深蹲时核心更扎实了吗?搬重物是否感觉更轻松了?长时间坐立办公后腰背是否比以前更舒适?这些功能性的改善和力量的增长,才是我们力量训练最有价值、也最值得骄傲的成果。

是否分享,如何分享,完全取决于你自己,不需要因为没有练出“杂志封面”般的身材而灰心。专注于自身的力量、平衡性及稳定性的提升,这本身就是一种巨大的成功。让外部监督成为助力,但最终的衡量标准,请回归到自身身体状况和能力的改善。

结语:这是一场对自身系统的“升级”

健身不应被视为时间消耗,而应看作是一场对你最宝贵的资产——身体和大脑——进行的系统性升级和维护。它带来的远不止体脂率的下降或VO2 Max的提升,更是精力、专注力、情绪稳定性的全面改善。这些提升,将直接转化为你精神力的竞争力,以及生活中享受美好的能力。

从今天开始,哪怕只是抽出30分钟,去楼下快走,或者在客厅做几个深蹲和俯卧撑,迈出这第一步。相信我,一旦你开始尝到身体机能变化的甜头,健身就会像刷牙一样,自然而然地融入你的生活,成为你提升自我、从容应对挑战的有力武器。

你的身体,是你大脑和心灵唯一的长期住所。好好爱护它,它会给你丰厚的回报。一起行动起来吧!

Similar Posts:]]>
https://timyang.net/misc/half-year-fitness/feed/ 3
我们需要什么样的社会连接 https://timyang.net/misc/social-connections/ https://timyang.net/misc/social-connections/#comments Sat, 12 Apr 2025 01:27:11 +0000 https://timyang.net/?p=1563 读者好,无论你通过何种渠道看到这篇文章,想必已是长期关注的朋友。这博客自2008年启程至今,中间曾停更数年。如今,随着AI时代的到来,技术领域正经历剧变。而这个博客的读者普遍已经步入中年,你或许也发现,技术的边界之外,其他视角的探索与思考同样具有意义。因此,接下来的更新也许不再局限于技术本身,而是尝试触及更广阔的议题。

年轻时,我也体验过深陷社会连接缺失的孤独。刚毕业找工作那段日子,觉得全世界都在忙碌,只有自己被困在空虚里,毫无着落。而在学生时代,暑假回乡的两个月也是如此,村庄的宁静反倒放大了一种无处安放的寂寞。那时的我,渴望有人能看见我的存在,哪怕只是简单聊上几句。

随着自己人生经验的增长,感悟却逐渐有些不同。一方面已经到了不惑的年龄,不需要刻意去增加社会连接来缓解自己的焦虑或证明自己的存在;处于 I 和 E 之间的性格也在另外一方面减少了对外界的依赖。自疫情开启远程工作以来,我身处一种疏远的社交环境,但并未感到困扰。视频会议和协作项目提供了某种联系,偶尔的线下聚会或行业活动,也让我感到被理解、被看见。这种状态似乎足够,却也让我反思:这样的连接真的能支撑我们走过所有时刻吗?一年多前,我参与的Web3项目遭遇黑客攻击,损失惨重。由于Web3的跨国性质,问题无法诉诸常规司法途径。面对挫折,我再次体会到那种孤独——没有团队的共鸣,没有朋友的倾听,仿佛又回到了年轻时的无助。那段时间,我感到孤立无援,但细想之下,孤独并非全然负面。它像一面镜子,逼迫我直面内心的缺失,也让我更珍惜那些微小的联结。我们害怕孤独,是因为它暴露了未被填满的角落,还是因为我们尚未学会与自己为伴?或许,社会连接的价值,不只在于驱散孤独,更在于帮我们找到与自己和解的勇气。

这些经历让我开始思考:我们到底需要什么样的社会连接?短暂的与社会疏离或许无妨,但当生活抛来真正的考验,连接的质量便显露无遗。我看到过一项研究:更丰富的社会联系与更健康的晚年密切相关。这或许能解释“丧偶效应”——老年伴侣一方离世后,另一方常在一两年内随之而去。逝者带走了最核心的情感支柱,留下的失衡足以撼动身心。孤独会不会成为比疾病更隐秘的威胁?或许未来,健康评估会将“高质量社会连接”视为与血压同等重要的指标。

在桑贾伊• 古普塔的《逆龄大脑:保持大脑年轻敏锐的新科学》中也有过这样一段话:

如果说填字游戏提高大脑功能的能力可以得100 分为B——,那什么能得A呢?与他人的联系。面对面的联系。2015 年的一项研究及其他许多研究告诉我们,拥有多样化的社交圈子可以提高大脑的可塑性,也有助于保持我们的认知能力。与他人互动交流不仅有助于减轻压力,增强我们的免疫系统,还可以降低我们认知能力下降的风险。

现代社会让“离群索居”变得容易。网上常有人讨论“去哪个城市躺平”,比如鹤岗这样的低成本小城。选择这些地方的人,社交往往极少,却似乎也能在经济独立的支撑下自得其乐。这种生活摆脱了职场无休止的奔波和复杂的人际羁绊,显得轻松自由。这不仅是对自主的追求,或许也是对传统社会期待的一种蔑视。我想起一个视频,讲述艺术家张二冬在终南山隐居十余年的故事。他几乎断绝了社会联系,却在自然中找到平静。与我们这些“入世”的忙碌相比,他的选择更像一种“出世”,在自然中寻得平静。但这份平静让我好奇:对于大部分人或者少部分愿意选择出世的人来说,抛开经济问题不说,极少的连接,真能满足我们内心的全部需求吗?当我们抛开复杂的关系,是否在拥抱自由,还是在逃避某种无法回避的羁绊?社会连接或许并非越多越好,但它有它存在的合理性,每个人是否真的可以完全割舍?即便我们自以为可以。

即便不选择隐居,普通人的社交也未必丰富。职场生活围绕家庭展开,有孩子的可能加入家长群,工作上则局限于几个熟面孔。若非职业需要,日子就在这些固定的圈子中流转。你有没有问过自己:身边有几人能在你最需要时伸出援手?对背井离乡在大城市打拼的人来说,这座城市往往只是落脚之地,其人际网络与“躺平”小城并无本质不同。这种疏离感让我遐想:若未来AI伴侣能取代日常寒暄,我们是否仍需真实的人际联结?当然,那些在一直生活在紧密社会连接关系中的人,或许难以体会这种“稀薄”。

“君子之交淡如水”听来高雅,但若没有持续的往来,纯粹的友谊往往脆弱。反观那些带着互惠色彩的关系,却常能经受时间考验。起初可能是“彼此有求”,但频繁的互动总会催生情谊。大学时的挚友,若无共同的牵绊,如今是否只剩节日问候?我曾以为理想的连接无需算计,但现实告诉我,互助或许更可靠。比如一起做项目,既能分担压力,也能在合作中找到默契。这种“绑定”并不浪漫,却能在疏远的现代社会中,帮我们抵御孤独,甚至重拾一种归属感。

那么,我们需要什么样的社会连接?若有一个能让你毫无保留倾诉的人——爱人、知己或手足——或许一人足矣。若没有这样的存在,像大多数人那样,在生活不同角落有几位有重叠甚至有利益关系的朋友,也已足够。关键不在于数量,而在于能否感到被看见、被理解。但我越来越相信,真正的挑战不在寻找合适的人,而在成为那个值得被连接的人。这需要我们不断成长,学会真诚付出,并掌握维系关系的智慧。

高质量连接的意义,或许不在于数量,而在于彼此点亮的瞬间。那些瞬间,让我们成为彼此的见证者,为生命增添独特的纹理。我们需要连接,是为了不孤独,还是为了成为更完整的自己?只有先学会看见自己——那些彷徨、失落甚至坚韧的时刻——才能敞开内心,让他人走近。即使没有这样的连接,孤独也只是人性的一部分,任何能带来片刻安宁的方式都值得尝试。但无论何时,我们都需保持一份警醒:孤独虽常见,却可能在不经意间,让我们变得脆弱。

Similar Posts:]]>
https://timyang.net/misc/social-connections/feed/ 2
2PC之踵?是时候升级二阶段提交协议了 https://timyang.net/distributed/time-to-move-on-from-two-phase/ https://timyang.net/distributed/time-to-move-on-from-two-phase/#comments Mon, 28 Jan 2019 02:32:30 +0000 https://timyang.net/?p=1531 感谢读者,能看到这篇文章,也许是通过 RSS 订阅或者是博客首页来的。博客过去很长时间没有更新,大部分随想都发表在微博,由于发的内容大多是碎碎念,建议大家也不用专门去拜访。在 2010 年时候,曾写过一篇多IDC的数据分布设计的文章提到过 2PC 等协议,最近在 Hackernews 上又有很多有关优化 2PC 讨论,讨论的源头主要由下面这篇文章引起的,因此作了翻译,供大家参阅。

]]>
感谢读者,能看到这篇文章,也许是通过 RSS 订阅或者是博客首页来的。博客过去很长时间没有更新,大部分随想都发表在微博,由于发的内容大多是碎碎念,建议大家也不用专门去拜访。在 2010 年时候,曾写过一篇多IDC的数据分布设计的文章提到过 2PC 等协议,最近在 Hackernews 上又有很多有关优化 2PC 讨论,讨论的源头主要由下面这篇文章引起的,因此作了翻译,供大家参阅。

两阶段提交协议(2PC)已经在企业软件系统中使用了三十多年。它是一种非常有影响力的协议,用于确保访问多个分区或分片中的数据的事务的原子性和持久性。它无处不在 – 无论是在旧的“古老的”分布式系统、数据库系统和文件系统,如Oracle,IBM DB2,PostgreSQL 和 Microsoft TxF(支持事务的 NTFS)还是在较年轻的“千禧”系统如 MariaDB、TokuDB、VoltDB、Cloud Spanner、Apache Flink、Apache Kafka 和 Azure SQL 数据库。如果您的系统支持跨分片/分区/数据库的 ACID 事务,那么它很可能会在后台运行 2PC(或其某些变体)。有时它甚至出现在“前台” – 旧版本的 MongoDB 要求用户在应用程序代码中为多文档事务实现 2PC。

在这篇文章中,我们将首先介绍一下 2PC:它是如何工作的以及它解决了什么问题。然后,我们将展示 2PC 的一些主要问题以及现代系统如何试图解决它。不幸的是,这些尝试的解决方案也带来了一些其他问题。在文章最后,我将说明下一代分布式系统应该避免使用 2PC,以及如何实现这一点。

2PC 协议概述

2PC 有很多变种,但基本协议的工作原理如下:

背景假设:一个事务相关的工作已经划分给存储该事务数据的分片节点。我们将在每个分片中执行的工作,称为节点“参与者”的工作。当事务准备好“提交”时,每个参与者都能够独立于彼此完成事务相应的职责。2PC 协议由单个独立的、可协调的节点发起(可能是参与者之一)。

2PC 协议的基本流程如下图所示。(协议从图的顶部开始,然后向下进行。)
2PC

阶段1:协调者询问每个参与者,是否已成功完成其对该事务的职责,并达到可以提交的状态。每个参与者都回答“同意”或“反对”。

阶段2:协调者统计所有回应,如果每个参与者都回答“同意”,那么就提交事务,否则就中止事务。协调者向每个具有提交最终决策权力的参与者发送消息,并接收参与者的确认消息。

此机制确保事务的原子性属性:整个事务将反映在系统的最终状态中,或者不反映在系统的最终状态中。即使只有一个参与者没有提交,那么整个事务将会被中止。换句话说:每个参与者对事务都有“否决权”。

它还确保了事务的持久性。每个参与者确保在阶段1响应“同意”之前,已将所有事务持久地写入存储。这使协调者对事务做出最终决定时,无需担心参与者在投票“同意”之后写入失败。在这篇文章中,当使用术语“持久写入”时,我们有目的地模糊化了两个区别 – 本地临时性存储,或是分布式的写入到多个分片以“持久化”。

除了持久地写入事务相关的数据之外,协议本身还需要额外的写入,在处理消息之前必须使其持久化。例如,一名参与者在第一阶段投票“同意”之前拥有否决权,但在此之后,它不能改变其投票结果。但如果它在投票“同意”后立即崩溃怎么办? 当它恢复时,它可能不知道它投了“同意”,仍然认为它拥有否决权,并继续流程并中止事务。为了防止这种情况,它必须在“同意”投票发给协调者之前,持久化相关投票结果。(除了这个例子,在标准的 2PC 流程中,还有另外两种消息需要发送前持久化操作。)

2PC 的问题

2PC 存在两个主要问题。第一个是众所周知的,并在所有讲述 2PC 的教科书中都进行了讨论。第二个不太知名,但仍然是一个大的问题。

众所周知的问题被称为“阻塞(block)问题”。当每个参与者都投了“同意”,但协调者在将最终决定的消息未能发送给至少一参与者之前就挂了,就会出现这种情况。问题的原因是,通过投票“同意”,每个参与者已经取消了否决事务的权力。但是,协调者仍有绝对权力来决定事务的最终状态。如果协调者在向至少一名参与者发送最终决定的消息之前挂了,那么参与者就无法做出最终决定 – 他们不能中止,因为协调者可能会在挂掉之前决定提交,并且他们无法提交,因为协调者可能决定在失败之前中止。因此,他们必须等待—等到协调者恢复—以便得到最终决定。与此同时,他们无法处理与停滞冲突的事务,因为该事务的写入的最终结果尚未确定。

阻塞问题有两种解决方案。方案一是修改核心协议以消除阻塞问题。不幸的是,这些修改降低了性能 – 通常通过添加额外的一轮通信来实现 – 因此很少在实践中使用。

方案二是保持协议不变,但降低协调者失败从而引发阻塞的可能性 – 例如,通过在副本共识协议上运行 2PC 并确保协议的重要状态被复制。不幸的是,这些解决方案再一次降低了性能,因为协议要求这些副本共识轮次按顺序进行,因此它们可能会给协议增加显著的延迟。

鲜为人知的问题是我称之为“拥堵(cloggage)问题”。在处理事务之后进行 2PC,必然增加事务的等待时间,它等于运行协议所花费的时间。延迟的增加对于许多系统来说已经是一个问题,但更大的问题是,工作节点必须到第二阶段中期才知道事务的最终结果。在他们得到最终结果之前,他们必须为可能中止事务的可能性做好准备,因此在事务得到确认之前,他们通常会暂停其他有冲突的事务进行。这些阻塞的事务同样会进一步阻止其他事务运行,依此类推,直到 2PC 完成,所有被阻止的事务才可以恢复。这些拥堵问题进一步增加了事务平均延迟,并且降低了整体的事务吞吐量。

总结我们上面讨论的问题:2PC 在四个方面污染了系统架构:延迟 (协议的时间加上冲突事务的停顿时间),吞吐量(因为它碰到冲突的事务会停顿),可扩展性 (系统越大,事务更需要多分区的支持,并且必须付出 2PC 的吞吐量和延迟成本以及可用性(前面提到的阻塞问题)。

没有人喜欢 2PC,但几十年来,人们都认为它是一种必要的妥协。

是时候改变了

三十多年来,业界一直在分布式系统中使用两阶段提交。我们已经意识到引入 2PC 会带来性能、可伸缩性和可用性问题,但在没有更好的替代方案之前,仍需要选择使用它。

真相就是,如果有更好的方案,2PC 就没必要存在了。为了实现这一目标,无论是在学术界(如SIGMOD 2016论文)和工业界都在进行尝试。通常的做法是避免分布式事务,例如通过在提交事务之前将数据重新分片,使得事务不再是分布式事务。不幸的是,这种重新分片的做法降低了系统的性能。

我倡导对分布式系统架构进行更深层次的优化。我坚持认为系统可以使用更简单和高效的提交协议,在保证 ACID 的同时,能够处理分布式事务。

一切问题的根源来自一个存在数十年的假设:事务可能随时以任何理由中止。即使我在相同的初始系统状态下运行相同的事务,在下午 2:00 它可能可以成功提交,但在 3:00 时却会提交失败。

为什么需要该假设?大多数架构师认为有以下几个原因。首先,节点可能在任何时候失败,包括在事务处理过程中。系统故障恢复过程中,由于无法获取故障前的内存状态,因此也无法恢复事务失败之前的现场。因此系统需要中止故障出现时所有相关事务。由于任何时候都可能发生故障,这意味着事务可能随时中止。

其次,大多数并发控制协议都需要能够随时中止事务。乐观协议在处理事务后执行“验证”,如果验证失败,则中止事务。悲观协议通常使用锁来防止并发异常,这种锁的使用可能会导致死锁,然后又需要通过中止(至少)事务的方法来解决死锁问题。由于可能随时出现死锁,因此事务需要保留随时中止的能力。

如果来重新审视两阶段提交协议,您将看到随时中止事务的可能性,是 2PC 协议中复杂和延迟的主要原因。参与者不能轻易地告诉其他方是否同意提交,因为他可能在此之后(在事务提交前)出现故障,然后在故障恢复期间中止此事务。因此,他们必须等到事务结束(当所有重要状态都已经持久化)并且严格按照两个阶段进行处理:在第一阶段,每个参与者公开放弃其控制以中止事务,然后才能进入第二阶段,作出最终决定并进行广播。

在我看来,我们需要从参与者中移除否决权,并且以系统无法在执行期间随时中止事务的假设来进行架构设计。只接受以业务逻辑需要来否决事务的情况。如果在给定数据库当前状态下,理论上可以提交事务情况下,无论发生何种类型的故障,该事务都必须可以提交。此外也不接受由于其他并发运行导致的竞争条件而不能最终提交或中止事务。

消除随意中止事务的灵活性听起来很难。我们将很快讨论如何实现这一目标。但首先让我们观察在不能随意中止事务的情况下,提交协议会如何变化。

当事务不能随意中止时,提交协议是什么样的

我们来看两个例子:

在第一个例子中,假设存储变量 X 的节点需要执行一个任务:将 X 的值更改为 42。假设在 X 上没有定义完整性约束或触发器(这可能会阻止系统将 X 设为 42)。在这种情况下,该参与方永远没有中止事务的权力。无论发生什么,该参与方必须将 X 更改为42,如果修改过程中出现系统故障,则必须在故障恢复后将 X 设成 42。由于参与方没有随意中止事务的能力,因此在提交协议期间,不需要检测参与方是否可以提交。

在第二个例子中,假设存储变量 Y 和 Z 值的节点接收到两个事务任务:从前一个 Y 值中减去 1 并将 Z 设置为 Y 的新值。此外,假设 Y 上存在完整性约束,表明 Y 永远不会低于 0(例如它代表零售应用程序中的库存)。因此,此参与方必须运行以下代码:

 IF (Y > 0)
              Subtract 1 from Y
ELSE
              ABORT the transaction
Z = Y

因为应用程序的逻辑需要这样做,所以必须赋予参与者中止事务的权力。但是这种权力是受限的。只有当 Y 的初始值为 0 时,才能中止该事务,否则必须提交。因此,参与方不必等到完成事务之后才知道它是否需要提交。相反:一旦它完成了事务中第一行代码的执行,它就已经知道了最终需要提交还是中止。这意味着相比于 2PC 而言,提交协议将能够更早地启动。

现在让我们将这两个例子组合成一个例子,其中一个事务由两个参与者执行 – 其中一个参与者正在完成第一个例子中描述的工作,另一个参与者正在完成第二个例子中描述的工作。由于我们保证原子性,第一个参与者不能简单地将 X 设置为 42,相反,它自己的工作依赖于 Y 的值。实际上,第一个参与者的事务代码变为:

temp = Do_Remote_Read(Y)
if (temp > 0)
    X = 42

请注意,如果第一个参与者的代码如上的话,那么另一个参与者的代码可以简化为:

IF (Y > 0)
         Subtract 1 from Y
         Z = Y

通过以这种方式编写事务代码,两个参与方都删除了显式中止逻辑。相反,两个参与方都有 if 语句来检查是否会导致原始事务中止的约束。如果原始事务中止,两个参与方最终都无所作为。否则,两个参与方都会根据事务逻辑更改其本地状态。

此时需要注意的一点是,在上面的代码中完全消除了对提交协议的需求。除了应用程序代码在给定数据状态下定义的条件逻辑以外的任何原因,系统都不允许中止事务。并且所有参与者都在这个相同的条件上调整他们的动作,这样他们就可以独立地决定,在由于当前系统状态而无法完成事务的情况下“什么也不做”。因此,已经消除了事务中止的所有可能性,并且在事务处理结束时不需要任何类型的分布式协议来做出关于事务组合的最终决定。2PC 的所有问题都已消除。因为没有协调者,所以也没有阻塞(block)问题。因为所有必要的检查都与事务处理时候完成,而非在事务完成之后检查,所以没有拥堵(cloggage)问题。

此外,只要不允许系统因应用程序逻辑之外的任何原因而中止事务,总是可以像上面那样重写任何事务以替换代码中的中止逻辑,即 if 语句有条件地检查中止条件。此外,可以在重写应用程序代码的情况下实现此目的。(有关如何执行此操作的详细信息超出了本文的范围,但可以高屋建瓴地总结为:当一个节点执行了导致中止的条件逻辑时,它可以设置特殊的标记,其他节点可以在远程读取这些标记。)

实质上:在事务处理系统中有两种类型中止:(1)由数据状态引起的中止和(2)由系统本身引起的中止(例如故障或死锁)。如上所述,类别(1)总是可以根据数据的条件逻辑来编写。因此,如果您可以消除类别(2)中止,则可以消除提交协议。

所以现在,我们所要做的就是解释如何消除类别(2)中止。

消除系统本身中止

我花了将近十年的时间来设计没有系统引发中止的系统。此类系统的示例是 Calvin,CalvinFS,Orthrus,PVW 以及惰性处理事务系统。这一特性的推动力来自于— Calvin —因为它是一个确定性数据库系统。确定性数据库保证在给定一组定义的输入请求的情况下,数据库中只有一个可能的最终数据状态。因此,如果将相同的输入发送到系统的两份不同的副本,两份副本将独立地处理该输入,并将最终达到一致的结果。

系统本身中止,例如系统故障或并发控制竞态条件,从根本上说是不确定性事件。一个副本很可能碰见系统调用失败或进入竞态条件,而另一个副本则不会。如果允许这些非确定性事件导致事务中止,则一个副本会中止事务而另一个副本将提交事务 – 这是对确定性的违背。因此,我们必须以系统故障和竞态条件不能导致事务中止的方式设计 Calvin。对于并发控制,Calvin 使用了避免死锁技术的悲观锁定,该技术确保系统永远不会陷入由于死锁导致的事务中止的状况。面对系统故障,Calvin 无法从中断的位置重启事务(因为在故障期间失去了内存状态)。尽管如此,通过从相同的原始输入重新启动事务,它依然能够完成该事务的处理而不必中止它。

这些解决方案(包括防止死锁以及故障重启恢复事务),都不局限于在确定性数据库系统中使用。在非确定性系统中,如果失败期间,丢失的事务状态被其他非故障节点侦测到,那么事务重启变得略微棘手。但是也有一些简单的方法来解决这个问题,但这些方法已经超出了本文讨论的范围。实际上,我上面提到的其他系统都是非确定性系统。一旦我们意识到消除系统本身故障所带来的威力,我们就将设计植入到 Calvin 之后构建的每个系统中 – 甚至是非确定性系统。

结论

系统架构师继续在分区系统中使用 2PC 的好处微乎其微。我认为,忽略系统本身中止以及状态写入故障是更好的前进方法。确定性数据库系统(如 Calvin 或 FaunaDB)总是会规避系统本身中止,因此通常可避免 2PC。但是这种优势仅发挥在确定性数据库是一个巨大的浪费。从非确定性系统中消除系统本身引起的中止并不困难。最近的项目表明,甚至可以在不使用悲观并发控制技术的系统中消除系统引起的中止。例如,我们上面链接的 PVW 和惰性事务处理系统都使用多版本并发控制(MVCC)的变体。FaunaDB 使用乐观并发控制的变体。

在我看来,几乎没有理由坚持过时的系统性中止假设,当系统在单台机器上运行时,这种假设是合理的。然而,很多现代系统已经扩展到到多台可以故障隔离的机器上。维持该假设就需要成本高昂类似 2PC 的协调和提交协议。2PC 的性能问题一直是非 ACID 系统兴起的主要推动力,这些系统放弃了强一致性保证,以达到更好的可扩展性、可用性和性能。2PC 太慢了!它增加了所有事务的延迟,不仅仅是协议本身的时间占用,还阻止了访问相同数据的其他事务的并发执行。此外,2PC 还限制了可伸缩性(通过降低并发性)和可用性(我们上面讨论的阻塞问题)。前进的道路已经很明确:我们需要在设计系统时重新审视过时的假设,并对两阶段提交说“再见”!

本文作者 DANIEL ABADI,翻译自 It’s Time to Move on from Two Phase Commit方圆对本文翻译亦有贡献。Similar Posts:

]]>
https://timyang.net/distributed/time-to-move-on-from-two-phase/feed/ 2
是时候支持HTTPS了:免费SSL证书letsencrypt配置教程 https://timyang.net/web/https-nginx-ubuntu-howto/ https://timyang.net/web/https-nginx-ubuntu-howto/#comments Sat, 26 Nov 2016 08:20:50 +0000 https://timyang.net/?p=1514 今天抽空将 blog 增加了 HTTPS 支持,并停止了原来的 HTTP 服务。

]]>
今天抽空将 blog 增加了 HTTPS 支持,并停止了原来的 HTTP 服务。

由于证书仅网站域名需要,因此使用了免费的 Let’s Encrypt 证书服务。

根据维基百科的说明,Let’s Encrypt 是一个于2015年三季度推出的数字证书认证机构,将通过旨在消除当前手动创建和安装证书的复杂过程的自动化流程,为安全网站提供免费的SSL/TLS证书。Let’s Encrypt 是由互联网安全研究小组(ISRG,一个公益组织)提供的服务。主要赞助商包括电子前哨基金会,Mozilla 基金会,Akamai 以及思科。

2015年12月3日,该服务进入公测阶段,正式面向公众。

2016年4月12日,该项目正式离开Beta阶段。

到2016年9月9日,Let’s Encrypt 已经发放 1000 万张证书。因此对于大部分中小型网站来说,是一个值得考虑的选择。

letsencrypt

HTTPS 启用及配置的主要步骤如下,假设你已经有一个正常运行的 HTTP 网站。

1. 打开 https://certbot.eff.org/ 选择对应操作系统与 Web 服务器,选完后出现响应的平台说明。由于我的系统运行在 nginx 及 Ubuntu,选完之后出现的说明地址是 https://certbot.eff.org/#ubuntuxenial-nginx

2. 执行命令,并根据需要修改相应域名参数。

$ sudo apt-get install letsencrypt
$ letsencrypt certonly --webroot -w /var/www/timyang.net -d timyang.net -d www.timyang.net

3. 修改 nginx
将 80 端口相关配置改成 443 端口,并增加相关配置

# listen       80;
listen 443 ssl;
server_name timyang.net www.timyang.net;

ssl_certificate /etc/letsencrypt/live/timyang.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/timyang.net/privkey.pem;

再增加 80 端口自动跳转

server {
    listen 80;
    server_name timyang.net www.timyang.net;
    return 301 https://$host$request_uri;
}

4. 重启 nginx,并用 chrome 访问,如果 URL 地址之前出现锁标记,则说明设置成功。
如果页面中还包含有嵌入的 HTTP 元素,chrome 会仍然显示 i 标记,通过点击 i 之后的元素说明逐个修复即可。

timyang-https

另外注意 Let’s Encrypt 每次只有 90 天有效期,但可以通过脚本进行更新

测试运行

$ sudo letsencrypt renew --dry-run --agree-tos

如果运行成功,建议将正式更新脚本加到 cron 脚本中,一劳永逸。

$ sudo letsencrypt renew

虽然 Let’s Encrypt 是一个免费的服务,但对 letsencrypt 使用感到满意的朋友,还可以去他们网站进行赞助。
Similar Posts:

]]>
https://timyang.net/web/https-nginx-ubuntu-howto/feed/ 84
IT工程师的又一次春节感悟 https://timyang.net/misc/spring-festival-2016/ https://timyang.net/misc/spring-festival-2016/#comments Tue, 23 Feb 2016 09:33:44 +0000 http://timyang.net/?p=1453 身在中国,生长的环境已经教导好了我们如何过一个正常的春节。

]]>
身在中国,生长的环境已经教导好了我们如何过一个正常的春节。

举国同庆的仪式

工作之后,回不回家则成了每年需要思考的问题。如果想过得轻松,离开父母去国外晒太阳发呆睡觉是一个不错的主意。但在这样一个举国团聚的日子,离开亲人远走毕竟会有一些愧疚感。

要回老家,需要面临交通和礼物的问题,同时还需要考虑自身是否体面。在城里工作,生活未必光鲜;但如果要回家,大部分还是希望将自己过得好的一面展示,比如用的手机、开的车、穿的衣服等。工程师群体一个冬天没添置新衣服并不罕见,但如果过年回家还是穿着去年爬山买的冲锋衣,会给细心的家里人增加不必要的担忧。

带什么礼品也是个发愁的问题,上一年带的礼品父母可能还收藏在老家未开封。送自己父母有时候挑了一些不实用的东西就算了,但如果去看岳父岳母(或未来的)就得多掂量一下。

按照传统的习俗,过年从腊月二十左右就开始了,在外地工作人群陆续返乡,经过了小年的酝酿、伴随着爆竹及烟花声,在除夕夜进入高潮。到正月份开始走亲访友,包括要拜访一些平时并没有热情及兴趣访问的亲戚,对于一些节奏慢的,直至过了元宵节春节才算结束。

春联大多是在年货市场买的,尽管上一辈少部分人还有自己编对联的经历,但到了这一代,除了少部分人有学校练过毛笔字的经历,大部分人都不会再有手写春联的兴趣及能力了。买来春联的横幅大多是一帆风顺或出入平安之类比较俗的文字,但也没人去琢磨更雅的文字,春联只是一个过年的象征,虽然贴在每天出入的大门口,但没什么人关注上面具体的内容。

在外工作的人过年回家,如果生活在大家族里面,红包是一笔不小的开支。除了给现金之外,现在还流行网上派红包,几百元甚至几千发下去,冒个泡就没了。当然也有更多的群体是抢红包一族,以至于回到家里吃年夜饭,也逐渐出现了城里面吃饭聚会的场面,大家都在盯着手机抢红包。

「小道消息」最近的的「猴年春晚的蝴蝶效应」中提到

1) 今年刚毕业的小李在春节这天摇了 328 次微信,打开了 523 次支付宝,最后红包总计收入 13.50 元,前后四个小时什么都没干。

2) 经此猴年春晚一役,中国有数千万青年一夜之间手臂变粗,并有数百万人练就「金手指」绝技,驰名日本的加藤鹰先生从此失业。

3) 某公司美女财务年终业绩考评不佳,奖金少发了一个月。春节这天,她潜伏在公司数百个群里,一天不吃不喝抢红包赚到 9300 元,出了一口恶气。节后,她成功转岗,任职手机 App 测试工程师。

大部分在外地工作的人的问题在于,一年其他时间并不会有机会抽出时间看望父母,因此回家探亲的义务都积攒到春节了。如果大家在一年之中对于亲情有更多看望及表达,则可以不需要凑在这几天。

一件事情应该尽量避免走到这样一个阶段,大家(比如父母以及另一半)都觉得需要这种仪式,每个人都觉得为了其他人在进行某项仪式,但是可能每个人自己都不喜欢及享受这种仪式。

无所事事的时间

尽管大部分人在春节这段时间无所事事,但也有不循规蹈矩的,李笑来 2015 年 12 月写的「什么是践行」一文中提到自己在以往春节完成的工作

《托福核心词汇 21 天突破》最后的突击成稿,就是在 2003 年的春节完成的。《把时间当做朋友》最初一搞,还叫《管理我的时间》的时候,是 2007 年春节……

2008 年年初,我和朋友合伙开了个留学咨询公司,在数码大厦租了个办公室,交完房租,就是装修,花不了几个钱。装修差不多了,就春节了。于是大家都去过年。等他们回来的时候,我已经在这期间接了几个客户,讲了一小期班,收上来的钱已经使得公司产生了盈利。

2010 年春节,一口气在两周内整理完《人人都能用英语》,以及《把时间当作朋友》的修订……
《人人都能用英语》现在在这里:http://zhibimo.com/books/xiaolai/everyone-can-use-english
《把时间当作朋友》(第三版)在这里:http://zhibimo.com/books/xiaolai/ba-shi-jian-dang-zuo-peng-you

2013 年年初,我和两个小伙伴组建了 Knewone,网站上线后没多久,就是春节。他们俩一个去了香港,一个去了柬埔寨,度假。我在家里充当客服…… >等两个小伙伴回来,网站的流量已经冲进 Alexa 全球排名 5 万以内了。

大部分人在春节假期浪费的时间至少有 2 周以上,这里说的浪费是指时间消耗在一些无谓的琐事上,而不是真正的度假或休息,比如游泳晒太阳算不上浪费。工作通常在放假前 1~2 周就停了;放假后恢复到正常工作状态通常还需要额外几天时间。因此这段时间大部分精力放在准备衣服、年货、交通、例行公事的拜访。如果你是一家之主,你可能还需要投入更多精力张罗招待客人。

大部分人对这段时间的浪费见怪不怪,某种程度已经习惯了这段时间无所事事。上面一文中还提到

可实际上,我并不讨厌给自己放假的啊。只不过,我觉得“法定”这事儿对我来说没意义,那所谓的“法定”是制约企业的,又不是制约我个人的。我什么时候该休息,应该是我说了算啊。手里本来有要做的事儿,结果可倒好,法定要求休息,我就休息了,那手里的事儿怎么办?在不得不与他人协同的时候,法定假日更是气人,活生生把很多事儿给搅黄,且每个人都不在乎 —— 他们说他们有他们自己的生活。

由于整个国家都在大迁徙,长途交通除了体验糟糕之外,时间上往往比平时多出更多时间。火车票一票难求,高速公路变成了停车场。还有些为了节约过路费,放假前夕在高速路口等候零点免费放行的人群。

因此如果按照正常的方式来过春节,假期并不能得到足够的休息。我们忙于完成春节的程序及仪式。

想充分利用时间的工程师,也计划看点书、写点东西,然而时间都被饭局、牌桌以及应酬不同的人群打断。想交流思想或者行业话题也找不到人。因此结果往往是,准备的书本没怎么看,准备写的东西没有写。

很多家里面人多比如有小孩及父母在一起的深有体会,平时想在家里面做点事情尚不容易,就不要说逢年过节了。

2016 年特别不凑巧,大家正准备收紧心思上班的时候,又碰到情人节,IT 工程师还没上班又在思考如何有特色的度过情人节吧?

观念的冲突

春节期间如果大部分时间在跟亲人在一起,对于大部分年轻人,首先碰到择偶观点的冲突。

关于择偶条件,今年春节让大家印象深刻的,莫过于从江西匆忙逃走的上海姑娘和那一桌饭菜的照片了。在陈岚另外一篇相似经历的文章「上海姑娘,不是逃饭,是逃命」中提到。

“我反复在心里犯拧的,是那一桌子,明晃晃亮灿灿的——不锈钢餐盘。”

从小到大,她没有使过这样的器皿。

她从小的餐饮习惯也并不讲究到色香味形器诸色具精。只是喝碧螺春使白瓷,为的取其色悦,喝明前龙井使一只透明玻璃厚矮杯,为观其形逸,喝普洱使一只粗陶杯,喝红茶要么是英国瓷器,要么是紫砂,这在她家,并不刻意,是一种至少已经延续了三代、而且已经无感了的生活习惯。

无论如何,那一桌子不锈钢餐具,在她来看,非常有损食相。扎眼地难受。金属撞击声更让她反胃。那些筷头己发黑的筷子,她尽快忽略,礼貌地吃完整顿饭。毫不失礼。是因为确实相爱。

但从这顿饭开始,她开始参悟,参悟彼此那些总会引起磕碰的差异的根源。

择偶是不同人群观念冲突的集中表现。这时候,背景及家庭条件的差异、文化的差异、阅历的差异在这里体现得淋漓尽致。虽然大部分年轻人并不能理解上面文字体现出的家庭环境带来的文化差异。

除了择偶的问题,工作等价值观的问题会经常碰撞,IT工程师除了要解释自己工作的性质之外,还需要面临隔壁家二狗上学成绩不如自己却比现在比自己有钱的事实,再加上职场上的成长需要厚积薄发,一年过去并不意味有显著的变化,因此回家的工程师往往有意回避谈论具体工作问题。

同学聚会是另外一个主题,一个方面,当年的发小都希望有更多机会再回首聚一下,一起感概青春的年华与岁月的流逝;但另外一个层面,常年不在一起,彼此观念差异往往比意想的更大。如果避免让对方惊诧你竟然成为脑残或愤青时,尽量避免将话题引向一些社会深层次问题。组织方也最好事先确定活动费用支付方式问题。

春节时环境和习惯的力量促使我们每个人按照既定的程序前行,大的环境无法改变,但是可以改变自己的生活方式。是时候思考下当下习惯的合理性。

大约从 1986 年开始,我很讨厌过春节,很朴素的原因,就是觉得真浪费时间啊…… 那个时候,罗永浩就表示很不理解,奇怪我为什么一到过年的时候,就找个宾馆躲进去 —— 这真是个怪人!

Similar Posts:

]]>
https://timyang.net/misc/spring-festival-2016/feed/ 7
工程师如何规划新的一年计划 https://timyang.net/tao/new-year-resolution-2016/ https://timyang.net/tao/new-year-resolution-2016/#comments Tue, 23 Feb 2016 09:29:17 +0000 http://timyang.net/?p=1451 最近碰到了一个创业失败的朋友,由于资金紧张,暂时没有合适的事情可做,只好靠开滴滴度日。问了他下一步的打算,他说有个传统企业的老板想转型互联网+,也很有兴趣跟他合作,未来打算将自己的重点放在这方面。

]]>
最近碰到了一个创业失败的朋友,由于资金紧张,暂时没有合适的事情可做,只好靠开滴滴度日。问了他下一步的打算,他说有个传统企业的老板想转型互联网+,也很有兴趣跟他合作,未来打算将自己的重点放在这方面。

“但是他也可能三年都不会有所动作,将自己主要计划放在这方面会不会太被动了一点?” 我提醒他。

很多时候,我们面临 hard 模式和 easy 模式选择的时候,大部分人会下意识的选择 easy 模式,即使在 easy 模式不自主可控的情况下。人们容易对未来的计划抱有侥幸心理,相信美好的事情必会发生。

年轻的时候也存在类似的幻想,每当做 new year resolution 时候,把自己那些可能潜在希望发生的事情盘点了一遍,放进了自己新年前三的计划列表之中,但半年过去后,那些抱有很大希望的事情并没有发生。回过头细想,有些是期望机会从天而降;有些可能是合作对象随口一说,在对方眼里,也是极低优先级,这样的话没什么进展就很自然了。

在职场当中,大家也通常有类似的想法,在新的一年,自我感觉过去表现不错,等待上司给自己更重要的担子;或者自我感觉优秀,等待伯乐给自己做千里马的机会。怀有这样的想法无可厚非,但是如果将自己大部分未来押注在这些期望上面,则成长与未来很难掌控。

至少要将大部分计划投入在自己可以掌控的方向,尤其是在学习及自我提升方面,这样在最坏的情况下也会有所收获。即使那些成长快的人,也只是极少部分时间碰上好运,大部分时间需要靠主动去规划自己的时间来掌控未来。

law1

相关阅读

王渊命老师讨论此话题时推荐了一本书读《程序员的思维修炼》

前年看的一本书,今年才有体会,逐渐落到了实处:程序员的思维修炼。
制定学习计划应该也用 SMART 方法:具体的(Specific),可度量的(Measurable),可实现的(Attainable),相关的(Relevant),时间可控的(Time-bound)。

Similar Posts:

]]>
https://timyang.net/tao/new-year-resolution-2016/feed/ 12
未来的学习 https://timyang.net/tao/study-in-the-future/ https://timyang.net/tao/study-in-the-future/#comments Tue, 23 Feb 2016 09:15:58 +0000 http://timyang.net/?p=1445 作者注:本文发表于 2015 年 12 月 24 日。

]]>
作者注:本文发表于 2015 年 12 月 24 日。

平安夜在中国是个跟宗教无关的节日,即使不忙的人在这晚也需要假装日程很紧。中关村的基督教堂依旧像往年一样人头涌涌;路边的餐厅很多提前下班了,那些年轻的服务员也需要在这个夜晚去释放他们的青春。而在另外一边,在互联网的虚拟世界里,一大群工程师正在 2015 年平安夜通过网络参与一个 Hadoop 及 HBase 年度回顾的「高可用架构」群直播分享活动。

在线直播是最近在很多垂直社区流行的一种分享方式,讲师通过社交、通讯或在线教育 app,以语音或者图文的方式向所有在线收听的用户传授知识,而听课的人群可以利用移动 app 的优势,随时随地参与学习及交流。

在罗辑思维中提到

在一个信息泛滥的时代,信息本身零价值,信息渠道也不再值钱。传播的枢纽是魅力人格体。

世界上没有那么多魅力人格体,但每个领域都不缺意见领袖。在 IT 领域尤其是技术领域,知识的升级迭代速度非常快,因此从业群体需要比其他行业更多更快的学习新知识及了解新资讯。因此有大量人群被这些垂直领域的意见领袖聚集在群、自媒体等社交渠道周围。比如上面提到群直播,就是一些活跃在前沿的讲师给大家讲授业界最前沿的热点技术内容,参与人员也会通过群提供的二维码给讲师打赏,在群中通常戏称为“交学费”。

而在线下,也有另外一些不同的新的玩法。极客邦科技(InfoQ 中国背后的公司)今年成立了一个技术人学习组织 EGO,会员主要以公司技术负责人为主。Tim 由于也是其中的会员之一,因此有机会结识了很多新的会员。这些加入会员也是在自己的职业生涯某些方面存在困惑,公司的工作太忙,网上的信息太庞杂,去校园进修又不太现实,因此其实很缺乏高效的线下学习途径。

Tim 在与这些会员交流的过程中,发现大部分人在他们相关的领域非常优秀,也慢慢了解他们所属公司最近几年的发展历程,了解他们所在的不同行业的发展情况,也了解到他们在不同领域的奋斗、成长与得失。Tim 也很喜欢这种交流的过程,一方面,与这些行业优秀的技术人一起可以快速学到他们身上的优点及特长,同时也可以通过他们了解到许多以前不了解的领域。

一次一个会员问了 Tim 一个非常好的问题,“你最近在这个组织得到的最大收获是什么?”

对于 Tim 而言,如上所述,最大的收获是跟不同会员的深度交流,学习会员做事的方法与理念,了解他们对于行业方向的判断、以及对于技术的态度及选择。

这也是每个人加入一个学习组织或者线上群体经常思考的问题,为什么要来到这里?你在这里一段时间的收获是什么?

在论坛中,我们的主要诉求是内容及人的发现,内容方面包括发现有价值、值得收藏的内容,同时通过内容发现背后有思想的人,通过在社区交流观点,用户之间产生互动,从而在贡献内容之余彼此熟悉,形成社区。所以,在一个论坛一年的收获通常是发现了有价值的内容,结识了值得结识的朋友。

在移动时代,传统的论坛方式慢慢被其他更移动及社交化的方式代替,用户更多时间停留在社交及通讯的 app 中。Tim 今年也创建了一系列「高可用架构」群,主要关注互联网架构领域的内容传播,虽然不如传统的论坛那么正式及严谨,但慢慢也聚集了一大批各个公司的技术群体,一起讨论各种技术及非技术的话题。

群直播分享相对与传统的技术会议及技术媒体,非常不正式,目前也算不上主流的交流或学习方式。一篇采访张泉灵的采访中,提到她眼中新接触的一些新的互联网产品印象。

傅盛给我看他的一个投资,叫“小余老师说”,做视频的项目,当时在优酷上,很早期一集就有一百多万点击量。傅盛得意地跟我说,你看我投了一个特别有特质的孩子。我是做媒体的,视频看了很多,当时我特别不屑一顾:它的LOGO和背景完全一个颜色,“小余老师说”五个行草不规则叠在同样颜色的花色背景上,节目上的小余老师背后是一个斑马纹的欧式椅子,他人又不高,椅背整个呼在后面。看完我完全疯掉了,说这东西凭什么?

傅盛跟我说,其实你要理解的事情是现象及规律——一个东西在互联网上,有一百万的点击,而且能持续,就一定不只凭运气。你的重点不是想凭什么是他,而是你要想为什么是他。想明白之后,你还要理解,互联网对某样东西的认可,是带着资本和传播势能的。

当时我找了团队里的90后,说把B站最火的视频统统给我看一遍。我一边看一边崩溃,一边还要理解:视频有三层弹幕,你根本不知道后面是什么,三层弹幕密密麻麻的,一个字都看不清,还唱那样的歌。但你要慢慢理解这种亚文化的背后是什么,这些用户是谁。

很多基于社交及通讯软件新的学习方式也是如此,这些方式可能充满了噪音,学习效率也存在问题,手机上浏览及参与也不便,产出也不稳定,质量良莠不齐,但无法逃避的问题是,我们的大部分时间停留在此。在这里,一旦有优质的内容,就会有更快的速度传遍这个圈子的每一个角落。这也是为什么非常多朋友选择这种方式并帮助一起去进化它。

有人说,一个男人变老的两大标志是不断后退的发际线和不断增长的腰围。

其实,一个人真正变老的标志是,他觉得人生一眼望得到投,不会再有改变。

于是放弃了学习,放弃了提升自己。

「你一年的 8760 小时」

Similar Posts:

]]>
https://timyang.net/tao/study-in-the-future/feed/ 5
微博分布式存储作业实现方法 https://timyang.net/architecture/feed-sharding-practice/ https://timyang.net/architecture/feed-sharding-practice/#comments Thu, 21 Jan 2016 08:27:28 +0000 http://timyang.net/?p=1427 可能通过「高可用架构」听说过在微博的系统中,单张 MySQL 在线业务表 60 亿条数据的场景。很多关注互联网架构的工程师也非常关注如何如何设计类似系统。下面是一道微博新兵训练营的分布式存储课堂练习,要设计合格才能上岗。

]]>
可能通过「高可用架构」听说过在微博的系统中,单张 MySQL 在线业务表 60 亿条数据的场景。很多关注互联网架构的工程师也非常关注如何如何设计类似系统。下面是一道微博新兵训练营的分布式存储课堂练习,要设计合格才能上岗。

关注为什么超长列表数据的翻页技术实现复杂的读者请直接参看文末链接。

feeds2

考虑到网上有很多架构师也在讨论,补充题目一些说明如下。

1、访问场景

由于上面题目的应用场景,用户一般情况下,主要查看用户查看自己收到的最新的微博,以及某个特定用户 profile 的所有微博。

  • 收到的微博,考虑微博以拉为主的模式,则需要访问关注用户最近 n 条最新的微博。
  • 用户 profile,需要访问用户历史上所有发表的微博,而且支持分页查看,可以直接跳转到某一页或者某个时间段,因此需要适当考虑分页的效率(可参考扩展阅读)。

访问特征

  • 从上面描述以及社交网络的用户访问特点来看,用户大部分情况( > 90% )是访问最近 7 天的数据。

不需要考虑的点

  • 此题主要是存储层的设计,因此不需要考虑缓存如何设计。
  • 由于微博是异步写入的,在某种程度可以起到错峰作用,所以作业暂时不需要考虑写入的峰值。
  • 不需要考虑 id 如何产生,假定已经有发号服务。
  • 不需要考虑用户收到的微博怎么聚合,那个是更上层服务层的职责。

2、设计需要考虑的点

Scale-out 扩展性

  • 将数据拆分到多个独立的单元存储
  • 可以在适当时机进一步拆分,拆分时候需要继续提供在线访问
  • 存储在廉价硬件上,考虑到数据规模比较大,需要适当考虑方案的整体成本,因此不要假定默认全部使用 SSD 存储。

Cost 成本

  • 不同访问级别的数据存储在不同访问速度(成本)的硬件上。

High availability 高可用,以及 Reliability 可靠性 – 复制

在当前场景下,主要通过 MySQL replication 来解决可用性、以及分担读的请求。

3、Sharding 策略

Shard 常用策略

range based:根据用户 uid 来分布,相邻 uid 的数据保存在一起。
hash based:根据某个 hash 函数,将一个用户 uid 的数据保存在指定的分片。

Re-Sharding 拆分设计
当数据持续增长,原先存储的数据(或者访问量)超过当前节点的容量上限,则需要对节点进行进一步拆分。

feeds3

如何确定shard数量

db buffer > hot data

容量规划

  • 预规划: 容纳未来一段时间的数据
  • 2 的指数倍: shard 数量变更简单

Tradeoff

  • 分片多:影响 IO 效率;
  • 分片少:扩容频繁、复杂

4、部分投稿案例

案例一:使用 user id range 作为分片

case1

案例二:使用user id hash作为分片

case2

 

方案三 (via 张亮)
历史数据:
1. 每半年根据日期分库,如:2015.01-2015.06为一个库。每天增加1亿数据,半年180亿,约为0.72T数据,可以保留在1T的磁盘中。
2. 根据 uid 取模分库(表),便于查询和分散数据。

当前 n 日数据:
1. 暂定n为10,存储10亿数据。
2. 根据uid + 权重的hash算法分库。权重可以根据每个uid的微博id数量,粉丝数等指标离线计算。

hash算法需保证:
1. 同一uid需落在一个库。
2. 权重接近的用户尽量均匀的落在不同库。
3. 为了应对突然发生的事件导致访问量激增,需要考虑2级甚至3级分片,而不宜直接做re-sharding导致数据迁移。多级分片可考虑读取一个标记,放在zk中。根据标记确定分片的hash算法加入小时等维度。

查询索引:
1. 增加发帖索引字段,记录每个用户的每个帖子的索引。
2. 增加发帖总数统计表,以用户为维度,每个用户发一次贴则发帖总数++。
3. 增加二级索引表,记录每个用户,每次分片库的发帖索引。如:uid 1的用户,在2015年第一帖是该用户发帖的总数的第10贴,2015年最后一贴是该用户发帖总数的第50贴。
4. 分页查询使用二级索引表,先查到该查哪个真实库(可能是多个),再到真实库中获取数据。

总结:
1. 通过灵活的运用时间维度分片,免去因uid分片数量不足导致的大规模迁移,使用外部flag灵活的控制分片策略。而且用时间维度分片更易做到冷热分离。
分片逻辑可以灵活到,zk中记录时间段,某个时间段内,按月分,某个时间段,按年分,之类。
2. 通过离线计算权重的方式均匀分散数据访问。权重周期性调整,对于调整权重的用户,需要重点考虑当前n日数据的数据迁移方案。但由于调整权重的用户属于少量,所以迁移应该数据变动较小。历史数据不需权重概念,无需数据迁移。
3. 查询使用二级索引。使用修改btree结构去掉二级索引能有效减少数据量,但实现难度较大,可以在之后的局部优化中实现,对总体数据库结构影响不大。
4. 将前n日数据和当天数据整合在一起,之前对微博的场景理解不深,以为有首屏显示这样的概念。

 

5、扩展阅读

关于分页:
为什么超长列表数据的翻页技术实现复杂
为什么超长列表数据的翻页技术实现复杂(二)Similar Posts:

]]>
https://timyang.net/architecture/feed-sharding-practice/feed/ 3
从硅谷之谜看工程师价值 https://timyang.net/tao/silicon-valley-tech-value/ https://timyang.net/tao/silicon-valley-tech-value/#comments Thu, 24 Dec 2015 06:52:00 +0000 http://timyang.net/?p=1424 上文为什么我认为架构师需要坚持写代码发出后,看到一个朋友在网上分享了他最近的变化,经过深思熟虑,这位朋友已经离职放弃了原来舒适但是不太需要技术驱动的位置,去重新寻找让自己更有激情、能更好体现技术价值的环境及平台。

]]>
上文为什么我认为架构师需要坚持写代码发出后,看到一个朋友在网上分享了他最近的变化,经过深思熟虑,这位朋友已经离职放弃了原来舒适但是不太需要技术驱动的位置,去重新寻找让自己更有激情、能更好体现技术价值的环境及平台。

最近阅读的《硅谷之谜》中,吴军也将工程师分成五个等级

第五等工程师 独立完成任务
第四等工程师 领导产品
第三等工程师 行业最优
第二等工程师 改变世界
第一等工程师 开创行业

这跟上文提到的架构师的分类方法比较类似。第五等工程师是指能够独立完成功能模块的人,第四等需要具有产品的意识以及能够带领及组织公司资源完成某项产品的开发。第五等和第四等其实都任务导向型。而更高的几种类型则需要善用技术及平台的力量。

第三等工程师可以做出行业最好的产品,吴军讲到这类人与第二类的差异是这一类人需要“悟性”,当然也需要后天因素,比如处于一个上升平台的舞台上。

即使一个人再聪明,基础再好,也需要在工程上花足够的时间才能达到这个水平,一个年轻人工作四五年就开始做行政管理工作,基本就和这个水平无缘了。

第二等及第一等则是能充分利用技术力量改变世界的人,吴军更多的是从产品及结果导向来看归类这两类人,比如 iPhone 总设计师、爱迪生等人。

硅谷的介绍虽然过度开采,但在工程师眼里却一直充满着永久的好奇与热情。每年都有大量技术从业人员去硅谷游学研修,了解地球另外一边的一群人,是通过怎么样的组织方式,利用技术创新来改变世界。

因此可以通过吴军在《硅谷之谜》中的角度,来了解硅谷的工程师是如何样通过技术来体现自己的价值。

在另外一些内容介绍硅谷公司对于工程师代码的要求,也多次提到代码能力的重要性。一些具有较好业界名气、或者具备丰富经验的人员,进入一些知名互联网公司之前也需要测试基本的代码能力,而如果不能通过的话则无法通过面试。

在硅谷的公司里,从录取开始就显示出对权威和经验的一种淡漠。在 Google,不管面试者名气多大,水平多高,过不了一关关的面试也是白搭。对于那些技术负责人职位的申请者,不论申请者年龄多大,过去的经验多么丰富,一定要考技术问题,甚至包括写程序。因此,一个有名气有经验的申请者,未必比那些大学刚毕业的人更容易被录用。我曾经遇到这样一个例子,一个在美国顶级计算机系工作的教授,先推荐了他的两个学生来 Google 应聘,结果都录用了。后来他自己来应聘,Google 要他做他的学生做过的类似的考题,他反而没有考过,虽然我们很为他感到可惜,但是也没有办法。这位教授很不服气,对我讲,我的学生远不如我你们却要了,我发表过那么多论文,拿到过那么多基金你们却不要,说明你们的眼光有问题。我承认他讲的很有道理,但是,不能为一个人坏了规矩。类似的情况在 Facebook 也发生过,某公司的一位工程总监手底下的好几个人都被 Facebook 录用了,等到他自己去,因为编程荒疏,反而被拒绝了。

另外一些正向的例子也提到一些行业泰斗坚持工作在技术一线。

在硅谷你总是能看到一些世界科技行业的泰斗或巨头还在写程序。Google 的狄恩(Jeff Dean)和戈玛瓦特(Sanjay Ghemawat)是世界上最早发明云计算技术的工程师,也都是美国工程院院士,至今仍在自己写代码,而且每次有什么新的想法,都是自己先实现自己的狗食(Dogfood)。Google 的汤普森是 Unix 的发明人,图灵奖的获得者,每天大部分时间仍然花在写程序上。太阳工作站的发明人,该公司的创始人贝托谢姆,后来成为了天使投资人,又投资成立了上市公司 Arista,今天仍然在写程序。这些人可算是功成名就,要是放在中国,早就当官去了,至少也进入了到“君子动口不动手”的状态,但是他们在硅谷依然自己动手。虽然他们自己写的代码未必比别人好多少,但是这在硅谷营造了自己动手的工程师文化。

在硅谷之谜中,多次提到硅谷影响最大的红杉资本。12 月 5 日,在中国企业领袖年会上,红杉资本全球执行合伙人沈南鹏就创新创业的下一站——科技创新主题发表了类似观点。

“全球性”公司必须有一个重要的特征,产品上一定是科技的创新,而不仅仅是模式的创新。我们相信在今天新一代的创业者,很多有国际化的视野,也有国际化的工作经验包括科技研发的经验,他们一定会引领中国下一个风口,这样的创业创新一定会产生一批有全球竞争力的优秀企业。

Similar Posts:

]]>
https://timyang.net/tao/silicon-valley-tech-value/feed/ 5