分类 云计算 下的文章

云计算让开发人员和 IT 部门可以全身心投入最有价值的工作,避免采购、维护、容量规划等无价值的工作分散精力。云计算已经日渐普及,并拥有了几种不同的模型和部署策略,以满足不同用户的特定需求。每种类型的云服务和部署方法都提供了不同级别的控制力、灵活性和管理功能。理解基础设施即服务、平台即服务和软件即服务之间的差异,以及可以使用的部署策略,有助于根据需求选用合适的服务组合。

云计算模型

云计算的模型主要有三种。每种模型代表着云计算堆栈的一个独特部分。

基础设施即服务 (IaaS)

55874-4zxzbvmuxmd.png

基础设施即服务有时缩写为 IaaS,包含云 IT 的基本构建块,通常提供对联网功能、计算机(虚拟或专用硬件)以及数据存储空间的访问。基础设施即服务提供最高等级的灵活性和对 IT 资源的管理控制,其机制与现今众多 IT 部门和开发人员所熟悉的现有 IT 资源最为接近。

平台即服务 (PaaS)

77654-vavgoch7rci.png

平台即服务消除了组织对底层基础设施(一般是硬件和操作系统)的管理需要,让您可以将更多精力放在应用程序的部署和管理上面。这有助于提高效率,因为您不用操心资源购置、容量规划、软件维护、补丁安装或与应用程序运行有关的任何无差别的繁重工作。

软件即服务 (SaaS)

97919-xi1ctg463w.png

软件即服务提供了一种完善的产品,其运行和管理皆由服务提供商负责。人们通常所说的软件即服务指的是终端用户应用程序。使用 SaaS 产品时,服务的维护和底层基础设施的管理都不用您操心,您只需要考虑怎样使用 SaaS 软件就可以了。SaaS 的常见应用是基于 Web 的电子邮件,在这种应用场景中,您可以收发电子邮件而不用管理电子邮件产品的功能添加,也不需要维护电子邮件程序运行所在的服务器和操作系统。

云计算部署模型


-

97498-3tli6nc93eg.png

基于云的应用程序完全部署在云中且应用程序的所有组件都在云中运行。云中的应用程序分为两种,一种是在云中创建,另一种是从现有基础设施迁移到云中以利用云计算的优势。基于云的应用程序可以构建在基础设施组件上,也可以使用较高级别的服务,这些服务提供了从核心基础设施的管理、架构和扩展要求中抽象提取的能力。

混合

27443-g28r81ejs3v.png

混合部署是一种在基于云的资源和非云现有资源之间连接基础设施和应用程序的方法。混合部署最常见的方法是在云和现有内部基础设施之间将组织的基础设施扩展到云中,同时将云资源与内部系统进行连接。有关 AWS 如何帮助部署混合云的更多信息,请访问混合页面。

本地

82205-v1t93fjur2.png

使用虚拟化和资源管理工具在本地部署资源往往被称作“私有云”。本地部署无法提供云计算的诸多优势,但有时采用这种方案是为了能够提供专用资源。大多数情况下,这种部署模型与旧式 IT 基础设施无异,都通过应用程序管理和虚拟化技术尽可能提高资源利用率。

一、Serverless是啥

自从互联网兴起以来,Server就成了网络的核心部件。所以围绕Server的生意圈,也发展得如火如荼。

从最早的电信托管,到虚拟机,到现在的Serverless,形成了几大阵容:

1、IaaS(基础设施即服务:Infrastructure as a Service)
2、PaaS(平台即服务:Platform as a Service)
3、SaaS(软件即服务:Software as a Service)

IaaS是包硬不包软,面对集成商,PaaS是包硬包软不包工,面对开发者,SaaS是全包,面对消费者。

52406-ymk9ax7o2c.png

三大阵营都在不断演进中,互相取长补短,甚至模糊了彼此的界限。

PaaS最新的发展就是:

1、BaaS(后端即服务:Backend as a Service)
2、Faas(函数即服务:Functions as a Service)

这两种架构被称为Severless。

BaaS与FaaS这两种架构被称为Severless,并非对开发者而言,是对服务商而言,没有一直运行的定制服务存在,不占用服务商的计算资源。同共享单车有些类似,是计算机分时租赁方式,按次按时计价。

BaaS并不存放客户代码,只提供通用的逻辑,产品的逻辑都需要在富客户端完成。这些通用的逻辑为所有客户共享,因而不浪费服务商的计算资源,也就可以做到按API调用次数计算费用。

以前叫我们把二层的富客户端都改成三层瘦客户端,现在搞个共享数据库,又叫我们改成富客户端。横竖赚钱。

18576-sv5c1w98bh.png

而FaaS存放客户代码,当访问时,调入相关资源,开始运行,运行完成后,卸载所有开销。
嘶~~~,听起来耳熟。靠,这不就是PHP吗?!

二、Serverless凭啥

看来BaaS和FaaS都是新瓶装旧酒,那么Serverless凭啥流行,又是不是未来?

Facebook 于2013年花费了 8500 万美元收购了主流的BaaS平台 Parse 。由于 Parse 一直以来未能为 Facebook 提供预期的营收,Facebook 决定一年后将其正式关闭,并将其代码开源。Facebook这不差钱的行为,直接为整个行业蒙上了阴影。可以说直接逼死了某些跟风者。

搭个共享数据库赚钱的想法基本破灭后,行业都纷纷压宝FaaS。那么FaaS的前景如何?

虽然FaaS是BaaS的“升级版”,并且与流行的微服务架构相吻合。但是无法改变它有强制所有程序按PHP方式运行这样一个可怕的设定。而这个无奈的设定所解决的是导致先行者AppEngine举步维艰的病根,那就是大量进程占用服务商过多的资源而不怎么赚钱。所以FaaS这个扭曲版AppEngine对于服务商来说是一剂良药,但是未必会是行业的未来。

这些年随着Docker平台的发展,启停一个容器的成本已经接近于启停一个进程。将AppEngine平台上的侦听进程都去掉,用一个统一的WebServer来侦听路由,当访问到来时,启动容器,运行,停止容器。这和PHP的做法一模一样,不过是把PHP.exe换成了Docker容器罢了。同一个思路,换一个环境,马上从落后变成了先进。可以你想像,FaaS是降低成本的利器,也一定会占有一部分低端市场。

但是,PHP也没有像FaaS一样强制要求所有服务达到函数这个级别,一步到位的确有点匪夷所思。函数也非FaaS最好的包装形式,不如像PHP直接对应到一个文件上。在我看来,现有FaaS平台的行为模式,只适合推广PHP,能够与PHP生态很好地对接,而其它语言则有不可调和的矛盾。

看了一下开源框架Fission的源码,想出一个兼容其它语言的方案,以Python语言为例。

要求Flask程序实现2个接口,原有的程序不加任何修改即可在FaaS框架下运行了,/register接口载入所有Route,并返回所有绑定规则,FaaS框架只需要把Route表合并就可以一次性创建所有Route。不必要一条一条调用fission function create与fission route add了。Http 请求来时调用/specialize接口,根据endpoint(即函数名)载入代码,实现FaaS功能。把框架接口开放给程序,能够实现最大的兼容现有框架,如果不放心,可以调用/specialize?endpoint=echo&echo=hello,来验证程序是否支持FaaS平台即可。

rom flask import Flask, request
app = Flask(__name__)
userfunc = None
@app.route('/register', methods=['POST'])
def register():
# 引入所有Routes,并返回所有Rules
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)   
return jsonify(app.url_map._rules_by_endpoint)
@app.route('/specialize', methods=['POST'])
def load():
# 特化载入,只载入单个endpoint
body = request.get_json()
name = body['endpoint']
global userfunc
userfunc = imp.load_source(name)
return ""

三、Serverless有啥

Serverless平台一般分为如下三类:

  1. 公有云Severless平台:

A. AWS Lambda、B. Microsoft Azure Functions、C. Google Cloud Functions、D. Webtask、E. Syncano

  1. 私有云Severless框架:

A. Fission (Kubernetes)、B. Funktion (Kubernetes)、C. Kubeless (Kubernetes)、D. Gestalt (DC/OS)、E. IBM OpenWhisk (Docker)、F. Iron Functions (Docker,Swarm, Kubernetes)

3.Serverless平台的包装框架:

A. Serverless(Node,大多数平台)、B. Apex(Go,AWS)C. Zappa(Python,AWS)、D. Chalice(Python,AWS)E. Claudia.js(Node,AWS)F. Gordon (Python,AWS)

四、Serverless干啥

1、AWS Lambda的包装框架Zappa,可以使用Flask,Django等框架。

功能看下图可知:

569097-20171201153431789-1840570181.gif

2、Fission是一个Serverless开源框架。可以看看它都干了啥。

Fission是基于Kubernetes的,而Kubernetes是基于Docker的容器集群管理系统。
Kubernetes的内容太丰富,简单说来,实体对象有若干节点(Node)包含若干Pod,Pod又包含若干容器(Container),通过Pod上的标签(Label)组合成服务(Service)。

45635-c4l7b305c5l.png

Master包含如下组件:

1,apiserver:作为kubernetes系统的入口,封装了核心对象的增删改查操作。它维护的REST对象将持久化到etcd。

2,etcd:分布式强一致性的key/value存储

3,scheduler:负责集群的资源调度,为新建的pod分配机器。

4,controller-manager:负责执行各种控制器,目前有两类:

a,endpoint-controller:定期关联service和pod(关联信息由endpoint对象维护),保证service到pod的映射总是最新的。

b,replication-controller:定期关联replicationController和pod,保证replicationController定义的复制数量与实际运行pod的数量总是一致的。

Slave Node(称为Minion)包含如下组件:

1,kubelet:负责管控docker容器,如启动/停止、监控运行状态等。它会定期从etcd获取分配到本机的pod,并根据pod信息启动或停止相应的容器。同时,它也会接收apiserver的HTTP请求,汇报pod的运行状态。

2,proxy:负责为pod提供代理。它会定期从etcd获取所有的service,并根据service信息创建代理。当某个客户pod要访问其他pod时,访问请求会经过本机proxy做转发。

3,docker:docker容器引擎

Fission简单说来,就是一个Web应用,Go语言编写,使用gorilla框架。不过它的模板引擎替换成了Kubernetes中的Service。使用k8s.io/client-go/kubernetes接口来操控(k8s就是Kubernetes)。

18296-k250bpd9g4.png

参考文档:

《采用Serverless架构》:http://cloud.51cto.com/art/201703/534748.htm

《Kubernetes初探》:https://blog.csdn.net/zhangjun2915/article/details/40598151

《十分钟带你理解Kubernetes核心概念》http://www.dockone.io/article/932

《Kubernetes权威指南》

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢