传统基础架构应用程序的系统架构师,云计算应用程序的设计确实是相当有挑战性的工作。体现在应用程序架构师首先要了解云计算环境和传统基础架构的差异并且充分利用云计算平台的一些特点来更好的满足用户需求。

对于刚从传统应用架构转到云计算平台的应用架构师,我觉得理解下面四点非常重要:

1.运行环境的感知能力

传统的基础架构或系统平台中的资源一般都是不能动态配置,因此应用程序在设计的时候主要考虑自身的业务逻辑的实现。应用程序本身的监控和管理都是通过其他系统管理软件等来实现。这些传统的应用程序本身对底层平台的运行情况是没有任何感知的。

在云计算环境下,应用程序的运行环境等变得不像传统环境那样可控。要提供一个可靠应用,要充分考虑到底层环境的单个节点出问题的可能性。为了
保证应用程序的可靠运行,应用需要感知底层运行环境的变化,并却根据这些变化作自适应调整,应用能够快速从错误中恢复过来,比如状态的保持,自动化数据备份和恢复等

云计算平台具有可编程的资源分配接口,因此应用程序本身的自动化部署和动态扩展都成为可能。应用可以根据基础架构平台提供的接口来感知应用程序的实际负载情况,调用相应的资源分配接口,启动更多的节点提高负载能力

2.分布式计算

目前云计算平台都是用廉价和标准的计算机硬件构成,在云平台单个计算节点的计算和存储能力相当有限,因此在云计算环境下,设计应用程序一般要考虑使用多个节点,这样在设计的时候要经可能使用并行设计的思想或采用分布计算的方式。例如采用类似MapReduce的 编程模型。使用分布式存储等.

3.松耦合和水平扩展能力

无论是功能上还是性能上云计算对应用的灵活性提出了更高的要求。这就要求应用程序在设计的时候要考虑松耦合的架构。松散耦合的设计在云计算平台可以体现为:

  • 尽量采用SOA的系统架构,让应用的构建和功能上保持灵活性,比如将某些应用功能和数据存储设计成服务单元,通过标准的接口来访问。保持服务本身部署的灵活性
  • 应用服务尽可能的采用无状态设计。这样有利于服务本身的迁移和水平扩展
  • 采用异步消息机制来实现松耦合的架构设计。通过异步消息机制可以使得应用各个模块/服务之间通过事先定义好的接口进行异步通信,相互之间就像一个不透明的黑盒子

4.数据存储方式

在传统的应用设计中,我们一般采用关系型数据库来存储数据。但是在云计算环境下,云计算平台里每个节点本身的计算和存储能力有限,传统的关系数据库一般不支持分布式计算/存储或者支持得不够好。在云计算环境中,传统的关系数据库会面临计算/存储扩展能力的挑战。另外传统关系数据库对非结构化或者半结构化数据的管理效率不高。

NOSQL数据库在对分布式计算、存储和非结构化的支持方面比传统数据库有先天优势,
更能适应云计算环境。

Cloud_panel的更多相关文章

随机推荐

  1. [androd] android的在线源码网站,各个版本都有(目前已到俺android 4.2,但不包含kernel部分的代码)

    android的在线源码阅读网站,各个版本都有(目前最新版本已到android 4.2,但不包含kernel部分的代码) 这个网站最大的特点是:可以在网页上方的搜索框,搜索整个网站所存储的源码中的字符 ...

  2. java socket编程基础

    1. [代码]读操作Runable 1 package com.hrd.test.socket; import java.io.BufferedReader; import java.io.IOExc ...

  3. 函数mem_pool_create

    /********************************************************************//** Creates a memory pool. @re ...

  4. hadoop1常见配置含义

    参数                            取值                                         备注 fs.default.name NameNode ...

  5. 【第二篇】.NET用NPOI读取Excel表格并在页面预览

    博主用的是npoi2.0.1,支持.xls也支持.xlsx 直接上代码吧. <table class="table table-bordered table-striped" ...

  6. Windows系统下Memcached缓存系列一:Couchbase(服务器端)和CouchbaseClient(c#客户端)的安装教程

    一:服务器端的安装  官网 http://www.couchbase.com/download  我的电脑是64位的win7,找到对应下载windows版本的服务器端缓存,大概90M的样子 运行期间可 ...

  7. Strlen()与sizeof()

    在学习C语言时以及面试中,经常会见到strlen()与sizeof()这一对容易混淆的概念,搞清楚这两个概念,往往考察了编程人员对语言的基本掌握能力. 首先大家先明确两个概念是: 1.strlen() ...

  8. java多线程模拟停车系统

    import java.util.Random; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent ...

  9. Android 高仿微信 获取最近刚刚拍照的缩略图 功能实现

    原理其实挺简单的,android 中文件 修改 增加 删除等等 都会在数据库里的某个表里记录下来,你需要的时候 只要迅速的去查找这个表里的值 即可得到你想要的所有信息. 实际上 如果真正理解这个表结构 ...

  10. c#中const、static、readonly的区别

    1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ...