CNCF,全称Cloud Native Computing Foundation(云原生计算基金会),成立于 2015 年7月21日(于美国波特兰OSCON 2015上宣布),其最初的口号是坚持和整合开源技术来让编排容器作为微服务架构的一部分,其作为致力于云原生应用推广和普及的一支重要力量,不论您是云原生应用的开发者、管理者还是研究人员都有必要了解。
1、事件驱动----函数在 FaaS 平台中,需要通过一系列的事件来驱动函数执行。
2、无状态----因为每次函数执行,可能使用的都是不同的容器,无法进行内存或数据共享。
如果要共享数据,则只能通过第三方服务,比如 ```Redis`` 等。
3、无运维----使用serverless我们不需要关心服务器,也不需要关心运维,这也是serverles思想的核心;
4、低成本----使用 Serverless 成本很低,因为我们只需要为每次函数的运行付费。函数不运行,则不花钱,也不会浪费服务器资源过度
1、上图是当前主要的一些 Serverless 服务,以及对应的服务解决方案。
2、从下往上,分别是基础设施、开发工具和应用场景。
亚马逊-微软-谷歌
3、基础设施主要是一些云计算厂商提供,包括云计算平台和各种 BaaS 服务,以及运行函数的 FaaS 平台。
前端主要是 Serverless 的使用者,所以对前端来说,最重要的开发工具这一层,我们需要依赖开发工具进行 Serverless 开发、调试和部署。
4、框架(Framework)
如今还没有一个统一的 Serverless 标准,不同云计算平台提供的 Serverless 服务很可能是不一样的,这就导致我们的代码,无法平滑迁移。Serverless 框架一个主要功能是简化 Serverless 开发、部署流程,另一主要功能则是屏蔽不同 Serverless 服务中的差异,让我们的函数能够在不改动或者只改动很小一部分的情况下,在其他 Serverless 服务中也能运行。常见的 Serverless 框架有 Serverless Framework、ZEIT Now、Apex 等。不过这些基本都是国外公司做的,国内还没有这样的平台。
5、Web IDE
和 Serverless 紧密相关的 Web IDE 主要也是各个云计算平台的 Web IDE。利用 Web IDE,我们可以很方便地在云端开发、调试函数,并且可以直接部署到对应的 FaaS 平台。这样的好处是避免了在本地安装各种开发工具、配置各种环境。常见的 Web IDE 有 AWS 的 Cloud9、阿里云的函数计算 Web IDE、腾讯云的 Cloud Studio。
6、当然,目前最主要的开发方式还是在本地进行开发。所以在本地开发 Serverless 的命令行工具也必不可少。
命令行工具主要有两类,一类是云计算平台提供的,如 AWS 的 aws、 Azure 的 az、阿里云的 fun;还有一类是 Serverless 框架提供的,如 serverless、now。
大部分工具如 serverless、fun 等,都是用 Node.js 语言来实现的。
7、应用场景
在开发工具上面一层,则是 Serverless 的一些垂直应用场景。除了使用传统的服务端开发,目前使用 Serverless 技术的还有小程序开发,未来可能还会涉及到物联网领域(IoT)。
1、在开始具体的案例之前,先看一下传统开发流程。
在传统开发流程中,我们需要前端写页面,后端工程师写接口。后端写完接口之后,把接口部署了,再进行前后端联调。联调完毕后再测试、上线。上线之后,还需要运维工程师对系统进行维护。整个过程涉及多个不同角色,链路较长,沟通协调也是一个问题。
2、而基于 Serverless,后端变得非常简单了,以往的后端应用被拆分为一个个函数,只需要写完函数并部署到 Serverless 服务即可,后续也不用关心任何服务器的运维操作。后端开发的门槛大幅度降低了。因此,只需要一个前端就可以完成所有的开发工作。
当然,前端基于 Serverless 去写后端,最好也需要具备一定的后端知识。涉及复杂的后端系统或者 Serverless 不适用的场景,还是需要后端开发。
1.降低运营复杂度
Serverless架构使软件应用和服务器实现了解耦,服务器不再是用户开发和运营应用的焦点。在应用上线前,用户无须再提前规划服务器的数量和规格。在运维过程中,用户无须再持续监控和维护具体服务器的状态,只需要关心应用的整体状态。应用运营的整体复杂度下降,用户的关注点可以更多地放在软件应用的体验和改进以及其他能带来更高业务价值的地方。
2.降低运营成本
服务器不再是用户关注的一个受管资源,运营的复杂度下降,应用运营所需要投入的时间和人力将大大降低。在最好的情况下,可以做到少数几个应用管理员即可管理一个处理海量请求的应用系统。
3、缩短产品的上市时间
在Serverless架构下,应用的功能被解构成若干个细颗粒度的无状态函数,功能与功能之间的边界变得更加清晰,功能模块之间的耦合度大大减小。这使得软件应用的开发效率更高,应用开发的迭代周期更短。
使用 Serverless,我们不需要再过多关注服务端的运维,不需要关心我们不熟悉的领域,我们只需要专注于业务的开发、专注于产品的实现。我们需要关心的事情变少了,但我们能做的事情更多了。
基于华为云对应的明星产品包括函数工作流FunctionGraph,体验一下severless怎么用。
架构、痛点等下相关信息请点击华为云函数官方文档:
https://support.huaweicloud.com/functiongraph/index.html
体验思路
1、云函数的思路是有一个事件(如向对象存储存了一张照片),然后触发云函数对这张照片进行某种处理(比如照片美化),然后存放到另外一个地方去(如对象存储另一个位置或mysql数据库中)。这样的好处是,无需启用一个服务器专门等有照片上传事件,因为互联网场景下,我们不知道客户什么时候会上传照片,无需专门服务器,就是severless的通俗理解了。有照片上传了再自动处理,这是一种微服务的理念。
2、本文是体验serverless的首次体验,先熟悉一下云函数怎么操作,如何使用函数的输入参数。
【操作步骤】
操作入口:
https://www.baidu.com/link?url=DMTpbH8V0rjpzM-wjA1muZcuWQdZBSexUdKKEu1ZXiggO3DRDdatkaOvWbcR6aYuil12tQFGzNe66wItkOq8ka&wd=&eqid=95456257000f54ca000000065ee4ce3a
1、登录华为云官网,在“产品”-“基础服务”-“计算”-“函数工作流Function Graph”,进入控制台。首次登录会提示申请体验、开通权限等操作,按照提示开通即时生效。
2、先了解一下函数的输入参数event、context的含义和用法。以python3.6为例:
https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0420.html
def handler (event, context)
入口函数名(handler):就是一个python文件包中,触发器执行的主函数,类似大家学C语言里面的main函数。
执行事件(event): 该事件的相关参数,格式为key:value这种JSON数据结构。不同事件的格式不一样,详情见下面的测试用例部分。比如是对象存储OBS触发的事件,那么会包含OBS的桶信息、文件名、所属区域等等。
上下文环境(Context):系统级公共输入参数,固定格式不可改,对应字段的获取方法可在上面的链接中获取。 比如记录了调用该函数的用户的访问密钥(AK/SK)、记录函数运行过程种的日志文件对象等等。
3、下面我们尝试一下把每个输入参数都读取处理操作一下,掌握方法。
5、设置函数的参数。“委托名称”这个概念容易理解错误。当函数需要访问云产品时,比如将照片存放到对象存储OBS其他路径,那么需要获得OBS授权,获取授权的操作,就是这里的“委托名称”。
举个生活的例子,比如我在外地工作,要委托老家的朋友去售楼部帮我买一个车位,那我需要给朋友先写好一个委托书,当车位开始售卖时,朋友拿着委托书去买车位。车位售卖==>事件触发器,朋友去买车位==>云函数,我==>要另存为的对象存储,委托书==>截图中的“委托名称”。
6、编写测试用例
云函数中的用户参数(对应帮助文档中描述的event字段),格式是自定义的,符合JSON格式即可。因此和测试用例需要匹配起来。
【结果】
本例中是首次接触serverless,时间有限,了解了基本操作。
下次尝试上传一个文件到对象存储,通过函数工作流自动处理后,将处理后的结果保存到对象存储另一个地址,并记录数据库。