导航菜单

性能优化模式(6)——避免蚊子大炮模式

“使用大炮对抗蚊子”原本是有点矫枉过正,但仔细想想,用大炮对抗蚊子,成功率不高。对于开发工程师来说,一方面为了快速开展业务,根据程序重用的原则,尽可能地使用现有系统,使系统功能越来越强大;另一方面,提高系统的多功能性或可重用性性也是工程师设计系统的重要目标。由于这两个过程是相互独立进化的,因此可以在任何地方看到使用通用解决方案来解决具体问题,并且据说它就像一门大炮来对抗蚊子。大炮的成本很高,蚊子的数量很多。最后的结果往往是蚊子击败了大炮。

“避免蚊子加农炮模式”是经济学原理在运行时系统中的应用。它需要最节省资源(CPU,内存等)的方法来解决所面临的问题,浪费资源将来会带来潜在的风险。当工程师收到需求时,他们不仅要考虑如何重用现有系统,还要考虑缩短开发时间。他们还需要考虑现有系统的运营成本来处理每个新需求,以及新需求的期望。视图。否则,不加歧视地使用现有系统不仅会增加重新配置的风险,还会增加交叉影响,从而影响现有系统支持的服务。另一方面,在构建可重用系统时,工程师必须确定无法解决且不建议的问题,并在文档中识别不建议的问题中的潜在风险。

我们的挑战是在移动用户附近找到商业信息。美国集团拥有非常完整的搜索系统和高级搜索工程师。因此,当系统需要查找附近的业务时,第一种解决方案是调用搜索服务。但是,在美国组中,太多服务具有基于LBS的查询要求,这导致搜索请求的线性增加。这不是搜索的主要业务,但它成为一段时间内最受欢迎的搜索来源。搜索引擎在如何从成千上万的商家中找到最近的几百个商家方面非常差,因此在一段时间内,搜索服务经常发出警报。不仅搜索服务可用性受到影响,而且所有依赖LBS的服务的可用性也大大降低。

在分析系统后,我们认为更适合求解最短线性距离的算法应该是kd树。在快速实施基于kd树的LBS搜索解决方案后,我们可以轻松解决超过30个具有4台服务器的搜索服务器。问题是,平均响应时间从峰值的100ms减少到300ns,性能提高了数百倍。

避免蚊子加农炮模式的问题类似于数据局部模式,这与最小可用原则相冲突。在系统设计的初始阶段,寻求最佳解决方案通常意味着过度工程化。整个项目在时间和成本上变得无法控制,找到每个问题的最佳解决方案是不现实的。优化原则的要求是全面的,不仅要考虑运行时资源,还要考虑工程师的资源和时间成本,这些成本往往是矛盾的。在下列情况下,避免蚊子大炮模式的好处是有限的:在可预见的将来,某个业务请求非常小,并且找到最佳技术解决方案需要花费很多精力并不明显。

在设计阶段,避免使用蚊子加农炮模式是一种权衡选择,需要工程师在开发成本和系统运营成本之间保持平衡。当许多功能集成到通用系统中并且出现性能问题时,分割每个功能点的影响并不容易。因此,单独部署和共享代码库的原则可以快速定位问题。然后有针对性地解决“蚊子炮”的问题。一般来说,在设计阶段,避免蚊子加农炮模式是工程师分析和设计的重要标准。工程师可以暂时解决潜在的问题,但了解潜在的危险非常重要。要构建可重用的系统或解决方案,请务必确定无法解决且不建议的问题,并避免过度使用。

http://data.dinkop-umkm-bmt-garut.com