云计算设计模式指南系列(0) – 背景简介及内容提要

  大家好。这个博客很久没有更新了,这半年多来在工作重心上有所变动,现在主要还是研究Azure以及服务端开发这块了。不过最近WindowsApp方面的变化的确令人激动,今后在App开发这块应该还会持续关注。我们准备开始撰写若干篇关于云计算以及Azure的博客文章,暂定名《云计算设计模式指南》,这是第0篇,主要是给大家介绍一下我们的想法以及作为系列文章的目录。   首先必须向Patterns & Practices(模式与实践,P&P)小组及其Cloud Development系列致敬。我们希望有更多的开发者能够关注到P&P的Cloud Design Patterns: PrescriptiveArchitecture Guidance for Cloud Applications。该系列中包含了24个云计算设计模式以及10个通用场景的设计指导。这里所讲的设计模式并不是指类似经典GoF的设计模式的侧重面向对象、软件工程方面的设计指引,而是联系云计算环境的一些特质和优势所作出的架构设计层次最佳实践。可贵之处在于,事实上其中涉及到Azure的功能、服务方面的内容并不占太多篇幅,更多的只是在描述某个场景的最佳实践的同时,提及对应的在Azure中能通过哪些服务组件来完成目标。所以该系列文章老少咸宜,不管开发者关心的是不是Azure或是.Net,都将从中受益。   言归正传,正值Azure在中国大陆正式商用一周年之际,我们最近也在构思一系列的关于Azure以及云计算架构设计方面的中文博客文章,内容主要来自于平时的实践和积累,所以在引用和翻译到一些Azure官方和非官方的文档资料的同时,还会尝试加入一些个人的观点、学习笔记以及样例代码、项目。早些在学习前文所提到的Cloud Design Patterns系列的时候就已经向几乎身边所有关心Azure的同事朋友强烈推荐阅读。   我们在日常工作中接触到不少国内外的Azure用户,主要还是把Azure平台当做IDC托管机房来用,没有或者来不及考虑利用一些Azure所提供的非常优秀的特性和服务来优化开发和降低运维成本。现在提笔写这个系列文章的最主要的一个动机是希望更多的开发者在接触到云计算特别是Azure的时候,除了IaaS 的VM、Networking等基础设施的迁移之外,能够在开发设计层面重新审视一下当前的实现和架构是否已经充分利用到了云平台的优势,是否能够适应分布式计算存储、易伸缩等架构特性。   以下是我想到的内容大纲,不保证坑会被完全且按次序在接下来几个月中填满,但一定尽力。   Cache-Aside。考虑将一个传统Web 服务的满足横向扩展(scale out)的特性并迁移到云端的第一步往往是检查其缓存机制,这里并不是指狭义上的页面缓存或是数据缓存,而是包括了应用逻辑是否会依赖于某个特别计算实例内的磁盘内容、内存对象、全局变量和缓存数据等等。Azure提供了多种缓存服务但当前官方推荐的是使用Redis Service,不仅功能强大而且Client API通用,我们可以通过Linux或Windows Server VM来部署自己的Redis服务。   Competing Consumer,Priority Queue,Queue-based Load Leveling Pattern,SchedulerAgent Supervisor Pattern等多方消息传递和分发的相关模式。不同节点之间的通讯消息,在经过队列Queue或主题Topic的缓冲和分发之后,能够极大程度上提高消息传递的效率和可靠性。Azure中消息队列服务我们一般会用到Service Bus。消息传递是个非常大的主题,我们将联系实例场景用最基础的代码演示Service Bus对以上这几个经典场景模式的实现。   Retry pattern。在公有云的环境中,整套解决方案中所涉及的包括虚拟机、网站、存储、数据库、消息队列等等服务可能散落在多个机柜甚至数据中心,而各个服务所在的物理宿主可能被多个实例共享,数据包也可能会被高负荷的网络所临时阻塞。所以在服务间互相调用的时候会有一定几率临时性地产生一些极短暂的错误(transient error),而这些错误往往并不是服务器这段的问题,且只需毫秒级别的等待重试就能解决问题。为了程序能够平稳运行,我们需要能识别这些transient error并加入重试Retry的相关机制。   Cost Effectiveness Design成本效益最大化设计。了解Azure的计费模式介绍、制定缩放计划、识别缩放单元Scale Unit、通过Management API进行自动化操作和管理将会显著降低运维成本,这些特性也是云平台同托管机房的最大的优势。而在功能实现层面,我们可以通过Azure平台或SDK内建的诊断工具(Diagnostics)集中记录和分析服务的运行情况,以分析最优的部署和缩放方案。同时某些细节功能的优化实现也能提高服务接口的吞吐量,更高效合理地利用带宽和存储资源。   NoSQL非关系型数据库实践。同传统关系型数据库相比,主流的NoSQL解决方案在可扩展性、高可用性、并发查询等方面有极大优势,键–值的基本存储和查询方式也允许表内数据结构可变(Schema…

0

NFC 与 Windows Phone 的那点事儿

说起NFC这个词儿应该已经不陌生了,在我们的生活中有很多使用场景都是使用的这项技术,例如公交卡,门禁,还有银联的闪付卡等等。并且近些年在移动设备上使用的场景也越来越多,例如 对 NFC TAG 的读写,对 NFC+蓝牙 耳机音响的支持,还有手机和手机之间的数据交换场景。 说起NFC这项技术其实也不算新奇了,许多手机都支持例如,Nokia、三星、SONY、HTC、小米都有机型硬件支持NFC的功能。在应用商店中搜索NFC也可以找到不少 NFC 相关的应用,但是目前来讲使用率还是个问题,不管怎样今天我还是想在这里为大家 分享一下在 Windows Phone 平台中对NFC功能的技术支持情况。对不对的请大家参考一下,多多提些意见。 从NFC在手机上支持的场景上看大致分为三种模式(点对点模式,主动模式,被动模式) 首先说一下点对点模式,点对点模式实际上就是在两台手机上都同时打开NFC后,将手机进行触碰(实现 Touch and Connect就是一个典型场景),通过NFC的数据交换,可以引导不同设备进行连接,例如应用和应用间的 Socket,蓝牙耳机、音响 (基于蓝牙配对)。这部分内容请参考我之前的文章 近场通信 NFC / Bluetooth Proximity   主动模式 (读/写 卡模式) 就是在移动设备中NFC模块产生射频场从外部采用相同标准的NFC标签中读写数据。这里面有一个典型的使用场景就是在Android手机上使用支付宝为公交卡充值。 或者从应用当中通过NFC读取银行卡的消费记录 以上两个场景都是属于主动模式,在 Windows Phone 生态系统中也不乏对NFC前景看好的朋友研究过此类功能。在 Windows Phone 8.0 SL 的框架下开发由于SDK的限制不能使用除了NDEN以外的通信格式。所以不能支持此功能,但是在现在的 Windows Universal 框架下 Windows Phone 8.1 可以通过Windows.Devices.SmartCards.SmartCardReader,Windows.Devices.Enumeration.DeviceInformation等SDK实现此功能,但是要有一点要注意的是和类似公交卡这样的NFC设备进行交互还需要手机硬件NFC芯片的支持,特需NXP PN547芯片 只要配置此种芯片的手机就可以实现 多种协议的NFC卡片交互例如:MIFARE Classic/Ultralight/DESfire 如果我没记错的话 公交卡是第一种。目前在Windows Phone…

0

Windows Phone 8.1 Update1 支持中文“小娜”及开发者模拟器更新

千呼万唤的 Windows Phone 8.1 Update1 在 developer Perview 发布了还没有升级的朋友随我先睹为快吧。升级了的盆友来看看 WP8.1 update1 还有哪些你不知道的功能。当然这里包括我们一直念叨的中文版 Cortana。 首先介绍一下 Windows Phone 8.1 New features 1. Cortana 中文版不用多说,升级后尽情的调戏吧。(做开发的朋友参考 如何将 Cortana 与 Windows Phone 8.1 应用集成 ) 2. Live Folders ( 暂且翻译成 动态文件夹吧 ):原因很简单,即使将应用的 Tile 放到文件夹后也可以保持 live Tile的特性,并且可以调整 Tile 的大小。   3. Store Live Tile(应用商店动态磁贴):应用商店可以显示最新的应用情况。(每六小时更新一次)     4. 信息的多选和转发功能: 增加了信息的多选并且可以选择新建消息和多选删除。 5. Apps…

0

如何将 Cortana 与 Windows Phone 8.1 应用集成 ( Voice command – Natural language recognition )

随着 Windows Phone 8.1 GDR1 + Cortana 中文版的发布,相信有很多用户或开发者都在调戏 Windows Phone 的语音私人助理 Cortana 吧,在世界杯的时候我亲测 Cortana 预测德国和阿根廷的比赛很准的。(题外话扯远了),可是作为开发者我们怎么将Cortana集成到应用中呢,今天我用一点时间给大家介绍一下如何使用 voice command 集成 Windows Phone 8.1 的应用。 首先要明确两个名词 Voice command & Voice Command Definition 即 VCD文件,相信做过windows Phone 8.0 开发的朋友应该有所了解,通过注册VCD文件 Windows phone 8.0 的应用当中就可以实现 voice command 的功能,如果你不了解请先读一下我之前的文章(这里我就不在过多介绍 8.0 Voice command 的重复内容了),Windows Phone 8 语音 – Speech for Windows Phone 8 快速了解一下Windows…

0

A new stable version: A Private Windows Store project codename ‘BootyBay’ has been published to Codeplex!

Update June, 2014 Sorry for the long waiting! Finally we published the latest version of this POC onto codeplex. Actually most of the work has been done in April or earlier. Actually it is a kinda internal project so for some reasons we have to serve it internally.  We created a dedicated demo site with corresponding services…

0

Windows Phone 8.1 开发技术概览 (Universal APP)

前一阵真的比较懒 WP8.1 已经出来这么长时间了现在才更新BLOG让大家久等了,今天我先为大家介绍下 WP 8.1的开发框架,什么是微软所推崇的 Universal APP,以及我们要开发 Universal APP的时候要注意哪些内容。 如果是您是一个刚刚接触 WP开发的朋友可以先看下我之前的文章了解一下故事背景:Windows Phone 8 与 windows 8 开发技术概览 首先给大家完善一个概念 – 那就是 Windows Phone 8.1 和 Windows Phone 8.0 的区别 1. WP8.0 的开发架构是基于 silverlight runtime 运行时 2. WP 8.1 的开发架构有两种 silverlight runtime /  Windwos XMAL ( 等同于Windows 8.1 ) 运行时 今后我所说的 Universal APP 是基于 Windows XAML 运行时的…

3

Windows / Windows Phone 8.1 预留应用名称及应用上传

最近比较懒好久没有来这里跟大家聊了,WP 8.1 的 preview 发布已经有一阵子了,并且商店支持 8.1 应用也有一段时间了。我就把这篇 8.1 的应用商店预留提交作为 8.1 的一个开始吧。 1. 首先登陆 Windows Phone DevCenter 链接  点击屏幕左侧的 提交应用 按钮 会看到如下页面,和以前的 8.0 商店的步骤一致,我们直接进入应用信息的填写。 WP 8.1 这里和 WP 8.0 有所不同,关键是以前8.0的应用名称是从应用包中读取的,这样会造成 WP 8.0 应用名称重复的情况发生,但是 8.1解决了这个问题并且,8.1的应用商店实现了 universal (通用)的概念,换句话说就是我一个应用名称我们可以在WIN8.1 和 WP8.1 都可以使用。或者说我已有了一个Win8/8.1的应用我可以使用关联功能使用 Win 应用的名称。 这里总结了一下大家可能会遇到的几种场景: 实际操作中来看我们既可以在这里申请一个新的应用名称也可以和现有8.0/8.1的应用名称进行关联。这个关联非常重要,微软商店目前来说是先到先得的原则,所以你心仪的应用名称有可能被抢注滴,让然微软也有正规渠道来申诉你的应用名称。 关联以后我们的应用就会在应用商店中显示 universal APP的 logo,这里对于我们的应用体验也是非常有帮助的。 如果没有Win8应用我们也可以直接在这里保留一个新的应用名称。 这里会列出你的应用的一些打包信息(剩下的市场和价格部分和8.0是一致的) 打包一个WP8.1的应用包 这个过程和 Win8 非常相似。鼠标右键我们的项目然后选择 store – create…

0

Can’t Update Visual Studio 2013 Extensions for the Windows Library for JavaScript

WinJS shipped a new update at Apr 3rd, which we could download via http://www.microsoft.com/en-us/download/details.aspx?id=40793, also we could see this update notification in Visual Studio. But the first time I updated this extension, I still get the update notification and can’t see new project templates under JavaScript section as below: After some search, I finally get…

6

Windows 8.1 应用开发后台任务概述(Windows XAML)

说到后台任务,这是在和许多 Android 开发者聊天的时候,经常被提起的话题之一, Windows 移动平台的后台任务的形式有别与 Android 的后台 service,简单的说在 Windows RT 移动平台下只有在满足一定条件的时候才能运行一部分预先设置好的制的代码。并且 Windows 8.1 和 Windows Phone 8.0 对后台任务有些区别,今天我就为大家介绍一下 Windows 8.1 移动平台下的后台任务,以及他们的运行条件。 首先给大家介绍下 Windows 移动平台的应用运行后台的情景分为多种。 今天我只为大家介绍以下基础任务,后台任务响应系统事件 ( 后台任务的运行条件、ServicingComplete  – 应用更新触发器 )、维护触发器、计时器后台任务,这些内容后面我一个一个的给大家介绍。 在此之前我先介绍下使用后台的应用配置。 手动在 Package.appxmanifest 文件中声明支持的后台任务类型 声明在  <Extensions> 节点中 <Application Id="BackgroundTaskSample.App" Executable="BackgroundTaskSample.exe" EntryPoint="BackgroundTaskSample.App"> <VisualElements DisplayName="BackgroundTaskSample" Logo="Images\squareTile-sdk.png" SmallLogo="Images\smallTile-sdk.png" Description="BackgroundTaskSample" ForegroundText="dark" BackgroundColor="#222222"> <LockScreen Notification="badgeAndTileText" BadgeLogo="images\badgelogo.png" /> <DefaultTile ShowName="allLogos" WideLogo="images\tile-sdk.png"…

0

How to Use Custom Font in Windows Phone 8 Application

When building a Windows Phone app, it’s quite common that we’d like to change the font style of a TextBlock, TextBox and etc. By default, Windows Phone 8 supports fonts for the majority of the writing systems of the world, there are many font families nested in Windows Phone OS, we could take a reference…

2