普通视图

时间

2026年1月27日 15:44
2025年12月13日 下雪的早上 拍摄于小区楼下

写上一篇博客还是秋天,一转眼已经冬天了。很早就觉得该更新博客了,但却迟迟未动。

一转眼四个月过去了,现在农历已经进入了腊月初九,还有二十天就又要过年了。如果可以,真的想抓住时间的尾巴,让它慢一点,再慢一点。

这四个月里,发生了许许多多的事情。我的奶奶去世了。我做了一个小小的手术,现在已经基本康复了。

过了这个年,就四十岁了。

一切都在被时间拉着往前走。时间是个无情的东西,没有悲悯,冷漠无情,在它面前,没有高低贵贱,众生平等。

同一杯西红柿汁, 跨越十六年

飞过英吉利海峡的这些年

EasyJet 是一家英国的廉价航空公司,总部在卢顿。那是一座离伦敦只有半小时火车的小城,机场也不大,却通往整个欧洲。只要提前预订,几十英镑,就能飞到日内瓦。 2009 年,我一年飞了 42 次。那时的生活,被周五的航班和周日的返程切割得清清楚楚——前女友在英国,而我在瑞士读博三。因为一个 Marie Curie Transfer of Knowledge 项目,我在 Fribourg 生活了 11 个月。 时间一晃,到了去年8月,我和媳妇在伦敦办下了半年的申根签证。于是去年下半年,欧洲成了一种“可以随时出发”的存在。12 月又去了瑞士,却因为行程紧张,主要在德语区活动,没能回 Fribourg 看看,多少留下了一点遗憾。 廉价航空从不浪漫。没有免费的水,没有餐食,连一个座位的选择都要标价。但我始终记得,当年飞瑞士时,我总会买一小杯 1.5 英镑的西红柿汁,在飞机上慢慢喝完。那是一种很具体的放松。16 年后,当我再次把那杯西红柿汁端到手里,时间突然有了重量。 [caption id="attachment_70831" align="alignnone" width="2048"]Easyjet上的西红柿汁,2025年的价格是3英镑左右,16年翻了一倍。 Easyjet上的西红柿汁,2025年的价格是3英镑左右,16年翻了一倍。[/caption] 本次申根行程共涉及四个国家:法国、比利时、意大利和瑞士。前往比利时使用欧洲之星,其余航段均从卢顿机场搭乘 EasyJet 或 Wizz Air。车辆停放在机场的 long stay 停车场,四至五天费用约 100 英镑。 这趟旅程,我带着媳妇和孩子。如果过去的自己能看到这一刻,大概会明白: [bctt tweet="那些频繁起落的航班,并没有白白经过人生。"] [caption id="attachment_70827" align="alignnone" width="2048"]简陋的飞机座椅,椅子后面是广告,而不是屏幕。 简陋的飞机座椅,椅子后面是广告,而不是屏幕。[/caption] [caption id="attachment_70828" align="alignnone" width="864"]大儿子在飞机上下国际象棋 打发时间 大儿子在飞机上下国际象棋 打发时间[/caption] [caption id="attachment_70829" align="alignnone" width="2048"]准备登机了,是小飞机,只有一个过道。每次空姐推着餐车、饮料车在过道里来回吆喝时,想起身去洗手间的乘客总得等等——过道实在太窄了。 准备登机了,是小飞机,只有一个过道。每次空姐推着餐车、饮料车在过道里来回吆喝时,想起身去洗手间的乘客总得等等——过道实在太窄了。[/caption] [caption id="attachment_70830" align="alignnone" width="2048"]飞跃英吉利海峡 飞跃英吉利海峡[/caption]

EasyJet/易捷英国廉价航空飞机起飞和降落

飞机掠过英吉利海峡的时候,总会让人短暂地安静下来。一个多小时到法国,两个半小时到罗马。高度刚好,可以看见河流、田野和城市的轮廓。这一次,我订了四个连在一起的座位,坐在靠窗的位置,拍下起飞和降落。 视频:油管/Youtube | B站/小破站 | 微博视频 | 西瓜视频 | 微信视频号 | X/推特 | 小红书 | Facebook

EasyJet 的机队几乎清一色都是 Airbus

EasyJet 的飞机基本都是 Airbus A320 系列,典型的单通道布局,过道不宽。 主要机型是 Airbus A319 / A320 / A321(以及 A320neo、A321neo)。都是 单通道(single-aisle) 客机,只有一个过道,过道偏窄。空姐一推餐车,想去厕所就得等等。 EasyJet 这么做其实很“廉航思路”:
  • 统一机型 → 维修、培训、调度成本都低。
  • A320 系列座位密度高 → 一趟能多卖几张票。
  • 客舱布局基本是 3-3 排列,空间谈不上宽敞,但效率很高。
严格来说不是“小型飞机”,而是窄体干线客机。 [caption id="attachment_70825" align="alignnone" width="2048"]EasyJet 的机队几乎清一色都是 Airbus。 EasyJet 的机队几乎清一色都是 Airbus。[/caption] [caption id="attachment_70826" align="alignnone" width="864"]小飞机 小机场 基本上是要走楼梯上下飞机的。 小飞机 小机场 基本上是要走楼梯上下飞机的。[/caption] [show_file file="/var/www/wp-post-common/justyy.com/paris.php"]

相关文章:

  1. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  2. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  3. 第一次私校家长会: 原来家长比孩子还卷 前几天参加了娃的第一次家长会,和几位家长聊下来,真是个个都很厉害。不光孩子们卷,家长也一样卷,一眼望去基本都是 Dr/博士。娃还调侃我一句:“这有什么的,你不也是 Dr 吗?” 我心里默默想:还好没写学校名字,不然我这野鸡大学的头衔真拿不出手 😂。 私校里真是人才济济,乐器过 8 级的太常见了,卷得不得了。我还问过娃,是想当 big fish in a small pond...
  4. 英国房子的EPC节能报告(Energe/Efficiency Performance Certificate) EPC (Energe/Efficiency Performance Certificate) 是英国房子的节能报告, 法律上规定, 每个房子都必须要有一个EPC报告, 报告的有效期为十年. 房东在把房子出租或者想卖房的时候, 这个EPC就必须有效, 在一些情况下 比如出租房子的时候, 这个EPC报告还必须符合一些最低标准, 比如房子必须满足 F档(类似及格线)...
  5. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. /** MySQL...
  6. 回国除痣是最便宜风险最低的医美项目了 这次回国,一家四口来回机票3600英镑,从伦敦到北京,是中国南航的飞机。回国待了二周左右,不过还是干了几件值机票的事,比如在福建医科大学附属第一医院(三甲)体检了,媳妇还顺便在医院里除了痣。价格是一个痣60元(据说10年前是10元,后来涨到20元/40元)。 前几年我在英国医院NHS除了痣,是免费的,因为和医生说担心是恶性痣,医院当时还做了一个小手术,都是免费的。如果是去私人医院诊所,很贵的,除不起。 如果除16个痣,在英国得花3000英镑,回国不到1000人民币,真是相当划算了。 除痣是风险最低的医美项目了 医生会给个药膏,让在要除的痣上涂,等待20分钟就可以激光除痣了。医生会一个一个拿激光在痣上操作,媳妇说很疼,和纹身一样,她在点第一个痣的时候就有点后悔了。点的时候我闻到了烧焦味,有点像蚊子被拍到电蚊拍的味道。媳妇躺在那里,大概不到20分钟边和医生聊天就结束了。 医院第四楼是美容层,相比其它层人满为患,没啥病人。 医生给了个喷的,不让洗脸,不让碰水,然后一天喷三次这个药水。刚开始的时候,点完痣,脸上很明显的一个一个坑,颜值真的毁了,过了几天后,痣坑就慢慢变淡变浅。媳妇这几天的颜值也慢慢恢复了,还感觉确实好看了一些些。 点痣的激光技术已经相当成熟了,虽然在脸上动刀,但毕竟是小手术,而且就是在皮肤上激光动动,风险很低,无需担心。 只要不是太大的痣,小黑点这种,都可以点掉,但对于很大的痣,比如超过3cm的痣,是点不了的,因为得切片化验是不是恶性的痣,这得专门手术去除。 更新:几周后,除掉痣的皮肤确实变浅变淡了,但是有两个小地方似乎没除干净,又有一点点小黑点,怪不得当时那医生就说,有可能除不干净(有的痣比较深),但是可以回来重新弄。我前几年在NHS上动手术除的痣,现在看 好像那块皮肤又开始变得有点黑了,也不知道是不是很快又会长回来,哎。 本文一共 728 个汉字, 你数一下对不对....
  7. 微信PC端程序占用了1.39 TB的空间! 快速清理微信占用空间 前两天我的 C 盘剩余空间突然变红了,我随手一查,竟然发现微信 PC 端程序居然占用了 1.39 TB 的空间,简直不可思议。在手机上,微信同样是名列前茅的“吞空间大户”,在 设置 → 通用 → 手机存储空间 里几乎稳居第一。 更离谱的是,这些空间大多并不是因为聊天记录,而是各种缓存文件、视频、图片和被动接收的文件所堆积起来的。平时我们只是点开看一眼,就算没保存下来,微信也会悄悄把它们留在本地,占据大量磁盘。尤其是群聊里转发的视频和文件,日积月累就成了一个“隐形黑洞”。...
  8. 比特币最近波动有点大: 一天牛市一天熊 比特币10万美金以内都是最后上车的机会! 比特币近期的价格波动可以归因于多个关键因素,包括地缘政治动态、监管变化以及加密行业内的重大安全事件。其中一个主要影响因素是美国前总统唐纳德·特朗普对乌克兰和加密货币监管的立场变化。据报道,特朗普再次当选,他可能会推动减少美国对乌克兰的支持,这可能会影响全球金融市场和风险偏好。同时,特朗普正在将自己塑造为亲加密货币的候选人,表示有意让美国成为一个更加友好的加密货币环境。这一立场引发了市场对监管政策可能发生变化的猜测,导致市场情绪在乐观和不确定性之间波动。 特朗普对俄乌战争的态度 美国第43届总统唐纳德·特朗普已经在2025年1月当选并正式上任(第二次),那么他的政策可能会对比特币价格的波动产生更加直接和显著的影响。他政府对乌克兰和加密货币监管的立场已经不再是猜测,而是正在实际塑造市场的关键力量。 特朗普(Donald Trump)减少美国对乌克兰的支持,全球投资者可能会预期地缘政治稳定性发生变化,从而增加对比特币作为避险资产的需求。同时,他的亲加密货币立场可能正在推动市场的乐观情绪。如果他的政府推出有利于加密行业的监管政策,例如明确的合规指南或减少监管审查,可能会吸引更多机构投资者进入市场,并促进更广泛的加密货币采用。然而,政策的快速变化也可能导致短期市场剧烈波动,因为市场需要时间来消化新的政策动向。 朝鲜黑客盗取Bybit交易所15亿美元的ETH 另一个显著影响比特币价格的事件是近期涉及朝鲜黑客组织“Lazarus”的15亿美元以太坊被盗案件。据报道,Bybit交易所(全球第二)这些被盗的ETH已经被清洗,此次大规模黑客攻击引发了人们对加密行业安全性的担忧。此类安全事件不仅会削弱投资者信心,还可能引发更严格的监管审查,导致短期市场动荡。此外,被盗资金的大规模流动和出售可能对市场流动性造成冲击,进一步加大价格波动。随着这些事件的持续发酵,比特币价格正受到政治决策、监管预期以及安全挑战等多重因素的影响。 与此同时,与朝鲜黑客组织 Lazarus 相关的 15 亿美元以太坊被盗事件仍在影响加密市场。由于这些被盗 ETH 已被清洗,人们对加密行业安全漏洞的担忧持续存在,同时也可能引发更严格的监管审查。政治、监管和安全等多重因素交织在一起,共同导致了比特币近期的剧烈价格波动。...

落在时间规则里的逃亡

2026年1月6日 20:31

一个地狱笑话:

一个人声称自己破解了“祖父悖论”,他说自己杀掉了祖父,但是自己并没有消失。

有人告诉他“祖父悖论”应该有一个前提,他发出困惑:什么前提?

接着说一个有些悲哀的笑话:

我常常在一些“穿越游戏”里看到,人们如果穿越回父母初见的那一刻,希望告诉父母什么——很多人都说希望那时候的父母不要相爱,一方面是为了他们彼此的幸福,另一方面他们也不希望因此诞生。


学生时代写过一篇作文,题目大致是说“回到过去”,我们要对过去的自己说什么。那个时候我刚好又很沉迷科幻小说,偶然得知了“诺维科夫自洽性原则”,所以我的立意在于就算回到过去,我们因为无法对现在和未来做出任何干预,这样的幻想只会让人沉迷在当下的责任逃避——我原来那个时候就有很浓的说教意味,但又恰好命中命题老师的喜好,所以作文得了高分,但也被鄙视“装逼”,拽了一个大家不懂的名词罢了。

很快,学校的辩论比赛也跟进了“人们该不该发明时间机”的题目,我拿到的却是正方。于是我又精神分裂地高举我们应该用时光机改变命运的大旗,开始了关于人类命运掌握在自己手上的游说。

恰好,反方就是那个鄙视过我的同学,他恰好又拿了这篇作为来说事儿,说我以前可不是这样说的。

我反击:你不知道吧,那就是我穿越回去写的,因为我就是打算让你现在用它来反击我。


我很喜欢将时间单位作为卡尺的作品,比如《太空旅客》,原本需要休眠120年的太空旅行,主角被提前90年唤醒,当死亡被翻译成另一种不那么直观,但冰冷的数值时,这种绝望是缓慢而深刻的。

最妙的,是这部电影的结局——男女主角在决定放弃休眠,在孤独的太空旅行中过完一生后,他们在飞船里种满了植物,直到90年后,所有人苏醒时,看到植物爬满整个船舱,树木按照它对于时间的规则沉淀出年轮,隐秘地指向了它时何时被人种下。

植物作为先于人类的生命存在,会在末世时会覆盖原本人类的图腾——那些高楼、那些丰碑、那些用来证明人定胜天的象征,再通过他们的方式消解这些图腾,直到下一个文明的出现,变成他们神话里的符号。就像是最近火星上面拍摄的地表照片,里面藏着那些让人遐想的几何形状,或许真的有上一个文明的图腾被消磨成了废墟。

♾莫比乌斯环世界♾

在关于时间倒流的电影剧本里,观众希望看到的并不是时间倒流带来了奇迹,而是故事的主人翁得在经历了这些令人羡慕的奇迹之后,终会反思活在当下才是他的一生所求。《夏洛特烦恼》里最美好的片刻,其实不是夏洛变阔,而是他回到现实后,像条走丢的狗一样死死咬住冬梅的袖口——无论人生倒流多少次,它不过是为了让你意识到此刻就是永恒的本体。

毕竟没人希望看到时间真的能够倒流,至少不是只能别人的时间可以倒流。

小时候跟小叔玩魂斗罗,我老是跟不上他的速度,所以总是会因为在屏幕边缘被强制掉命。特别是在一个全是机械机关和火舌的关卡,我因为操控不来,常常都会让小叔帮我完成。他会先将自己的角色往前,等在一个安全区域,再操纵我的角色与他会合,所以那个时候我对他充满了崇拜。

等待我长大再玩起这关时,我可以凭借肌肉记忆不加思考地一口气跳过去,然后达成这个游戏的最终目的——往前、直到任务的最后一刻。在一个时间轴的规则里,我只能往前,纵使我已经熟知对每一关将要出现的敌人、甚至Boss战的每一次弹幕,但它的规则就是从左往右的往前,逃离这座充满危险的孤岛。


2026|落在时间规则里的逃亡

因为只能往前,所以活在当下。

这一百多天

2025年12月10日 23:00

才发现有四个月时间没有更新,并不是不想写,而是这期间发生了太多的事情,没有时间也没有精力来更新,荒废这么久也有违我的初心(一个月最少更新一次)。 八月的时候发生在我身上一件大事,虽然目前还没有解决,我是持乐观态度的,这个解决以后有时间慢慢说。 九月我一个伯伯去世,是血亲的那种,可惜小的时候过继给别人家,但是我从来没当他是外人。连绵不绝的阴雨天气(阴雨天气持续了一个月),还是要送他一程。 十月媳妇的外婆去世,我真是服了今年咋感觉身边的亲人都在“消逝”? 继续阴雨天气,我都很想吐槽当时的天气。这种事情必须去,就算下刀子。 十一月雨好像消停了一段时间,我父亲身体却不是很好,去医院的那套流程真是会背了 […]

这一百多天

2025年12月10日 23:00

才发现有四个月时间没有更新,并不是不想写,而是这期间发生了太多的事情,没有时间也没有精力来更新,荒废这么久也有违我的初心(一个月最少更新一次)。 八月的时候发生在我身上一件大事,虽然目前还没有解决,我是持乐观态度的,这个解决以后有时间慢慢说。 九月我一个伯伯去世,是血亲的那种,可惜小的时候过继给别人家,但是我从来没当他是外人。连绵不绝的阴雨天气(阴雨天气持续了一个月),还是要送他一程。 十月媳妇的外婆去世,我真是服了今年咋感觉身边的亲人都在“消逝”? 继续阴雨天气,我都很想吐槽当时的天气。这种事情必须去,就算下刀子。 十一月雨好像消停了一段时间,我父亲身体却不是很好,去医院的那套流程真是会背了 […]

献给孩子们的童诗

2025年11月26日 11:58

温暖治愈心灵,富有想象力童诗,可以激发孩子的阅读兴趣,提升文学素养,激发孩子写作潜能

童诗1:我发现
我发现
老鼠偷东西
只是人类的说法
在他们那里
这叫觅食

童诗2:原谅
为什么
老人尿床会被嫌弃
小孩尿床
却没人嫌弃
因为
他的妈妈不在了

童诗3:零食
外婆给了我
一大袋变质的零食
我问妈妈
是过期了么?
妈妈红了眼睛
是我们回来晚了

童诗4:发呆
我对着作业发呆
作业对着我发呆
我们都没有动
时间在跑
原来
拖延是一场
双方的辜负

童诗5:超能力
^_^
我从小就有超能力
可以瞬间移动
每次我在沙发上睡着了
第二天都会在床上醒来
但长大后
这种超能力
再也没出现过

快乐就好

2025年10月31日 07:43

有的人30岁去世了,有的人40岁也走了。

所以你一定要明白,我们不是等老了才会死,而是随时随地都有可能死。

人生其实大部分是没有意义的,百年以后时间会抹平你存在过的所有痕迹,若硬说人生意义,那就是你活着这几十年的体验

所以别让不开心的事挡住了你短暂的人生,想什么活就怎么活,用心去品尝每一口饭菜,尽情去欣赏每一处风景,勇敢的热爱生活

人生匆匆就过去了,这个世界我们只来一次,玩一玩就走了,什么面子、什么人情世故、什么压力,其实都没有那么重要了。

珍惜活着每一天每一分每一秒,让自己快乐就好

献给孩子们的童诗

2025年11月26日 11:58

温暖治愈心灵,富有想象力童诗,可以激发孩子的阅读兴趣,提升文学素养,激发孩子写作潜能

童诗1:我发现
我发现
老鼠偷东西
只是人类的说法
在他们那里
这叫觅食

童诗2:原谅
为什么
老人尿床会被嫌弃
小孩尿床
却没人嫌弃
因为
他的妈妈不在了

童诗3:零食
外婆给了我
一大袋变质的零食
我问妈妈
是过期了么?
妈妈红了眼睛
是我们回来晚了

童诗4:发呆
我对着作业发呆
作业对着我发呆
我们都没有动
时间在跑
原来
拖延是一场
双方的辜负

童诗5:超能力
^_^
我从小就有超能力
可以瞬间移动
每次我在沙发上睡着了
第二天都会在床上醒来
但长大后
这种超能力
再也没出现过

乌烟瘴气

2025年11月13日 19:14

今天钉钉直接通知我们从明天开始,中午休息缩短半小时,就是作息时间从 8 点半到 17 点半改为 8 点半到 17 点。这是正常的。不正常的像我们 C 班改为 7 点半到 4 点。8 小时工作制不变,其实倒也不影响,冬天下班早,路上还安全,只是早上爬不起来。原本中午还能睡个午觉,现在不行了,顶多吃个饭的时间。习惯午觉的姐姐下午上班可能会难受。

ScreenShot_2025 11 13_183846_854.png

公司研究,指的是老板自己想的。工厂日常工作时间,意思是这针对我们工厂。像门店和公司那边不受影响。也就这点能耐了,每天就 8 小时,看你怎么折腾?

本来仓库三个人,其中一位升主管兼顾发货,基本上偏向发货了,仓库就剩俩。现在作息时间错开,顶多仓管算1.5 个人吧。最近几天有人受不了,提出了离职。我相信年底会更多。像我这样的挣生活费的人不多,大家谁为了这点工资还受气呢。以为大环境不好,就会一直妥协。也算是随了老板想裁员的心了。

现在给仓库派活也理所当然了,周一有个机器从江苏无锡用货拉拉运到我们工厂,到达时间是晚上 7 点多,也不是很着急,不能第二天一早安排发货吗。就叫仓库安排人晚上接收。今天还是一样的情况,说要晚上 9 点到,也不协商一下发货时间和派送时间,就叫仓库安排人接收。后来我们领导问货拉拉司机可以第二天早上派送,这才不用加班。

周一晚上接收的机器是 2kg 的烘焙机,用来烘豆子的。周二晚,我们四个男的,工厂唯一四个男的,一起把它拉到二楼组装好了。这点我很不理解——我们一楼是车间,烘焙和分装都在一楼,生豆也在一楼,他们非把这个烘焙机搬到二楼办公室里。

今天中午老板一来就要豆子烘,没错,我们早上 7 点半打的豆子,他中午来烘,请问我们提前一个小时来上班打豆子的意义在哪里?豆子都备好了,我们领导刚好吃完饭,就得到楼下拿豆子上来给他烘。我吃完饭不想被打扰就直接去车里睡了。幸亏我去了车里,中午老板在那烘豆子,噪音和烟雾整的整个办公室乌烟瘴气,谁能安安静静的午睡。还说有爱有光呢,一点不体谅员工的辛苦,最后一个小时的午睡时间都被他搅和了。这种不尊重人的老板不值得我们去尊重。

很奇怪,这么大的烟,怎么消防没反应呢?有问题!

版权声明: 本文采用 BY-NC-SA 协议进行授权,如无注明均为原创,转载请注明转自 皇家元林
本文链接: 乌烟瘴气

聊一聊分布式系统中的时间

2024年10月21日 08:41

今天聊一下时间的话题。在分布式系统中,“时间” 是一个挺有趣,但是很难处理的东西。我把自己的理解简单整理下来。

不可靠的物理时钟

首先,单一节点的物理时钟是不可靠的。

物理时钟本身就有偏差,可是除此之外,可以引起节点物理时钟不准确的原因太多了,比如 clock jump。考虑到 NTP 协议,它基于 UDP 通信,可以从权威的时钟源获取信息,进行自动的时间同步,这就可能会发生 clock jump,它就是说,时钟始终会不断进行同步,而同步回来的时间,是有可能不等于当前时间的,那么系统就会设置当前时间到这个新同步回来的时间。即便没有这个原因,考虑到数据从网络传输的延迟,处理数据的延迟等等,物理时钟是非常不可靠的。

如果一个分布式系统,多个节点想要仅仅依赖于物理时钟来完成什么操作,那么只能祈祷运气足够好了。在 《从物理时钟到逻辑时钟》这篇文中,我已经介绍了对于物理时钟不可靠的问题,我们有一个解决的办法,就是引入 Lamport 逻辑时钟,或者使用向量时钟,这里就不赘述了。

超时

分布式系统中什么样的执行结果最难处理,成功还是失败?其实都不是,最难处理的结果是超时,因为执行超时了,但是系统却并不知道它:

  • 是没执行,
  • 是执行成功了,
  • 还是执行失败了。

所谓超时,一个显然的问题是,超过多少时间才算超时?往往没有一个公式,更没有一个标准答案,我觉得《Designing Data-Intensive Applications》这本书里面对这一点总结得很好——对于超时时间的定义,其实就是一个 tradeoff,一个基于 failure detection delay 和 risk of premature timeouts 之间抉择的平衡。如果超时时间设置长了,就会减少超时判定的误杀,但是对于系统失败的识别就会延迟;反之,如果超时时间设置过短,那就会触发更多看起来是超时的 case,但是它们本身其实并没有真正超时。

通常来说,对于超时的处理,其实办法也不多。一种是放弃,一种是重试。就像消息投递,如果要保证 “至多投递一次”,那在投递超时后,就直接放弃;如果要保证 “至少投递一次”,那在投递超时后,就重试。如果要重试,那就需要引入保证幂等性的机制。

分布式事务 SAGA 对于超时的处理,其实也是遵照上面的原则,在系统内单步都成为事务的基础上,把流程视作一个状态机,无论单步操作是成功还是失败,都会根据清晰的预定义逻辑,触发相应的正向流程或者反向流程,可是唯独超时,多数情况下最有意义的事情就是重试,也只能重试,因为谁也不知道它究竟实际是成功了还是失败了。

说完操作超时,再来说一下节点超时。很多分布式系统中都会使用一种 lease(租约)的机制,比如一个集群中的 leader,作为 leader 会扮演不同的角色,但是必须要 renew 这个 lease,否则超过一定的时间,无论它给不给响应,它都会被开除出 leader 的角色,而 follower 会重新选举(或者其他方式)一个 leader。

比较难处理的是,如果这个节点本来是被 hang 住了,导致了超时,它也已经被踢下 leader 的角色,但是之后它 “活” 过来了(比如经过了一个超长时间的 GC),它还以为自己是 leader,继续去干 leader 干的事,变成了一个假 leader。这其实就是出现了脑裂,本质上是一个一致性的问题。这种情况比较难处理,因为即便有 heartbeat 不断检测,在每两个 heartbeat 的间隙,可能这种重要的变动就发生了。

要解决这种问题,需要使用 token fence 的方法,即让每次最关键的状态数据的更改,携带一个单调递增的 token,这种情况下这个假 leader 发起更改的 token,已经小于系统中最新的 token 了,接收这个数据更改的子系统应该拒掉这个请求。上面说的节点超时的情况我在《谈谈分布式锁》里面有详细说明。

计算机的两种时钟

有两种时钟是计算机普遍支持的,一种叫做 time-of-day clock,就是我们一般意义上的时钟,代表着相对于 1970 年 1 月 1 日的 epoch 时间,也就是 Java 里面 System.currentTimeMillis() 返回的。网络时间协议 NTP 就是用来同步计算机这个时间的。

不过,其实还有一种时钟,叫做 monotonic clock(单调时钟),在 Java 里面相应的接口是 System.nanoTime()。这个时钟有一个特点,就是它永不回头。对于 time-of-day clock 来说,时间是可能 “回头” 的,对于很多应用来说,时间回头是要命的。不过这个时钟给出的具体时间却是毫无意义,如果在不同的机器上调用 System.nanoTime(),会得到完全随机的结果。API 的名字是纳秒,可是这个时钟并不给出到纳秒的时间精度,它的作用是用来帮助计算间隔时间的:在同一个节点,第二次调用的时间减掉第一次调用的时间,这个结果(时间间隔)是严格递增(不回头)的。从这个意义上说,除去时间这个视角本身,这个时钟更像是一个单调的计数器。既然是单调的计数器,就可以用来帮助产生系统严格自增的 ID。

下面是 System.nanoTime() Javadoc 上面的解释:

Returns the current value of the most precise available system timer, in nanoseconds.
This method can only be used to measure elapsed time and is not related to any other notion of system or wall-clock time. The value returned represents nanoseconds since some fixed but arbitrary time (perhaps in the future, so values may be negative). This method provides nanosecond precision, but not necessarily nanosecond accuracy. No guarantees are made about how frequently values change. Differences in successive calls that span greater than approximately 292 years (263 nanoseconds) will not accurately compute elapsed time due to numerical overflow.

TrueTime

一般来说,我们都知道计算机的时钟有误差,可是这个误差是多少,差 1 毫秒还是 1 分钟,并没有任何严格保证。绝大多数接触到的时间 API 也是如此,可是,Google 数据库 Spanner 的 TrueTime API 却。它使用了 GPS 时钟和原子钟两种完全独立的机制来冗余某一个机制失败导致的时钟问题,增加 reliability。此外,它还有和 System.nanoTime() 一样的严格递增的特点。

它有三个核心 API,很有意思:

  • TT.now() 它返回 [earliest, latest] 这样一个范围,表示当前时间就在这个范围内;
  • TT.after(t) 它返回当前时间是不是肯定在 t 之后
  • TT.before(t) 它返回当前时间是不是肯定在 t 之前

有了 TrueTime,这让分布式系统中,本来无法通过物理时钟解决的问题也变得可解决了。比如对于操作冲突的问题,现在的新办法就是等一个 buffer 时间,TrueTime 认为已经前一个操作的结束时间肯定已经过去了,再来启动后一个操作。当然,这个方法的缺点是 throughput,因为整个操作周期因为 buffer 时间的关系变长了。

《四火的唠叨》文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接

十年后,我们中文博客微信群还会活跃如初吗?

2023年12月26日 19:47

今天深圳稍微比昨天暖和了一些,我也晒了会儿太阳。

今天下午,在博客群看大家讨论,虽然我插不上几句话,但是能够明显的感受到大家认真讨论的氛围。我起身去厕所方便了一下,而就是这短短几十秒钟,让我想起了一些事情。

在十年前,我加入了一个音乐爱好者的群,叫「橘子党」。我们都是在虾米音乐上相识。平时大家在群里聊聊爱好,唠唠家常,是我那些年最活跃的群。我们每年都会征集大家的投稿来发布虾米歌单。我们还有自发组织的面基。我们还为群聊周年庆设计生产的帆布袋、T 恤、徽章。群里有个相册,会上传一些群员的个人照和面基照。在虾米音乐还没没落之前,我一直觉得,我们会像这样一直聊下去,直到每个人都互相见过面。

今天「橘子党」的群又突然聊了起来,然后不出奇的又聊到了一些以前的事情。我翻看了一下群相册,看到了那些渣渣画质的手机和一张张青涩的面孔,感觉他们即熟悉又陌生,他们曾经在我生活中占据了很多一部分,而虾米音乐消失之后的这几年,他们也好像从我的生活中消失了一样。现在,他们有的成家了,本来以前还在上学的现在也结婚了,我如今也要三十一了。

再回过神来,坐在电脑前,看着中文博客群聊里仍在继续讨论着,心中不由感慨,我们这个以博客之名相遇的群,从建群到现在,也经历过一些让人印象深刻的事情。我退过群,来后也又加了回来。群聊也被封了然后重组过。这些年来每天都能看到大家聊各种话题,从博客,笔记,天文地理,社会政治,音乐游戏等等等等,可以说是我自「橘子党」之后坚持活跃最多的群,也是我在众多群聊中比较青睐的群。

可是这个世界上什么东西都会过期,苹果会过期,音乐听多了也会腻。在时间的洪荒面前,不知道十年后,大家还会像现在这样活跃如初吗?现在耳熟能详的他们,十年后还会像今天这样在群里谈天论地吗?十年后,还会继续写博客吗?

❌