【问题标题】:Web services are scalable, right?Web 服务是可扩展的,对吗?
【发布时间】:2011-11-13 13:40:25
【问题描述】:

我想有一个相对简单的问题,在网上搜索后,我已经知道了一些答案,但需要更多建议。我是幕后数据库管理机制的新手。

我想使用 REST Web 服务与移动用户(手机用户,主要是 Android 和 iPhone)进行通信。 Web 服务是用 C# 编写的,并通过简单快速的查询(如 SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees WHERE City = 'London')查询 Microsoft SQL Server 2008 数据库——所有这些字段都被索引以实现最高速度。 Web 服务是“按调用”的,这意味着它们是无状态的,理论上非常可扩展。

不过,我的问题是 Web 服务将由第三方托管,例如 GoDaddy。我过去使用过这个第三方,并且他们提供一些简单的 Web 服务没有问题,每分钟点击一两次,但是如果我开始每分钟有 100000 人访问它们,会发生什么?我问过他们,我认为他们并没有真正理解这个问题(或者他们可能理解了——但我不确定),他们只是说:'如果你的带宽超出了你的带宽,只需以我们 xx 美元的价格购买更多/MB 每月等。但我想在这里问某人:我的解决方案是否可扩展?我问这个是因为有人说要购买服务器——但对于初学者来说,我不想这样做,除非我确定这个第三方无法满足我的需求。

所以,具体来说:REST Web 服务,用 C# 编写,传递 XML,由 Microsoft SQL Server 2008 托管,每次调用,缓存的数据库和 Web 服务方法,并由第三方托管(您支付它们的费用)每月 XYZ 带宽),并且涉及简单、具体、快速的 SQL 查询——这种设置是否可扩展?它每秒可以处理 2000 次点击吗? 20000? (当然假设您向托管这些 Web 服务和数据库的第三方支付更多带宽) 我在某处读到 Microsoft SQL 服务器每秒可以处理 2000 个连接,但我不确定这是否正确或是否适用?我知道 Web 服务不限于访问单个数据库——或者我错了吗?如果 Web 服务受一个数据库的限制,我可以重写我的代码,以便使用两个或多个数据库(即,有一个连接字符串,所以如果“伦敦”是 SQL 查询城市,那么使用数据库 #1,如果“巴黎”是城市,使用数据库 #2 等)。这是真的吗?

对不起,如果这个问题对您的数据库专业人员来说太简单了,但您必须从某个地方开始。提前谢谢你。

【问题讨论】:

  • 可扩展是什么意思?
  • 理想情况下,我希望不必担心使用 GoDaddy 托管我的 Web 服务的“幕后”所做的事情。也就是说,我在单个数据库上获得的来自世界各地人们的点击次数越多,GoDaddy 就会“弄清楚”如何让一切正常工作,也许他们甚至不必拆分数据库?例如,您可以在 SQL Server 2008 中轻松容纳 20 亿条记录(每个用户 1 条),是吗?既然这个数据库在设计上没有并发问题,那么有什么问题呢?随着越来越多的人 ping 数据库,GoDaddy 会向我收取越来越多的费用,对吗?这是可扩展的吗?

标签: database performance web-services


【解决方案1】:

最简单的答案就是没有简单的答案。

当您说“每秒 20000 次”点击时,您指的是平均数还是峰值? 20000 是一个 /huge/ 的数量,由一组机器提供比单台机器更好。

数据库查询很慢。尽量减少它们的使用量。

开始考虑代理服务器,例如 nginx 或 varnish

消除对基于会话的代码的依赖,并尽可能提供静态内容

缓存,缓存,缓存。

但我想最好的建议是:从小处着手,慢慢成长。

【讨论】:

  • "当您说“每秒 20000 次”点击时,您是在谈论平均数还是峰值?20000 是 /huge/ 数量,并且由一组机器提供比单机。” - 谢谢,我害怕那个。也许每秒 2000 次点击更像它?但我对数据库的工作方式了解不够,无法理解您的评论。例如,如果您在 Azure 上部署解决方案,会有所不同吗?因为理论上(从我看到的 Powerpoint 广告中)Azure 会为你扩展?重新代理服务器——那只是一个花哨的缓存?如果可以的话,我会尝试静态内容。
【解决方案2】:

在您的描述中,您没有任何东西会引发“不可扩展”的大警报,但在您实际尝试之前,您无法知道您的解决方案的可扩展性。

【讨论】:

  • 好的,谢谢。支持这种设计的可扩展性的另一个因素是不会出现数据库并发问题——两个用户很少会同时访问相同的记录。
猜你喜欢
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 2011-10-03
  • 2011-04-02
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
相关资源
最近更新 更多