gpt4 book ai didi

google-app-engine - Appengine/Amazon/Heroku 实例如何工作?

转载 作者:行者123 更新时间:2023-12-04 05:23:46 26 4
gpt4 key购买 nike

我知道已经有大量关于该主题的文档,但我只是在寻找一个简单的解释 Appengine 或其他一些提供的实例如何真正起作用。

如果应用的软件不复杂,我知道它是如何工作的,但我对以下案例感兴趣。

假设我编写了一个程序来监听端口 8888 上的传入连接?如果我在普通服务器上运行该服务器,它会打开端口 8888 并开始监听,但理论上它只能接受 65.535 连接(因为任何系统上的可用端口都一样多)。在实践中,这个数字要低得多,但让我们谈谈理论。如果我想扩展该应用程序,我需要在局域网中添加另一台计算机,并提供一个负载均衡器,以便在两台机器上均匀加载传入连接。但问题并不止于此:如果传入的客户端需要访问彼此的数据,这意味着我还需要在后台同步数据库,因此两台服务器都持有数据库中所有数据的副本,该怎么办? (无论这可能是什么数据库)。这可能还需要对服务器进行额外配置,并编写一段额外的代码以添加到服务器程序中。我们刚刚遇到了无数问题,但让我们再次概述它们:

  • 将另一台服务器添加到 LAN 中。
  • 配置两台服务器以支持集群。
  • 在服务器进程中编写额外的代码以了解集群是否就位。
  • 负载平衡传入连接。
  • 复制后端数据库中的数据。

  • 但这还不是全部。如果我需要实现一个带有集群的双向通信聊天服务器,其中两个用户需要实时聊天,该怎么办?如果第一个用户连接到第一个服务器,第二个用户连接到第二个服务器,我将如何将数据从第一个发送到第二个,反之亦然,这是一个非常复杂的问题。这给表格增加了另一个问题:
  • 连接到不同服务器的用户之间的实时通信。

  • 上面的问题比较复杂,不是那么容易解决的。我们需要无数个小时去思考,然后一点一点地解决它。但是像 Appengine/Amazon/Heroku 这样的解决方案表示他们会处理这一切。所以这是我的问题。
  • 各种提供的实例如何真正起作用,我对以下三个感兴趣:
  • Appengine
  • 亚马逊
  • Heroku
  • 他们如何扩展服务器应用程序,使其同时支持超过 65k 的连接用户?
  • 他们如何确保即使有更多实例正在运行,无论哪个实例从数据库中提取数据,后端数据库中的数据都是相同的?
  • 连接到不同实例的用户之间的实时通信真的能像他们应该的那样工作吗?
  • 如果所有软件都在某种硬件上运行,它们如何实现相同数量的实例来协同工作,这通常需要 10 个硬件服务器连接到一个集群。

  • 我想对上述问题的解释确实可以帮助开发人员/程序员/管理员更好地了解实例的实际工作原理。我想如果我们不知道它是如何工作的,我们就无法真正决定使用哪种产品。

    谢谢

    最佳答案

  • 各种提供的实例如何真正起作用?

    Appengine:像流程基础一样工作。你没有真正的服务器。 App Engine 将尝试使用它的云架构师为您的 Web 服务提供服务,并计算您使用了多少资源,例如多少 cpu 时间、数据库查询、Web 请求等。您不需要做任何事情来扩展或扩展它。

    Amazon(EC2 实例):您创建并运行实例,然后像普通物理服务器一样使用它。像物理服务器一样扩展和架构。您可能需要 Amazon S3 用于存储和 Amazon RDS 用于数据库。

    Heroku :Heroku 实例调用 dyno。每个 dyno 服务于每个工作服务,例如Web 进程、后台进程、调度程序进程。例如,如果您创建 1 个 web dyno,就好像您有 1 个 apache web 服务器,其中有 1 个正在运行的进程来为您的网站提供服务。每个服务请求需要在处理下一个请求之前完成,队列请求超时为 30 秒。您可以根据需要创建任意数量的 dyno。 Heroku 带有 postgresql,您需要为缓存大小付费。
  • 对于可扩展性,我已经在之前的答案中提到了如何扩展。

    用于支持超过 65k 的连接。您可以创建任意数量的实例来为任何连接提供服务。
  • 数据库存储在单独的系统中。根据您的描述,我认为您的应用程序在每台服务器上都有单独的数据库。但是当您转向 PaaS 时,就像您在后端有一个数据库一样。每个实例都将连接到同一个数据库,以确保无论实例用户连接到何处,您都将获得相同的数据。
  • 这取决于您如何构建应用程序。例如,如果您使用以下流程创建聊天应用程序:
  • 发件人
  • 发件人客户端向聊天服务器发送消息
  • 聊天服务器将消息存储到 DB
  • 接收器
  • 接收器客户端从聊天服务器拉取更新消息
  • 聊天服务器从数据库获取更新消息
  • 聊天服务器向接收者发送更新消息

  • 通过上述流程,您无需担心每个用户连接到哪个实例,因为每个用户将始终从同一个数据库中获取相同的数据(可能会延迟对数据库的读/写,但最终用户将获得相同的消息)。
  • 您不需要这样做,因为您有 1 个数据库。在后端,您可以根据需要扩展数据库的大小和功能,但前端到应用程序将是相同的。
  • 关于google-app-engine - Appengine/Amazon/Heroku 实例如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13429217/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com