Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
本文章由 Azure CAT 团队的 Rama Ramani 撰写。
“云服务基础”应用程序也称作“CSFundamentals”,展示如何构建数据库支持的 Azure 服务。在上一篇博客文章 DAL – RDBMS 的分区中,我们讨论了一种在数据库层中实施横向可伸缩性的技术,即分区。在本文章中,我们将讨论缓存的重要性、要考虑的因素,以及如何在 Windows Azure 中进行配置和实施。
分布式缓存架构在横向扩展的基础上构建,其中若干台计算机(物理机或虚拟机)将作为具有分摊工作负荷的固有分区能力的群集环的一部分。缓存为 <key, value> 查找范例, 它们的值为序列化的对象,这些对象可能是一个更为复杂的数据存储操作的结果集,如跨数据库中的多个表执行 JOIN 操作。因此,使用缓存, 就不用针对数据存储多次执行操作,而是针对缓存进行快速键查找。
了解什么内容适合被缓存
首先,您需要分析工作负荷并确定合适的缓存对象。数据缓存时,缓存和“数据源”之间的“过期”容错应在应用程序的可接受范围内。总体而言,缓存可用作参考(对于所有用户均为只读数据),如用户配置文件、用户会话(单个用户进行读写),或在某些情况下用作资源数据(使用锁定 API 让所有用户均可读写)。在某些情况下,特定的数据集可能并不适合进行缓存 - 例如,如果某个特定的数据集正在迅速发生变化、应用程序无法容许过期,或者您需要执行事务。
容量规划
下一步是估计应用程序的缓存需求。这需要查看一系列指标(刚好大于缓存大小),以制定最初的大小指南。
- 缓存大小: 可以使用对象的平均大小和对象的数量粗略估算所需的内存量。
- 访问模式和吞吐量要求: 读写组合显示了新对象的创建、现有对象的重新写入或对象的读取。
- 策略设置: 生存期 (TTL)、高可用性 (HA)、到期类型和逐出策略的设置。
- 物理资源: 除了内存,网络带宽和 CPU 利用率也非常重要。网络宽带可根据特定的输入进行估算,但大多数情况下,应对网络宽带进行监控,然后将其用作重新计算的基础。
可从 https://msdn.microsoft.com/en-us/library/hh914129 获取更详细的容量规划电子表格
Azure 缓存拓扑
下表列出了 Azure 上提供的 PAAS 选项集,并提供了简要说明
类型 |
说明 |
In-Role dedicated |
在专用拓扑中,可以定义缓存专用的 worker role。这意味着 worker role 的所有可用内存都可用于缓存和运行开销。 https://msdn.microsoft.com/en-us/library/windowsazure/hh914140.aspx |
In-Role co-located |
在co-located拓扑中,您可以使用应用程序角色上一定百分比的可用内存进行缓存。例如,您可以在每个 Web 角色实例上分配 20% 的物理内存进行缓存。 https://msdn.microsoft.com/en-us/library/windowsazure/hh914128.aspx |
Windows Azure 缓存服务 |
Windows Azure 缓存服务当前(2013 年 9 月)处于预览状态。下面是一些有用的链接 https://blogs.msdn.com/b/azchina/archive/2013/09/03/announcing-new-windows-azure-cache-preview.aspx https://msdn.microsoft.com/en-us/library/windowsazure/dn386094.aspx |
Windows Azure 共享缓存 |
多租户缓存(带有限制和配额)最晚将于 2014 年 9 月停用。可从 https://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<T> 和 PUT<T> 方法签名。
public interface ICacheClient
AzureCacheClient 实现了此接口,并引用通过 Windows Azure Caching NuGet 程序包进行添加的 Windows Azure 缓存客户端程序集。
创建DataCacheFactory 对象会建立与缓存角色实例的昂贵连接,因此将其定义为静态连接并使用 Lazy<T> 缓慢进行实例化。
app.config 已启用自动发现并且标识符用于正确指向缓存 worker role:
<autoDiscover isEnabled="true" identifier="CSFundamentalsCaching.WorkerRole" />
注意:要修改解决方案以使用新的 Windows Azure 缓存服务,请将标识符属性替换为在 Windows Azure 门户中创建的缓存服务端点。此外,API 密钥(可通过门户上的 Manage Keys 选项进行检索)必须复制到 app.config 中的“messageSecurity authorizationInfo”字段。
实施 GET<T> 和 PUT<T> 方法使用了 BinarySerializer 类,BinarySerializer 类又利用 Protobuf 类进行序列化和反序列化。protobuf-net 是Protocol Buffers的 .NET 实施,让您可以高效、轻松地对 .NET 对象进行序列化。通过 protobuf-net NuGet 包进行添加。
序列化为传入的参数 T 生成 byte[] 数组,然后将其存储在 Windows Azure 缓存群集中。为了返回特定密钥请求的对象,GET 方法使用反序列化方法。
本博客概述了缓存基础知识。有关详细信息,请参阅 CloudServiceFundamentals Visual Studio 解决方案中的 ICacheClient.cs、AzureCacheFactory.cs、AzureCacheClient.cs 和 BinarySerializer.cs。
本文翻译自:
Comments
Anonymous
October 16, 2013
谢谢 分享 !Anonymous
November 18, 2013
您好,我看到您们的这个网址: windowsazure.cn/.../free-trial “数据输出 25 GB”是指每月、每天、每小时还是说总共加起来只可以有 25GB 数据输出呢?

