单个web应用程序中的多种编程语言的实现模式



我只使用一种编程语言(如python或js)创建了web应用程序。

我知道使用多种编程语言来创建高级服务。但我不知道它到底是如何协同工作的,实现这一点的不同模式是什么。

这是一个场景。如果我们有一个Nodejs应用程序,它接受来自用户的大约100个键值对数据(比如JSON),并且如果我们需要使用Haskell处理数据。。。它们被编译成二进制。

我有一个数据层次,比如说,一组人和他们的经理,以及一些绩效指标和他们的分数。我想把它们传递给一个用Haskell编写的程序,根据它们的角色等计算一些值…

可以使用哪些方法将数据传递到程序中?

我应该运行一个服务器来接受JSON形式的值(通过HTTP)并在Haskell中解析它们吗?

或者我可以用其他方式将它们与我的nodejs应用程序链接起来吗?在这种情况下,如何将数据从nodejs应用程序传递给Haskell?

我还担心延迟,这是一种实时计算,每次请求都会发生。

例如,facebook使用Haskell进行垃圾邮件过滤,一位工程师表示他们在该服务中使用c++和Haskell。。c++接受传递给Haskell的输入,Haskell返回信息。接口在这里是如何工作的?

What are the methods used to pass the data into the program ? Should the binary services be Daemon ?
  • 确切的方法取决于手头的确切需求和计划使用的软件组件。

  • 如果你正在寻找不同语言之间的互通,有多种方法。

基于Addons(用C++编写的动态链接共享对象)的方法提供了JavaScript和C/C++库之间的接口。外部函数接口(FFI)和动态库(.dlib)允许从宿主(node.js)语言中调用用另一种语言(rust)编写的函数。这将依赖于require()函数,该函数将加载Addon作为普通Node.js模块。

例如,节点ffi插件可以用于创建到本地库的绑定,而无需编写任何C++代码来使用纯JavaScript加载和调用动态库。基于FFI的方法也用于动态加载和调用导出的Go函数。

如果你想从python调用Go函数,那么你可以使用ctypes外部函数库来调用导出的Go函数

  • 如果您正在寻找一种架构的设计模式,该架构可以容纳由各种语言构建的模块和服务,这取决于您的确切应用程序&性能要求

一般来说,如果你想利用新兴技术(各种语言、框架)开发一个松散耦合的解决方案,那么基于微服务的架构可能会更有益。这将带来更多的独立性,因为模块/服务的变化不会对其他服务产生巨大影响。如果你的应用程序很大/很复杂,那么你可能需要使用微服务模式,比如";按业务能力分解";或";通过子域分解";。有许多与微服务模式相关的模式;每个服务的数据库";模式,其中每个服务将根据您的要求拥有自己的数据库,";API网关";基于客户端如何访问服务的模式("客户端发现模式"或"服务器端发现模式")和其他相关的微服务变体是可用的,您可以根据自己的需求进行部署。

该方法也应基于消息传递机制(同步/异步),微服务之间的消息格式应符合解决方案要求。

  • 对于近乎完美的设计,您可能需要对您的组件(软件和;并检查是否满足各种系统要求/性能度量,并相应地做出决定

使用微服务体系结构。微服务体系结构是一种将应用程序本身划分为各种组件的体系结构,每个组件都有特定的用途。现在,这些组件统称为微服务。组件不再依赖于应用程序本身。这些组件中的每一个都在字面上和物理上是独立的。由于这种令人敬畏的分离,您可以为每个组件(也称为微服务)提供专用的数据库,也可以将它们部署到单独的主机/服务器,此外,还可以为每个微服务提供特定的编程语言。

最新更新