12

相关问题: 分解集中式数据库的最有效方法是什么?

我将尝试使这个问题相当笼统,以便对其他人有益。

大约 3 年前,我实施了一个集成的 CRM 和网站。因为我想给客户留下深刻印象,所以我实现了我能想到的最便宜的架构,即在 Web 服务器上托管中央数据库和网站。我创建了一个桌面应用程序,它通过网络服务与网络服务器通信(这个应用程序从他们的主办公室运行)。

事后看来,这是相当愚蠢的,因为现在公司已经发展壮大,他们的互联网连接每个月都变得越来越慢。现在,由于速度问题,桌面软件定期超时,客户有 3 个选择:

  1. 购买更快的互联网连接。
  2. 将数据库(和网站)移动到内部服务器。
  3. 重新设计架构,使 CRM 和 Web 数据库分开。

第一个选择是“最简单的”,但肯定不是最便宜的长期。第二种选择;如果我们将网站转移到内部托管,客户必须解决诸如互联网连接过载/不良/离线、断电等问题。最后的选择;客户不愿意为我支付一大笔现金来重新设计和重新编码架构,而我负担不起免费这样做(我需要吃饭)。

当您将分布式系统的设计搞得如此糟糕,以至于所有选项都不起作用时,有什么方法可以恢复?还是减少损失并从错误中吸取教训?我感到很糟糕,没有快速解决这个问题。

4

6 回答 6

22
  1. 你没有搞砸。客户想要最便宜的选择,你给了他们,这是他们推迟的成本。我希望你没有责备你的客户。如果他们责怪你,这是他们在想要一辆梅赛德斯的同时支付雪佛兰的经典案例。

    据此:

  2. 您的客户需要就该做什么做出业务决策。你的工作是以尽可能诚实和专业的方式向他们解释每个选择的后果,并将选择权留给他们。

请记住,你没有搞砸! 您为他们提供了一个满足他们多年需求的解决方案,他们对此感到满意,直到他们超出了系统的设计基础。如果他们不想在三年后再次保持系统的可扩展性,那么他们现在就必须愿意为此付费。软件不是魔术。

于 2010-03-01T13:10:10.290 回答
10

除非:

  1. 众所周知,流量或性能要求会增长多少。和
  2. 您故意将系统设计为性能不佳。和
  3. 您故意将系统设计为僵化且不适应变化。

一个错误是过度设计一个高度复杂的系统,其成本超过当时的规模要求。

事实上,最好的做法是只投资企业目前可以利用的尽可能多的资金,如果需要,利用增长为可扩展性的进一步投资提供资金。这是简单的风险管理。

当然,随着业务的增长,大概在您的软件的帮助下,他们也为下一个级别预留了一些东西。他们应该感谢您帮助他们的业务发展超出预期,并向您投钱,这样您就可以帮助他们实现下一个增长水平。

所有这三个选项都可能很好。哪一个最好取决于成本效益分析、投资回报率等。这部分是技术决策,但主要是商业决策。

祝贺您帮助建立一个不断发展的业务,直到现在,以及未来。

于 2010-03-01T13:10:52.787 回答
4

您确定超时的原因是互联网连接,而不是 Web 服务/CRM 系统中的一些性能问题吗?通过超时,我假设您的意思是大约 30 秒,在这种情况下:

  • 要么互联网连接是罪魁祸首,因此您会看到其他网站(例如谷歌)的此类超时,这显然是不可接受的,因此对互联网进行分类是您唯一真正的选择。
  • 或者超时是由桌面应用程序、网络服务引起的,或者由于过多的信息来回传递,在这种情况下,你应该解决性能问题,你可能会遇到任何其他错误,或者寻找方法优化桌面应用程序以减少来回传递的信息。

排序:您目前拥有的架构对我来说似乎(基本上)很好,基于(除了性能问题)公司对 CRM 系统的访问应该与公众对系统的访问相当——只要你客户有合理的响应时间,公司也应该如此。

于 2010-03-01T13:16:49.480 回答
2

在本地网络上安装数据库的副本。然后让客户端软件与本地副本通信,让数据库软件在本地数据库服务器和webserver上的数据库之间进行同步。这取决于您使用的数据库,但其中一些具有使该工作正常的工具。在 MSSQL 中,它被称为复制。

于 2010-03-01T14:18:49.843 回答
1

首先,你真的要扔掉多少代码?您的桌面客户端使用什么语言?一些 .NET 的东西,你可能能够很好地挽救系统的逻辑,只需要重做 UI 和一些连接。

我的想法是 1 和 2 是不可能的,而 1 可能是一个好主意,它并不能解决真正的问题。作为工程师,我们应该尽可能尝试构建不依赖于客户的解决方案。并且 2 使他们进入他们不是专家的领域,最好将托管保留在其他地方。

另外,既然您提到了 Web 服务,那么您真的会失去 UI 吗?您始终可以为 Web 服务器接口重用 Web 服务。

最后,您可以考虑使用一个框架来帮助提供一个简单的基于 Web 的 CRUD,然后从那里开始扩展。

于 2010-03-01T13:10:48.443 回答
1

您确定连接已饱和吗?您可能会遇到各种网络、I/O 和数据库问题……除非您已经这样做了,否则请使用 wireshark 分析流量;测量吞吐量并与我们分享结果。

于 2010-03-01T14:41:06.117 回答