公有云环境下应用程序的自动化部署与水平扩展问题

先介绍了一下公有云计算环境下的一些特点,再根据这些特点探讨一下作为云计算用户而言,如何对应用程序做好自动化部署和水平扩展(弹性计算)的问题。阅读本文需要有一定的云计算知识、开发运维知识。

公有云环境的优势及其特点

公有云为企业用户或个人用户(以下统称为用户)可提供三种服务,基础服务、应用服务和运维服务。

基础服务,为用户节省了服务器、网络、存储等硬件成本以及这些硬件相关的运维成本,通过虚拟化这一核心技术能让用户通过公有云服务平台使用和管理自己硬件资源。

应用服务,为用户提供可用性和可靠性等系统级解决方案,如负载均衡、智能DNS、CDN等了;为用户的软件等应用程序提供应用级解决方案,包括文件共享、对象存储、关系型/非关系型数据库等。

运维服务,为用户提供安全防护、监控报警、虚拟机备份等功能,保证用户数据的机密和安全。

根据这些公有云的特点可以看出,用户将应用程序部署在公有云是非常方便和容易的,既能降低硬件成本和运维成本,又能利用云服务提供商提供的各种应用服务,又对用户的用户屏蔽了服务的具体细节,提升了用户体验和用户满意度(具体不一一详细列出)。

用户要做什么

用户要公有云是为用户本身或者用户的用户来提供服务的。用户有了公有云环境后,作为用户而言,要解决的问题的核心就在于如何在尽可能降低成本的情况下将用户体验和用户满意度最大化。

尽管相对于传统的计算和服务模式而言,公有云环境的是相当廉价的,但当用户的用户达到一定的数量时,几个云主机就不足以承担巨大的用户量,造成用户体验和用户满意度急剧下降,为此用户需要更合理的软件架构和服务提供方式。

关于系统架构,此处特指硬件基础架构已经由所选择的云计算环境所决定,因此暂时不做分析。

软件架构的改良包括提高单个软件或应用程序自身的可用性和可扩展性:能尽可能的选择合适的模型承载更多服务但占用更少的软硬件资源;软件或应用程序支持一定规模的水平扩展,以便于服务更多的用户。

服务提供方式,这个是说更好的部署升级方式,对用户而言产品/服务的变更升级变得更加的无缝和细腻,对开发人员和运维人员来说,要更加快速更加省力的开发、部署方式。

只有以上两者同时具备才能做好、维护好一个产品。

软件架构的改良

由于自身是运维出身,只能从系统架构和运维的角度对软件的开发上提出一些合理化的建议和要求,无非就是上面提到的提高单个软件或应用程序自身的可用性和可扩展性,这是为用户提供服务的基础,也是服务的开始。

自动化(部署、升级、变更等)

一套产品可能是由多个软件或应用程序共同完成的,而这些软件和应用程序可能用不同的语言或者工具开发的,因此对自动化部署的要求可能比较高,比如一套自动化部署工具可能不能满足由不同语言和开发工具开发出的软件和应用程序。针对操作系统的云端自动化部署提出了虚拟机模板(镜像)的概念,而针对应用程序自然也有虚拟化的相关概念,例如最近火热的docker这一应用虚拟化工具。

引入之前总结的IT架构概括,“原先传统模式是物理主机、操作系统和业务应用。当虚拟化、集群和高可用等技术发展较为成熟时,传统模式就形成了三种演变模式。第一种纵向发展(分层解耦合),典型的就是虚拟化的分层技术;第二种横向发展(单层(个体)解耦合),典型的就是无状态,无状态的特性使得横向扩展和动态伸缩变得更加容易,具有无关性(无依赖性)和无差别性(一致性);第三种就是混合发展,即纵向和横向都有,例如典型的例子就是硬件采用Cisco UCS结合VMware vSphere,然后再结合优秀的软件架构,实现高可用的业务系统。”

还是以分层为例,除了虚拟化中所提到的分层技术还应该不能忘记OSI和TCP的分层思想。毫无疑问,应用层是OSI和TCP的顶层,但应用层以上是什么还能有什么就没有一个固定的标准和模型来概括。可以将企业管理人员、最终用户、开发人员和运维人员等都容纳到应用程序之上。为了切近问题的实际,把应用层看作是各种软件和应用程序的基础(如应用层为软件和应用程序提供协议),可以把软件和应用程序拿到应用层之上,而自动化部署以开发运维的角度就可以拿到软件和应用程序之上。

应用的虚拟化可以说将应用层以上的软件和应用程序再虚拟出一层,有了应用虚拟层,所有的应用程序可以认为对自动化部署是无差别的,屏蔽了软件和应用程序的差异,所有的软件和应用程序对部署而言都是透明的,这样仅有一些简单配置的一套自动化部署工具或许就能实现部署、升级和变更的自动化。

TODO: 此处应该有图。

关于Docker

也许还有其他应用虚拟化方案,但docker可以被认为与软件和应用程序靠的最近的虚拟化提供工具。

借助docker可以实现在单一操作系统中同时快速部署多个隔离的应用,尽管这些应用可能需要持有不同的访问端口。

题外话:如果能有什么方法实现docker容器内部与宿主主机进行无端口无socket式的通信方法,也许会更让人觉得不可思议或是更不可理喻吧。

tag:差异化的自动化部署,IT架构总结,公有云计算优势和特点,应用虚拟化,docker自动化部署

--end--

时间: 2024-10-08 03:10:50

公有云环境下应用程序的自动化部署与水平扩展问题的相关文章

如何在Linux桌面环境下自动启动程序?

转自:http://os.51cto.com/art/201401/426464.htm 有时候,当你登录进入到Linux桌面后,可能想自动启动某个程序.这类启动程序在你登录进入到桌面后,可以进行面向整个系统的配置(比如自动代理),或者针对特定用户的桌面定制(比如Conky). 大多数Linux桌面环境有各自的图形用户界面(GUI),让用户可以配置针对特定用户的自动启动程序或服务. 我在本教程中将介绍如何在各种Linux桌面环境下,自动启动某个程序. GNOME桌面环境 在终端中运行这个命令,启

SpringCloud从入门到进阶(四)——生产环境下Eureka的完全分布式部署

内容 由于前两节的内容我们知道,开启了preferIpAddress后,Eureka的伪分布式部署会提示replica不可用.这一节我们讲解如何在生产环境下部署完全分布式的Eureka集群,确保开启了preferIpAddress后replica的可用性. 版本 IDE:IDEA 2017.2.2 x64 JDK:1.8.0_171 manve:3.3.3 SpringBoot:1.5.9.RELEASE SpringCloud:Dalston.SR1 适合人群 Java开发人员 节点信息: 节

CentOS7.X环境下源码包安装部署RabbitMQ3.7.17

本文介绍在CentOS7.X环境下源码包安装部署RabbitMQ3.7.17,使用docker安装很简单,这里我就不往文章中添加.在CentOS7.X环境下使用源码包安装还是有遇到不少坑的(使用yum安装的方式官方网站有介绍,比较简单),通过这篇我的个人实践操作,能够帮助到有需要的人.搭建环境:操作系统:CentOS7.5内存大小:16GB硬盘:100G注:正文中的参数与部署路径等,请根据实际需求修改.1.软件准备:wxWidgets-3.1.2.tar.bz2otp_src_22.0.tar.

记用vs调式docker环境下web程序的一处坑

若选择web项目支持https,此时launchSettings.json文件为: "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:54372", "sslPo

ThinkPHP环境下JS文件按模块部署

0.序言 一般来说,ThinkPHP的JS文件目录不是太友好:但允许修改参数确定JS的存放路径. 按照ThinkPHP的目录规范,JS文件一般视同静态资源处理,这样JS文件和视图htm文件将部署在两个完全不同的目录,即使二者属于同一应用.模块.通过Thinkphp提供的模板替换功能,配置模块的JS路径参数,可以将JS文件和普通视图文件都放在同一目录,例如Application/Module/View/目录下,这样在按应用.模块部署将变得更加便捷:两种文件所在位置比较接近,开发过程也相对比较方便(

Qt在Linux环境下应用程序字体模糊的解决方法(先改成使用默认字体,然后使用qtconfig配置)

这两天一直在用Qt实现一个跨平台的软件.软件之前在Windows上编写的,后来放到里Ubuntu 10.10下编译.程序运行时遇到一个很棘手的问题,界面文本非常模糊.后来在网上查阅了好几天的资料,经历了无数次实验,最终解决了这一问题.下面以一个Demo程序来重现这一问题. 本文中的编译平台为:Ubuntu 10.10 x86版, g++ 4.4.5, Qt 4.7.3自己编译的 首先看看我的Demo程序文本模糊时的截图: 一个软件界面的文本要是这样子,根本无法接受. 有人说要通过qtconfig

Linux环境下c程序的编译和执行

1 单个文件的编译和执行创建main.c文件,内容如下: #include <stdio.h> #include <stdlib.h> int main(void){ printf("Hello world!\n"); return 0; }; 编译: gcc -o main main.o 执行: [email protected]:/ybg/python# ./main Input an integer: 10 sum=55 2 多个文件的编译和执行创建sum

在公有云平台体验开源方案的自动部署

微软和开源?真的?微软的开源之旅起源于10多年前,同时微软"移动为先云为先"的策略更进一步地推动了微软对于开源软件的采纳和支持的步伐,从而让微软的云计算平台 Azure 成为一个开放且灵活的云计算平台.您可以在 Azure 上运行任何您已经在使用或打算使用的负载,不管这个负载是基于 Windows 或者 Linux. 我们来试试吧.可是对于一个新手来说,要一下子搞懂云的各种服务还真是个不容易的事.那么今天我们就提供一些模板让您来体会一键部署. 这里说的模板能做什么?如您所知,应用程序的

wamp集成环境下mysql数据库的分开部署和远程访问

今天折腾了一天一个小问题,就是明明正确的php代码在访问数据库的时候总是提示DB ERROR.后来才发现是填写数据库名的时候,写成了该数据库的ip地址(其实也是本机ip但是本机还是不能访问),而不是localhost. 归根到底这个问题的根源是mysql未开启远程访问,开启的具体方法为: D:\wamp\Apache2\conf\alias\phpmyadmin.conf 找到 deny from all allow from all 这两行删除改为 allow from all 另外,mysq