人死了,就像水消失在水中(博尔赫斯的经典诗句)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人死了,就像水消失在水中(博尔赫斯的经典诗句)相关的知识,希望对你有一定的参考价值。

参考技术A

我用什么才能留住你? 我给你贫穷的街道绝望的日落破败郊区的月亮。 我给你一个久久地望着孤月的人的悲哀。

--博尔赫斯《英文诗两首》

我给你一个从未有过信仰的人的忠诚。

--博尔赫斯《我用什么才能留住你》

你的肉体只是时光,不停流逝的时光 ,你不过是每一个孤独的瞬息。

--博尔赫斯《你不是别人》

使他觉得遥远的不是时间长,而是两三件不可挽回的事。

--博尔赫斯《等待》

人死了,就像水消失在水中。

--博尔赫斯《另一次死亡》

任何命运,无论如何漫长复杂,实际上只反映于一个瞬间:人们大彻大悟自己究竟是谁的瞬间。

--博尔赫斯《塔德奥·伊西多罗·克鲁斯小传》

世界会变,但是我始终如一,我带着悲哀的自负想到。

--博尔赫斯《阿莱夫》

像以往一样,我发现自己是个胆小鬼,因为怕失败而不敢大胆期望。

--博尔赫斯《莎士比亚的记忆》

玫瑰即玫瑰,花香无意义。

--博尔赫斯

我从小就接受了那些丑陋的东西,世界上本来就有许多格格不入的事物为了生存而不得不相互接受。

--博尔赫斯《事犹未了》

在他的想象中,那些多梦的夜晚是他可以藏身的又深又暗的水潭。

--博尔赫斯《秘密的奇迹》

过度的希望,自然而然地产生了极度的失望。

--博尔赫斯《巴别图书馆》

黑夜里的你,拥有看不见的世界,和清晰的自己。

--博尔赫斯《博尔赫斯诗选》

博尔赫斯名言


1.贝隆主义既不能说对也不能说错,问题是已经改变不了了。

2.大学应该支持我们去钻研古人和别人的东西。如果只是支持自己和当代的东西,那么大学就没用了,因为它只是在拓展媒体已经担负起的功能而已。

3.丁尼生说过,如果我们能够了解仅仅一朵花,我们就能明白我们是谁和世界是什么。

4.都说我是个大作家。我对这个奇怪的想法心存感激,可是却不认同它。将来会有些智者轻松把它驳倒,给我安上一个骗子或者粗制滥造的标签或者两个同时安上。

5.妒忌是个很西班牙风格的主题。那些西班牙人总是想着妒忌。他们形容什么东西很好会说:那可真让人妒忌。

6.革命是一种广为流传的迷信,是一种统计学的滥用。

7.过去的弹药是无限的。

8.过去是构成时间的物质,因此时间很快就变成过去。

9.假如你像个男子汉那样战斗,你就不会像条狗似的被人绞死。

10.假如我无缘得到那份荣誉、智慧和幸福,那么让别人得到吧。即使我要下地狱,但愿天国存在。

11.快乐不需要转化成美,而不幸却需要。

12.历史更像是虚构的一种形式。

13.领悟的幸福远远超过想象或感觉。

14.某些道德家认为拥有钱币不一定表示幸福,另一些幸运的形式也许更为直接。

15.那帮英格兰人的蠢东西一种美学上的丑恶运动:十一个人和另外十一个人追着一个球的对抗一点也不优美。

16.女人们让我倒霉。可是我获得的快乐足够补偿所有的不幸。痛并快乐着好过不疼不痒。

17.任何一种命运,再长再复杂都好,事实上都有那么一个时候:在这时一个人永久地知道了他是谁。

18.上帝在克莱门蒂诺图书馆的四十万藏书中某一卷某一页的某一个字母里。我的父母、我父母的父母找过那个字母;我自己也找过,把眼睛都找瞎了。

19.失明是孤独的一种形式。

20.诗歌需要韵律。诗歌永远记得它在作为文字艺术之前首先是口头艺术,记得它曾是歌。

21.时间就是组成我在干的事情的物质。

22.时间是最好的甚至是唯一的选集编纂者。

23.使人着迷是一个作家应该具有的几个最主要品质之一。

24.事实是我们拖延着能拖延的一切;假如我们都深知自己是长生不老的,那么早晚所有的人会干完所有事情并且懂得一切。

25.他不是为后代,也不是为上帝写作,因为他对上帝的文学喜好一无所知。他殚精竭虑、一动不动、秘密地在时间的范畴里营造无形的迷宫。

26.天使对我说,绵羊的毛皮不是老虎的颜色,撒旦对我说,强大的上帝要它变成那种颜色,利用了我的技巧和染料。现在我知道,天使和撒旦都在颠倒黑白,一切颜色都是可恶的。

27.文学不是别的,就是引导一个梦。

28.我的故事从布宜诺斯埃利斯开始,对我而言它像水和空气一样永恒。

29.我孤独而镜中空无一人。

30.我们管千百个变化不定的原因的无限运作叫做命运。

31.我们很容易便接受了现实,或许这是因为我们直觉里没有一样东西是真的。

32.我们往往为小说人物的不幸一掬同情之泪,结果我们自己的不幸更让人伤心。

33.我们应该感到恐惧的异教徒是会和东正教混淆的那些。

34.我相信总有一天我们不再需要政府。

35.我想应该发明一种没人能赢的游戏。

36.我有时猜测,唯一不神秘的东西就是快乐了,因为它只需靠自己来证明。

37.无知的人以为无限的抽签需要无限的时间,其实不然,只要时间无限地细分就行。

38.一个人的所作所为和所有的人都有共同之处,因此,把花园里的一次违抗说成是败坏了全人类不是不公平的,说一个犹太人被钉上了十字架就足以拯救全人类也不是不公平的。

39.一家大型公司的运作者肯定相信它已经完备了,并且给它强加一个像过去一样洗刷不掉的未来。

40.疑问是智慧的名字之一。

41.英雄们就这样战斗,可敬的心胸无畏无惧,手中的钢剑凌厉无比,只求杀死对手或者沙场捐躯。

42.有些人无法想象一个没有鸟的世界;有些人无法想象一个没有水的世界;而对我来说,我无法去想象一个没有书的世界。

43.语言是需要有共同记忆的一些符号。

44.在挑选敌人的时候要小心,因为他可能只是看起来像罢了。

45.在现实中,在历史上,每次当一个人在面临抉择时必然选择一个然后放弃其他几个;而这并不在像那个属于希望和遗忘的,艺术上有着多种可能性的时间概念中。

46.战争,像女人一样,是男人的试金石。

47.专制的政权才会推行愚昧。

博尔赫斯语录


1、我从不谈论什么背叛和原谅,遗忘是唯一的背叛和原谅。

2、疑问是智慧的名字之一。

3、民主是一种广为流传的迷信,是一种统计学的滥用。

4、有些共产主义者抱有这种观点:反共产主义者就是法西斯主义者。这和说一个人不是天主教徒就是摩门教徒一样不可理解。

5、都说我是个大作家。我对这个奇怪的想法心存感激,可是却不认同它。将来会有些智者轻松把它驳倒,给我安上一个骗子或者粗制滥造的标签或者两个同时安上。

6、失明是孤独的一种形式。

7、被我们称作不幸的是我们对偶然性这个复杂装置的忽视。

8、过去的弹药是无限的。

9、对我而言,布宜诺斯埃利斯有过开始就是扯淡,我把它看得那么永恒,就像水和空气。

10、使人着迷……是一个作家应该具有的几个最主要品质之一。

11、在死亡之外还有什么方式能够威胁别人?最有趣、最原始的,是用长生不老来威胁他。

12、改正过去并不是改正单单那一件事:而是消除那些倾向于无穷的后果。

13、在现实中,在历史上,每次当一个人在面临抉择时必然选择一个然后放弃其他几个;而这并不在像那个属于希望和遗忘的,艺术上有着多种可能性的时间概念中。

14、事实是我们拖延着能拖延的一切;假如我们都深知自己是长生不老的,那么早晚所有的人会干完所有事情并且懂得一切。

15、我相信总有一天我们不再需要政府。

16、足球很流行,因为愚蠢也很流行。

17、镜子和性交是可恶的,因为他们都增加了人类的数量。

18、妒忌是个很西班牙风格的主题。那些西班牙人总是想着妒忌。他们形容什么东西很好会说:那可真让人妒忌。

19、美,是那么高雅的奥秘,根本不是心理学和修辞学说得明白的。

20、所有的理论都是合法的,可是没一个是重要的。重要的是靠它们来做什么。

21、真是奇怪,人们从没有因为英格兰给这个世界填满了愚蠢的游戏,例如足球这样纯粹的身体运动而责备过他们。足球是英格兰最大的罪行之一。

22、贝隆主义既不能说对也不能说错,问题是已经改变不了了。

23、专制的政权才会推行愚昧。

24、当一个人发现另一个人是独一无二的时候便爱上了他(她)。

25、这些年来我发现,美,和快乐一样常见。如果一天里我们没有哪怕一刻身处天堂,根本就过不下去。

26、死亡是活过的生命。生活是在路上的死亡。

27、丁尼生说过,如果我们能够了解仅仅一朵花,我们就能明白我们是谁和世界是什么。

28、女人们让我倒霉。可是我获得的快乐足够补偿所有的不幸。痛并快乐着好过不疼不痒。

29、我仅有的两个癖好是:阅读大英百科全书和不阅读恩里克·拉雷塔(阿根廷着名作家,拉美现代主义的代表作家)。

30、我们应该感到恐惧的异教徒是会和东正教混淆的那些。

31、历史更像是虚构的一种形式。

32、我们是我们的记忆,我们是不连贯的空想博物馆,一大堆打碎的镜子。

33、任何一种命运,再长再复杂都好,事实上都有那么一个时候:在这时一个人永久地知道了他是谁。

34、在所有人类的发明中,最令人惊叹的,无疑是书。其他发明只是人类躯体的拓展罢了。显微镜和望远镜是视觉的拓展;电话是声音的拓展;接着我们还有犁和剑,胳膊的拓展。可是书却是另一种东西:书籍是记忆和想象的拓展。

35、战争,像女人一样,是男人的试金石。

36、时间就是组成我在干的事情的物质。

37、我想应该发明一种没人能赢的游戏。

38、一家大型公司的运作者肯定相信它已经完备了,并且给它强加一个像过去一样洗刷不掉的未来。

39、我犯下了一个人能犯下的最糟糕的罪行——我过得不快乐。

40、在一个人写作时,他同样也是读者。

41、语言是需要有共同记忆的一些符号。

42、我有时猜测,唯一不神秘的东西就是快乐了,因为它只需靠自己来证明。

43、诗歌需要韵律。诗歌永远记得它在作为文字艺术之前首先是口头艺术,记得它曾是歌。

44、我们很容易便接受了现实,或许这是因为我们直觉里没有一样东西是真的。

45、过去的距离要更长一些,因为空间是用时间来衡量的。

46、我孤独而镜中空无一人。

47、由灰尘和时间制成的人类,比仅仅由时间制成的轻浮调子还要短寿。

48、文学不是别的,就是引导一个梦。大学应该支持我们去钻研古人和别人的东西。如果只是支持自己和当代的东西,那么大学就没用了,因为它只是在拓展媒体已经担负起的功能而已。

49、我很多年前就明白了,这个世界上没有什么东西不是一个潜在的地狱的起源;一张脸,一句话,一个指南针,一阵飘来的烟味,如果不尝试遗忘的话,都可能使他发疯。

50、那帮英格兰人的蠢东西……一种美学上的丑恶运动:十一个人和另外十一个人追着一个球的对抗一点也不优美。

51、但丁是人类的象征,贝阿特丽切是信仰的象征,而维吉尔则是理智的象征。

52、有些人无法想象一个没有鸟的世界;有些人无法想象一个没有水的世界;而对我来说,我无法去想象一个没有书的世界。

53、在挑选敌人的时候要小心,因为他可能只是看起来像罢了。

54、我觉得地狱和天堂都太过分了。人们的行为不值得那么多。

55、时间是最好的甚至是唯一的选集编纂者。

56、为信仰而死比完全为它而活要容易多了。

57、在这个意义上,流氓(民族主义)是恶中之恶。它分裂人们,毁灭掉人类本性好的一面,指向财富分配的不平均。——三天里,在1984年,来自日本、意大利、法国、美国和许多其他国家的二百五十个作家、画家、音乐家、哲学家、精神分析学家、科学家、经济学家和企业家在东京聚首,探讨一些世界性的重要议题,包括民族主义。博尔赫斯指出,民族主义正在分裂这个世界。

58、我总想着:天堂大概就是图书馆那样的吧!

59、快乐不需要转化成美,而不幸却需要。

60、我们避而不谈的东西像极了我们自己。

61、我愿意做个勇敢的人。我的牙医很肯定我不是那种人。

62、向音乐(时间的神秘形式)致谢。

博尔赫斯15句经典名言


1、隐藏一片树叶最好的地点是树林 ----《沙之书》

2、所有文学在讲一件事,那就是人生多苦。

3、友谊有优于爱情之处,因为它不需要任何证明。友谊一旦建立起来,它便一无所求,它就会发展下去。 ----《博尔赫斯谈话录》

4、死亡是活过的生命,生活是在路上的死亡。

5、现在我们该为之付出代价了。我赐给你一面镜子和一个金面具;这里是第三件,也就是最后的一件礼物。」国王拿一把匕首放在诗人右手。 ----《镜子与面具》

6、爱上一个人就像是创造一种宗教,而那种宗教所信奉的神是靠不住的。但丁对贝雅特丽齐的感情达到了偶像崇拜的程度,这是无可反驳的事实,她有时嘲笑,有时忽视但丁,这些事实在《新生》里已有记载。有人主张那些事实是别的事实的象征。果真如此的话,我们更确信但丁不幸而迷信的爱情。贝雅特丽齐死后,但丁永远失去了她,为了缓解忧伤,便虚构了同她相遇的情节。我认为他在《神曲》中采取了三部曲的结构,目的就是把那次邂逅穿插进去。他想起了常常梦见遇到障碍的伤心情况。 ----《博尔赫斯口述》

7、一个人可以是另外一些人的敌人,可以是另外一些人的另外时刻的敌人,但是不能成为一国之敌,不能与萤火虫、花园、流水、风儿为敌。 ----《小径分岔的花园》

8、这世上如果有天堂,就该是书店的模样。

9、我滑下你的暮色如同厌倦滑落一道斜坡的虔诚,年轻的夜晚像你屋顶上的一片翅膀。

10、人死了,就像水消失在水中 ----《另一次死亡》

11、丁尼生说过,假如我们能了解一朵花,我们就知道我们是些什么人,世界是什么了。他或许想说,事物不论多么细微,都涉及宇宙的历史及其无穷的因果关系。他或许想说,可见的世界每一个形象都是完整的,正如叔本华所说,每个人的意志都是完整的。神秘哲学家认为人是微观宇宙,是宇宙的一面象征性的镜子;按照丁尼生的说法,一切事物都如此。一切事物,甚至那枚令人难以容忍的扎伊尔。

唯心主义者说,浮生着梦,生和梦严格说来是同一个词;我将从千百个表面现象归为一个表面现象,从一个极其复杂的梦归为一个十分简单的梦。别人也许会梦见我发了疯,而我却梦见扎伊尔,当世界上所有的人日日夜夜都在想扎伊尔,那么哪个是梦,哪个是现实,是世界还是扎伊尔? ----《阿莱夫》

12、假如你像个男子汉那样战斗,你就不会像条狗似的被人绞死。

13、他认为时间有无数系列,背离的、汇合的和平行的时间织成一张不断增长、错综复杂的网。由互相靠拢、分歧、交错,或者永远互不干扰的时间织成的网络包含了所有的可能性。在大部分时间里,我们并不存在;在某些时间,有你而没有我;在另一些时间,有我而没有你;再有一些时间,你我都存在。 ----《小径分岔的花园》

14、我犯下了一个人能犯下的最糟糕的罪行 我过得不快乐

15、水

是我怀念你时留下的无用的泪 ----《另一个,同一个》

16、令人诧异的是(我并不认为这点迄今已被人们所发现),各国推选的代表,其形象并不十分像这些国家。譬如,有人会想,英国应推约翰逊博士为代表,然而,事实并非如此,英国选了莎士比亚,而莎士比亚(我们权且这么说)正是最不富有英国特色的英国作家。英国作家的特点是寓意含蓄,也就是意在不言中,而莎士比亚恰恰相反,他善于在比喻中运用夸张的手法。倘若有人说莎士比亚是意大利人或犹太人,丝毫也不会令我们吃惊。 ----《博尔赫斯口述》

17、早晨是辽阔的原野,白天有马的气息。对他来说,那是崭新的、有时甚至是酷烈的生活,但他的血液里早已带有这种生活的倾向,因为正如别的民族崇拜和预感到海洋一样,我们(也是引进这种象征的人)向往在马蹄下发出回响的无边无际的平原。

奥塔洛拉临死前忽然明白:从第一天起,这帮人就出卖了他,把他判了死刑,让他得到女人、地位和胜利,因为他们把他当成死人一个,因为在班德拉眼里,他早就是釜底游鱼。 ----《阿莱夫》

18、失眠是知道别人独睡时自己不该独醒,是渴望进入梦境而又不能成眠,是对活着和还将继续活下去的恐惧,是懵懵懂懂熬到天明。

19、文学不能给你生气,但可以给你疗伤,文学让人内心更柔软有弹性,吃得起亏,容得下苦。因为所有文学作品都在讲一个故事人生是苦的

20、叔本华说一个人从出生的一刻起到死为止所能遭遇的一切都是由他本人事前决定的。因此,一切疏忽都经过深思熟虑,一切邂逅相遇都是事先约定,一切屈辱都是惩罚,一切失败都是神秘的胜利,一切死亡都是自尽。我们的不幸都是自找的想法是再好不过的宽慰;这种独特的神学向我们揭示了一个隐秘的旨意,奇妙地把我们同神混为一谈。 ----《阿莱夫》

21、我不知道是我还是博尔赫斯写下了这些话。 ----《博尔赫斯与我》

22、所以清醒恐怕是另一场梦 ,梦见自己并没有做梦 。而睡梦不过夜夜归来的死亡。

23、我用什么才能留住你?

我给你瘦弱的街道、绝望的落日、荒郊的月亮我给你一个久久地望着孤月的人的悲哀我给你我的寂寞、我的黑暗、我心的饥渴我试图用困惑、危险、失败来打动你 ----《我拿什么才能留住你》

24、阿拉伯民间故事集《一千零一夜》中讲故事的女子。相传萨桑国国王因痛恨王后与人有似,将其杀死,此后每日娶一少女,翌晨即杀掉。宰相之女山鲁佐德为拯救无辜的女子,自愿嫁给国王,每夜讲故事,引起国王兴趣,免遭杀戮。她的故事讲了一千零一夜。 ----《小径分岔的花园》

25、人死了,就像水消失在水中。

博尔赫斯《另一次死亡》 ----《另一次死亡》

26、联系我们的不是爱而是恐惧,也许正是因为这个原因,我才如此爱你。

27、阴谋诡计与时间永恒的错综交织。承认吧,无论做了什么选择,事情依然有无数种可能,我们只是走出迷宫的一种途径而已,依然有无数种途径,但结局只有一个:死亡,也许它是终点,也许只是一个虫洞通向另一个起点 ----《小径分岔的花园》

28、啊,上帝,即便我困在坚果壳里,我仍以为自己是无限空间的国王。《哈姆雷特》第二幕第二场他们会教导我们说,永恒是目前的静止,也就是哲学学派所说的时间凝固;但他们或任何别人对此并不理解,正如不理解无限广阔的地方是空间的凝固一样。 ----《阿莱夫》

29、任何语言都是符号的字母表,运用语言时要以交谈者共有的过去经历为前提;我的羞惭的记忆力简直无法包括那个无限的阿莱夫,我又如何向别人传达呢? ----《阿莱夫》

30、假如我的确是一个诗人,我将认为生命的每时每刻都是美丽的,甚至在某些看起来并不美丽的时刻。但是最终,记忆把这一切变得美丽。 ----《博尔赫斯谈话录》

互联网后端架构演进及未来猜想

当年的一个不经意间产生了一个伟大的发明——计算机,在这之上又是一个不经意间产生了彻底的改变你我生活的-互联网;这些伟大的转折点,从来不是突然之间到来,就像大海都是由一滴滴水滴慢慢汇聚而成,而我们就像水消失在水中,看似微不足道,但却都不可或缺;作为互联网技术发展的史上的一滴微不足道的水滴,让我们来回顾一下互联网后端应用的架构发展,以及对未来的一些思考和展望吧...

本文是纯粹的思考和讨论,尽可能客观的讨论相关架构。主要对后端 api 应用,以一种事后诸葛亮式的视角进行分析。

历史回顾

随着业务复杂度以及开发团队规模的不断扩大,互联网后端部署架构也随之不断演进。

注:由于作者本人水平有限,且没有亲身经历过当年的架构演进过程,可能存在理解错误或不够深入,欢迎前来一起讨论。

   单体应用架构


在早期互联网站点上,所有服务都放在一个仓库并部署在一起,且由 lb 来把整个站点的流量负载到多个 server 节点上,做到了高可用(当然,在这之前还存在完全的单点,没有lb,只有一个服务器来部署应用,扩容完全靠机器升级配置;这里不对这种架构过多阐述)。

此时的后端开发团队往往非常简单--只有一个团队来负责设计,开发,部署,运维。那么随着开发人员增加,整个流程想变得相互耦合,相互等待,生产效率变得极低(人员上的扩展在达到一定数量后将变得难以管理且沟通效率极低)。

  • 优势

  1. 运维成本低:只需要部署维护一个应用部署和一个代码仓库即可,相关通用逻辑(中间件/通用业务逻辑)的升级成本也相对较低。

  2. 开发成本低:业务逻辑只需考虑单个应用内的情况,业务请求失败。

  • 缺点

  1. 单点风险:所有业务逻辑都在一个应用内,如果应用 Crash 则会导致这个站点不可用。

  2. 应用越来越笨重,启动速度随着业务初始化逻辑的复杂变得越来越慢。而启动速度慢后影响了业务发布迭代的效率。

  3. 开发人员增加时,处理代码提交冲突的时间将占有开发者的大量时间,极大降低开发效率(当然,如果你在代码模块设计的足够好,单仓库对人员增加的提交冲突概率并不会体现)。

   按业务功能模块拆分

随着业务的发展,人员的不断增多,并且对整体的稳定性和风险控制的要求越来越高,自然而然的出现了把单体应用拆分的想法(而人员团队也由于管理上的需要也需要拆分,那么很自然的想到了一个团队负责一个模块),此时往往团队人会不是特别多,最容易想到的自然就是按照业务功能模块拆分,例如电商系统的商品,订单,交易,用户等等。同时也在垂直链路对db等基础组件的访问做了拆分(背后分别对应不同的开发团队去完成设计,开发,部署,运维)。

而此时出现了不同模块之间相互调用的需求,但此时由于各个模块分散在不同的团队,当时往往也没有一个专门的团队去维护模块之间如何通讯,导致模块之间的通讯变得没有规范(当时RPC比较多,也没有统一的数据传输协议,业务开发者需要处理连接性、路由、数据模型转换等),从而比较复杂。

  • 优势

  1. 解决了需要拆分团队后单体架构无法支持快速迭代的问题。

  2. 一定程度上解决了单点风险,一个模块 Crash 不会导致整体全部不可用。

  • 缺点

  1. 模块间通讯比较复杂。

  2. 模块内业务逻辑更加复杂后,单个模块就像单体应用一样变得笨重和维护成本的急剧上升。

注:代码仓库和应用的拆分不一定一一对应,比如可以将多个部署模块都使用相同的代码仓库,而只是在部署的时候分不同模块分开部署。

   面向服务的架构(SOA)-ESB


当"按业务功能模块拆分"的架构下,同一模块内业务逻辑的复杂需要的开发人员也需要更加多,且组织架构上也需要进一步拆分,两方面都促成了相同的需求:系统模块迫切需要进一步拆分。且需要解决模块间通讯比较复杂的问题,同时 Web 服务标准和规范(SOAP 等)以及  XML 协议的出现使得技术上有了相应的标准,把通用的服务调用组件从业务中剥离出来并统一部署管理,于是SOA 理念诞生了:把应用按服务维度拆分,并把公共的服务治理(服务发现,限流,熔断等)能力从应用拆分出来,有了标准的服务调用方式。于是团队架构也可以更细粒度的进行拆分,并出现了维护公共能力的中间件团队。

而 ESB(企业服务总线) 是 SOA 其一种实现方式,使用中心式的总线,把服务治理能力都集成到了中心 ESB 中:

  • 优势

  1. 通过更高的敏捷性和更有效的开发来降低成本

  2. 便于维护:由于所有服务都是彼此独立、互不依存,因此可以根据需要对其进行修改和更新,而不会影响其他服务。

  3. 可扩展性:由于 SOA 允许服务跨多种服务、平台和编程语言运行,因此极大地提高了可扩展性。SOA 采用的是标准通信协议,这让企业减少了客户端与服务之间的交互。减少这一级的交互可以降低应用扩展的压力,同时提高扩展的便利性。

  4. 更可靠:由于调试小型服务要比调试大量代码更加容易,因此 SOA 生成的应用更加可靠。

  • 缺点

  1. 单点风险:ESB 是个集中式的集群,负载较高,且单点不可用会影响全局服务。

   微服务架构


而为了解决 ESB 的单点风险,出现了另外一种新的 SOA 实现:微服务架构。微服务架构把 ESB 的单点总线服务拆分到了每个服务内部,最处普遍使用 SDK 的方式集成到应用内部,此时出现了管理这些 SDK 以及背后能力的中间件团队(阿里的中间件团队正式诞生于这个时期)。


  • 优势

  1. 无单点风险:所有服务功能和相关服务里治理能力都在单个服务内部集成,不存在集中式单点集群

  2. 通过更高的敏捷性和更有效的开发来降低成本

  3. 更可靠:由于调试小型服务要比调试大量代码更加容易,因此微服务同样也具有 SOA 的可靠性。

  • 缺点

  1. 扩展性变低:以 SDK 集成到服务内部的方式其实一定程度上牺牲了 ESB 所带来的跨编程语言调用的优势(需要和业务开发语言相同才容易集成),同时对企业内多语言调用需要维护多种语言的 SDK,并且很难达到多语言完全一致。

  2. 运维成本较高:中间件相关 SDK 升级需要推动业务方一个个应用重新集成和发布,相关升级人力成本大。

进一步的细分

  富 sdk

随着微服务架构中的中间件的 sdk 化后,有些通用的业务服务也把部分通用逻辑写入到了自身提供的 sdk 中,出现了富 sdk,而这类 sdk 往往包含大量业务逻辑,且存在不同用户使用方式的不同,使得微服务已变得不再 "微",在没有写任何业务代码的时候,就已经包含了大量业务依赖二方库,相关初始化逻辑的叠加使得服务启动速度也受到很大的影响。

此时,要推进某个 sdk 的全量升级,往往需要耗费大量的工作量,并且需要让每个业务方都参与进来,导致即使所有 sdk 同时更新且一年只更新一次,那么也需要消耗大量人力成本,同时稳定性也有巨大的挑战。

而同时这里面需要解决不同 sdk 以及业务逻辑之间所依赖的同一个库(比如 json 库)的不同版本问题:

对于 java 服务,由于存在类隔离机制,往往能做到中间件等 sdk 和业务逻辑使用不同的类加载器而做到同时依赖同一个库的多个版本。但对于没有类似类隔离机制的其他语言,那么势必要让所有 sdk 使用同一个版本的 json 库,而如果这个库各个版本之间是不兼容的,那么升级成本则更加巨大,甚至几乎无法升级。这大大限制了以 java 为主的企业内对其他语言的支持度和发展。

  Service mesh


正因为富 sdk 所存在的问题,于是出现了把中间件 sdk 剥离到独立进程中,同时随着服务一起部署,在微服务架构不改变的前提下解决中间件 sdk 的升级维护问题,且微服务业务开发者不再需要关注这些服务治理相关的 sdk ,全部由中间件部门统一完成部署和升级,同时对业务方可以无感升级,sidecar 和业务代码所用的开发语言不再需要相同。

而这里的 servicemesh 只是解决了服务治理相关中间件 sdk 的剥离,还有一些其他基础组件 sdk 还未剥离,如何不同部门的不同基础设施(db, mq等待)都集成到同一个sidecar,那么这个 sidecar 本身也会比较重,所以目前一种趋势是多 sidecar 拆分部署,例如 db sidecar,mq sidecar 等等,并由各自团队分别维护和管理。同时 sidecar 的拆分则往往也是跟随着背后维护团队的组织架构来决定,且各个 sidecar 的升级对业务开发者和其他 sidecar 开发者透明。

  • 相比富 sdk ,标准化 service mesh 的优点:

  1. 中间件迭代速度加快:可快速升级和回滚,可以让中间件等基础设施快速拥有快速试错的可能,并提高迭代效率。

  2. 多语言支持成本低:新接入一种语言只需要实现其最基础的通讯协议的轻量 sdk 即可(比如 dubbo,redis等),相关容错,高可用,安全等业务无关的逻辑可不用在每种语言内重复实现。

  • 而 mesh 也不是万能的,同样也存在一些问题:

  1. 增加了一定的性能消耗(RT, CPU 消耗)。

  2. 需要根据业务方所使用的基础组件,适配每种组件的协议。

  3. 对于每种基础设施,业务方仍然需要引入其原始协议 sdk(比如 redis,mysql,dubbo,rocketmq,nsq 等等)。

  统一编程平面(sidecar 标准化)


当富 sdk 中的中间件被分别 sidecar 化后,可能还有很多业务相关的通用 sdk 存在于业务进程内,而这部分其实也是通用逻辑,也可以像中间件一样 sidecar 化,但是业务 sdk 往往比中间件 sdk 逻辑更加复杂且种类更加多;而即便中间件 sdk 数量增长短期内看起来不会特别快,但如果把所有 sidecar 都以一种相同的 api 规范对业务提供服务,对于同一种类的中间完全可以使用相同的 api,这样可以做到对业务更进一步屏蔽中间件/通用业务的种类和使用方式(业务只需要知道这一层通用 api 以及其使用方式,底层实际中间件提供可以随时替换)。这就出现了 dapr/bottle(淘系自研) 等标准化 api 为思路的 sidecar 方案。

  • 相比service mesh,标准化 sidecar 的优点:

  1. 业务依赖更少:业务部署代码更进一步轻量化,只有业务代码和非常轻量的标准化 api sdk。

  2. 扩展性:每个标准化协议背后提供服务的具体基础设施可以被无感的替换种类和升级。

  • 但同样也存在一些问题:

  1. 现有业务接入改造非常大,需要重新使用标准的 api。

  2. 目前 api 不全,抽象有一定的难度(自由度和易用度的权衡)。

目前这还是一个正在探索的方向(当然阿里云和淘系内都已经有部分业务落地了),对于有标准化需求的 serverless 平台或者全新的业务等有较大的吸引力。

  Serverless

前面列举了这么多,业务开发者还是需要去关注自己的业务部署在哪些机器(或者说容器 pod)上,以及需要自己去根据性能来扩缩容节点数,线上运行环境等等,总之业务开发者除了关注自己的代码以外还需要或多或少关注到底层技术设施,为了更进一步的减轻业务开发者的关注点,Serverless 的概念就出现了,目的是让业务开发者只需要关注自己业务逻辑相关的代码,其他所有底层基础设施,中间件,通用层都不再需要关注。而把这些都交给 Serverless 平台以及底下的各个基础设施团队去维护。

而 Serverless 平台把计算部分(微服务中的 service)进一步拆分成了更小的粒度-- faas(函数即服务),同时相关存储、数据库、中间件等基础服务以 baas(后端即服务) 的形态提供;业务开发者只需要提交代码,不需要关注时如何运行起来的。

Serverless 平台的构建可以用前面提到的 Service mesh 或者标准 api 等方式作为其基础设施。

Serverless 平台往往也提供了弹性扩缩容,自动化容量评估,无人值守等等能力,但如果一个函数(业务代码)依赖的相关 sdk 以及初始化逻辑复杂影响了冷启动时间,那么会使得其弹性扩缩容非常受限,如果想真正发挥出其价值的话,需要让每个函数拆分的足够小,足够轻量;而函数拆分的粒度太小的话,整个系统相互调用时整体开销就会大幅增加(会出现更多的网络调用),所以目前 Serverless 用的较多的都是在前端 api 的业务聚合层,或者相对比较独立的业务系统(iot 设备上报,ai 算法计算等)。

展望

回顾整个历史的发展,应用被不断拆分的越来越细,且从前期的横向拆分到后面的 sidecar 等方式的纵向单节点内的拆分,而其背后的团队则越来越多也越来越复杂,职责边界越来越明确也驱动了架构的拆分(和组织拆分一样需要保持小而高效的团队,一个内聚的服务被太多的人同时维护效率也会降低效率);同时底层细节不断被屏蔽,编程门槛在不断的降低,似乎可以猜测将来几乎任何人都会将自己的想法快速变成代码执行。

下面是一些技术对未来更进一步的实现 Serverless 落地的猜想:

  WASI (系统 api 层面的标准化)


WebAssembly 最早期是被用于给 web 编程支持更多语言的扩展,把其他语言实现的代码能够直接被 JavaScript 所调用,并在浏览器运行。其定义了一套把其他语言编译成统一字节码规范的方式,并由 WebAssembly 虚拟机解释并运行(更多 WebAssembly 的细节不是本文重点,这里不再多介绍,如果不熟悉可以自行去了解)。

然后随着 WASI(WebAssembly System Interface) 的出现,使得 WebAssembly 可以在 web 之外运行,这让 WebAssembly 有了更多的想象空间,WASI 定义了一套类似 POISX 的标准编程协议,开发者不再直接面对内核提供的 POISX 标准编程(或者说不再关注内核来做相关编程)。

而这将会带来什么变化呢?于对运行在上的 runtime 提供的 WASI 标准,runtime 就是宿主机。也就是说开发者不再接触到具体的内核,对于开发者来说极机器就是 WASI 虚拟机!这使得编译成 WebAssembly 的代码可以被非常轻量的调度(一个 WASI 虚拟机进程可以随时替换和增加其所运行的 WebAssembly 代码)和启动。这给了 Serverless 的更大规模落地有了更多的想象空间。

当然目前 WASI 标准还处于比较早期,网络通讯和多线程都还未支持,这使得目前使用上比较受限,基本只能做纯计算,例如 Service mesh 中的 sidecar (envoy 以及蚂蚁的 mosn 等) 目前把 WebAssembly 当成了网络流量处理插件,而如果插件中涉及需要网络调用的部分则直接委托给了 sidecar 本身的实现。而同时 Java 等自带虚拟机的语言对支持 WebAssembly 难度更大,如正在尝试的 GraalVM,其把现有代码编译成 WebAssembly 还需要一些改造,目前现状是如果没有研究 GraalVM 专业人员的帮助,现有业务代码几乎很难成功编译。

WASI 和 WebAssembly 似乎可以解决 Serverless 计算中拆分过细导致的网络开销过大的问题(用 WebAssembly 虚拟机统一收敛出口,以及随时全局调度函数尽可能的本地化调用)。

如果将来 WASI 成了后端开发者的编程标准,那么将彻底屏蔽内核等传统"机器"的的概念,取而代之的是更加轻量化的"机器"-WASI运行时,在这之上将会开启一个全新的纪元(但这显然是个漫长的路程且不一定会走这个方向)。

  统一编程平面 (业务 api 层面的标准化)


统一编程平面(标准业务 API) 则是以 dapr 等尝试的建立一套标准的业务开发所需的基础 api (前文已经提过),这是另外一种从业务 api 层面标准化的方向。这使得业务开发者只需要面向一组通用 api 来编程,而其背后的部署结构,实现方式则完全透明,并可随时替换。这看起来也给 Serverless 进一步落地带来了更大的可能性。

如果将来统一编程平面成了后端开发者的编程标准,那么将彻底屏蔽所有中间件以及基础设施和服务调用的差异,开发者的所有业务逻辑都将由标准 api 来组合完成,就像内核接口和系统调用一样,底层基础设施就变成了这个"庞大操作系统的内核"。

  云原生编程语言 (编程语言层面的标准化)

既然 Serverless 目的是让业务不再关注服务器等基础设施的细节,那么能不能直接从编程语言下手,细到每一个对象的 new ,每一行语句的执行都能被整个集群内分布式的调度(比函数级别更细),而开发者方编程的时候只需要把这个集群都当成一个巨大的单机机器即可,底下的所有计算,存储等等全部由 Serverless 托管,相关的执行性能优化也都交给 Serverless,每一行代码再哪个机器执行,如何执行都交给 Serverless 平台。

例如下面 HelloWord 代码可能被运行在了不同的机器上:

public class HelloWorld {
    public static void main(String[] args) {
        String str = new String("Hello, World"); // 运行在服务器 A
        System.out.println(str); // 传递数据到服务器 B,并在服务器 B 运行
    }
}

如果将来云原生编程语言能流行,并在语法上加以简化,似乎可以针对比较初级的程序员甚至是非程序员直接编写可以处理高并发,大流量,大数据等现在需要比较资深的程序员才能正确处理的工作,极大的降低互联网开发门槛。

而目前已经出现了两种云原生编程语言 Ballerina 和 Pulumi,他们都基于了IAC(基础设施即代码)的理念,在语言代码内可以直接非常简单的创建云基础设施,不再需要关注服务器等基础设施的部署。

例如 Pulumi 官方给出的创建一个 web server 的例子:

let aws = require("@pulumi/aws");
let sg = new aws.ec2.SecurityGroup("web-sg", {
    ingress: [{ protocol: "tcp", fromPort: 80, toPort: 80, cidrBlocks: ["0.0.0.0/0"]}],
});
for (let i = 0; i < 3; i++) {
    new aws.ec2.Instance(`web-${i}`, {
        ami: "ami-7172b611",
        instanceType: "t2.micro",
        securityGroups: [ sg.name ],
        userData: `#!/bin/bash
            echo "Hello, World!" > index.html
            nohup python -m SimpleHTTPServer 80 &`,
    });
}

只要编译运行就创建出了相应的 aws 的 ecs 机器,并运行相关命令和配置。

初看似乎比较好,声称去掉了繁琐的 yaml 配置,把很多相关逻辑其实写到了编译器和语言运行时内,把相关的云服务都封装了一层自己的语法,开发者还是可以关注背后云基础设施(看起来只是简化了),但结合 faas 等服务后可以做到大部分情况不再需要关注底层基础设施。但整体发展还处在非常早期,目前看起来主要还是对各个云服务厂商能力的封装和抽象的一个工具,有自己的预发,同时也提供一些其他语言的类库(可以给别的现有编程语言调用)。距离理想的完全屏蔽基础设施还有很大的差距(也或许永远无法屏蔽吧)。

未来将走向何方,就交给时间和一滴滴改变世界的创作者们吧~

引用

  • https://zhuanlan.zhihu.com/p/42115757

  • https://www.redhat.com/zh/topics/cloud-native-apps/what-is-service-oriented-architecture

  • https://jimmysong.io/kubernetes-handbook/cloud-native/cloud-native-programming-languages.html

✿  拓展阅读

作者|风弈

编辑|橙子君

出品|阿里巴巴新零售淘系技术

以上是关于人死了,就像水消失在水中(博尔赫斯的经典诗句)的主要内容,如果未能解决你的问题,请参考以下文章

互联网后端架构演进及未来猜想

博尔赫斯《英文诗两首》

博尔赫斯二十首情诗

Windows 经典主题上消失的单选按钮

博尔赫斯的相关经典语录

老玩家才懂的过往,Android系统消失不见的经典设计