在多租户部署(如共享托管环境)中,为每个租户创建一个沙盒非常重要。 如果没有沙盒,租户可能会有意或无意地通过访问其他租户的内容或垄断资源(如内存、CPU 和带宽)来对其他租户产生负面影响。
在 Windows Server 2012 上的 Internet Information Services (IIS) 上,沙盒的范围限定为 IIS 应用程序池。 它通过在单独的用户标识中运行每个租户来在 Windows 进程级别提供这两个安全边界,并且在此过程中也会强制执行资源限制。 在 Windows Server 2012 上,IIS CPU 限制功能使客户能够真正限制每个租户可消耗的 CPU 百分比。 此外,此功能是按 IIS 应用程序池配置的,这意味着每个租户可以有不同的限制,这可能会导致新的业务模型,即租户可以支付更多来获取更高的上限。 必须明确 IIS CPU 限制不是 CPU 资源的预留。 而是限制最大使用量的一种方法。 配置 CPU 限制
打开“IIS 管理器”。 在左侧导航窗口中选择“应用程序池”:
选择“DefaultAppPool”:
在“操作”窗格中,选择“高级设置”:
在“CPU”组下,找到以下配置:
Limit:指示此应用程序池的最大 CPU 使用率(以千分之一的百分比为单位)。 如果有多个进程与此应用程序池关联,则此上限会应用于此应用程序池下所有进程的 sum 总计。 LimitAction:指示在达到上述上限值时要执行的操作。
- 对于 Windows Server 8,添加了新操作“Throttle”和“ThrottleUnderLoad”:
- Throttle:此功能会将 CPU 消耗限制在为“Limit”设置的值以内。
- ThrottleUnderLoad:此功能会将 CPU 消耗限制在为“Limit”设置的值以内,但前提是 CPU 存在争用。 这意味着,当 CPU 空闲时,应用程序池可消耗更多的 CPU 活动。
LimitInterval:不用于“Throttle”和“ThrottleUnderLoad”。 此配置特性是从以前的 Windows 版本沿用下来的,以实现向后兼容性。
若要设置 30% 的上限,请输入:
- Limit:30000(千分之一的百分比单位下的 30%)
- LimitAction:Throttle
请注意,相关的配置设置可设置为默认值,这样就不必为每个应用程序池单独配置它们。 若要配置应用程序池默认值,请选择“操作”窗格下的“设置应用程序池默认值”:
那里公开了相同的设置以配置应用程序池默认值:
方案
请尝试部署以下方案: - IIS CPU 限制功能专为多租户环境而设计。 在有数千个站点和应用程序(例如共享托管部署)的环境中试用这些设置。
- 为租户的不同“组”设置不同的上限,以模拟那些被允许比其他客户消耗更多 CPU 资源的客户。
- 将 ThrottleUnderLoad 设置为 LimitAction 以观察行为。 如果 CPU 存在争用,则它的功能类似于“Throttle”。 如果 CPU 没有任何争用,则允许应用程序池使用超出为“Limit”设置的值的 CPU 资源。
- 创建具有内存和带宽上限的沙盒,以及 Windows Server 2012 上的 IIS CPU 限制功能。 本文档未专门讨论内存和带宽上限,因为这些功能存在于 Windows Server 2008 和 Windows Server 2008 R2 上。
总结
你已成功探索了 Windows Server 2012 中的 IIS CPU 限制功能。
|