【问题标题】:Static website with microservices? [closed]带有微服务的静态网站? [关闭]
【发布时间】:2016-12-26 08:01:27
【问题描述】:

因为我是个便宜货,前几天我有一个想法,用 AWS 每月运行一个不到 5 美分的网络应用程序:

  • 通过 S3 提供静态网站 (html/css/javascript)
  • 客户端代码和表单通过 API Gateway 发布到 Lambda golang 微服务
  • 使用 DynamoDB(25 读取/秒、25 写入/秒、25GB、1GB/mo 输入、1GB/mo 输出)作为数据库

此方案是否适用于 cookie 和基于会话的身份验证,因为页面由一个域名 (S3) 提供服务,但 javascript 正在与另一个域名 (API 网关) 通信?

我可能会遇到哪些其他问题?

【问题讨论】:

  • S3 不会为您提供 cookie,因此您必须使用 document.cookie 从 JavaScript 读取和写入 cookie。
  • 谢谢,我认为我实际上并不需要访问 javascript 中的 cookie,只需将其通过 AJAX 调用发送到 API Gateway。 HTML 页面(由 www.example.com 提供)将包含一个登录表单。该表单发布到 API Gateway (api.example.com/login),后者通过 HTTPS 返回一个 HttpOnly cookie。从那里,对 api.example.com 的 Javascript XMLHttpRequest 调用应该包括 cookie,对吧?
  • 没错。只要您的所有 API 端点都在同一个域上,这应该可以工作。

标签: amazon-web-services amazon-s3 amazon-dynamodb aws-lambda static-site


【解决方案1】:

使用“无服务器”架构需要牢记的一点是:

如果‘这东西’真的起飞会怎样?

大多数人不会考虑当您的网站变得超级受欢迎或受到 DDOS 攻击时,Lambda 或 DynamoDB 的请求率会达到多高。

与您的请求率一样,您的总费用也会在这些事件期间出现显着飙升。因此,对于低成本确实很重要的“小型项目”,我通常建议保留一些小型 VM 来处理加工。虽然高请求率或 DDOS 可能会使您的服务不堪重负并导致您的服务中断,但您可能不会被巨额账单所击中。

虽然无服务器在设置方面非常方便,但它很容易反击,比预期的要困难得多。

注意:如果您确实发现自己的账单高于预期,请联系您的云提供商。根据具体情况,他们中的一些人可能愿意帮助您一次性支付部分费用。

但要准备好详细解释发生的事情。我还建议拥有服务日志(不仅针对您的应用程序),还针对您正在使用的任何云服务。

【讨论】:

    【解决方案2】:

    Mike Roberts 写了一篇关于无服务器架构及其权衡的非常详尽的文章:http://martinfowler.com/articles/serverless.html

    还发现了一个专门为此设计的框架,它在 AWS 上运行:https://serverless.com/

    但是,目前看来,不支持持久连接(例如 websockets),这对我来说是个大问题。我怀疑 AWS 最终会让 API Gateway 为 websocket 服务并将其消息发送到 Lambda,但截至今天这似乎是不可能的。

    【讨论】:

      【解决方案3】:

      我完全按照您提出的设计运行多个 Web 应用程序,并提取了 gofaas,一个教育性的 Go 和 Lambda 应用程序,以分享这些技术。

      可以使用 CloudFront 和 Lambda@Edge 身份验证函数为静态站点客户端设置 cookie。

      使用 API Gateway CORS 配置可以允许静态站点与 API 对话。

      最后,这依赖于 JSON Web 令牌 (JWT) 来安全地表示您的用户、静态站点和 API 之间的授权声明。

      这里有一些设置指南:

      Static Website Security with Lambda@Edge and Google OAuth 2

      API Security with Lambda, API Gateway, CORS and JWT

      【讨论】:

        猜你喜欢
        • 2016-01-14
        • 2018-04-16
        • 2018-10-23
        • 2018-09-14
        • 1970-01-01
        • 2013-03-21
        • 1970-01-01
        • 2020-05-05
        相关资源
        最近更新 更多