【发布时间】:2012-11-17 18:19:09
【问题描述】:
我知道已经有大量关于该主题的文档,但我只是在寻找一个简单的解释,即 Appengine 或其他一些提供的实例如何真正起作用。
如果应用的软件不复杂,我知道它是如何工作的,但是我对以下案例感兴趣。
假设我编写了一个程序来侦听端口 8888 上的传入连接?如果我在我的普通服务器上运行该服务器,它将打开端口 8888 并开始侦听,但理论上它只能接受 65.535 连接(因为任何系统上都只有尽可能多的端口可用)。在实践中,这个数字要低得多,但让我们谈谈理论。如果我想扩展该应用程序,我需要在局域网中添加另一台计算机,并提供一个负载平衡器,将传入连接均匀地加载到两台机器上。但问题还不止于此:如果传入的客户端需要访问彼此的数据怎么办,这意味着我还需要在后台同步数据库,所以两个服务器都保存了数据库中所有数据的副本(无论这可能是什么数据库)。这可能还需要对服务器进行额外配置并编写一段额外的代码以添加到服务器程序中。我们刚刚遇到了无数的问题,但让我们再次概述一下:
- 将另一台服务器添加到 LAN。
- 配置两台服务器以支持集群。
- 在服务器进程中编写附加代码以了解集群是否到位。
- 对传入连接进行负载平衡。
- 复制后端数据库中的数据。
但这还不是全部。如果我需要在两个用户需要实时聊天的情况下实现一个带有集群的双向通信聊天服务器怎么办?如果第一个用户连接到第一台服务器,第二个用户连接到第二台服务器,我将如何将数据从第一台服务器发送到第二台服务器,反之亦然,这是一个非常复杂的问题。这给表格增加了另一个问题:
- 连接到不同服务器的用户之间的实时通信。
上面的问题很复杂,不是那么容易解决的。我们需要无数个小时来思考它,并一点一点地解决它。但是像 Appengine/Amazon/Heroku 这样的解决方案说他们会照顾好这一切。所以这是我的问题。
-
各种提供的实例如何真正起作用,我对以下三个感兴趣:
- 应用引擎
- 亚马逊
- Heroku
他们如何扩展服务器应用程序,使其同时支持超过 65k 的连接用户?
他们如何保证即使运行更多实例,无论哪个实例从数据库中拉取数据,后端数据库中的数据都是相同的?
连接到不同实例的用户之间的实时通信真的可以正常工作吗?
-
如果所有软件都在某种硬件上运行,它们如何实现相同数量的实例以协同工作,这通常需要 10 个硬件服务器连接到一个集群。
我想对上述问题的解释确实可以帮助开发人员/程序员/管理员更好地了解实例的实际工作方式。如果我们不知道它是如何工作的,我想我们无法真正决定使用哪种产品。
谢谢
【问题讨论】:
-
您尝试阅读了多少这些“大量文档”?我敢打赌,你的问题已经很好地涵盖了。然而,云托管解决方案的重点在于您将这些问题变成了别人的问题。
-
而且无论如何您都无法在端口上打开连接。还没有。简短的回答是,您从一开始就考虑到可扩展性来编写应用程序,这意味着您最终会得到一个与非扩展版本非常不同的应用程序。这是一本在云端入门的好书>amazon.co.uk/Code-Cloud-Pragmatic-Programmers-Chu-Carroll/dp/…
标签: google-app-engine heroku amazon-s3 cluster-computing