允许跨网络进行函数调用的现代方法

use*_*636 6 architecture rpc distributed-system

将此视为现代系统设计范例的调查:

假设我已经编写了一个程序来返回给定数字的总和.我们称之为Amazing Adder.我的目标是让这个神奇的加法器可供其他人使用.截至2018年,将这款Amazing Adder作为公开服务提供给全世界的主流和现代方式是什么?我对后端架构更感兴趣,而不是用户界面.根据我对系统设计的了解,我可以想到:

1)使这成为一个REST服务,但这个用例是否适合REST范例?我该怎么称呼我的终端?如果我正在做的是添加没有状态信息的数字,我需要支持哪些操作(更新,删除等)?

2)通过http制作这个普通的JSON RPC.因此,用户向http://www.theAmazingAdder.com/add发送http POST请求,有效负载为{'number1':2,"number2":3},我的服务将返回{'sum':3 }

3)通过Profobuf或Thrift使其成为二进制RPC格式.那有点矫枉过正吗?客户端和服务器必须具有的"代码定义"是什么?

4)传统的Python pickling或java序列化/ rmi via network?那是否合适?

我错过了其他任何流行的现代范例吗?

Ale*_*kin 3

如今(2018 年),执行此类操作的“主流”和“现代”方法是使用grpc或使用OpenApi指定的休息服务

使用哪种方法很大程度上取决于上下文

为什么我选择这两种方法?它们允许您为您的“Amazing Adder”定义一个协议、一个接口,然后用您想要的任何语言实现它(前提是有一个 grpc 的库),同时允许您基于多种语言自动生成客户端库在你的原型文件上。

在 grpc 中,您可以使用您的函数定义 .proto 文件,并生成客户端库以与服务的使用者共享。