将我的Web应用程序编写为Haskell或Erlang等函数式编程语言是否会使其比J2EE更具可伸缩性?

use*_*116 2 erlang haskell functional-programming java-ee

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

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

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

C. *_*ann 12

两个半答案:

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

你确定你知道瓶颈在哪里吗?像这样的扩展引起的关注与较小的应用程序中的性能有很大不同.在开始先发制人的事情之前,确保你真的知道什么是坏的.无论如何,应用程序的体系结构可能对构建它的内容更为重要.

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


Jim*_*ans 5

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

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

扩展站点的主要方法包括群集和缓存以及数据库分片等.编程语言的选择是次要的,通常会影响每个盒子的原始性能.有关该领域的其他想法和背景,请参阅Henderson 建立可扩展网站和Schlossnagle的可扩展互联网架构.

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