【问题标题】:Creating NodeJS microservices that are invokable from Android app创建可从 Android 应用程序调用的 NodeJS 微服务
【发布时间】:2017-08-14 23:24:29
【问题描述】:

对于我在大学的最后一年项目,我决定研究微服务,特别是可以由 Android 应用调用的微服务。

我想创建一个微服务来查询一个 API,该 API 抓取任何新数据或对已存储的现有对象的更改。关于数据存储,我想尝试看看是否可以缓存数据服务器端然后将其提供给客户端?或者将该数据存储在本地数据库中,然后从中读取以显示在客户端上?

应用程序本身将使用 Java 编写,而微服务将在 Node 环境中运行/编写。

我读过一些书,很多人都说要使用 RESTful 或 API 网关之类的。

任何反馈都将不胜感激!

干杯

【问题讨论】:

    标签: java android node.js microservices


    【解决方案1】:

    从运行在您的服务器或云上的 NodeJS 创建 RESTful Web 服务并让 JAVA Android 应用程序使用这些服务是可能的。

    另外:因为您要制作微服务系统,所以实际上您不必担心后端的技术,因为这是我们采用微服务的好处之一。

    你可以拥有任何东西!为您的客户端提供 API 以使用服务。例如,您将拥有 4 个服务。其中两个可能使用 NodeJS,一个可能使用 Python Flask,另一个可能使用 JAVA Spring。甚至数据存储也可能有所不同,因为如果它是微服务,最好拥有自己的数据库。

    无论如何,当我们谈论微服务时,我们会想到另一个不同的术语,即所谓的单体架构。阅读完之后,与微服务相比,您会看到很多关于这种风格的提及。

    我建议阅读有关微服务的书籍和论文。他们中的大多数都提到了单体的问题以及为什么我们需要转向微服务。你可以在https://scholar.google.com/微服务搜索中找到它们

    Martin Fowler 对微服务的定义如下:

    微服务架构风格是一种将单个应用程序开发为一组小服务的方法,每个小服务都在自己的进程中运行并与轻量级机制(通常是 HTTP 资源 API)进行通信。

    我可以参考@rsp 的评论:

    要拥有微服务,您实际上需要拥有多个 Node 应用程序,每个应用程序负责一小部分功能。否则你只有一个服务,而不是微服务。

    因此,对我来说,微服务更多的是关于设计一个系统。以下是关键问题:

    • 如何设计我的系统
    • 我选择了哪些好的微服务原则(您可以遵循最佳实践或自行开发)
    • 我通过调查应用程序的功能获得的上下文集是什么 (DDD: bounded-context)
    • 将实施哪些服务集以及每个服务服务于什么上下文
    • 当我拿到设计时,我不得不思考:是太大还是太小
    • 服务如何相互通信
    • 等。 (您在阅读材料时也会遇到更多问题)

    还有更多关于微服务的内容。我建议阅读

    希望您在研究和构建微服务时玩得开心! :D

    【讨论】:

    • 谢谢!我一定会考虑到所有这些,你对问题的分解真的很有帮助——尤其是我的很多工作都会被记录下来:)
    【解决方案2】:

    这是一个非常合理的项目。您可以从 Android 应用程序访问任何 RESTful 服务。您甚至可以实时使用 WebSocket 或 TCP 或任何您想要的。您的服务只需要可通过 Internet 访问即可。

    使用一个好的框架会帮助你解决这个问题。需要考虑的一些框架:Express、Hapi、Restify、LoopBack、ActionHero。更多选项在这里:http://nodeframework.com/

    通常的 REST 架构如下所示:您的服务器使用 REST 约定侦听来自客户端的 HTTP 连接。请求中的数据可以作为 JSON 或 form-urlencoded 传递。响应中返回的数据通常是 JSON。您的客户端连接到各种端点并获得响应。

    但要拥有微服务,您实际上需要拥有多个 Node 应用程序,每个应用程序负责一小部分功能。否则你只有一个服务,而不是微服务。

    如果您有多个 Node 应用程序,每个应用程序都在侦听不同的端口,或者在不同的主机上运行,​​那么您可以在它们前面使用一些反向代理服务器将请求分派到正确的微服务,这样您的客户端就不会不必了解您的内部架构。通常使用的是 nginx,但您也可以编写另一个 Node 应用程序来充当代理,这取决于您。

    【讨论】:

    • 谢谢,这太棒了!这让我对可以完成这项工作的可用框架有了更多的了解。
    猜你喜欢
    • 2019-09-20
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多