对于需要“扩展”以处理容量的网站,应采取哪些最佳实践?现在人们正在考虑云,但可能会错过基本面,这尤其重要。

我有兴趣听到您认为您认为的任何最佳实践,从开发级任务,基础架构到管理层。

有帮助吗?

解决方案

并发设计

也就是说,当您进行编码时,请计划围绕多个线程进行。计划共享状态(通常只是DB)。计划多个过程。计划物理分配。

这使您可以在多个计算机上以及具有负载平衡的多个进程分配系统。它允许您在失败时运行冗余流程,如果您需要将系统定为就位,则无需杀死所有服务即可。

其他提示

您可能会考虑一些事情:

  • 分开数据存储的读取和写入端。
    • CQRS/事件采购
    • CQS
    • 消息通话/演员
  • 避免共享过程和线程状态
    • 因此避免锁定
    • 您可以通过创建类型,结构和其他数据类型,即不可变的类型系统来避免这种情况,即施工后不变。特别是对于复杂的抽象数据类型,它的工作原理非常出色(例如JQuery的实现)
  • 不阻止IO上的Web服务器线程。如果您使用的是ASP.NET使用APM模式/任务平行库(TPL)使用异步页/操作
  • 不保存用户会议词典中的状态负载
    • 当线程迁移发生在IIS中时,必须在线程中移动。
    • 具有智能路由,使得非固定/静态资源不会与添加开销的相同应用程序框架(例如ASP.NET)提供。例如,要看不同的Web服务器。
  • 用异步工作流图案(例如bind(haskell)/callcc/tasks.continuewith/f#s async)编写连续通码代码
  • 使用排队理论计算您的瓶颈可能发生的位置
  • 使用推送而不是基于拉的更新来读取模型和其他应用程序状态。例如通过兔子/nservicebus
  • 使用适用的最小功能的“ HTTP处理程序”
  • 对于静态文件,请提供电子标签和缓存到期策略,以使Web基础架构应尽其所能(例如,使用Squid代理)
  • (雇用我解决您的扩展问题并获得现场教程;))

没有共享架构。

考虑到这一点,与您可能想到的相反,不要立即跳入扩展解决方案。外部系统间接费用与系统呼叫不应不足。例如,在任何网络界面上建立DB连接要比进行本地调用要花费的时间更长。预算在规模范围内与真正的大型系统的额外$进行管理,权力和调整工作需要多少时间。

无论如何,我在“无共享”架构中仍然具有巨大的价值,您可以在时间到来时分层和扩展系统。

在几个主机名上并行化请求

HTTP标准的一部分是一个部分,该部分说WebClients将最多要求每个DNS主机2个会话。这是一个解决方案,您和别名www.domain.com并获得更高的请求并发,使您的页面加载更快:

https://stackoverflow.com/questions/3653609/how-do-i-i-code-my-asp-net-page-to-parallelize-downloads-across-hostnames

基本上,它涉及编辑您的ASP.NET HTTP处理程序,以交替您发送客户端的目标主机,每个主机都是“ www”的cname。

安全,快速,可靠的DNS

我使用注册商的DNS服务器找到了一些高容量的网站,这些网站没有正常运行时间或性能。此外,他们的服务器位于印度,仅延迟就增加了DNS Spoofer可能毒害客户或中级ISP的缓存的机会。这将导致您在不知情的情况下重定向您的SSL保护流量。

在记录缓存之前,DNS速度还会影响服务器的初始负载时间。

由于他们拥有相当稳定的DNS基础架构(尽管这很昂贵,而且我与这些公司没有其他隶属关系),所以我使用DynDN或Neustar。

我认为关键将很简单:

具有简单的代码。这意味着您看和理解的东西。当您扩展和更换服务器时,您需要知道发生了什么。您可能还需要添加需要快速理解的编码人员。调用不明显的随机代码的挂钩和XML文件非常糟糕。

然后,您可以测试并找到问题。

看这里: http://blog.servint.net/2013/08/27/访问big-how-to-to-scale-a-website-part-part-part-1-infrastructure-that-scales/

我们在 Stellarbuild尝试确保我们的网站不停机而扩展。 这意味着您需要能够知道您的代码的作用以及它在何处。即使您正在测试其他机器,也不能花太长时间的时间扩展。可悲的是,大多数人只有在为时已晚的时候才开始。在我看来,您只能进行优化。

许可以下: CC-BY-SA归因
scroll top