** ODCA(Open Data Center Alliance)最佳实践 **
MagicBowen(e.bowen.wang@icloud.com) 翻译前端
为了更有效的利用云计算的潜力,企业必须从根本上改变开发和运维的方式。在这种新的计算模式上采用新的开发方式才能更好地得到云计算全方位的好处。在云计算下,应用程序的构建、运行和消费方式都和以往大大不一样,这些不一样致使须要新的思考模式以及掌握新的设计模式才能取得最好的结果,这些技术和传统解决问题时的权衡方式有所不一样。web
本文档为专一于应用架构和开发实践的开发人员提供了一个视角:从多个层面构建能够充分发挥云计算的独特能力的应用程序体系架构。数据库
为了更有效的过渡到云计算,开发者须要:后端
为了跟上日益普及的云计算,开发人员必须在开发基于云计算的应用架构时考虑云的基本特征。虽然开发人员很容易地将原来的分布式软件迁移到云上,可是这种从物理到虚拟化(physical-to-virtual,P2V)的简单移植并不能发挥出云计算的独特能力。使用明确为云环境所设计的设计模式,可让软件保持高水平的可靠性、安全性和弹性。设计模式
本文为开发人员所写:浏览器
开发人员、架构师、CTO、CIO等均可以从本文介绍的云应用开发技术中受益!缓存
本文主要贡献给软件开发社区,同时为任何在云上构架、设计、实施、部署和运维服务的人员提供有价值的信息。安全
目标受众有:服务器
在本文档中,“云应用程序(cloud application)”这个词指的是一组在云中托管的组件(components)的集合,这些组件连通着一些在设备或者浏览器中运行的客户端应用(client app)。例如,一个用户可能使用iPad中的视频播放器观看电影,这依赖于在云中运行的身份验证、受权、媒体流、媒体存储、缓存和其它服务组件,总的来讲这些构成了一个完整的“云应用程序”。可是本文只关注于托管在云端的组件部分。网络
随着计算机硬件、网络以及设备从我的电脑到智能手机的变化,应用程序架构也随之演进。云计算是最近的改变应用程序架构演进的力量。要了解云计算如何改变软件架构,须要看看在传统的非云环境中软件架构是什么样子的。
分层体系架构(见下图)将应用程序的功能分布在不一样的层中。例如,在三层架构中:
电子邮件就是典型的三层架构。这种类型的应用包含一个表示层客户端,例如运行在PC上的Outlook,一个中间层的消息服务器(Exchange Server),以及一个后端信息存储。中间层以API的形式对外提供服务。客户端使用这些API和中间层通信,基于一个应用协议,如互联网信息访问协议(IMAP)。中间层每每与多个后端服务进行交互。在电子邮件系统中,中间层可能与后端的目录服务、消息存储、消息转发代理等等进行集成。
分层体系架构中的每个组件一般都运行在各自独立的服务器上,层之间经过静态配置其依赖的服务器主机名来进行互通。这种分层架构每每比单体架构(monolithic architecture:即不作分层,把整个应用构建在一块儿)有更多的优点。分层架构中每个组件均可以独立运行而且层之间能够提供负载均衡以便得到更好的性能和可靠性。由于中间层经过网络API的方式进行访问,因此多个客户端能够共享一个中间层服务器。每一个层均可以独立开发,只要接口和数据保持兼容。
在多层架构中,服务的部署是静态的。层之间的依赖经过上电时的配置文件进行描述。例如:一个邮件客户端经过配置文件知道邮件服务器的主机名和IP,客户端没法动态发现离本身最近的邮件服务器,它必须经过已知的主机名直接链接到服务器。
多数的web应用都是分层体系架构的例子。一个网络服务器向用户的网页浏览器分发应用代码和内容,用户侧使用JavaScript代码为用户提供交互式体验。中间层的服务器上每每运行Java、Ruby on Rails或者PHP等代码为前端用户交付动态内容,反过来中间层须要与后端的数据库服务进行通讯。
许多企业已经将他们的应用迁移到本身的数据中心的虚拟化基础设施上。在虚拟化环境中,应用组件是部署在虚拟机上而非传统的物理硬件上。虚拟化可让计算资源更有效的被利用,经过自动化手段减小资源供应时间和成本,从而提升效率。
在虚拟化环境中,应用的部署和配置和其在物理数据中心是相同的,例如都是经过静态配置来构建的。然而,虚拟化可让应用程序更高效的扩展,由于新的应用组件实例能够按需建立和配置。这种动态性能够经过基于虚拟化的负载均衡和虚拟IP(VIPs)来实现。分层架构中的每一层均可以独立的进行扩展,而对其它层是透明的。
为云建立应用程序时,开发人员能够不改变他们原来架构应用程序的方式。例如:一个开发人员能够简单地把一个分层架构的应用部署到云基础设施上,特别是使用基础设施即服务(IaaS),能够方便地把原来基于独立服务器的应用组件直接移植到对应的虚机(VM)上。然而,这种P2V的方式,并不能很好的让应用程序发挥云的独特功能。传统分层架构,一般和特定的基础设施位置,例如服务器名称、IP地址、以及网络服务配置等强耦合。这种方式使得它基本难以在云上进行快速的多虚机或多实例自动扩展。为了更有效的发挥云的全方位能力,开发人员必须在架构设计的时候全面考虑云环境特色,包括弹性、自服务、和多租户等。下图对别了传统的分层架构和基于云架构应用的差别。
通常状况下,使用云平台的应用程序须要知足分布式系统的约束要求。Peter Deutsch在1994年描述了开发人员在开发分布式系统时常常犯的8大谬误。这些谬误适用于跨网络的分布式服务系统,包括今天的云架构应用。针对这些谬误,Peter Deutsch提出了一些构建分布式系统的原则和最佳实践,这些最佳实践能够有效指导如何进行基于云架构特色的应用架构设计。