gpt4 book ai didi

c# - 有多少网络服务

转载 作者:太空狗 更新时间:2023-10-30 00:12:03 26 4
gpt4 key购买 nike

我有一个如下所示的网络服务:

public class TheService : System.Web.Services.WebService
{
[WebMethod(EnableSession = true)]
public string GetData(string Param1, string Param2) { ... }
}

换句话说,它包含在一个类中,在那里,我有一个公共(public)方法,还有另一个私有(private)方法来读取数据库。

我面临的问题是可扩展性。我正在构建一个 Web 应用程序,该应用程序应该适用于 1,000 个日常用户,每个用户每天会对 Web 服务进行大约 300-500 次调用,因此每天大约有 300,000 到 500,000 个请求。我需要再添加 9 个对 Web 服务的调用。其中一些调用将涉及数据库写入。

我的问题是:我最好创建 9 个单独的 Web 服务,还是继续使用我拥有的一项服务并添加其他方法。或者可能是不同的、更好的东西。我计划在 Azure 上部署应用程序,因此我并不真正关心硬件,只关心应用程序方面。

最佳答案

我不会根据数量或性能/可扩展性原因做出决定。如果将它们集中在一起或分开,您不会获得太多性能优势。当服务以一种方式分组时可以完成的任何分组或过滤也可以通过以另一种方式分组的服务来完成。服务器之间的分区能力也将是相同的。

设计

相反,我会专注于努力使您的代码易于理解和维护。如何对您的服务进行分组,使它们在您的程序中在架构上最有意义。从问题域的角度(而不是解决方案域的角度),让它们按照最有意义的方式进行逻辑分组。

由于您可以按照自己的意愿对它们进行分组,因此我建议您阅读 SOLID ,这是一套创建软件架构的指导原则。

列出的特别重要的原则之一是 Interface Segregation Principle ,可以由 the notion that "many client specific interfaces are better than one general purpose interface." 定义

性能和可扩展性

既然您提到性能和可扩展性是一个问题,我建议您遵循以下计划:

  • 确定可以等待多长时间才能修补/维护软件
  • 确定您的预期负载,包括每次的平均负载和峰值负载(您已经确定了平均值),以及您预计此流量随着时间的推移会增长多少(特别是在您无需修补/维护的时间段内)软件)
  • 创建一个模型,准确描述将执行哪些调用以及执行比例(每次和每台服务器)
  • 创建尽可能准确地反射(reflect)这些模型的自动化。尝试对平均流量和峰值流量进行建模,并超越最高规模的流量
  • 在运行此自动化过程时分析您的代码、数据库、网络流量和磁盘流量
  • 确定瓶颈,以及它们是否在可接受的容差范围内
  • 优化您的瓶颈(根据需要),然后从分析步骤开始重复
  • 您的软件的下一个版本,从顶部重复添加场景/加载/自动化
  • 使用现有测试执行回归测试,并进行修改以适应新的规模

关于c# - 有多少网络服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8004728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com