Electronic Joint Business

Solution for E-Business

cloud

Kubernetes 设计概览

Kubernetes 是用于管理跨主机的容器化(containerized)应用程序的系统,它为应用的部署、维护和扩展提供了基本机制。

Kubernetes 建立了强壮的声明式元语用于维护用户请求的预期状态。这些原语是 Kubernetes 的一大特色。此外还有自愈机制,如自动重启,重新调度,以及根据主动控制器而不单是业务流程的需要高对容器进行复制。

Kubernetes 主要适用于包含多个容器的应用,如弹性分布式微服务。它还设计用来将非容器化应用程序栈迁移到 Kubernetes。为此,它包括抽象为分组的松散耦合和紧密耦合的编队,容器,并提供容器查找,并以相对熟悉的方式互相交流的方式。

Kubernetes is primarily targeted at applications composed of multiple containers, such as elastic, distributed micro-services. It is also designed to facilitate migration of non-containerized application stacks to Kubernetes. It therefore includes abstractions for grouping containers in both loosely coupled and tightly coupled formations, and provides ways for containers to find and communicate with each other in relatively familiar ways.

Kubernetes enables users to ask a cluster to run a set of containers. The system automatically chooses hosts to run those containers on. While Kubernetes’s scheduler is currently very simple, we expect it to grow in sophistication over time. Scheduling is a policy-rich, topology-aware, workload-specific function that significantly impacts availability, performance, and capacity. The scheduler needs to take into account individual and collective resource requirements, quality of service requirements, hardware/software/policy constraints, affinity and anti-affinity specifications, data locality, inter-workload interference, deadlines, and so on. Workload-specific requirements will be exposed through the API as necessary.

>>> 阅读全文

 

, ,

从虚拟化到云计算 (三) 编写自己的 VMWare

我一直认为要了解虚拟化,最好的方法是自己编写一个 VMM 应用程序。这有助于对硬件辅助虚拟化技术的深入理解。本文将离开前面两篇文章的理论论述,开始动手编写一个自己的 VMWare。1

本文将要创建的应用程序将会完成: 做好CPU 虚拟化的预备工作;创建客户机;进入并退出该客户机。为了简单起见,我们只针对 X64 模式来实现。该代码只演示了基本的 VMX 功能,也不一定兼容你手上的 CPU,你不过你可以使用 Bochs 并启用虚拟化,然后你就可以测试这些代码了。

我们先对专有名词做一下简单介绍:

  • VMM (虚拟机监视器 — Virtual Machine Monitor) 宿主程序
  • VM (虚拟机 —Virtual Machine)客户机程序
  • 根操作 (Root Operation) VMM 所执行的代码与上下文
  • 非根操作 (Non Root Operation) VM 所执行的代码与上下文
  • VMX 切换: 从宿主机切换到客户机(VMEntry) 或者从客户机切换到宿主机 (VMExit)
  • VMCS:控制 VM 和 VMX 切换的数据结构
  • VM Entry: 从宿主机到客户机的切换
  • VM Exit:由于某种原因,从客户机到宿主机的切换

VMX 操作的生命周期

  • VMM 检查 CPU 是否支持虚拟化 (CPUID) 并启用 (CR4 和 VMXON)
  • VMM 为每一个 VM 初始化一个 VMCS 控制结构。通过 VMPTRST 和 VMPTRLD 指令告诉 CPU 其指针的位置。VMCS 的读写通过指令 VMREAD, VMWRITE 和 VMCLEAR 来完成。
  • VMM 通过 VMLAUNCH 或者 VMRESUME 指令进入 VM
  • VM 通过 VMEXIT 退出到 VMM
  • 反复进行上面的操作
  • VMM 执行 VMXOFF 将自己关闭

 

, , , , , , ,

NuoDB 数据库的架构

一直以来,关系型数据库被设计成向上扩容(scale-up) 的架构。换句话说,要处理更多的负载,就需要更强大的计算机。这意味着,如果在几年前想要支持水平扩容(scale-out)的架构,你要嘛得放弃 SQL,要嘛得用上分区(sharding)、Active-Passive 复制等技巧。想在一个弹性的逻辑数据库上实现真正的 ACID 编程模型是不太可能的。这个矛盾正是 NewSQL 运动的矛头所向,也是 NuoDB 的灵魂所在。1

NuoDB 是为云扩展而设计的关系型数据库。这句话该怎么理解呢?NuoDB 是真正的 SQL 服务:它拥有 ACID 事务的所有属性、标准的SQL 语言、以及真正的关系型逻辑,这一切都深受用户喜欢。最重要的是,从最初的设计开始,NuoDB 就能按云服务的方式进行伸缩。

关于“云扩展”的定义有点老生常谈。如果感兴趣,你可以到我们的技术博客上了解什么是云扩展。简单来说,除了支持水平扩容的模型外,我觉得它还应包括敏捷、易用、可自动化、安全以及高可用性。本文就是从这个观点出发的.。2

请注意,NuoDB “只是”个软件。它能够运行在 Linux、Mac 或者 Windows 上,无论这些系统被安装在笔记本、私有云或公有云上。NuoDB 可以部署在 Amazon Web Services 或 Google Compute Engine 上,或者可以集成 OpenStack 一起使用,或者就在笔记本上作为本地 Windows 服务运行。NuoDB 十分灵活,你可以随心所欲地进行测试、开发,之后再部署到你想要的地方。

本文将重点要介绍什么是 NuoDB,它采用了什么架构来应对现今世界的挑战,以及你可用 NuoDB 来解决什么问题。阅读完本文,你应该可以对 NuoDB 的关键概念和架构的不同之处有所了解。你也可以了解到一些实际部署和管理的特性,并对自己的 NuoDB 数据库进行伸缩。

>>> 阅读全文

 

, , , , ,

深入理解OpenStack (二) 在 Nova 中启动实例

想了解云计算可以做什么,就意味着你必须掌握虚拟化概念。通过虚拟化,你可以在虚拟机上而不是物理计算机上运行操作系统和应用程序。要使用虚拟机,你必须提供一个镜像文件,它包含了运行虚拟机所需的信息:包括要运行的操作系统、用户的登录名和密码、储存在系统上的文件等等。

在 OpenStack 核心项目中,Nova 项目可谓是核心中的核心。正如 OpenStack 网站所介绍的,Nova 是 IaaS 系统的主要部分, 旨在为大规模的配置和管理虚拟机实例提供一个框架。与 Amazon 的EC2 服务的功能类似,它允许用户使用自己的镜像文件,通过可编程 API 创建、管理和销毁虚拟服务器。

Nova 生产环境的配置模式
从功能上看, Nova 平台中有两类节点: 控制节点和计算节点,其角色由安装的服务决定,控制节点包括网络控制 Network、调度管理 Scheduler、api服务、存储卷管理、数据库管理、身份管理和镜像管理等,计算节点主要提供 nova-compute 服务。节点之间使用 AMQP 作为通讯总线,只要将 AMQP 消息被写入特定的消息队列中,相关的服务就可以获取该消息进行处理。由于使用了消息总线,因此服务之间是位置透明的,你可以将所有服务可以部署在同一台主机上,即 All-in-One(一般用于测试),也可以根据业务需要,将其分开部署在不同的主机上。

用在生产环境 Nova 平台配置一般有三种类型:

最简配置:需要至少两个节点,除了 nova-compute 外所有服务都部署在一台主机里,这台主机进行各种控制管理,即控制节点。

>>> 阅读全文

 

, , , , , , ,

深入理解OpenStack (一) OpenStack架构与组件

云计算是一种计算模式,在该模式中,诸如运算能力、存储、网络和软件等资源都被抽象为服务,可以让用户通过互联网来远程使用,其付费方式也如同传统公共设施一样。按需定量、易于配置、动态和近乎无限的可扩展性是云计算的几个关键特性。按云计算模式搭建的基础设施通常被称为“云”。云提供的服务有以下几大类: 基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。 Amazon Web Services (AWS)是最主要的 IaaS 供应商之一。 AWS 有两个流行的服务:弹性计算云 (EC2- Elastic Compute Cloud) 和以 Web 服务方式提供的简单存储服务 (S3- Simple Storage Service)。这里我们主要关注 IaaS 平台。

开源 IaaS 软件
目前主要的开源 IaaS 软件主要有 OpenNebula、Nimbus、OpenStac k和 Eucalyptus 等等,这些软件的设计思路和实现细节各有千秋,但基本可以归结为三个主要模块:一是通常被称为云控制器的前端,包括用户界面、编程接口和任务调度组件; 二是虚拟化管理,包括网络管理和虚拟机管理; 三是存储服务,包括弹性块设备和简单存储服务。在这三大模块的基础上,还可以添加监控、报表、分析、计费等等外围组件。这些组件往往是运营方面的要求,不是基础架构服务的核心技术。

OpenStack 社区从 2011 年 1 月起呈现出爆发的势头。目前 OpenStack 社区的讨论主题数、讨论帖子数和参与讨论的总人数都在 OpenNebula 社区和 Eucalyptus 社区之上。

什么是 OpenStack?
OpenStack 是个开源软件项目的集合,企业或服务提供商可以用它来设置和运行自己的云计算和存储等基础设施。 Rackspace 和 NASA 是该项目最初及最重要的贡献者。Rackspace 公司贡献了 “Cloud Files” 平台(代码)用于增强 OpenStack 的对象存储组件(Object Storage),而 NASA 则贡献出 “Nebula” 平台(代码)来增强计算部分。 在不到一年的时间里, OpenStack 协会就拥有了 100 多个成员,包括 Canonical, Dell, Citrix 等等知名公司。很值得一提的是,OpenStack 提供服务的 API 兼容于亚马逊 EC2/S3,因此为 AWS 编写的客户端工具同样也可以用在 OpenStack 上。

OpenStack 包括了许多不同的子项目,图1-1列出了主要子项目及其功能所属:

>>> 阅读全文

 

, , , , ,

从虚拟化到云计算 (二) 深入硬件辅助虚拟化技术

从业界的整体趋势来看, 数据中心的焦点已经从“更快的性能”走向了合理的性能、合理的功耗、合理的利用以及合理的管理。虚拟化技术的初衷就是为了实现更高的设备利用率,使用户能够尽可能地利用系统资源。有这样一句话,叫做“更多虚拟,更少管理 (Virtualize more, manage less)”,意思是说,如果你能够在单个服务器上虚拟多个系统,就能够以少数几台计算机完成所有工作,这显然能够节省耗电、空间、冷却和管理开支。一个理想的虚拟化解决方案应该提供不同虚拟机之间的彻底的安全的隔离,并为每个虚拟机提供卓越的性能,从而确保整个平台的出色实用性、可靠性和安全性。

完全虚拟化技术可以提供较好的客户操作系统独立性,不过其性能不高。而操作系统虚拟化可以提供良好的性能,然而各个客户操作系统之间的独立性并不强。无论是何种软件方法,隔离性都是由 Hypervisor 软件提供的,过多的隔离必然会导致性能的下降。对于虚拟化技术来说,无论是软件还是硬件辅助的解决办法,其目的和作用都是一样的,都以提高IT系统利用率、大幅降低成本、提高可管理性和建立完善的合作的整体化系统作为其第一要务的

VMM 对硬件资源的虚拟可以划分为三个部分:CPU 虚拟化,内存虚拟化和 I/O 虚拟化。在计算机中,CPU 无疑是最重要的部件,要想虚拟化出一台电脑,CPU 的虚拟化无疑是重中之重,事实上英特尔和 AMD 近年来也在全力推广 CPU 的虚拟化技术。那么究竟哪些处理器是支持硬件虚拟化,除了处理器还需要什么配合才能实现硬件虚拟化呢?下面我们先来看看支持 CPU 虚拟化的硬件环境要求。

Popek 和 Goldberg 在 1974 年发表的论文中提出一个真正的 VMM 必须满足的三个条件:高效性、资源控制和同质性。高效性是指所有的安全指令都可以在本地硬件上直接运行而不需要 VMM 的干预或仿真,资源控制是指任何客户机软件都不能改变它可用的系统资源分配,同质性是指抛开性能略微下降的因素,虚拟机上执行的任何程序的行为必须和在本地机器上运行一样。根据该定义,指令集支持虚拟化的最高效的状态是:所有敏感指令都是特权指令。

敏感指令和虚拟化方法
从软件角度上来说,处理器呈现给软件的接口就是一系列指令(指令集 ISA)和一堆的寄存器(通用寄存器以及状态和控制寄存器),而 I/O 设备呈现给软件的接口也就是一堆的状态和控制寄存器(有些设备亦有内部存储)。这些都是系统的资源,其中影响处理器和设备状态和行为的寄存器称为关键资源或特权资源,如 x86 的 CR0 ~ CR4 寄存器,MIPS 的 CP0 寄存器,PowerPC 的 Privileged SPR 等等。

>>> 阅读全文

 

, ,

多租户技术与 Hibernate 4.0 (一)

在多租户技术中,租户(tenant)是指使用系统或电脑运算资源的客户,其所使用的是供应商所开发或配置的应用系统或运算资源等。供应商所设计的应用系统会容纳数个以上的用户在同一个环境下使用,为此应用程序与运算环境必须要特别设计,除了可以让系统平台可以允许同时让多份相同的应用程序同时执行外,保护租户数据的隐私与安全也是多租户技术的关键之一。

多租户是决定 SaaS 效率的关键因素。多租户技术在实际业务上运用的成功且广为人知的案例之一,是由 Salesforce.com 所创建的 CRM 应用系统。在这样一个典型的企业 SaaS 环境中,用户是指某个特定组织的员工组成的多个组,这个组织就是所谓的租户。

在未出现 SaaS 之前,组织会购买一个软件应用程序供自己的成员使用;组织的员工就是应用程序的用户,而该组织就是所有者。在 SaaS 和云的世界中,许多组织都将使用同一个应用程序,组织是租户,而非所有者,但是组织的员工仍然是用户的身份。每名用户都具体关联到一个特定租户(组织),而 SaaS 为每个租户分别提供一份应用程序的副本,以供他们的用户使用,同时只允许每个组织自己的成员访问其组织的数据。

可见,多租户技术有下列特色:

  • 由于多个租户共用一个应用程式或运算环境,其相关的硬件成本,操作系统与相关软件的授权成本都可由多个租户一起分担,对供应商来说可以有效降低成本。
  • 通过不同的数据源管理手段,多租户技术的数据可以用不同的方式进行数据隔离,而良好的数据隔离方法可以降低供应商的维护成本(包含设备与人力),而供应商可以在合理的授权范围内取用这些数据分析,以作为改善服务的依据。
  • 多租户架构下所有使用者都共用相同的软件环境,因此在软件版本变动时可以只发布一次,就能在所有租户的环境上生效。
  • 具多租户架构的应用软件虽可定制化,但定制化难度较高,通常需要平台层与工具的支持,才可降低定制化的复杂度。

传统 Web 应用和 SaaS 应用的区别
传统 web 应用程序和支持云的 SaaS 应用程序的主要区别,在于两个容量利用特性:

>>> 阅读全文

 

, , , ,

用GridGain实现高性能云计算

网格计算通过利用大量异构计算机(通常为桌面系统)的未用资源( CPU 周期和磁盘存储),将其作为嵌入在分布式电信基础设施中的一个虚拟的计算机集群,为解决大规模的计算问题提供了一个模型。网格计算的焦点放在支持跨管理域计算的能力,这使它与传统的计算机集群或传统的分布式计算相区别。

网格计算包括共享异构资源(基于不同的平台,硬件/软件体系结构,以及计算机语言),这些资源位于不同的地理位置,属于一个使用公开标准的网络上的不同的管理域。简而言之,它包括虚拟化计算资源。

网格计算经常和集群计算相混淆。二者主要的不同就是:集群是同构的,而网格是异构的;网格扩展包括用户桌面机,而集群一般局限于数据中心。GridGian 是网格计算,可以根据规则分节点技术,提高计算速度,比如用于规则引擎,技术引擎等,银行结算,保险考核结算等。

什么是 GridGain
一言蔽之,GridGian 是一款基于 JVM 高性能分布式应用的中间件,主要用于开发密集计算和密集数据的应用。无论是单一的 Android 设备还是巨大的云,用 GridGain 开发的应用在任何架构上都具有良好的伸缩性。GridGain 提供了两大主要功能:计算网格 Compute Grids 和内存数据网格 In-Memory Data Grids。

可以这样理解: GridGain = (Java + Scala + Groovy) * (计算网格+ 内存数据网格)

>>> 阅读全文

 

, , ,

使用Azure和CloundDrive运行MongoDB

Running MongoDb on Microsoft Windows Azure with CloudDrive
I’ve been playing around with the whole CQRS approach and think MongoDb works really well for the query side of things. I also figured it was time I tried Azure so I had a look round the web to see if there we’re instructions on how to run MongoDb on Microsoft’s Azure cloud. It turned out there were only a few mentions of it or a general approach that should work but no detailed instructions on how to do it. So, I figured I’d give it a go and for a total-Azure-newbie it didn’t turn out to be too difficult.

Obviously you’ll need an Azure account which you may get with MSDN or you can sign-up for their ‘free’ account which has a limited number of hours included before you have to start paying. One thing to be REALLY careful of though – just deploying an app to Azure starts the clock running and leaving it deployed but turned off counts as hours so be sure to delete any experimental deployments you make after trying things out!!

First of all though it’s important to understand where MongoDb would fit with Azure. Each web or worker role runs as a virtual machine which has an amount of local storage included depending on the size of the VM, currently the four pre-defined VMs are:

•Small: 1 core processor, 1.7GB RAM, 250GB hard disk
•Medium: 2 core processors, 3.5GB RAM, 500GB hard disk
•Large: 4 core processors, 7GB RAM, 1000GB hard disk
•Extra Large: 8 core processors, 15GB RAM, 2000GB hard disk
This local storage is only temporary though and while it can be used for processing by the role instance running it isn’t available to any others and when the instance is moved, upgraded or recycled then it is lost forever (as in, gone for good).

For permanent storage Azure offers SQL-type databases (which we’re not interested in), Table storage (which would be an alternative to MongoDb but harder to query and with more limitations) and Blob storage.

>>> 阅读全文

 

, ,

基于Azure开发和发布PHP应用

云计算是当今IT世界的头等大事。云计算(Cloud Computing)是网格计算、分布式计算、并行计算、网络存储、虚拟化、负载均衡等传统计算机技术和网络技术发展融合的产物。提供资源的网络被称为“云”。

“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。

简单的说云计算简化了企业 IT 的基础架构且给企业提供了更大的可配置性和灵活性。在原有模式下如果构建一个小型的应用,你需要租用服务器、需要考虑租用服务器的安全和稳定因素等。如果构建一个中大型的应用,我们需要花巨资购买硬件来集群,然后花巨额资金购买所需的系统软件并且聘用一些人员来维护系统。

现在云平台能提供我们程序所需的硬件设备和软件设备,用户所要做的只是根据自己的需要租用这些已有的资源,上传应用程序并修改配置文件,就可以灵活扩展或收缩所占用的资源,以达到合理利用资源的目的,同时也减少了维护这些软硬件的成本。

在这篇文章中,我们将关注云平台之一 — 微软的 Windows Azure,并演示如何在此平台上部署 PHP 应用,虽然我们不打算深入去了解云技术的方方面面,但是我会尽量提供相关的信息和资源,为你今后的学习打下基础。

>>> 阅读全文

 

, , , , , , , , ,

在Azure上开发部署Tomcat Java应用

文章评价:
也许你还不知道,微软的 Windows Azure 支持多种异构平台环境,在 .NET 之外,用户还可以运行多种语言和平台,比如Java, PHP, Ruby 等等,你甚至可以使用完整的 Web 应用服务器,比如 Tomcat,关系型数据库比如 MySQL,还可以使用像Eclipse 这样的 IDE。详细信息可以参考这里

在这篇文章里,我们想介绍如何开发和部署一个简单的 Java 应用”Hello,World”到 Windows Azure 里,我们会先用Windows Azure SDK 提供的本地 Dev-Fabric 进行演示,之后会将其部署到真正的 Windows Azure 云端里。

准备工作
首先当然是需要下载 Azure SDK,Azure SDK 依赖于 IIS 服务器,在 Windows 7 上,可以在控制面板中的“程序与功能”中,点击“打开或关闭Windows功能“,在列表中选择 IIS(internet信息服务),同时需要勾选它的 ASP.NET 扩展。

此外,Azure 的 Storage Emulator 还依赖于 SQL Express,这是 Microsoft SQL Server的裁剪版,你可以在这里下载一份拷贝。

接下来我们需要准备一些工具,包括安装 JDK,Tomcat 等等,你还需要下载安装 Eclipse IDE (WTP)。注意,不要安装Tomcat的‘32-bit/64-bit Windows Service Installer’, 因为 Windows 服务是无法在 Azure 上部署的。详细安装过程略过。 Eclipse WTP 的安装直接解压即可。

>>> 阅读全文

 

, , , , , , ,