当你真的搞砸了分布式系统的设计时该怎么办?

时间:2010-03-01 13:01:30

标签: distributed-computing

  

相关问题: What is the most efficient way to break up a centralised database?

我将尝试使这个问题相当普遍,以便让其他人受益。

大约3年前,我实施了一个集成的CRM和网站。因为我想给客户留下深刻的印象,我实现了我能想到的最廉价的架构,它是承载Web服务器上的中央数据库和网站。我创建了一个桌面应用程序,它通过Web服务与Web服务器通信(该应用程序从其主办公室运行)。

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

  1. 购买更快的互联网连接。
  2. 将数据库(和网站)移至内部服务器。
  3. 重新设计架构,以便CRM和Web数据库分开。
  4. 第一种选择是“最简单”,但肯定不是最便宜的长期选择。第二种选择;如果我们的网站移动到内部主机,客户端必须像打击超载/差/离线互联网连接,断电等,并最终选择的问题;客户端厌恶支付现金的整体失衡对我来说,重新设计和重新编码的架构,而我不能这样做免费的(我需要吃)。

    当你搞砸了分布式系统的设计时,还有什么方法可以恢复,没有任何选项可以工作吗?或者是减少损失并从错误中吸取教训的情况?我觉得很难解决这个问题。

6 个答案:

答案 0 :(得分:22)

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

    根据:

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

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

答案 1 :(得分:10)

除非:

,否则我不会称之为搞砸
  1. 众所周知,流量或性能要求会增加多少。和
  2. 您故意将系统设计为表现不佳。和
  3. 您故意将系统设计为刚性且不适应变化。
  4. 一个搞砸的事情就是过度设计一个高度复杂的系统,其成本高于当时所需的规模。

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

    当业务随着时间的推移而增长时,可能是在您的软件的帮助下,他们也为下一级别提供了一些东西。他们应该感谢你帮助他们发展超出预期的业务,并向你抛钱,这样你就可以帮助他们实现更高的发展水平。

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

    恭喜您帮助建立一个不断增长的业务,直到现在和将来。

答案 2 :(得分:4)

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

  • 互联网连接是责任,所以你会看到其他网站(例如谷歌)的这些超时,这显然是不可接受的,所以排序互联网是你唯一真正的选择。
  • 或者超时是由桌面应用程序,Web服务引起的,或者由于向前和向后传递过多的大量信息,在这种情况下,您应该解决性能问题,如何解决任何其他错误,或者研究优化桌面应用程序的方法,以便向后和向前传递较少的信息。

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

首先,您首先需要丢弃多少代码?您使用什么语言的桌面客户端?有点.NET,你可能能够挽救系统逻辑的好处,只需要重做UI和一些连接。

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

另外,既然你提到了一个Web服务就是你真的失去了用户界面吗?您总是可以重用Web服务器接口的Web服务。

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

答案 5 :(得分:1)

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