Google云平台:我的架构解决方案是否正确?

时间:2017-09-30 21:42:12

标签: java google-app-engine

我正在尝试制作简单的应用程序并将其部署在Google Cloud Platform Flexible App Engine上,该应用程序将包含两个主要部分:

  1. 前端应用程序(基于Java 8(Spring + Thymeleaf)的简单Web UI以及来自不同外部站点的OAuth授权)
  2. 后端应用程序(在单独的线程中监视多个资源,基于登录用户并以某种方式对其输入做出反应(行为更改))
  3.   

    最初我计划将它们作为一个应用程序,但我认为潜在的大量后台处理可能会导致我的前端应用程序部分失败+ App Engine文档说部署的服务行为类似于微服务架构。

    我的问题是:

    1. 如果我需要尽快对用户输入做出反应,我真的需要将前端与后端分开吗? (但延迟最多2秒并不重要)
    2. 如果我确实需要将它们分开(我非常相信我这样做) - 如何在应用程序之间设置交互?
    3. 每个资源必须由后端的一个线程完全跟踪 - 有关此问题的最佳做法是什么?我想过有一个带有获取资源列表的SQL表,但我看到的缺陷是如果一个实例失败,我需要在该表上进行某种清理并重新确定实际获得的资源。

2 个答案:

答案 0 :(得分:1)

您提出的体系结构听起来像是将两者分成不同服务的正确方法,原因如下:

  • 可以单独为每个单独的回滚版本部署代码,并分别为实验或分阶段部署分割流量。
  • 可以调整每项服务的机器类型和内存分配,以更好地满足其需求。如果您在后端执行内存密集型工作,则可以调整该服务的设置以为每个实例分配更多内存。

  • 允许每种类型的服务根据需求独立扩展,从而更好地利用服务并减少浪费。与单一整体服务中的单一尺寸适用方法相比,这也应该降低您的总体支出。

  • 您可以跨服务混合不同的运行时环境。例如,您可以在项目中混合语言运行时,或者甚至可以在标准和灵活环境之间进行混合。假设您的前端代码在标准中更具成本效益,将该服务指定为标准环境服务,将您的后端指定为灵活的环境服务。或者说你需要一个带有Perl的客户docker文件,你可以将它作为一个灵活的环境自定义运行时来实现,并在Java 8中使用你的前端。

  • 您仍然可以在内存缓存中共享Cloud SQL,PubSub,Cloud Tasks(目前处于alpha)或Redis等常用服务。您的作品不需要驻留在App Engine中,如果更适合您的需求,它们可以驻留在不同的产品中。

总的来说,您可以更好地控制应用程序以将其拆分。最大的好处可能取决于优化您的应用程序,仅根据您的需求进行支出。

答案 1 :(得分:-1)

  1. 我认为您可能能够将所有内容部署为appengine应用程序,除非您使用一些非白名单的外来Java库。使用计算引擎部署它可能仍然可以提高可配置性和多功能性。
  2. 您可以在计算引擎中创建一个前端实例和一个后端实例,并在它们之间划分资源。谷歌的文档有一个例子,你可以做到这一点。