本文章由 Azure CAT 团队的 Rama Ramani 撰写。
“云服务基础”应用程序也称作“CSFundamentals”,展示如何构建数据库支持的 Azure 服务。在上一篇博客文章 DAL – RDBMS 的分区中,我们讨论了一种在数据库层中实施横向可伸缩性的技术,即分区。在本文章中,我们将讨论缓存的重要性、要考虑的因素,以及如何在 Windows Azure 中进行配置和实施。
分布式缓存架构在横向扩展的基础上构建,其中若干台计算机(物理机或虚拟机)将作为具有分摊工作负荷的固有分区能力的群集环的一部分。缓存为
了解什么内容适合被缓存
首先,您需要分析工作负荷并确定合适的缓存对象。数据缓存时,缓存和“数据源”之间的“过期”容错应在应用程序的可接受范围内。总体而言,缓存可用作参考(对于所有用户均为只读数据),如用户配置文件、用户会话(单个用户进行读写),或在某些情况下用作资源数据(使用锁定 API 让所有用户均可读写)。在某些情况下,特定的数据集可能并不适合进行缓存 - 例如,如果某个特定的数据集正在迅速发生变化、应用程序无法容许过期,或者您需要执行事物。
容量规划
下一步是估计应用程序的缓存需求。这需要查看一系列指标(刚好大于缓存大小),以制定最初的大小指南。
可从 http://msdn.microsoft.com/en-us/library/hh914129 获取更详细的容量规划电子表格
Azure 缓存拓扑
下表列出了 Azure 上提供的 PAAS 选项集,并提供了简要说明
类型 |
说明 |
In-Role dedicated |
在专用拓扑中,可以定义缓存专用的 worker role。这意味着 worker role 的所有可用内存都可用于缓存和运行开销。 http://msdn.microsoft.com/en-us/library/windowsazure/hh914140.aspx |
In-Role co-located |
在co-located拓扑中,您可以使用应用程序角色上一定百分比的可用内存进行缓存。例如,您可以在每个 Web 角色实例上分配 20% 的物理内存进行缓存。 http://msdn.microsoft.com/en-us/library/windowsazure/hh914128.aspx |
Windows Azure 缓存服务 |
Windows Azure 缓存服务当前(2013 年 9 月)处于预览状态。下面是一些有用的链接 http://blogs.msdn.com/b/azchina/archive/2013/09/03/announcing-new-windows-azure-cache-preview.aspx http://msdn.microsoft.com/en-us/library/windowsazure/dn386094.aspx |
Windows Azure 共享缓存 |
多租户缓存(带有限制和配额)最晚将于 2014 年 9 月停用。可从 http://www.windowsazure.com/en-us/pricing/details/cache/ 获取更多详细信息。建议客户使用上面的一个选项来利用缓存。 |
实施详细信息
该 CSFundamentals 应用程序利用In-Role dedicated的 Azure 缓存来简化读取经常访问的信息 - 如用户配置文件信息、用户注释。In-Role dedicated部署为首选,因为它分离了缓存相关的工作负荷。然后可以通过性能计数器(CPU 使用率、网络带宽、内存等)和相应伸缩的缓存角色实例进行监控。
注意:实施 CSFundamentals 期间,新的 Windows Azure 缓存服务不可用。除 CSFundamentals 应用程序之外,如果需要使用缓存数据,这将是首选。
ICacheFactory 接口定义了 GetCache 方法签名。ICacheClient 接口定义了 GET
public interface ICacheClient
AzureCacheClient 实现了此接口,并引用通过 Windows Azure Caching NuGet 程序包进行添加的 Windows Azure 缓存客户端程序集。
创建DataCacheFactory 对象会建立与缓存角色实例的昂贵连接,因此将其定义为静态连接并使用 Lazy
app.config 已启用自动发现并且标识符用于正确指向缓存 worker role:
注意:要修改解决方案以使用新的 Windows Azure 缓存服务,请将标识符属性替换为在 Windows Azure 门户中创建的缓存服务端点。此外,API 密钥(可通过门户上的 Manage Keys 选项进行检索)必须复制到 app.config 中的“messageSecurity authorizationInfo”字段。
实施 GET
序列化为传入的参数 T 生成 byte[] 数组,然后将其存储在 Windows Azure 缓存群集中。为了返回特定密钥请求的对象,GET 方法使用反序列化方法。
本博客概述了缓存基础知识。有关详细信息,请参阅 CloudServiceFundamentals Visual Studio 解决方案中的 ICacheClient.cs、AzureCacheFactory.cs、AzureCacheClient.cs 和 BinarySerializer.cs。
本文翻译自:
http://blogs.msdn.com/b/windowsazure/archive/2013/10/03/cloud-service-fundamentals-caching-basics.aspx