精华内容
下载资源
问答
  • 中间件开发教程
    千次阅读
    2017-10-12 13:52:20

    课程介绍

    阿里云消息队列MQ(Message Queue)是企业级互联网架构的核心产品,服务于整个阿里巴巴集团已超过8年,经过阿里巴巴交易核心链路反复打磨与历年双十一严苛考验,是一个真正具备低延迟、高并发、高可用、高可靠,可支撑万亿级数据洪峰的分布式消息中间件。

    消息队列提供 MQ-MQTT 移动物联套件,连接端(如移动设备、智能家电、汽车、机器人等)和云,实现双向通信,可支撑亿级设备连接与百万消息并发。

    消息队列秉持开放、共享的原则拥抱开源生态,无技术绑定,2016年阿里巴巴正式宣布将 MQ 内核引擎 RocketMQ 捐赠给 Apache 软件基金会;与此同时,全面融合 kafka 生态,做到无缝迁移,打造更安全、更可靠、更易运维的 kafka 企业级消息服务。

    课时列表

    开始学习 http://click.aliyun.com/m/27930/
    更多相关内容
  • ICE中间件技术的详细教程,包含ice的开发基础,服务协议等,是初学ICE常用的工具书
  • 相关说明:基于HPSocket,拥有数据库连接池、线程池、内存池等众多功能!详见视频介绍。echs网络中间件(第1课) - 简介。...echs网络中间件(第6课)- 插件开发。echs网络中间件(第7课)- 内存池。
  • 作为消息中间件的MQ在java开发中起着举足轻重的地位,无论是ActiveMQ、RabbitMQ、还是RokcetMQ至少要会一个,否则别说自己是java程序员。Java自学网整理了目前行业最常用的消息中间件视频供大家学习。
  • SpringBoot企业级开发教程教学大纲.pdfSpringBoot企业级开发教程教学大纲.pdfSpringBoot企业级开发教程教学大纲.pdfSpringBoot企业级开发教程教学大纲.pdfSpringBoot企业级开发教程教学大纲.pdfSpringBoot企业级开发...
  • 网络通信引擎(Internet Communications Engine, Ice)是由 ZeroC的分布式系统开发专家实 现的一种高性能、面向对象的中间件平台。它号称标准统一,开源,跨平台,跨语言,分布式, 安全,服务透明,负载均衡,面向...
  • 中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。 我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。 中间件的原理其实就是定义了一个装饰器,但是这个装饰器...
  • 不知道大家有没有写过中间件呢,它是怎么写的呢?下面这篇文中就来给大家分享一下使用Go,如何编写中间件,文中通过示例代码介绍的非常详细,供大家参考学习,下面随着小编来一起学习学习吧。
  • java的HTTP API文档生成中间件Swagger使用教程.zip 用JAVA开发动静分离的网站,后端要编写API文档简直太容易不过了,用上SWAGGER基本就是全自动生成API DOC了.
  • TUXEDO 中间件 教程

    2010-08-24 20:20:26
    TUXEDO教程 用过中间件的人一定知道它,这本是基础知识和原理及配置教程,虽简单但足够应付基本使用了
  • MyCat是一个彻底开源的,面向企业应用数据库中间件,支持事务、ACID、可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群,并结合传统数据库和新型分布式数据仓库的新一代企业级数据库中间件产品。...
  • 本文档主要介绍基于数字天堂Mkey中间件平台,如何进行手机端应用开发,里面有详细的安装和教程指南。
  • java面试笔试题库java学习比较开发教程互联网公司面试资料大全合集: 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张图解...
  • 主要给大家介绍了关于RabbitMQ消息中间件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一学习学习吧
  • Tuxedo中间件培训教程

    2011-07-19 16:23:54
    Tuxedo中间件学习经典教程,适合刚上手的编程人员。
  • tuxedo中间件培训教程

    2008-11-13 16:39:33
    bea tuxedo 广泛用银行业和保险业,是中间件产品中最为成功的产品之一。并切tuxedo中间件和许多开发语言兼容。
  • MyCat 是目前流行的基于 java 语言编写的数据库中间件,是一个实现了 MySQL 协议 的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协议与多个 ...
  • thinkphp配置配置多应用多配置的方法_PHP开发框架教程一般的thinkphp框架一般都是单模块开发的,但有时候我们可能需要进行多模块开发,本文就来为大家介绍一下thinkphp配置多模块、多应用的方法。在ThinkPHP6中新增...

    thinkphp配置配置多应用多配置的方法_PHP开发框架教程

    一般的thinkphp框架一般都是单模块开发的,但有时候我们可能需要进行多模块开发,本文就来为大家介绍一下thinkphp配置多模块、多应用的方法。在ThinkPHP6中新增中间件功能,而且中间件又分很多类型的中间件,很多新手对ThinkPHP6中间件很犯难,下面就给大家分别介绍下。

    全局中间件:

    我们下载好ThinkPHP6的框架后,在app目录下就有一个middleware.php,我们在app目录下定义的中间件叫做全局中间件,全局中间件是对所有应用都生效的中间件。

    应用中间件:

    那换而言之,如果我们再复制一份middleware.php放在了某个应用下,比如index应用,是不是就叫做应用中间件呢,答案是对的。

    控制器中间件:

    如果在控制器中操作中间件,是不是就叫做控制器中间件?

    路由中间件:

    那可不可以在路由中也定义中间件,比如我只想让某个请求使用某个中间件,其他的并不想使用中间件,那也就有了路由中间件。

    如果同一个请求,所有类型的中间件都定义了,那执行顺序是如何呢?

    全局中间件->应用中间件->路由中间件->控制器中间件

    接下来我们看一个实例。

    全局中间件:如何大型 Laravel 项目中组织路由_PHP开发框架教程

    想象一下一个拥有 100 多个路由的 Laravel 项目,其中包括访客,用户,管理员等分离的模块。你真的要将所有内容写在在一个文件中吗?那么如何将它们分组,并且为 URL 添加前缀呢?看看有哪些办法。

    public function handle($request, \Closure $next)

    {

    echo 'app全局中间件';

    return $next($request);

    }

    应用中间件:

    public function handle($request, \Closure $next)

    {

    echo '应用中间件';

    return $next($request);

    }

    路由中间件:

    Route::rule('hello','index/hello')

    ->middleware(\app\middleware\Auth::class);

    控制器中间件:

    在使用控制器中间件之前,我们先定义好别名,在根目录下config\middleware.php中定义别名。这个别名其实就是增加别名标识。别名定义好后,不仅在控制器中间件可以使用,路由中间件也可以使用。

    return [

    'alias' => [

    'auth1' => app\middleware\Auth1::class,

    ],

    ];

    我们在这里定义别名中间件,就不需要在middleware.php中声明了,而是通过在控制中使用别名定义:

    class Index

    {

    protected $middleware = ['auth1'];

    public function index()

    {

    return 'index';

    }

    public function hello()

    {

    echo 'hello方法';

    }

    }

    这个时候我们访问hello方法,输出结果是:

    app全局中间件

    应用中间件

    路由中间件

    控制器中间件

    hello方法

    以上就是ThinkPHP6各种中间件的介绍,其实各种中间件并不难理解,主要在于它们之间的执行顺序需要大家明确。

    展开全文
  • Android是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。Beta 版的Android SDK提供了在Android平台上使用JaVa语言进行Android应用开发必须的工具和API接口。本篇是由Android...
  • 我们编写的新书《STM32Cube高效开发教程(基础篇)》终于在各大电商平台上架销售了,这是值得众多STM32开发者入手的一本新书,它是目前市面上第一本采用STM32CubeMX和STM32CubeIDE作为开发软件,系统性地介绍STM32的...

    我们编写的新书《STM32Cube高效开发教程(基础篇)》终于在各大电商平台上架销售了,这是值得众多STM32开发者入手的一本新书,它是目前市面上第一本采用STM32CubeMXSTM32CubeIDE作为开发软件,系统性地介绍STM32HAL库开发技术的书

    《STM32Cube高效开发教程》分为《基础篇》和《高级篇》两本,《高级篇》大约在10月份才能正式印刷出来。总结一下,本书具有如下的一些特点。

    1. 使用STM32Cube生态系统的开发工具和技术

    ST公司现在大力推广其STM32Cube生态系统,STM32各个系列的器件都有STM32Cube固件库,它包含器件的HAL/LL驱动库和一些中间件。ST公司已经不再更新器件的标准库,新型号的器件更是没有标准库,标准库的开发方式必然被淘汰

    图1 STM32系列器件的STM32Cube固件库(来自于ST官方文档)

     STM32Cube生态系统包括工具软件和嵌入式软件库,STM32CubeMX和STM32CubeIDE是STM32Cube生态系统的两个核心工具软件。STM32CubeMX用于MCU片上资源和外设的图形化配置,可以生成多种IDE软件的项目框架和外设初始化C语言代码,可大大提高开发效率。STM32CubeIDE是一个STM32编程IDE软件,使用STM32CubeIDE可以编程、编译、下载和调试。STM32CubeIDE完全可以替代Keil或IAR的商业软件的功能。

    对于入门学习STM32开发的学生,或准备用STM32设计新产品的人员来说,使用STM32CubeMX和STM32CubeIDE,依托STM32Cube生态系统的资源进行学习和开发是最佳的选择,因为:

    • STM32CubeMX和STM32CubeIDE软件是ST官方提供的免费软件,不用担心使用非授权商业软件可能出现的知识产权风险。
    • STM32Cube生态系统提供全套的工具软件,除了STM32CubeMX和STM32CubeIDE,还有STM32CubeProgrammer用于程序烧录,STM32CubeMonitor等软件用于系统监测。
    • STM32Cube生态系统具有丰富的嵌入式软件库资源,除了ST官方的MCU固件库和扩展库,还有很多第三方的中间件和扩展库,可缩短项目开发时间。

     图2 STM32Cube生态系统(来自于ST官方文档)

    2. 内容丰富全面

    《STM32Cube高效开发教程》分为《基础篇》和《高级篇》两本,以STM32F407为例,全面介绍相关工具软件的使用、STM32片上资源和外设的HAL编程方法、FreeRTOS等中间件的编程开发方法。

    《基础篇》介绍STM32Cube开发方式所用的工具软件,以及STM32F407系统功能和常用外设的使用。《基础篇》共22章,分为两大部分。

    ●       第一部分是软硬件基础,介绍STM32Cube生态系统的组成,介绍STM32CubeMX、STM32CubeIDE、STM32CubeMonitor软件的使用,介绍STM32F407的基本架构和最小系统电路原理。

    ●       第二部分介绍STM32F407系统功能和常用外设的原理和编程方法,包括中断系统原理和使用、DMA原理和使用、低功耗原理和使用,以及定时器、RTC、ADC、USART、SPI、I2C等常用外设的编程方法。

    《高级篇》介绍固件库中一些中间件的使用,还介绍一些高级接口的使用。《高级篇》共22章,也从第1章开始编号,内容分为三大部分。

    ●       第一部分是嵌入式操作系统FreeRTOS的使用,包含11章内容,全面介绍了FreeRTOS各种功能的使用,包括任务管理、中断管理、进程间通信技术等,其中进程间通信技术包括队列、信号量、互斥量、事件组、任务通知、流缓冲区和消息缓冲区。

    ●       第二部分是使用FatFS管理文件系统,包含6章内容。这一部分介绍了在SPI接口Flash芯片上移植FatFS的过程,在SD卡、U盘上使用FatFS管理文件系统的方法。

    ●       第三部分是图片的获取与显示,包含5章内容。这一部分介绍了BMP和JPG图片文件的读写和显示,电阻式触摸屏和电容式触摸屏的使用,以及简单的GUI程序设计方法。

    在介绍具体外设或知识点的每一章中,本书先介绍技术原理和HAL驱动程序,然后编写至少1个完整示例项目,并且在一个STM32F407开发板上测试验证过。

    3. 提供丰富的配套资源

    STM32是软硬件结合的编程,程序需要在开发板上运行,才能看到效果。为了让读者更好的理解书中介绍的原理,以及看到示例运行的效果,本书提供了多种配套资源。

    • 全书所有示例项目的源代码
    • 开发板电路原理图
    • 全书所有示例项目在开发板上运行的演示视频,这些视频上传到了B站上,搜索“STM32Cube高效开发教程”就可以找到。
    • 所有示例运行的过程的图片整理成了一个PDF文件,可供下载后随时查看。
    • 各章课件的PDF版本。如果有读者需要选用此书作为教材,可向作者发邮件获取PPT版本课件。

    此外,我们还建立了读者QQ群,欢迎读者加入QQ群交流学习,一些补充的资源可能就会发布到QQ群里。

    图3 发布在B站上的示例运行演示视频

    4. 精雕细琢见真章

    2019年年初,为准备本科生教学内容,我们开始编写本书,到2020年夏天才定稿。中间经过多个版本的修改,曾以部分内容作为课程讲义,给中国石油大学(华东)2016级和2017级自动化和测控专业的学生在两门课程的教学中使用。学生普遍反映讲义内容详细,容易看懂和学会。在使用过程中,我们采纳了学生提出的一些有益的修改意见,也对发现的一些错误或遗漏进行了修订。

    交稿后又经过一年时间的编辑和校对,期间发现的错误也及时修改。出版社的编辑们严格按照出版物的要求,对书中大量的电路图和结构框图重新作图,经过了多次校对和修改,以确保图书内容的规范性、严谨性和正确性。最后的成书很是惊艳,印刷和装订质量很好。

    图4 印刷出来的成品书

    这是作者和编辑们历时超过两年半合力精心打造的一本书,印刷质量是看得见摸得着的,内容质量也绝不会让你失望,因为我们是专业的,认真的。为师者,唯恐学生学不会,唯恐自己讲的不清楚。我们将自己擅长的一点东西认认真真写出来,一遍一遍地优化程序,一遍一遍地完善文字,只为写出一本好书。

    附:三位作者都是博士,都是中国石油大学(华东)控制科学与工程学院的教师。

    展开全文
  • SpringBoot企业级开发教程教学大纲.docxSpringBoot企业级开发教程教学大纲.docxSpringBoot企业级开发教程教学大纲.docxSpringBoot企业级开发教程教学大纲.docxSpringBoot企业级开发教程教学大纲.docxSpringBoot企业...
  • 导读:本文详细介绍了中间件,主要从数据库拆分过程及挑战、主流数据库中间件设计方案、读写分离核心要点、分库分表核心要点展开说明。 1. 数据库拆分过程及挑战 垂直拆分、读写分离、分库分表(水平拆分)。每个拆分...
  • RabbitMQ工作模式介绍 8.2 RabbitMQ 消息中间件 在Topics工作模式中必须先配置一个topic类型的交换器并指定不同的路由键值Routing key将对应的消息从交换器路由到不同的消息队列进行存储然后由消费者进行各自消费 ...
  • SOA中间件基础教程

    2011-06-05 17:54:37
    中间件是处于应用软件和系统软件之间的一类软件,是独立于硬件或数据库厂商(处于其产品的中间,实现其互连)的一类软件,是客户方与服务方之间的连接件,是需要进行二次开发的中间产品。
  • 对机顶盒软件中间件各模块进行详细分析和设计,给出设计原理和设计过程,同时给出测试方案。是对相关领域的软件工程师很好的教程
  • 文章目录中间件是什么为什么使用中间件主要中间件的分类1. Hadoop2. LVS3. Linux-HA4. 静态网站服务器5. 动态应用服务器DNS、DHCP、Kerberos和Radius:云计算基础服务组件1. DNS2. DHCP3. Kerberos1)身份认证2)...

    这一节我们主要来学习一下什么是中间件,为什么使用中间件和主要中间件的分类。

    中间件是什么

    中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。

    执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或 OS 环境。

    中间件是介于操作系统和应用软件之间,为应用软件提供服务功能的软件,有消息中间件,交易中间件,应用服务器等。由于介于两种软件之间,所以,称为中间件。

    为什么使用中间件

    具体地说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。

    中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。

    主要中间件的分类

    1. Hadoop

    当一个大的任务由一台机器在规定的时间内不能完成时,人们就要采用分布式计算,即很多台机器联合起来共同完成任务。换句话说,就是把大任务拆分成许多个小任务,然后再把这些小任务分配给多台计算机去完成。参与计算的多台计算机组成一个分布式系统,需要运行一系列的分布式基础算法。

    Hadoop 就是一个分布式计算平台,用 Java 语言开发,包含 Common、MapReduce 和 HDFS 三个核心部件(HDFS 和 MapReduce 是最核心的两个部件)。其中:

    • Common 为 Hadoop 的其他项目提供了一些常用工具,主要包括系统配置工具 Configuration、远程过程调用 RPC、序列化机制和 Hadoop 抽象文件系统等。
    • MapReduce 是处理海量数据的计算模型。
    • 而 HDFS 用于存储海量数据,它具备高度容错性,能在低成本的通用硬件机器上稳定运行。

    Hadoop 实现了分布式计算中的基础算法(如一致算法、选举算法、故障检测、快照等),同时为用户提供了编程和命令接口。程序员调用这些函数能轻松写出分布式应用程序,我们都知道,如果一切从头开始,要完成一个分布式程序的编写是异常艰难的。

    Hadoop 在海量非结构化数据处理方面能充分展示它的优势,如消费者购买行为分析、商品推荐、关键词检索、信贷风险评估等。

    如图 1 所示,Hadoop 其实就是一个分布式计算平台,它“覆盖”在操作系统之上,向上提供函数调用(API)和命令接口,在水平方向完成分布式系统的基础算法。作为编程人员和用户,只要了解 API 和命令即可。

    Hadoop
    图 1 Hadoop

    基于 Hadoop 平台衍生出来的开源项目主要有 Yarn、HBase、Hive、ZooKeeper、Avro、Sqoop、Mahout、Crossbow 等。

    以 Hadoop 为基础的生态目前已经成为大数据的标准方案,被广泛用于金融、市场、电信、交通等行业的海量数据分析,在即将到来的大数据时代,它将会发挥更大的作用。

    在中国,很多行业(如银行、电信、移动、电力、石油、交通等)沉淀了大量的业务数据,对这些海量数据进行挖掘和分析,将会带来巨大的价值。

    用 Hadoop 构建的应用实例对于计算资源的消耗具备两个明显的特征:

    • 资源需求大:表明 Hadoop 需要大量的存储、计算和网络带宽。
    • 资源需求具备季节性:表明除存储需求是经常性占用外,在运行 Mapreduce 时才需要大量的计算和网络资源,而分析大量数据的工作并不是经常性的——称为季节性

    因此,云计算是大数据天生的计算资源供应途径,云计算的资源弹性很好地满足了大数据的季节性计算资源需求。也就是说,大数据是云计算经典的应用案例。当然,也可以按照大数据对计算资源的波峰需求静态配给计算资源,但是这种方案会造成资源的巨大浪费。

    2. LVS

    LVS 是 Linux Virtual Server 的首字母缩写,意为 Linux 虚拟服务器,即把许多台物理 Linux 计算机逻辑上整合成一台超级计算机,对用户来说感觉只有一台计算能力很强的服务器,如图 2 所示。

    LVS 就是一个由软件实现的负载均衡器,工作在网络 OSI 的第四层(应用层),是中国人章嵩开发的,代码已经并入了 Linux 内核。利用它,再加上一台廉价的计算机,就能构建一台企业级的负载均衡器。而那些外国大公司的负载均衡器,售价都要十几万元,甚至几十万元,便宜的也要几万元,LVS 出来后,这些产品都不得不降价。

    负载均衡器的作用就是把任务分配给最合适的服务器。比如一个大型购物网店,有 100 台同样配置的服务器在运行,如果某一时刻有 10 万用户在线购物,那么通过负载均衡器,每台服务器差不多承担 1000 个在线购物用户。

    LVS 的官网网站是 http://www.linuxvirtualserver.org。另外,两个较为流行的第七层负载均衡器是 Nginx 和 HAProxy,针对应用做均衡,所以能适应的负载种类没有 LVS 多。

    LVS原理图
    图 2 LVS原理图

    3. Linux-HA

    也许有读者会问:“负载均衡器本身故障怎么办?”是的,如果负载均衡器出现故障,那么整个系统(如网店)将会瘫痪。所以人们开发了各种集群软件,如 Linux-HA 和 Keepalive 等,而微软干脆就在 Windows 服务器版中集成故障转移集群软件。

    集成故障转移集群软件的核心思想是,实时检测故障机器并及时让好的机器接管工作,对外提供高可用性。Linux-HA 意为 Linux 高可用性项目,此项目具体包含如下几个组件。

    名称作用
    Heartbeat负责维护集群中各节点的信息及它们之间的心跳通信。
    Pacemaker集群资源管理器,是核心组件,客户端通过 Pacemaker 来配置、管理并监控整个集群。此组件的社区网站为 http://clusterlabs.org/。OpenStack 高可用性部署实例中一般都采用 Pacemaker 和 HAProxy。
    Resource Agent为用于控制服务启停、监控服务状态的脚本集合,本地资源管理器(LRM)调用这些脚本来启动、停止、监控各种集群资源。
    Cluster Glue包含一套函数库和工具,在集群栈中,除集群消息传输(由 Heartbeat 承担)、集群资源管理(由 Pacemaker 承担)和资源代理(由 Resource Agent 承担)功能外,其他功能都由 Cluster Glue 来完成。它包含的两个主要部分是 LRM 和 Stonith,前者是本地资源管理器,后者的任务是隔离故障机器。

    通过心跳信号(Heartbeat)检测故障,一台好的计算机会不断向其他计算机发送心跳信号,也会接收其他计算机发送过来的心跳信息。当在规定的时间内没有收到对方计算机的心跳信号时,就启动应急预案,进一步确认故障并准备接管那台计算机的任务。

    例如,我们采用两台 LVS 计算机,并分别安装和配置 Linux-HA,一台 LVS 计算机作为工作机,另一台作为备份机,两台 LVS 计算机互相监督对方的运行状态。当工作机故障时,备份机接管负载均衡任务并报警。相反,当备份机出故障时,只报警,提醒技术员维修备份机。

    两台LVS计算机同时出故障是比较糟糕的情况,不过这种情况发生的概率很小,除非机房断电或者遭到雷击。对于一些非常关键的应用,可以增加参与负载均衡的服务器数量来提高可靠性,如民航飞机上采用 5 台服务器。

    4. 静态网站服务器

    我们浏览一家公司的网站时,很可能就是跟那家公司服务器上的 Apache 程序打交道,网页浏览器与 Apache 成了标准的 C/S 模式,浏览器是客户端,而 Apache 是服务端。Apache 首先把主页对应的文件 index.html 发给我们,我们看到主页内容后,点击主页上的某个链接,它又把该链接对应的文件发给我们,过程如图 3 所示。

    访问静态网页的过程
    图 3 访问静态网页的过程

    配合 PHP 引擎,Apache 也支持 PHP 动态网页。过程为:

    1)当 Apache 收到用户要浏览的 PHP 文件后,把这个 PHP 文件发给 PHP 执行引擎。

    2)PHP 执行引擎执行该 PHP 文件,产生一个临时的静态网页文件并发回给 Apache。

    3)最后 Apache 把这个临时的静态网页文件发给用户。

    采用 Perl、Python 和 Ruby 脚本语言编写的动态网页,其工作过程与 PHP 类似。

    Apache 是最流行的开源网站服务器,在世界排名前 100 万的网站中,有 60.6% 的网站采用 Apache;在排名前 1000 的大型网站中,Apache 占到了 34.5%,而 Ngnix 占到了 34.9%,略胜于 Apache。

    5. 动态应用服务器

    开源的动态应用服务器有 JBoss、Tomcat、Geronimo、JOnAS,关于这些项目更详细的介绍,请参考相应的官方网站。

    DNS、DHCP、Kerberos和Radius:云计算基础服务组件

    基础服务组件包括 DNS、DHCP、用户管理、身份鉴别、权限管理、事后审计、域控等。

    1. DNS

    DNS 是一个倒树形结构的分布式数据库,里面存储的信息主要有 IP 地址到域名的映射记录、域名到 IP 地址的映射记录、邮件路由记录等。Bind 就是用于实现这个数据库并且允许人们通过域名查询 IP、通过 IP 查询域名或者查询邮件服务器的信息等,我们在配置计算机网卡参数时要指定多个 DNS 服务器 IP 地址。

    在中国,这些 DNS 服务器大部分都在电信机房,如果不设置或者 IP 地址设置错误,则计算机无法上网。不过,建议大家使用谷歌提供的 DNS 服务器,IP 地址是 8.8.8.8 和 8.8.4.4,速度快又方便记忆。

    BIND(Berkeley Internet Name Domain)是一款开源的 DNS 服务器软件,是目前互联网上使用最广泛的 DNS 服务器软件,能在各种流行的操作系统上运行。现由互联网系统协会负责开发与维护,可从该组织的官方网站 http://www.isc.org/ 下载源代码,然后编译安装,目前稳定版本是 9.11.0。

    2. DHCP

    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)允许一台计算机通过 DHCP 服务器自动获取网络配置参数,如网卡的 IP 地址、网关、掩码和主机名字等,这样只要启动计算机就能上网,而不用手工去配置计算机的网络参数。

    DHCP 服务器的第二个功能是定义一些与自动安装操作系统有关的参数,比如一台计算机设置从网卡启动,只要 DHCP 服务器配置了 PXE 启动有关的参数,那么用户的计算机就能自动根据配置参数来启动或者安装操作系统,而不管原来有没有安装操作系统。这一点在可伸缩云端和零存储云终端的环境下非常有用,服务器随时加入随时启用,云终端启动就自动下载统一的操作系统内核并运行统一的登录程序。

    dhcp3-server 和 isc-dhcp-server 都是目前比较流行的开源 DHCP 软件项目,前者已经被广泛使用;后者发展迅速,操作系统 Ubuntu12.04 版本开始使用它了。isc-dhcp-server 也是由互联网系统协会负责开发与维护的,可从该组织的官方网站 http://www.isc.org/ 下载源代码,然后编译安装,目前稳定版本是 4.3.5。

    3. Kerberos

    Kerberos 这一名词来源于希腊神话“三个头的狗——地狱之门守护者”。但在 IT 领域,Kerberos 是指一种计算机网络上的身份认证协议,主要用来在非安全的计算机网络中,对个人通信以安全的手段进行身份认证。

    Kerberos 又指麻省理工学院为这个协议开发的一套计算机软件(参见官方网站 http://web.mit.edu/kerberos/),软件设计上采用客户机/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证,可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥机制进行密钥管理的系统。Kerberos 的扩展产品也使用公开密钥加密方法进行认证。

    当有 N 个人使用该系统时,为确保在任意两个人之间进行秘密对话,系统至少保存有其与每个人的共享密钥,所需的最少会话密钥数为 N 个。Kerberos 身份认证流程如图 1 所示。

    如果想进一步了解 Kerberos 的原理,请在网上搜索“Kerberos 原理对话”,其以四幕话剧的形式来阐述 Kerberos 的原理,非常经典。

    Kerberos 可用来部署单点登录环境——只要记住一个密码就能登录到任何一个应用,类似购买景点通票。微软的 AD 域就采用了 Kerberos。另外,图 2 所示是笔者为国内一家大型企业部署的单点登录草图,实现了企业内部上千台 Linux 服务器的单点登录。

     Kerberos 身份认证流程
    图 1 Kerberos 身份认证流程

    某大型企业部署的单点登录草图
    图 2 某大型企业部署的单点登录草图

    另一套采用 Kerberos 实现身份认证和权限管理的开源软件是 OpenAM/OpenDJ/OpenIDM,由 ForgeRock 公司开发和维护,可从其官方网站 https://forgerock.org/downloads/ 下载软件源代码。

    OpenAM 提供集中认证、授权、单点登录,以及与其他单位建立联邦治理的全面解决方案,它是完全开源的,其前身是 Sun 公司的 OpenSSO。OpenAM 具有高度可扩展的、模块化的、易于部署的架构,具体包括如下内容。

    1)身份认证

    允许通过使用者的周边信息实现动态的身份识别,使用者的周边信息包括地理位置、时区、IP地址、接入设备、一天的特定时点等,当然也支持密码认证。身份认证模块相当于门卫,控制哪些人可以进入,哪些人不可以进入,至于进去后能做什么事情,它不会加以限制。

    2)权限管理

    根据事先定义好的权限和策略方案来控制用户登录后的行为,即允许他能做什么,不能做什么。

    3)联邦和单点登录

    每个用户只需一个账户和密码,就可以访问众多的应用系统和网络资源。想必大多数人都有过这样的痛苦经历:要记住众多的用户名和密码,以便访问许多系统,如邮件系统、工作网站、论坛、微博等,单点登录彻底解决了这个问题。

    4)外围系统认证集成

    允许集成认证目前流行的社交网站,如推特、脸谱、微博等。

    5)自适应风险评估

    根据登录用户的操作行为来评估其动机,如果怀疑其动机不纯,那么自动提升身份级别鉴别,要求提供额外的身份信息,以便进一步确认其真实身份。

    OpenDJ 是一款遵循 LDAPv3 协议的目录服务器,采用 Java 语言开发,完全开源。它的前身是太阳微系统公司的 OpenDS 项目,现在由 ForgeRock 公司接手。用 OpenDJ 可以搭建高性能、高可用性和高安全性的企业级目录服务系统,处理上千万条数据记录,响应时间均在毫秒级以内。

    OpenDJ 允许多主/复制部署(Multi-Master),数据可以集中式存储,也可分布式存放,这一点要优于另一个目录服务开源项目——OpenLDAP。另外,OpenDJ 消耗很少的计算机资源(CPU、内存等),由于是纯 Java 开发,所以 OpenDJ 可以在任何平台上运行。

    利用 OpenIDM,企业可以轻松集中管理用户信息,包括用户账号和权限管理,适合在企业级、云端和移动社交网络使用。

    另外,耶鲁大学开发的 CAS 项目也是非常有名的认证系统,官方网站为 https://www.apereo.org/projects/cas/

    4. Radius

    Radius 是指局域网接入认证,用于解决一台计算机需要认证才能接入和使用局域网的问题。比如一个公司外的人带了笔记本电脑进来,他找到一根网线插入笔记本电脑,如果他能使用公司内部的局域网(不管是自动分配 IP 还是手工配置网卡参数),那么这时公司内部的很多资源就面临危险,因为一个恶意的人就可以做网络窥探、运行额外的 DHCP 使网络紊乱、广播病毒、端口扫描、消耗网络带宽等。

    有了局域网接入认证系统后,只有合法的设备(通常捆绑了网卡的 Mac 地址)才能接入局域网,没有事先登记的设备被拒绝接入,即使配好了网卡参数。

    FreeRadius 是一款开源的实现局域网接入认证的软件,可从网站 http://freeradius.org/ 下载源代码,目前稳定的版本是 3.0.12。具体的认证示意图如图 3 所示。

    FreeRadius认证过程
    图 3 FreeRadius 认证过程

    云计算管理工具简介

    首先我们看看一个基于虚拟机的 IaaS 云端的形成过程。

    虚拟机要运行在虚拟机软件里,而虚拟机软件运行在物理机上。一台物理机通过虚拟机软件可以虚拟出多个虚拟机,虚拟机里再安装 Windows 或者 Linux 操作系统及各种应用软件,然后用户通过远程桌面等方式连接到虚拟机并使用虚拟机中的应用软件。如果一个云中心只有一台物理机,那么只要一个虚拟机软件即可,到此一个最小的准云端就创建完成了。

    接下来继续增加物理机,每台物理机上运行多个虚拟机,这样云端虚拟机的数量就增加了很多。但是问题来了,如何避免因为一些物理机故障导致部分云终端用户不能使用虚拟机?为了解决这个问题,人们引入了集群技术,允许虚拟机在集群中的任何一台机器上运行,这样故障机器上的虚拟机就能“漂移”到其他机器上并继续运行。

    但这样又产生了一个新的问题,那就是如何保存虚拟机本身(虚拟机就是对应宿主机上的若干文件)才能确保“漂移”动作既快速又正确地完成呢?对此,人们又引入了中央存储技术,即把全部的虚拟机镜像文件保存在中央存储设备上,让集群里的物理机都能共享访问。这样,一个由多台物理机组成集群、由多个集群组成的云端雏形就形成了。

    然后我们又会自然而然地想到其他问题:

    如何管理云端众多的虚拟机?

    于是人们开发了云端管理工具,采用此工具可以很轻松地创建、删除、迁移、启动、关闭、冻结和备份虚拟机。

    如何给多台虚拟机组建网络?

    为此,人们又发明了虚拟网卡、虚拟交换机、网络功能虚拟化和软件定义网络技术。

    云端最核心的部分就是虚拟化软件、中央存储设备和虚拟机管理工具(有的人喜欢称云管理平台,甚至直接称云计算操作系统)。称其为“云计算操作系统”是有一定道理的,与计算机操作系统(如 Windows、Linux 等)类似,计算机操作系统的核心功能是管理进程,只有进程才能申请资源(CPU、内存、打印机等);而在云端,虚拟机是申请资源(计算、存储、网络等)的基本主体,管理虚拟机是云计算操作系统最核心的功能。但是云计算操作系统远没有计算机操作系统那么复杂,称其为操作系统有点夸大其词。

    云管理工具分为 IaaS、PaaS 和 SaaS 3 种类别,SaaS 类别的云管理工具与网店差不多,主要是租户注册、自助、购买、结算等,与业务关联性大,所以目前没有统一的标准版产品。比如,针对一款大型可靠性软件系统的云化项目,SaaS 云管理软件包含两大部分:一是 SaaS 业务门户,二是 SaaS 管理门户,其结构分别如图 1 和图 2 所示。

    SaaS业务门户组成
    图 1 SaaS 业务门户组成

    SaaS管理门户组成
    图 2 SaaS 管理门户组成

    尽管框架类似,但由于 SaaS 云计算与具体的应用软件紧密相关,所以截至目前,还没有出现通用的开源或者商业化的 SaaS 云计算管理工具。目前的 SaaS 云计算提供商都是自己开发自己使用。

    PaaS 管理工具有红帽公司的 Openshift 和 Cloud Foundry 社区的 CloudFoundry,两者都是开源的,在 https://financesonline.com/ 网站上,Openshift 的得分要高于 CloudFoundry。

    下面我们分四节介绍一下常用的云计算管理工具:

    OpenStack是什么?

    OpenStack 是当今最具影响力的云计算管理工具——通过命令或者基于 Web 的可视化控制面板来管理 IaaS 云端的资源池(服务器、存储和网络)。它最先由美国国家航空航天局(NASA)和 Rackspace 在 2010 年合作研发,现在参与的人员和组织汇集了来自 100 多个国家的超过 9500 名的个人和 850 多个世界上赫赫有名的企业,如 NASA、谷歌、惠普、Intel、IBM、微软等。

    OpenStack 系统或其演变版本目前被广泛应用在各行各业,包括自建私有云、公共云、租赁私有云及公私混合云,用户包括思科、贝宝(Paypal)、英特尔、IBM、99Cloud、希捷等,具体名请参考网站 http://www.openstack.org/user-stories

    OpenStack 支持 KVM、Xen、Lvc、Docker 等虚拟机软件或容器,默认为 KVM。通过安装驱动,也支持 Hyper-V 和 VMware ESXi,不过有些功能暂时不支持,具体的虚拟机管理器支持矩阵参见网站 http://docs.openstack.org/developer/nova/support-matrix.html

    OpenStack 采用 Python 语言开发,遵循 Apache 开源协议,因此相比 CloudStack 来说,更轻量化,效率更高。

    OpenStack 每半年发行一个新版本,截至发稿前最新版本是第十四版本 Newton,不同于其他软件的版本号采用数字编码,OpenStack 采用一个单词来描述不同的版本,其中单词首字母指明版本的新旧。比如目前的版本 Newton 就比之前的 Mitaka 要新,同时“N”在 26 个字母中排行第十四,所以称第十四版本。各个版本的发行时间表参考网站 https://releases.openstack.org/

    围绕 OpenStack 发展起来的企业很多,为客户提供 OpenStack 实施、培训、运维、定制等业务,之前企业总是或多或少地加入自己的一些封闭技术,从而导致 OpenStack 的互操作性受损。为此,2015 年 OpenStack 基金会在温哥华峰会上正式推出互操作性认证,通过认证的产品被贴上“OpenStack Powered”标识。

    虽然第一批只有 14 家厂商经过认证测试,但这却是一个重要的里程碑事件,基金会已经拿出足够的诚意来解决问题,并且众多厂商也开始真正跟进。对用户而言,选择经过认证的云服务提供商,能够实现在不同 OpenStack 云计算之间的自由迁移。

    OpenStack 生态系统已从“孵化/集成”模式转移到“大帐篷”模式,在此模式下,既保持了对规模较小的核心项目的关注,也积极鼓励在更广泛的主流生态环境中的自由创新,而以前的“孵化/集成”模式只是把孵化成功的项目集成到主流生态中。

    “大帐篷”模式把 OpenStack 的组件进行分类,目前包括 6 个核心组件(Nova、Neutron、Swift、Cinder、Keystone、Glance)和 14 个可选组件,每个组件包含若干个服务,后续版本中组件分类及数量都可能会发生变化,如图 1 所示。

     “大帐篷”模式下的组件
    图 1 “大帐篷”模式下的组件

    表 1 列出了 Newton 版本中各个组件的功能介绍。

    分类组件名称功能
    核心组件Nova管理虚拟机的整个生命周期:创建、运行、挂起、调度、关闭、销毁等。这是真正的执行部件。接受 DashBoard 发來的命令并完成具体的动作。但是 Nova 不是虛拟机软件,所以还需要虚拟机软件(如 KVM、Xen、Hyper-v 等)配合
    Neutron管理网络资源,提供/一组应用编程接口(API),用户可以调用它们来定义网络(如 VLAN ),并把定义好的网络附加给租户。Networking 是一个插件式结构,支持当前主流的网络设备和最新网铬技术
    SwiftNoSQL 数据库,类似 HBase,为虚拟机提供非结构化数据存储,它把相同的数据存储在多台计箅机上,以确保数据不会丢失。用户可通过 RESTful 和 HTTP 类型的 API 来和它通信。这是实际的存储项目,类似 Ceph,不过在 OpcnStack 具体实施时,人们更愿意采用 Ceph。
    Cinder管理块设备,为虚拟机管理 SAN 设备源。但是它本身不是块设备源, 需要一个存储后端来提供实际的块设备源(如 iSCSI、FC等)。Cinder 相当于一个管家,当虚拟机需要块设备时,询问管家去哪里获取具体的块设备。它也是插件式的,安装在具体的 SAN 设备里。Cinder 支持的存储后端品牌参见 https://wiki.openstack.org/wiki/CinderSupportMatrix,驱动参见 https://github.com/openstack/cinder/tree/master/cinder/volume/drivers。
    Keystone为其他服务提供身份验证、权限管理、令牌管理及服务名册管理。要使用云计算的所有用户事先需要在 Keystone 中建立账号和密码,并定义权限(注意:这里的“用户”不是指虚拟机里的系统账户,如 Windows 7 中的 Administrator )。另外,OpenStack 服务(如 Nova、Neutron、Swift、Cinder 等)也要在里面注册,并且登记具体的 API,Keystone 本身也要注册和登记 API
    Glance存取虚拟机磁盘镜像文件,Compute 服务在启动虚拟机时需要从这里获取镜像文件。这个组件不同于上面的 Swift 和 Cinder,这两者提供的 存储是在虚拟机里使用的
    可选组件Horizon提供了一个网页界面,用户登录后可以做这些操作:管理虚拟机、配置权限、分配 IP 地址、创建租户和用户等。本质上就是通过图形化的 操作界面控制其他服务(如 Compute、Networking 等)。当然,如果你熟悉命令,也可以直接采用命令来完成相应的任务
    Heat如果要在成千上万个虚拟机里安装和配置同一个软件,该怎么办?采用 Orchestrates 是一个不错的主意,它向每个虚拟机里注人一个名叫 heat-cfntools 的客户端工具,然后就能同时操作很多虚拟机
    Sahana使用户能够在 OpenStack 平台上(利用虚拟机)一键式创建和管理 Hadoop 集群,实现类似 AWS 的 EMR(Amazon Elastic MapReduce Service)功能。用户只需要提供简单的配置参数和模板,如版本信息(CDH 版本)、集群拓扑(几个 Slave、几个 Datanode)、节点配置信息(CPU、内存)等,Sahara 服务就能够在几分钟内根据提供的模板快速 部署 Hadoop、Spark 及 Storm 集群。Sahana 是一个大数据分析项目
    Ironic把裸金属机器(与虚拟机相对)加人到资源池中
    ZaqarZaqar 为 Web 和移动开发者提供多租户云消息和通知服务,开发人员可以通过 REST API 在其云应用的不同组件中通过不同的通信模式(如 生产者/消费者或发布者/订阅者)来传递消息
    Ceilometer结合 Aodh、CloudKitty 两个组件,完成计费任务,如结算、消耗的 资源统计、性能监控等。OpenStack 之所以能管理公共云,一是因为 Ceilometer 的存在,二是因为引人了租户的概念
    Barbican是 OpenStack 的密钥管理组件,其他组件可以调用 Barbican 对外暴露的 REST API 来存储和访问密钥
    Manila为虚拟机提供文件共享服务,不过需要存储后端的配合
    其他组件:Congress(策略服务)、Designate(DNS 服务)、Freezer(备份及还原服务)、Magnum(容器支持)、Mistral(工作流服务)、Monasca(监控服务)、Searchlight(索引和搜索)、Senlin(集群服务)、Solum(APP集成开发平台)、Tacker(网络功能 虚拟化)、Trove(数据库服务)

    各个组件的关系图如图 2 所示。

    OpenStack组件关系图
    图 2 OpenStack 组件关系图

    OpenStack 的组件众多,根据云端的实施过程,再结合图 2,我们来梳理一下各个组件的作用:云端要运行很多虚拟机,所以需要在很多服务器中安装并运行虚拟机软件(如 KVM、Xen 等),有的客户为了安全起见,愿意出高价直接租赁物理机(裸金属机器),所以要用 Ironic 组件来池化物理机,以便用户能远程使用。

    这些运行了虚拟机软件的服务器和被池化的物理机统称为计算节点。为了让 Horizon 组件以可视化的 Web 页面来统一操纵计算节点上的虚拟机,需要在计算节点上安装 Nova 组件,Nova 组件还与其他组件打交道。为了让一台虚拟机能在集群内的任一计算节点上快速漂移,虚拟机对应的镜像文件必须存放在共享场所,到底存放在哪里,由 Glance 组件指定。

    例如在图 4 中,由 Glance 指定存放在 Swift 组件内,在实际的实施案例中,也可以存放在 Ceph 中。虚拟机之间需要联网,由 Neutron 组件负责。虚拟机里面可能还要使用块设备(如硬盘),这需要 Cinder 组件的配合;虚拟机里可能需要用到共享文件服务,由 Manila 组件提供服务。

    云端的计算节点很多(如 1000 台),所以虚拟机就更多(如 10 万台),如果要给它们统一安装一个软件或配置某项参数,那么是不是需要手工一台一台操作呢?显然,手工操作费时费力,而且容易出错,有了 Heat 组件,我们就可以轻松完成这个任务。

    OpenStack 的各个组件都是对外暴露 REST API 接口,以便于其他程序调用,调用时都要进行身份验证和权限管理,这由 Keystone 组件完成。跟踪用户消耗的资源并计费的任务由 Ceilometer 组件完成(需要 Aodh 和 CloudKitty 组件的配合)。

    对于 OpenStack 管理的 IaaS 云服务,有人想在上面部署 Hadoop 大数据分析系统怎么办?这时 Sahala 组件可以帮上忙。各组件之间需要通过消息互相联络,所以 Zaqar 和 RabbitMQ 就派上用场了。另外,很多组件需要在数据库中保存配置数据,所以需要用到数据库管理系统(如 MySQL)。

    OpenStack 组件的主要作用是充当“中间人”,它不履行具体的实际任务,而由各种第三方软件来完成,比如虚拟机软件由 KVM 承担,网站任务由 Apache 承担,虚拟网络任务由 iptables、DNSmasq、Linux vSwitch、Linux 网桥承担或者统一由 OpenContrail 承担,结构化数据存储任务由 MySQL 或者 PostgreSQL 承担,中央存储任务由 Ceph 承担(也可采用其他产品)。当然,OpenStack 中也有实现具体功能的组件,比如 Swift 做中央存储,我们也可以选择相对发展多年并且被大量使用的第三方产品,如 Ceph。

    一个云端往往包含成千上万台服务器,而且还可能分布在世界各地,分别服务符合延时半径范围内的用户。OpenStack 中的“地区”(Region)就是对应地理位置不同的分中心,如中国北京、美国纽约、英国等。

    在同一个 Region,还可能包含成千上万台机器,如果用一套 OpenStack 中的组件来管理,势必会导致这些组件本身成为瓶颈(随着集群规模的不断增大,消息系统和数据库系统很可能最先成为瓶颈),所以人们又引入了 Cell 功能,以便增强 OpenStack 集群的扩展性,即把一个 Region 划分成多个 Cell,这些 Cell 组成树形结构,父 Cell 主要用于服务通信,它不包含计算节点,子 Cell 具有自己的消息队列、数据库和 Noval-cell 服务。

    Nova cell 在 OpenStack 的 Newton 版本中将成为默认项,之前的版本是可选项。在创建虚拟机时,为了规定它能在哪些计算节点集上运行,人们又提出了两个概念,即“可用域”(Availability Zones,AZ)和“主机集”(Host Aggregates,HA),前者可以看成后者的一个特例。

    “主机集”其实就是根据计算节点的某些属性对计算节点进行逻辑分组的方法,比如可以分成如下几个“主机集”:万兆网卡的机器、拥有两路 CPU 的机器、惠普机器、自组装的机器、A 机柜里的机器、由 UPS 供电的机器等。然后我们创建一台虚拟机,指明在上海云端分部的惠普机器上运行,这样只要全部的惠普机器不同时坏,那么虚拟机就能一直正常运行(但每一时刻只能在一台机器上运行,只有当运行的那台机器出故障时,才会“漂移”到其他惠普机器上继续运行)。

    “可用域”是用户可见的,用户把自己的多个虚拟机分散到不同的“可用域”中,是为了降低所有虚拟机同时不可用的概率,而“主机集”是管理员可见的,目的是用来隔离虚拟机,从而降低一些特定虚拟机的运行行为对其他虚拟机产生的影响。Region、Cell(第 2 版本)、AZ、HA 的关系如图 5 所示。

    从图 3 中可以看出,多个 Region 允许共享 Keystone 和 Horizon 服务,也可以完全独立。HA 可以跨 Cell,但是不能跨越 Region,一台机器可以同时属于多个 HA,因为 AZ 是 HA 的特例,所以一台机器允许同时属于 AZ 和 HA。当一个创建虚拟机的请求到达父 Cell 的 Nova-API 时,父 Cell 会通过 Nova-cell 向各个子孙 Nova-cell 广播请求,并一次性决定在哪个子孙 Cell 中的哪台计算节点上创建虚拟机。

    Region、Cell(第2版本)、AZ、HA的关系
    图 3 Region、Cell(第2版本)、AZ、HA 的关系

    在具体部署 OpenStack 时应该遵循“逐步扩展部署法”,如图 7 所示。

    OpenStack逐步扩展部署法
    图 7 OpenStack 逐步扩展部署法

    最小系统具备基本的 IaaS 功能,能通过命令来进行管理,这一步只需安装 OpenStack 的 Keystone、Neutron、Nova 和 Glance 四个组件;此后再安装 Horizon 就成了小系统,这时可通过 Web 图形化界面来执行管理;继续安装 Swift 和 Cinder 就成了准系统,这时能给虚拟机附加磁盘块设备,并能满足大规模的存储需求;再加上计费组件 Ceilometer,就上升为一般系统,一般系统具备公有 IaaS 的功能。但是由一般系统跨到生产系统,需要完成的工作就特别多,其中性能和安全是两个不得不面对的棘手问题。

    图 6 中标注的 Iptables(设立门卫)、Selinux 或 Apparmor(加固系统)和 Snort(巡逻)都是为了强化安全。性能和安全涉及的知识太多,这里不再展开讨论。图 7 取自网上,主要考量了安全当中的可用性,供大家参考。

    CloudStack(CloudPlatform)是什么?

    思杰(Citrix)收购 CloudStack 后让其开源,并捐献给 Apache 基金会(项目网站 http://cloudstack.apache.org/),让世界上许许多多的开源软件爱好者参与开发、测试和讨论。

    当社区版趋于稳定时,思杰公司及时把它转化为服务收费版 CloudPlatform。2016 年 1 月思杰把 CloudPlatform 出售给了 Accelerite 公司,自己又重回 OpenStack 的怀抱,曾经离开时思杰痛陈 OpenStack 的数条罪状,至今让人记忆犹新。采用 CloudStack 或 CloudPlatform 管理的云端逻辑架构图如图 7 所示。

     OpenStack高可用性部署架构图
    图 6 OpenStack高可用性部署架构图

    CloudPlatform管理的云端逻辑架构图
    图 7 CloudPlatform 管理的云端逻辑架构图

    从图 7 可知,整个云端包含若干个 Region(地区,可以理解为地理位置上的一个城市、一个省份等),默认情况下只有一个 Region。每个 Region 包含多个 Zone(大致相当于数据中心,也允许一个实际的数据中心划分为多个 Zone),每个 Zone 又包含若干个 Pod(相当于机柜,一个 Pod 中的机器位于同一个子网中)和若干个二级存储,每个 Pod 又包含若干个 Cluster(集群),每个集群又包含若干台 Host(服务器)和若干主存储。

    一个集群不能跨越多个 Pod。每个 Zone 的 Secondary Storage(二级存储)存放与该 Zone 相关的虚拟机模板、操作系统的 ISO 安装镜像文件和磁盘卷快照。

    Cluster 中的 Primary Storage(主存储)存放虚拟机镜像文件,这些虚拟机可在集群中的任一台 Host 上运行,当一台 Host 发生故障时,其上的虚拟机将被转移到同一集群中的其他 Host 上,并一直保持运行状态,这叫作热迁移;相反,冷迁移要求先关闭虚拟机,然后再在其他计算机启动虚拟机,所以在冷迁移过程中,用户是无法使用虚拟机的。

    CloudStack 或 CloudPlarform 安装在 Management Server(管理服务器)上,其能管理的虚拟机软件有:Xen、RedHat KVM、Citrix XenServer、VMware vSphere、Oracle VM(OVM)等,可以说绝大部分软件都支持。允许多台 Management Server 机器组成管理集群,当然也可以用一台,但是一台可靠性很差,会形成单点故障。

    CloudStack 采用 Java 语言开发,采用 Tomcat 做应用服务器,采用 MySQL 开源数据库存储配置信息。CloudPlatform 自带了一个安装脚本,利用它安装云端管理工具比较方便,即通过“点菜(单)”方式。云计算管理工程师通过工作台式机或者笔记本、平板电脑使用网站浏览器打开管理服务器上的 Web 页面:http://<管理服务器IP地址>:8080/client,即可登录管理页面。

    关于 Apache CloudStack 中各种概念更详细的介绍,请参见其官方网站 http://docs.cloudstack.apache.org/en/latest/concepts.html

    CloudPlatform 能管理私有云、公共云和公私混合云,在生产环境中,建议采用 CloudPlatform,而不要采用 CloudStack。

    谈谈Eucalyptus云端管理工具

    桉树(Eucalyptus)云管理工具被慧与公司收购后改名为 Helion Eucalyptus,其继续开源,不过在 OpenStack 的竞争下,桉树发展渐行渐远,昔日风光已不在。

    桉树是一个基于 Linux 的模块化的软件架构,在企业现有的 IT 基础架构中部署可扩展的高效私有云或混合云,属于本地 IaaS 云。为了隔离不同用户的网络流量及允许多个集群同属于一个局域网,桉树提供了一种虚拟叠加网络技术。另外,桉树提供的 API 兼容亚马逊的 EC2、S3、IAM、ELB、EC2 资源自动伸缩和云监控服务,这些都便于人们使用桉树部署混合云。

    桉树由若干个组件组成,这些组件之间的关系如图 8 所示。

    桉树各个组件之间的关系
    图 8 桉树各个组件之间的关系

    1)云控制器(Cloud Controller,CLC)

    在很多部署案例中,云控制器和面向用户的服务(UFS=User-Facing Services)一般安装在同一台服务器上,这台服务器也就成了管理员、开发员、项目经理和终端用户进入云端的入口点。CLC 处理具有持久性并且作为 UFS 的后端。桉树的一个部署实例只允许存在一个云控制器。

    2)面向用户的服务(User-Facing Services,UFS)

    桉树提供了很多兼容 AWS 的服务,如 EC2(计算)、AS(EC2资源自动伸缩)、CW(云监控)、ELB(负载均衡)、IAM 等,UFS 为这些服务提供了 API 调用接口。一个桉树部署实例允许存在多台 UFS 服务器。

    3)管理控制台

    是基于 Web 的可视化的管理桉树云的界面,直观、易用。管理控制台一般与 UFS 部署在同一台服务器上,一个桉树云实例允许存在多个管理控制台服务器。

    4)对象存储网关(Object Storage Gateway,OSG)

    一方面负责把用户的请求传递给对象存储提供者,另一方面和持久存储层(数据库)合作完成身份认证。

    5)对象存储提供者(Object Storage Provider,OSP)

    可以是桉树自带的 Walrus 组件,也可以是第三方的 Riak S2。Riak S2 兼容亚马逊 S3 和 OpenStack 的 Swift,能灵活扩展并存储数 P 级的数据,数据对象类型包括图片、文本、视频、文档、数据库备份以及二进制程序。

    6)集群控制器(Cluster Controller,CC)

    必须部署在能同时与计算节点控制器和云控制器联网的机器上,集群控制收集集群内计算节点的信息并把虚拟机调度到特定的计算节点上。集群控制器通过管理组网模式和非VLAN管理组网模式两种方式管理虚拟机的网络,这两种组网模式会使用户到虚拟机的网络流量都通过集群控制器,而边沿组网模式就不存在这个缺点。集群内的所有计算节点必须处于同一个网段。

    7)存储控制器(Storage Controller,SC)

    类似亚马逊的弹性块存储(EBS),SC 支持大多数的存储设备作为其存储后端,SC 暴露出的存储卷可以附加到虚拟机上,并且在虚拟机里面被当作原始块设备,用户可以分区和格式化这些原始块设备。

    EBS 卷可以在 VM 终止后继续被保留,因此通常用于存储持久数据。在同一时刻,一个 EBS 卷只能附加到一台虚拟机,而且只能用于虚拟机所在的那个 Zone。对此,用户可以对 EBS 创建快照,对象存储网关把快照存储到指定的地方,并且其他的可用 Zone 都能使用这些快照。在桉树云中,支持使用企业级的 SAN 存储设备作为 SC 的存储后端。

    8)计算节点控制器(Node Controller,NC)

    安装并运行在虚拟机的宿主机上。NC 控制虚拟机的活动(包括虚拟机的运行、检查和终止),获取并维护本地缓存中的虚拟机镜像,同时轮询和控制宿主机的系统软件(操作系统和虚拟机软件),以便响应集群控制器的请求。NC 通过边沿组网模式管理虚拟机的网络。

    Oracle VM Manager简介

    在 IT 行业,Oracle 公司具有举足轻重的地位,Oracle 公司发行的虚拟化管理工具 Oracle VM Manager,采用 Java 语言开发,图 9 所示是 Oracle 公司官方给出的虚拟环境架构图。严格意义上讲,Oracle VM Manager 只是虚拟机管理工具,而不是云管理工具。

    Oracle VM Manager虚拟环境架构图
    图 9 Oracle VM Manager虚拟环境架构图

    从图 9 可以看出,云端由若干服务器池和一个外部存储组成,每个服务器池包含若干台服务器(称为计算节点)。服务器池可以是集群,也可以不是集群。

    服务器池中的计算节点上安装 Oracle VM Server 虚拟软件(基于 Xen 虚拟化技术),然后运行若干个 dom。其中 dom0 为管理 dom,里面安装和运行 Oracle VM Agent,dom0 有权限访问硬件和驱动,并且负责与 OracleVM 管理器通信。其他 dom 统称为 domU,为用户使用的普通虚拟机,由 dom0 启动并管理。

    客户端“自定义的应用程序”是指 Oracle Enterprise Manager 或者采用 Web Service API 编写的应用程序或脚本。

    基于 Oracle VM Manager 的云计算解决方案中,支持虚拟机热迁移——在不关闭虚拟机的情况下,从一台服务器移动到同一个服务器池中的另一台服务器上继续运行。在迁移的过程中,虚拟机的状态为 Migrating(迁移)。


    转载于:http://c.biancheng.net/cloud_computing/

    展开全文
  • 教程内容(每节课平均约20分钟): 1.数据库中间件-前言 2.数据库中间件-HP介绍 3.数据库中间件-mysql介绍 4.数据库中间件-JSON介绍 5.数据库中间件-建立通讯框架 6.数据库中间件-建立数据通讯 7.数据库...
  • Sybase EAServer 4.1高级程序员教程,讲解了如何采用该中间件进行程序开发
  • 关于 Laravel ORM 对 Model::find 方法进行缓存_PHP开发框架教程下面由Laravel开发教程栏目给大家介绍Laravel ORM 中你不知道的骚操作,希望对需要的朋友有所帮助!前段时间做项目时候,想要在不改变方法签名的情况...
  • 阿里云大学免费课程:【分布式架构】分布式消息中间件MQ开发教程 课程介绍: 阿里云消息队列MQ(Message Queue)是企业级互联网架构的核心产品,服务于整个阿里巴巴集团已超过8年,经过阿里巴巴交易核心链路反复...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,794
精华内容 10,317
关键字:

中间件开发教程