返回首页
一周热榜
嗨,HN,
我想分享一些我在过去几个月里一直在研究的内容,这可能对与分布式架构(例如微服务)互动的开发者们感兴趣。
我是一名后端开发者,在我去年的9到5的工作中,我们开始构建一个分布式应用——我的意思是两个或多个服务通过某种消息系统(如Kafka)进行通信。这是我第一次接触分布式系统。在阅读了Nathan J. Smith关于结构化并发的精彩文章后,我开始注意到这种基于消息的通信所面临的挑战与并发编程以及之前的GOTO编程之间的相似性——远程操作、复杂的故障追踪、同步问题等。我开始怀疑,如果症状相似,根本原因和解决方案也许也会相似。
这促使我设计了一种我称之为“结构化协作”的东西,基本上就是将结构化并发的规则应用于分布式系统所得到的结果。事实证明,这样做有一些相当强大的后果,包括:
- 几乎消除了由于最终一致性导致的竞争条件
- 允许你恢复类似于分布式异常的东西——堆栈跟踪和跨服务边界的堆栈展开等效
- 使得对整个系统的推理变得更加容易
我整理了三篇文章,解释了:
1) 什么是结构化协作([链接](https://developer.porn/posts/introducing-structured-cooperation/)),
2) 一种你可以实现它的方法([链接](https://developer.porn/posts/implementing-structured-cooperation/)),以及
3) 为什么它有效([链接](https://developer.porn/posts/framing-structured-cooperation/))。
我还整理了一个用Kotlin实现的文档齐全的POC(概念验证)实现,叫做Scoop(在标题中有链接)。我想你可以把它称为一个编排库,类似于Temporal([链接](https://temporal.io/)),不过我想强调的是这只是一个POC,并不适合生产使用。
我希望能与社区讨论这个想法,看看大家的看法。如果这被证明是一种有用的做法,我会尝试推动在现有库中实现类似的东西(例如前面提到的Temporal、Axon([链接](https://www.axoniq.io/products/axon-framework))等——如果你知道其他适合的库,请告诉我)。正如我在文章中提到的,由于技术生态的异构性,我不确定实际构建一个库是否是个好主意,就像构建一个“结构化并发库”并没有意义一样,因为“并发”有很多实现方式。相反,我试图构建一个类似于“参考实现”的东西,供其他人作为构建自己实现的跳板。
除此之外,我认为这也具有教育价值,我尽力让所有内容尽可能易于理解。我认为一些有趣的内容包括:
- 在Postgres之上实现分布式协程
- 同时具有反应式和阻塞实现,可以作为新手学习反应式编程的资源
- 我记录了使用Postgres作为消息队列时出现的各种有趣问题(特别请参见[链接](https://github.com/gabrielshanahan/scoop/blob/09db323bf6c8a72ca34b50392928db13f80dcc15/src/main/resources/db/migration/V2__create_message_event_table.sql#L20)和[链接](https://github.com/gabrielshanahan/scoop/blob/09db323bf6c8a72ca34b50392928db13f80dcc15/src/main/kotlin/io/github/gabrielshanahan/scoop/blocking/coroutine/structuredcooperation/MessageEventRepository.kt#L676))
请告诉我你的想法。
我认为我有一个全新的互联网革命想法,但可能有人已经想到过这个并放弃了,或者仍在努力实现?这个想法是——如果能建立一个YouTube摘要平台,可能叫做YSummary,它利用人工智能浏览每一个YouTube视频,并提供一到两句的摘要,旁边附上相关链接。这个YSummary可以按类别进行分类,比如体育、政治、国际、美国、欧洲、亚洲、商业、科学、电脑、互联网、医学、健康等。然后,任何订阅者只需每年支付大约1到5美元,就能节省大量时间,不必在YouTube上浏览,点击一个视频浪费26分钟,结果发现这个视频其实可以用3分钟说完。他们只需在2秒钟内浏览摘要,就能了解今天全球发生的新鲜事。如果他们对某个视频感兴趣,可以再决定花时间观看。如果有人完成这个项目,他可以在一个月内预期获得全球5000万的订阅者。而这个人将被《时代》杂志评选为年度人物,并超越Facebook、Instagram、Yahoo、X、Google的创始人。想听听你的意见。谢谢!