servlerless 是什么

一句话说serverless

serverless 是一种架构模式,和微服务架构、单体应用这些概念是同一个类别的东西;通俗来讲是一种提供后端服务的方法,使用这种架构写后端服务非常快,降低了开发后端服务的门槛。

serverless 和其它架构的区别

以一个实例来简述一下serverless和其它架构的区别:
小明要开发一个类似csdn的网站,需要支持用户写博客,评论博客,看博客等功能;在最原始的单体应用的时候,小明除了写代码之外还需要购置一台服务器,申请域名,配置机房网络,准备数据库服务器;在程序部署上去之后还需要配置监控、日志等等运维工具。运维成本远远大于开发成本。此时:总成本 = 80%(运维成本)+ 20%(业务成本)

到了云计算时代,小明可以用微服务架构了,他直接在阿里云上买了一个云主机,顺便买了一个数据库服务,小明不再需要自己选各种机器,也不需要自己配置机器的cpu,内存监控告警工具,相比最开始的时候,运维成本降低了很多,而且在业务壮大之后,他还可以动态增加各种硬件资源的规格,如果博客中的图片太多了,他还可以引入文件服务来存储图片。不过小明还是要进行一定的运维操作,定义服务器的扩缩容规则,配置应用服务器(例如tomcat),保证服务的稳定性。此时:总成本 = 50%(运维成本)+ 50%(业务成本)

当小明用到了serverless之后,小明需要做的就是写好各种业务逻辑代码,将代码上传到serverless平台(例如 Amazon lambda),然后小明将会得到一个可以访问的接口,访问这个接口就会执行他上传的代码,并得到代码中定义的输出。至于数据库和文件服务都可以调用serverless平台提供的各种sdk来操作,至此小明就告别了所有的运维工作,只用关心自己的业务代码逻辑是否正确即可,更重要的一点是serverless服务不是常驻的服务,只有在有人访问的时候才会启动,不像微服务或者单体应用,即使没人用也需要有一个进程在某个地方等待调用。此时:总成本 = 10%(运维成本)+ 90%(业务成本)

简单总结一下:serverless提供了一个平台,平台指定了几种常见的编程语言,用户用这几种开发语言写完自己的业务逻辑之后将代码提交到平台上(通常是一个web ide),定义好代码的触发规则(例如访问某一个api)之后,就可以通过这个事件触发代码的执行,serverless的进程不是常驻进程,通常是触发事件来了之后,才会启动一个进程进行处理,用户也不需要管扩缩容这些事情。

Faas+Baas = serverless

Baas

先说比较好理解的Baas,Baas(Backend as a service) 全称为后端即服务;我们在开发应用时经常会用到redis, mysql等等第三方服务;

例如使用mysql的时候步骤如下:

  1. 先部署一个服务,这个时候会得到一个账号和密码,还有数据库机器的ip和端口,如果比较大的项目还会涉及到主库从库等等;
  2. 执行建表语句,写初始数据。
  3. 然后找一个第三方mysql连接器sdk,将ip、端口,账号密码等写进去,在程序里面利用sdk读写数据库。

使用Baas的方式是:

  1. 申请一个Baas服务
  2. 提工单或者用运维平台建好初始数据
  3. 在程序中用平台提供的专用sdk读写数据

传统情况下用户要知道数据库的ip地址,需要自己管理访问凭证(用户名,密码等等),还是有一定的运维工作;使用baas数据库关键的区别就是需要使用平台提供的sdk来调用服务,而鉴权的方式就不一定是使用账号密码了,也不需要感知ip,端口等内容,这些细节都会封装到sdk中。用户将会像使用一种服务一样来使用这些第三方组件,这些组件的硬件属性(ip,端口)都被屏蔽了,用户只需要关注与这些服务交互的接口即可;Baas平台一般会提供可视化运维接口,这种技术也是为了降低使用这些后端服务的门槛的。

Faas

Faas(Function as a service) 全称为函数即服务;还是用一个实例来讲解Faas:小明要开发一个接口,这个接口传入一个数字,返回其用某种算法加密之后的结果;
传统的方法是

  1. 小明先买一个云主机,
  2. 选一种编程语言和web框架,使用编程语言开发好接口
  3. 将程序打包成一个软件包,选用一个应用程序服务器,将程序部署上去
  4. 申请一个域名,将域名解析到服务器上

使用faas函数的方法是:

  1. 在faas平台上申请一个服务,指定触发方式(访问某个api或者触发某个mq事件)
  2. 使用平台支持的一种编程语言写一个函数,入参是那个数,返回值是加密的结果,写好了点提交按钮就部署了

可以看到用faas来开发后端服务就不需要自己来管服务的运行时环境了,只需要定义程序逻辑就可以了。

Baas + Faas

程序一般还是会有很多Mysql,redis,mq之类的第三方组件依赖的,只用简单的faas做不了,而在faas函数里面一般也是可以调用Baas的SDK的,Baas(第三方组件)+Faas(业务逻辑)两者结合起来就能满足大部分业务场景的需求了,后端服务开发者完全不用管自己的程序运行在哪里,负载多大等等信息,只要写业务代码就可以了,这就是serverless。

serverless的局限性

  1. serverless比较难调试;整个运行环境只有在平台上才有,本地不好接入;
  2. 开发体验比较差,一般是在web ide上写,目前web ide和本地ide体验差距还是很大的,代码提示,搜索,跳转等功能比较差。
  3. 因为进程是只有访问的时候才拉起来的,如果长时间不访问,可能会有一个冷启动的过程,各种Baas服务也要初始化,会比较慢,不适合实时性要求高的场景。
  4. serverless只能处理比较简单的业务逻辑,基于上面的两个问题,serverless目前还不能支持太复杂的大工程,比如用serverless平台搭建一个severless平台这种。

serverless使用场景

小程序接口

serverless平台比较经典的一个场景就是目前的微信小程序,微信的开发平台提供了一整套的开发工具,将各种开发资源都封装成了sdk,使用起来很简单,完全不需要运维;能帮微信小程序迅速积累起大量的用户。

简单的app接口

目前已经有一些serverless平台支持生成Android sdk来供客户端访问后端服务了,这样app的开发者就可以很方便地为自己的app提供后端服务支持了,不用管运维的能力。

你可能感兴趣的:(微服务,serverless,架构)