用Haskell或Erlang等函数式编程语言编写我的Web应用程序会使它比J2EE更具可扩展性吗?

时间:2010-02-26 00:00:15

标签: java-ee haskell functional-programming erlang

我正在编写一个Facebook应用程序,它将使用Postgres数据库和Facebook API并在Amazon EC2上运行。 (我希望有重载)

使用Java,我知道数据库将是我的主要瓶颈,而Tomcat的并发性限制将成为次要瓶颈。我可以通过水平扩展缓解缓存和并发问题的数据库问题。 (但这会增加我的EC2成本)。

在这种情况下,Erlang或Haskell如何提供帮助? (假设我能够掌握学习曲线)。

3 个答案:

答案 0 :(得分:12)

两个半答案:

你有用户吗?不是吗?然后使用任何可以帮助您更快地启动项目的东西。如果必须,您可以随时重写内容。 “太多用户”是大多数人想要拥有的问题,但却没有。如果您有充分的理由期望快速建立庞大的用户群(例如,您运行一个受欢迎的博客并希望您的许多读者立即加入),则可以担心这一点,否则您就是在借用问题。

您确定知道瓶颈会在哪里吗?这样缩小会引起与小型应用程序性能差异的问题。在开始先发制人的事情之前,确保你真的知道什么是破碎的。无论如何,应用程序的体系结构可能对构建它的内容更为重要。

也就是说,如果你想这样做,Erlang或Haskell都可以工作,但可能不会对你提出的问题产生巨大的影响。有很多其他的理由让他们更喜欢Java,但是......

答案 1 :(得分:5)

我会看看http://www.highscalability.com并查看如何将应用程序扩展到越来越大的负载的案例研究。特别是在那里搜索Brad Fitzpatrick关于他如何缩放LiveJournal和Danga Interactive的描述(例如,this 2005 presentation)。

你对数据库是第一个瓶颈然后网络服务器的直觉可能是正确的,但当然你需要测量。

扩展站点的主要方法包括群集和缓存以及数据库分片等。编程语言的选择是次要的,通常会影响每个盒子的原始性能。有关该领域的其他想法和背景,请参阅Henderson的Building Scalable Web Sites和Schlossnagle的Scalable Internet Architectures

话虽如此,功能语言可能有助于提高整体可扩展性。 Twitter used Scala以提高后端性能。 Scala是一种JVM语言,它结合了面向对象和函数样式,支持Actors并发模型,并且几乎以Java的速度运行(Martin Odersky,Scala的创建者,也编写了当前的Sun Java编译器)。因此,如果您遇到并发瓶颈,可能需要在Java中添加一些Scala。

答案 2 :(得分:-4)

当已经将瓶颈定义为与代码无关时,选择不同语言无法显着加快应用程序而非Java等编译语言。大多数函数式语言都比Java有更多的开销,因此如果你已经熟悉Java,就必须有一个令人信服的理由转而使用它。