云计算发展历程
云计算模型
云计算的模型主要有三种。每种模型代表着云计算堆栈的一个独特部分。
基础设施即服务 (IaaS)
基础设施即服务有时缩写为 IaaS,包含云 IT 的基本构建块,通常提供对联网功能、计算机(虚拟或专用硬件)以及数据存储空间的访问。基础设施即服务提供最高等级的灵活性和对 IT 资源的管理控制,其机制与现今众多 IT 部门和开发人员所熟悉的现有 IT 资源最为接近。
平台即服务 (PaaS):
平台即服务消除了组织对底层基础设施(一般是硬件和操作系统)的管理需要,让您可以将更多精力放在应用程序的部署和管理上面。这有助于提高效率,因为您不用操心资源购置、容量规划、软件维护、补丁安装或与应用程序运行有关的任何无差别的繁重工作。
软件即服务 (SaaS)
软件即服务提供了一种完善的产品,其运行和管理皆由服务提供商负责。人们通常所说的软件即服务指的是终端用户应用程序。使用 SaaS 产品时,服务的维护和底层基础设施的管理都不用您操心,您只需要考虑怎样使用 SaaS 软件就可以了。SaaS 的常见应用是基于 Web 的电子邮件,在这种应用场景中,您可以收发电子邮件而不用管理电子邮件产品的功能添加,也不需要维护电子邮件程序运行所在的服务器和操作系统。
容器既服务(CaaS)
容器既服务提供了一种完整的产品,其运行和管理皆由服务提供商负责。
函数及服务(FaaS)
函数既服务提供了一种完整的产品,其运行和管理皆由服务提供商负责。只需要前端用户写好逻辑调用函数,由后台来执行相应的工作如硬件部署,日志 数据库等都由内部自动调用注销,从而减少运维和后台来提升产品效率。
后端即服务 BaaS
后端即服务 BaaS,其实大家已经使用很久了,这里的后端,指的就是各种云产品和云服务,例如对象存储COS,消息队列CMQ,云数据库CDB、TDSQL,云缓存CRedis、CMemcached,甚至到各种以 API 形式提供的服务如万象优图 CI,视频处理 VC。这些产品或服务,用户直接开通即可使用,无需考虑部署、扩容、备份、优化、安全等各种运维工作,做到了开箱即用,无需自己去进行服务器或应用的维护和管理,因此同样也是Serverless的一部分。
serverless到底是个什么鬼
本篇由来
如果你是一个程序员,你可能在最近这两年或多或少的听到过一堆莫名其妙的名词,例如CaaS、BaaS、FaaS等类似的以aaS结尾的as-a-service名词,同时也可能听到ServiceMesh、Serverless等名词,对于从事相关工作的同学可能知道每个名词都代表什么,但我相信肯定还是会有部分人听到之后是黑人问号脸,我们不具体介绍每个都是什么意思,因为这些概念也出现很早了已经,不明白的可以自行google,这里我们重点聊一下最近挺火的Serverless是个什么鬼,因为我发现我们在日常探讨过程中好像每个人对其理解不一样,也是在听完一次讨论之后有感而发,并不是在抱怨什么,只是想跟大家探讨一下到底什么是Serverless,在继续开展后续工作之前,我认为有必要再统一一下概念,不谈细节,也不扯什么性能,那都是可以优化的,不是不可逾越的障碍。
什么是Serverless
要说Serverless是什么,直译过来就是无服务器。根据 CNCF 的定义,Serverless 是指构建和运行不需要服务器管理的应用程序的概念。CloudFlare对其定义:
Serverless computing is a method of providing backend services on an as-used basis. A Serverless provider allows users to write and deploy code without the hassle of worrying about the underlying infrastructure. A company that gets backend services from a serverless vendor is charged based on their computation and do not have to reserve and pay for a fixed amount of bandwidth or number of servers, as the service is auto-scaling. Note that although called serverless, physical servers are still used but developers do not need to be aware of them.
google翻译结果:
无服务器计算是一种按需提供后端服务的方法。无服务器提供程序允许用户编写和部署代码,而不必担心底层基础结构。从无服务器供应商处获得后端服务的公司将根据其计算费用,而不必保留和支付固定数量的带宽或服务器数量,因为该服务是自动扩展的。请注意,尽管称为无服务器,但仍使用物理服务器,但开发人员无需了解它们。
Serverless == FaaS?
在我们讨论Serverless的时候,经常能听到FaaS、事件触发之类的词组,但是为啥从官方的定义中丝毫没有看到这些字样呢?FaaS又和Serverless有什么关系呢?
其实这一块业界也没有统一的定义,但是普遍认为Serverless = FaaS + BaaS,可以参考这篇和这篇介绍的内容,通俗的理解一下就是无服务期计算相当于函数计算和后端即服务两种模式的组合,也是就说Serverless和FaaS不是一个概念,这个很重要,这是我们后续讨论和做事情的基础,我们不能简单的认为Serverless就是FaaS,这种理解太狭隘了。可以举个栗子来描述一下为什么这么说,例如已经被大家玩烂了的hello world,当我们写了一段hello world的代码并填写完访问规则后就可以通过FaaS平台部署,然后当我们访问指定Url后可以得到运行结果,典型的函数即服务。但是,又有谁会真正这么用呢,可以说没有任何作用,这只是个单纯的例子(在aws lambda上玩过这个例子的就敢号称使用过serverless产品),在最早的aws lambda官方推荐的使用场景里也都是和其他服务如S3搭配使用。毕竟每个业务都有自己的业务逻辑,或多或少都会涉及到一些基础组件的依赖或者第三方服务的调用(硬要抬杠的话,其实直接把依赖项都打包到一个程序里也不是不可以,但是这么做的人估计也不会用FaaS这种东西),很少或者不会有hello world这种自嗨式的场景,执行完什么记录都没有,单纯打印一下内容就返回的,除非在测试环境或者线下自己玩。而那些被使用的基础组件或服务就是BaaS。说了这么多到底是想说什么呢,其实就是想表达Serverless不等价于FaaS。
关于Serverless许多时髦的词儿都来自FaaS。抛开部署模式,FaaS本质上是事件驱动的途径或者事件流,这就包含两层意思,一层是事件,说到事件,自然联想到各种MQ组件,用MQ来解耦事件的生产者(事件源)和消费者(服务实例或者function),以及一些相关事件类型、触发规则、通知等概念,在这一点上确实和消息中间件有很大关系;另一层是驱动,也就是说是有流量属性的,MQ里的事件要被消费肯定是要经过网络传给消费者的。看起来就是一个用消息队列来解耦生产者消费者的通用模型,根据事先配置好的触发规则拿到想要的事件,执行预先写好的函数。他的关注点在于对用户屏蔽服务器,用户只需要告诉平台触发条件及触发后的逻辑即可,极大的减轻用户的工作量,提升开发效率。
公有云(VPC)+分布式架构(SOA)+异地多活(三地七单元)
一、vpc指的是基于公有云或私有云实现的用户隔离。可理解为网络隔离。
二、分布式架构SOA(soa面向服务)
1.分布式去中心化soa典型代表微服务
2.分布式中心化soa(ESB企业服务总线)用户访问通过ESB进行转发后端,统一接口层。ESB相当于一个路由器,包括前置路由、后置路由、规则转发、监控等。
三、异地多活(两地三中心或单元化,多地多中心)
多地多单元,以机房为划分。在业务层面进行改造,通过前置路由将用户请求固定到地区同一个机房以实现数据一致性。异地双中心可通过网状结构使 Redis、MongoDB、mysql这些组件可双向互同步。
如多异地使用网状进行同步则效率很慢,所以使用星状,异地多活中存在一个主中心,其他中心数据向主中心同步,主中心在向其他中心同步。