Redian新闻
>
Google开源Service Weaver,让你无需纠结到底选择单体还是微服务

Google开源Service Weaver,让你无需纠结到底选择单体还是微服务

公众号新闻

作者 | Ashley Peacock
译者 | 平川
策划 | Tina

事情总是这样,在单体和微服务哪个更好之间来回摇摆。

不同的人会给出不同的答案,因为他们的经历不同。但在大多数情况下,那往往取决于许多因素,比如公司规模,需要为之服务的流量,以及所提供的产品。

实际上,这两种方法都各有利弊。但是,如果可以两全其美呢?这就是谷歌开源这个新框架的目标,让我们来仔细了解一下!

1 Service Weaver 是什么?  

Service Weaver 是谷歌开发的一个框架,目前处于早期开发阶段。这个框架是开源的,也就是说任何人都可以使用和贡献。目前,该框架只能用于 Go 开发,不过如果成功的话,就可以将这种方法复制到其他任何语言中。

这是一个构建分布式应用程序的框架,它的特点是:在本地作为一个模块化单体运行,但一旦部署,就会作为一个分布式微服务架构运行。

什么是模块化单体?  

模块化单体是一种架构,整个架构被编写成单个应用程序,存储在单个代码库中。模块化的意思是,单体被分割成独立的组件,不同组件之间有清晰的接口。

下面是一个例子:

这是一个用 Mermaid 创建的模块化单体的例子。要学习更多关于 Mermaid 的知识,可以读下我写的这本书 Creating Software with Modern Diagramming Techniques

这个单体包括三个组件:订单、付款和配送。每个组件都实现了单体的一个特定部分。重要的是,每个组件的大部分都是私有的,组件之间的任何通信都是通过明确定义的接口进行的。

这样,组件内部的更改和更新不会影响任何其他组件,只要没有更改或破坏接口就行。

当多个团队共同开发一个单体时,这非常有助于设置清晰的团队边界,使每个组件的开发都独立于任何其他组件,而且组件之间的依赖关系很清晰。

单体在部署时是作为单个应用程序部署的,单体的每个实例会有单独的进程。例如,如果是部署到 AWS,那么单体的每个实例都将作为 EC2 实例上的一个进程运行。

Service Weaver 与传统的模块化单体有何不同?  

我们已经了解了什么是模块化单体。现在,我们来看一看,为什么 Service Weaver 不是一个构建标准模块化单体的框架。

在开发应用程序时,实际看起来与上面的示例没什么不同。使用 Service Weaver 构建应用程序时,也是在单个存储库中构建组件。如上所述,每个组件都定义了清晰的接口,用于支持不同组件之间的通信。

Service Weaver 与传统模块化单体的区别在于部署。在部署使用 Service Weaver 构建的应用程序时,不会部署成一个包含所有组件的大进程,在同一台机器上运行。

相反,每个组件都是作为微服务单独部署。这相当聪明,因为你可以将所有代码放在一个存储库中,轻松地在本地进行开发,同时还能获得运行分布式架构的好处——根据需要扩展每个组件,例如内存、CPU 和实例数量。

很漂亮,对吧?让我们看看 Service Weaver 是如何做到这一点的!

2 Service Weaver 是如何工作的?  

正如文章开头所提到的,Service Weaver 完全是用 Go 编写的,至少目前是这样。在构建应用程序时,必须将每个组件定义为一个接口。你可以将此看成是为给定组件定义公共 API,列出其他组件可以使用的方法。例如,反转字符串的组件可能是下面这样的:

type Reverser interface {    Reverse(context.Context, string) (string, error)}

其他任何想要反转字符串的组件都可以调用这个反转组件,反转字符串的内部逻辑包含在反转组件中,是私有的。

然后像往常一样,你可以通过组件之间的方法调用来扩展组件。你完全可以在本地构建和测试它,而 Service Weaver 将处理组件之间的交互,将它们视为本地方法调用。

到目前为止,其他任何框架或单体都没有什么变化。

然而,一旦部署并作为独立的微服务运行,组件之间的调用就不能在本地进行了。相反,Service Weaver 将在组件之间进行远程过程调用(RPC)。

简单来说,它使用协议缓冲区来序列化和反序列化组件之间传递的数据。你无需为此操心,因为所有这些都是在后台发生的。你不必考虑微服务之间的网络调用,也不用管调用是在本地进行还是在远程进行。

代码方面,你可以按照自己习惯的方式编写代码,至于是本地调用还是远程调用由框架来处理。在上面的 Reverser 示例中,你的代码将只需调用 Reverse,而不需要关心调用是在本地进行还是在远程进行。

使用 Service Weaver 组合微服务  

为了增进理解,请看下图谷歌对不同部分如何组合在一起的说明:

Service Weaver 编程库从开发到执行流程图

下面我们看下 Service Weaver 的多面性。传统的微服务有一个缺点,就是经常会导致界面非常繁琐。毕竟,没有人能预见未来,也没有人能预见随着时间的推移架构会如何变化。

然后,你要么就忍受不断增加的延迟和不断提升的网络调用失败率,要么就花时间将这两个微服务融合起来。

而 Service Weaver 解决了这个问题。上图中定义的 4 个模块,当部署为微服务时,你会注意到,A 和 B 是在一起的,C 和 D 则是单独的微服务。

使用 Service Weaver,你可以自由地定义将哪些组件部署在何处。你可以选择在单个微服务中同时运行多个组件,也可以将所有组件部署为单独的微服务。如果随着应用程序的演进,两个作为独立微服务运行的组件交互变得非常频繁,那么你可以很容易地将它们组合在一起,而不需要更改代码,只需要在 Service Weaver 中快速更改配置即可。

3 云部署选项  

你可能想知道,Service Weaver 应用程序要部署到哪里。由于它是谷歌开发的,所以你可能会想,谷歌云是唯一的部署选项,而且无疑,它与 GCP 集成得很好。

不过,它任何云都支持,比如 AWS 或 Azure。它使用 TOML 文件来定义配置,我一直认为那很容易使用。下面是谷歌的另一副图,说明 Service Weaver 在不同环境下的工作情况:

Service Weaver Libraries 部署程序实施流程图

上图展示了如何构建应用程序及其组件,然后是一系列如何运行该应用程序的选项。你可以用 go run. 在本地运行它,或使用 weaver gke deploy 部署到云中。

目前似乎是 Kubernetes 部署,未来是否提供其他部署方案还有待观察。我认为,在底层,组件之间的通信大量使用了 Kubernetes。

4 Service Weaver 入门  

以上就是对 Service Weaver 的初步介绍,如果你想尝试一下,可以访问 Service Weaver 官方网站。

该网站提供了所需的所有内容,包括框架的架构、安装手册,当然还有入门用的“hello world“示例。

在我看来,这种方法很吸引人,解决了许多我们在单体和微服务之间做选择时需要考虑的问题。它是否能做到这一点还有待观察,但我很期待 Service Weaver 的发展!

原文链接:

https://betterprogramming.pub/service-weaver-a-framework-from-google-for-balancing-monoliths-and-microservices-583e69b274dd

声明:本文为 InfoQ 翻译,未经许可禁止转载。

今日好文推荐

Meta版ChatGPT惨遭“开源”?最新大模型LLaMA被泄露,已在GitHub收获7k+星

平台工程不适合中国企业?这个观点值得反驳!

科大讯飞回应用“绩效回溯”变相降薪;OpenAI逆天开放API,价格打骨折;推特裁员超70%,马斯克给剩下员工“画饼”?|Q资讯

直接到云上做开发?先等等,这个方案还“半生不熟”

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Anthropic:出走OpenAI,Google站队,AGI是天使还是魔鬼?奇瑞回应要求员工周六上班/AITO问界宣发更名HUAWEI问界/Google发布史上最大「通才」模型春招 | Google开放2023暑期实习,base北京/上海/深圳等最高$1,100!Google Pay 出现 Bug,用户突然收到钱且无需偿还!马斯克:太好了!直播预告:基于 Triton Inference Server 部署优化 Stable Diffusion Pipeline失去了终身爱好希腊风景遭亚裔女上司非礼!说他身材好和婚姻缺乏刺激? 白人男高管投诉却遭Google开除! 于是怒告...微服务先行者 James Lewis:别纠结单体还是微服务,面向服务 SOA 架构才是正解15英寸MacBook Air或于今年推出/Google 加速将AI融入搜索/好莱坞去年最亏钱电影出炉美国平台责任230条款三十年荣辱:评Gonzalez v Google案您需要模块,而不是微服务精选Quant岗位 | Apple、ByteDance、Googlel等公司持续热招!Twitter下架部分微服务,是微服务错了?OLED版iPad Pro或明年推出 /《灌篮高手》票房破3亿/Google母公司CEO去年薪酬2.26亿美元Google内部文件首次泄漏:ChatGPT 没有护城河,开源才是大模型未来精选MLE岗位 | Apple、ByteDance、Googlel等公司持续热招!Harvey Norman母亲节手机清仓处理:最高56%折扣!品牌有OPPO, TCL,Google Pixel,三星、苹果等释放Serverless力量,让​「云」持续进化|最前线继承彼得遗志 信仰的颠覆(七十二)Koodo为你带来Google Pixel7兔年焕新计划,更有超酷优惠!每周硅闻 | Google市值暴跌8%;CEO主动降薪98%;Meta即将发动第二轮裁员!西方的独立思想,自由精神与民主制度掉脑袋的事:Google Brain和DeepMind合并成Google DeepMind!!!互联网大厂|Google Cloud 2023暑期实习生招聘中,base北京聊一聊:你会为了高工资选择单休吗?Go 语言体系下的微服务框架选型: Dubbo-go复旦大学 MOSS 大模型正式开源;周鸿祎:360 员工不会被 GPT 淘汰;Google 重组 AI 研究部门|极客早知道多模数据库、“Serverless 化” | 开源数据库领域解读英国春招 | Google开放科技实习岗,招聘流程随之曝光,难!Chinese University Offers Course to Excel in Civil Service Exam官宣:新一代Serverless事件中间件EventMesh正式毕业为Apache顶级项目文革初五十多天邓小平疯狂镇压As City Bus Service Teeters in Henan, Local Government Steps InGoogle 内部文件泄漏:我们和 OpenAI 都没护城河,开源可以打败 ChatGPT
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。