1

如今,我们在可扩展性方面有很大的争议,构建一个可以处理数百万个请求的应用程序。有许多库旨在帮助您开发可扩展的应用程序,但毕竟只有几种方法可以扩展您的应用程序(这些库只是为您提供围绕它们的包装器):

  • 有一个专用的任务队列(它可以是显式队列,也可以是隐含的),并且有一个或多个线程来处理队列中的任务
  • 在服务器之间分配执行(负载平衡/分片)

这就对了。这个假设正确吗?或者还有其他方法可以实现“可扩展”架构?问题的重点是验证是否只有有限的集合(从根本上)来扩展应用程序,而库/工具只是帮助您实现它们。

4

3 回答 3

0

从负载均衡器向下一步进入各个服务器。

无论应用程序需要节省使用的线程数量,以便操作系统的调度程序花费尽可能少的 CPU 周期来确定最高优先级的线程。执行此操作的一种机制是 I/O 完成端口,可在 Windows 和一些 Unix 版本中找到。在 SO 上搜索 IOCP。

节省对共享资源(通信、数据库、总线、RAM 和 L3 缓存等)的访问,并尝试将线程和数据放入非共享资源(L2 和 L1 缓存)中,从而使应用程序更具可扩展性如果这些访问被忽略。有许多多线程应用程序运行速度比单线程应用程序慢的示例。

确定一个 SOAP 或 XML 格式的请求应该做什么是 CPU 密集型的 - 文本越多,工作就越大。如果应用程序使用二进制请求,它将有更多的资源用于执行请求,并且花费更少的时间来理解请求本身。冗长请求和响应的另一个方面是它们吞噬了通信带宽。一兆字节的响应需要大约十兆字节的带宽。这是一秒钟内 100 Mbps 连接容量的十分之一。因此,它会将您的响应能力限制为每秒最多 10 个响应。你要一千?您需要不超过 10 kB 的响应。

如果您的应用程序足够快,如果它需要转到另一台服务器来执行部分请求,它将被阻止。即使对于光纤互连也是如此。SAN 比物理连接的存储慢。

于 2014-11-03T13:19:34.443 回答
0

可扩展架构需要解决 N 层单体应用程序中如此普遍的耦合问题,SOA 正在尝试解决这个问题。

通过分布,使用异步通信(使用消息传递),垂直切片(自治)组件,不共享资源(包括数据),您可以实现可伸缩性和持久性,这是一个很大的话题......

我建议你阅读Udi Dahan 的博客

NServiceBus是一种与 SOA 一致的解决方案,可以帮助您构建可扩展的持久系统。

于 2014-10-22T17:59:53.263 回答
0

在我以前去过的一家公司中,有这样的架构,所以

这个假设正确吗?

我想是的。该公司规模相对较大,并且拥有令人印象深刻的专业知识。您可以考虑他们最重要的产品架构之一,如下所示:

                   ______________
               ->    API1: 1000 
                   --------------
______________     ______________      ______________       |    |
LoadBalancer   ->    API2: 1000     ->   CacheServer   ->   | DB |
--------------     --------------      --------------       |    |
                   ______________
               ->    API3: 1000 
                   --------------
于 2014-10-22T08:58:42.163 回答