一起谈.NET技术,云计算和数据

这篇博客对在云计算解决方案中操作数据进行总览性的介绍。

概览

对于绝大多数解决方案而言,数据都是至关重要的一部分。在云计算里面,绝大多数现成的建议都可以直接拿来用。但是云计算也有其独特之处。这篇博客将讨论以下两个用例:

  • 将你存放在云中的数据发布至全世界
  • 在云端的项目中使用你本地的数据。

通用的建议

无论是哪种用例,这些建议都是通用的。

选择一个拓扑

在SOA的世界中,最重要的一个概念就是契约(contract)。在云计算的世界中,有关通信的最重要的概念也是契约。当一个契约被很多云计算解决方案使用之时,我们就可以把它称作一个拓扑了。

现在我们只讨论数据通信。如果你选择了微软的解决方案,我们推荐你使用Open Data Protocol (OData)。OData是基于诸如HTTP和AtomPub的国际标准创建的,它提供了一个跨平台的数据通信的方案。如果你云端的程序使用OData来发布数据,这个世界上的任何一个程序,只要是支持OData标准,就都能享用你的数据。同理,你云端的程序也能使用OData来访问你本机的数据。

很多目前的微软产品已经在应用OData了。例如:windows Azure Table Storage,Dallas,SharePoint 2010,SQL Server 2008 R2,等等。

如果你打算使用其他的拓扑,有必要仔细思考它们的可伸缩性,有多少人在使用它们,等等。

选择一门技术

既然拓扑已选定,下一步就是选择一门技术来实现这个拓扑了。

如果你选择了微软的解决方案,我们推荐你使用WCF来处理所有程序间的通信。针对数据通信,WCF Data Services自然是最好的选择。

首先,WCF Data Services是WCF服务,所以你可以使用所有现有的WCF知识。其次,WCF Data Services已经实现了OData拓扑,于是你可以致力于你的数据格式在你的程序中的表示,而不是AtomPub/JSON这些真正在网络上传递的数据格式。再有,WCF Data Services致力于数据传输,而不是数据存储。你的数据可以存放在任何位置:本地的数据库,云端的数据库,外部的web services,xml文件,等等。无论数据是怎么来的,你都可以用同样的方式来发布/使用它们。

如果你选择了其他技术,有必要仔细考虑使用该技术的需要花费多少精力来完成你的解决方案,该技术能否提供将来的解决方案扩展,等等。

接下来我们来看看微软的产品如何帮助你们完成上述两个用例。

将你存放在云中的数据发布至全世界

许多云计算解决方案都不是孤立的,它们需要和外部世界交互。说到数据,你很可能直接了当的反应出来DaaS (Data as a Service,数据即服务)。

云计算的数据可以存放在许多地方,而且数据本身也是非常多样化的。本文将致力于讨论结构化的数据(例如xml),以及关系型数据(例如关系数据库)。当前微软提供了两大产品用于在云中存放数据。

  • Windows Azure Table Storage:用于存储结构化数据。使用动态架构 (dynamic schema)。
  • SQL Azure:用于存储关系型数据。使用静态架构(fixed schema)。

下面这张表格比较了静态架构和动态架构各自的优势。


静态架构


动态架构


关系型数据库,例如SQL Azure


Windows Azure Table Storage


经过了几十年验证的可靠架构


高度可扩展性(统一的存储,但是不同的程序可以使用不同的数据结构)


可以使用许多现成的工具


基于OData Web 协议


可以使用O/R Mapping方便的在OO编程语言中操作数据


体现出了动态语言(dynamic languages)的优势

针对你具体的场景,请选择一个合适的数据存储方式。通常来说,如果你的服务对外部世界开放了写的权限(允许外部世界更新数据),动态架构是一个比较好的选择,因为第三方的程序很有可能需要适当的修改你提供的数据结构。然而目前Windows Azure Table Storage还有一些局限性,它并未实现OData所有的功能,再加上关系模型已经有了好几十年的经验,你的开发人员也很可能非常熟悉关系模型,所以如果对你而言使用动态架构成本太高,请选择静态架构。

无论你选择了何种架构,OData和WCF Data Services都能起到非常大的作用。

刚才已经说过,WCF Data Services可以使用任意的数据源。它默认就提供了两种数据提供者:ADO.NET Entity Framework (EDM)和LINQ to SQL (L2S)。如果你使用的是这两种数据源,通常只需要写一小部分代码即可完成一个项目。如果你选择SQL Azure存放数据,你就可以使用EDM和L2S做数据源。

如果你使用了其它数据源,(例如Windows Azure Table Storage),你需要将你的数据模型转换成WCF Data Services理解的模型。如果你的数据是只读的,这个过程就很简单,因为你只需要写一个很普通的类来表示你的数据结构。如果你需要完整的CRUD功能,就必须实现IUpdatable这个接口。这被称作“Reflection provider for WCF Data Services”。在更高级的场合中,你还可以使用“Custom Data Service Providers”。详细信息可以参考http://msdn.microsoft.com/en-us/library/dd672591(VS.100).aspx

Windows Azure Table Storage本身也是使用OData拓扑,所以你可能会试图让你的客户直接访问你的数据源。但是在绝大多数的场合下,请不要这样做。你必须竭尽全力保护你的storage账号的key(把它想象成你的密码)。如果你将自己的密码给与一个受你信任的用户使他/她能直接访问你的Table Storage,而他/她滥用了这份权限,到最后,使你必须支付你的storage账号的费用。我们推荐用户将数据和业务逻辑封装成服务,使用WCF Data Services就是完成这一任务的很好选择。

你可以从All-In-One Code Framework (Azure).zip 中下载一个示例,它演示了如何使用WCF Data Services将存放在Windows Azure Table Storage中的数据发布至全世界。示例的名称是:CSAzureTableStorageWCFDS/VBAzureTableStorageWCFDS该示例也提供了一个Silverlight客户端用于测试服务。

在云端的项目中使用你本地的数据

另一个常见的场景就是在云端的项目中使用你本地的数据了。绝大多数场合下,这些数据都使用了静态架构存储于关系型数据库中(例如SQL Server),所以你通常不会考虑如何存储数据。在这个场景中,你更关心的是可连接性以及安全性。

很多公司都有防火墙和NAT。很难找到一台机体,既可以自internet访问,又拥有一个固定的IP地址,所以要在云端的程序直接连本地数据库也就很难了。权限控制也是一个问题。云端的程序并不在你的公司的局域网中,和数据库不在同一个域里,要使用集成Windows验证是不可能的,而federated验证目前还没有针对数据库提供很好的解决方案。

为了解决第一个问题,微软提供了Windows Azure platform AppFabric Service Bus。Service Bus就好比你本机服务和云端程序之间的桥梁,本地服务对于Service Bus而言其实是一个客户端,所以即使本地服务器位于NAT之后,它还是可以和Service Bus交流。Service Bus会把你云端程序发送的消息传达给你本地的服务。

Service Bus同时支持TCP和HTTP。大多数防火墙至少是允许outbounding连接通过80/443端口的,而这也正是Service Bus的最低需求。这样一来,Service Bus便可以穿越NAT和防火墙。

安全是一个很复杂的话题,本文不准备详细探讨。但是有必要指出,Windows Azure platform AppFabric Access Control在很多场合下都是很有帮助的,而且它默认就和Service Bus集成。

当然,OData和WCF Data Services在这个用例中也很有帮助。

你可以从All-In-One Code Framework (Azure).zip 中下载一个示例,它演示了如何使用Service Bus和WCF Data Services在云端程序访问本地的SQL Server数据。项目名称是:CSAzureServiceBusWCFDS/VBAzureServiceBusWCFDS。这个项目也提供了一个ASP.NET客户端用于测试服务。你可以很轻松的将这个客户段转换成一个Windows Azure的Web Role,真正的在云端进行测试。

时间: 2024-08-26 00:55:12

一起谈.NET技术,云计算和数据的相关文章

一起谈.NET技术,从数据到代码—基于T4的代码生成方式

在之前写一篇文章<从数据到代码>(上篇.下篇)中,我通过基于CodeDOM+Custom Tool的代码生成方式实现了将一个XML表示的消息列表转换成了相应的C#代码,从而达到了强类型编程的目的.实际上,我们最常用的代码生成当时不是CodeDOM,而是T4,这是一个更为强大,并且适用范围更广的代码生成技术.今天,我将相同的例子通过T4的方式再实现一次,希望为那些对T4不了解的读者带来一些启示.同时这篇文章将作为后续文章的引子,在此之后,我将通过两篇文章通过具体实例的形式讲述如果在项目将T4为我

一起谈.NET技术,从数据到代码—通过代码生成机制实现强类型编程[下篇]

在<上篇>中,我们实现了将保存有消息条目的XML向CodeDOM的转换,即是将XML文件生成一个CodeCompileUnit对象,而该CodeCompileUnit对象反映出来的DOM层次和我们将会生成的代码文件向匹配.在下篇中,我们将实现整个代码生成系统的第二个步骤--通过VS的Custom Tool实现数据(保存消息条目的XML)向代码文件的自动转换. 一.让MessageCodeGenerator继承BaseCodeGeneratorWithSite 在<上篇>我们创建了M

一起谈.NET技术,c#数据库存取图片的三种方式

第一种方式   文件夹与数据库配合 近来做了不少关于这块的功能 ,随着网络的飞速发展,网络存取图片已不再是神话,而成为了一种时尚,如果是你 是用Asp.net开发的话,可能更多的人会考虑使用数据库存储图片的路经,而在文件夹是存储图片的方式.这种方式主要的方法有两个一个就是怎么样读取图片,怎么样存储图上,读取的话我就不多说的这个是最简单的了,只要大家把地址=给存储图片的对象就行了,在取的时候一般要使用相对地址也就是"~" 如下所: ImageUrl="../CardDeal/S

一起谈.NET技术,Flex 数据访问 WebService (上)

Flex 支持格式设置为 SOAP 消息且通过 HTTP 传输的 Web 服务请求和结果.SOAP 提供基于 XML 格式的定义,用于在 Web 服务客户端(如使用 Flex 构建的应用程序)和 Web 服务之间交换结构化和类型化信息. 在.NET和Flex的数据交互可以通过Web Services访问string,object,datatable,List<>,ArrayList等. .NET和Flex的数据示例: 1.返回对象 定义返回对象的Web Method: [WebMethod]p

一起谈.NET技术,C#数据本地存储方案之SQLite

即使是做网络应用,在断线情况下,也需要考虑数据的本地存储.在SQLite出现之前,数据量大的情况下,我们一直使用ACCESS,数据量小,则文件存储.ACCESS不支持事务原子性,在断电情况下(这种情况总是会发生)会导致数据很难恢复. 一:安装 SQLITE,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统.我直接使用的是http://sqlite.phxsoftware.com/(An open source ADO.NET provider for the SQLite databas

一起谈.NET技术,Flex 数据访问 WebService 使用参数(下)

上一篇介绍Flex的WebService的使用,可以调用多种类型的数据,都是直接调用,没有使用参数,本篇学习使用参数调用WebService,WebService的参数类型可以是:简单类型(如数值,字串串等),简单实体模型(只有属性),比较复杂的实体模型(内陷其他实体),以及集合,XML等. Flex在调用不同后台实现的Web Method方式只是在构造参数有些区别,调用方式是一样的,以下简单介绍Flex调用.NET的Web Method使用不同参数.       定义Web Method用到的

北京官员硅谷谈云计算布局 内蒙古有望成最重要云计算大数据基地

"我国的云数据中心建设需要合理规划",在日前硅谷举行的"北京云计算国际高层论坛" 上,北京市经济和信息化委员会姜广智处长在回答观众提问时谈到.同时,他认为,在云计算发展带来的能耗.成本的压力下,内蒙古有望成为我国最重要的云计算大数据中心基地. 云计算作为时下IT互联网行业最热门的领域之一,在全球受到广泛关注和热烈追捧.我国"十二五"规划纲要及<国务院关于加快培育和发展战略性新兴产业的决定>,均强调云计算是新一代信息技术产业的最重要组成

八大行业CIO谈云计算大数据落地真相

假设互联网可以为学生提供优质的免费教育资源,那么所有大学就得回答家长一个问题--凭什么向学生收费.什么是最好的资源? 在2014年5月22日晚间的 "云计算大数据行业CIO沙龙"上,上海大学信息化办公室主任徐伟抛出了这样一个尖锐的话题.的确,随着MOOC(Massive Open Online Courses,大规模网络在线开放课程)的发展和普及,传统的教学模式正在被打破.运用云计算和大数据,MOOC可以让一门课程一个学期拥有100万学生,而且是网状化的学习模式.这种全新的知识传播模式

浅谈云计算与数据中心计算

云计算概念发端于Google和Amazon等超大规模的互联网公司,随着这些公司业务的成功,作为其支撑技术的云计算也得到了业界的高度认可和广泛传播.时至今日,云计算已被普遍认为是IT产业发展的新阶段,从而被赋予了很多产业和产品层面的意义.由于意义多重,各种概念纷繁复杂,众多公司和从业人员的眼中都有自己的一朵云,正如徐志摩在<偶然>一诗中所说:"我是天空里的一片云,偶尔投影在你的波心". 传统的系统设计考虑的主要是单机环境,而云计算主要考虑的环境却是数据中心.从单机到数据中心,