2012-03-16 54 views
-2

我有一个非常基本的要求。客户将发送/张贴一些信息(少于1KB)到我的网站。客户端不需要确认从服务器收到的数据。服务器需要将这些信息保存到某种数据库中以备将来使用。可伸缩网站的最佳设计(具体请求详细说明)

我需要设计一个系统,可以扩大和接收客户端发出的所有通知。我预计最高点击量为5-10百万用户(每日),最高负荷为100k。这些数字有点高,但这些将继续增加。

设计此类系统的最佳方法是什么?还有什么是坚持这种信息的最佳方式?我愿意接受任何技术,但更喜欢java。

P.S.这是iOS Apple推送通知的一部分。

+0

我不介意-1问题,但请提及相同的原因,以便我可以改进未来的问题。 – Atul 2012-03-16 11:33:45

回答

3

从你所描述的,这个相当平凡的应用程序中唯一真正重要的部分是数据库插入。运行在Tomcat或Jetty上的普通旧servlet应该足以满足应用程序部分的需求,我不明白为什么一个体面的服务器(4核,4-6g内存)不应该能够处理至少20k次/分钟和100k并发会话,假设您有IO带宽来支持这一点。

更重要的将是数据库。我肯定会选择一个专用的数据库服务器,具有相当数量的RAM和CPU以及快速硬盘。

看到你如何使用廉价或免费的东西来设置大部分,我会建立一个原型验证概念来测试性能。如果您没有物理服务器,请设置几个Amazon EC2实例,安装tomcat和mysql,构建一个接收信息并插入数据库的简单servlet。用负载压一下,看看会发生什么。

+0

+1在EC2上的多台机器上进行测试是一个好主意。您可以从微型实例和ESB驱动器开始,以便进行初始设置,然后仅在实际基准测试期间将该ESB切换为功能更强大的实例。 – 2012-03-16 11:23:11

+0

完全写完这个问题后,我也开始认为瓶颈将在数据库端。有时候编写完整的需求有助于正确理解它。感谢您的投入。 – Atul 2012-03-16 11:32:26

1

在我看来,这句话在你的描述:

“客户端将发送/发布一些信息(小于1KB)到我的网站没有要求客户大约从服务器接收数据的确认。 “。

让我想到Mongo DB作为持久性机制。可以将Mongo DB配置为不返回写入确认的快速写入。而且,配置Mongo人将数据库和应用程序称为“碎片”的功能也很容易,可以将单个集合(大致相当于SQL Table)有效地分布到不同机器上的多个mongo实例。