将Web应用程序的进程划分到多个服务器上

时间:2015-04-08 07:02:15

标签: performance server load-balancing distributed-computing database-performance

我认为分布式系统是正确的术语。

目前我正在开发一个webapp。我在本地开发它,当它进入Beta时,它将在一台机器上运行,可能是Linode服务器。

问题是,该应用程序将根据用户请求处理和处理大量数据,并且将在执行数据处理的服务器后台运行全时运行的大量脚本。在Beta测试期间,不会有大量用户使用此系统,因此一台计算机可能有足够的资源来运行应用程序。

但是我无法想象在机器上缩放这个应用程序。因此,未来我将不得不在分布式系统中传播应用程序。

我不知道这涉及到什么!并且很难在网上找到关于这个主题的简单材料。

我对如何划分它有了想法。该应用程序由一个PHP框架,一个MySQL数据库组成,并有一些Python脚本将永远运行,处理自动化任务和数据处理。

也许每个单独的部分都有自己的机器,一台机器上的PHP,这是处理用户请求和相关处理的机器,自己机器上的数据库,以及在自己的机器上运行的Python脚本。

但我完全不知道如何实现这一目标!

我真正想要的是,如果你们能够提供一些简单的解释,或者总体概述,你将如何在多台机器上划分应用程序。涉及的技术,一般概念,任何东西!

任何帮助或讨论非常感谢!感谢

1 个答案:

答案 0 :(得分:2)

这是一个巨大的主题领域,总共列出的选项太多了。但是在很高的层面上,有几种方法根据用例而有所不同,并规定了一些可以使用的技术。

首先,最重要的是,您需要考虑数据如何流经系统。它是同步还是异步系统?这意味着,当请求进入您的Web应用程序时,是否需要向后台进程发出额外请求并等待结果?或者后台进程可以异步执行它的操作吗?

听起来这是一个异步系统。对于此用例,日志记录可能变得至关重要。使用Apache Kafka(分布式日志)之类的东西来存储将异步处理的事件是很常见的。在这种类型的工作流程中(不知道您的特定用例),Web应用程序可能会将一些数据写入Kafka主题,而另一组计算机上的使用者(您的Python进程)将从该主题消耗并处理消息。 Kafka将处理在消费者之间均匀分配负载。当然,也有很多类似的消息传递技术。

对于网络应用,您只需将负载均衡器放在运行该应用的一组服务器前面。

这是一个简单但非常有效的架构,可以根据您的需求进行扩展。如果您的处理过于密集,大多数架构都会集成更重的分布式处理框架,如Hadoop(批处理),Storm(流)和Spark(批处理和流),但这些技术非常复杂且具有很高的学习曲线,尤其是你没有分布式系统的运行开始。

最后,有一些非常好的分布式系统框架,如Vert.xAkka,通过抽象位置和通信细节,大大简化了构建此类微服务架构的过程。

这是一个非常流行的分布式日志概念及其用例的介绍: The Log: What every software engineer should know about real-time data's unifying abstraction