近两年来,Serverless 概念在开发者中交流的越来越多,主题分享呈现爆发趋势。有人说:Serverless 正在改变未来软件开发的模式和流程,它就是云计算的未来。
在一个应用中包含了多个功能,如订单创建、订单查询和订单修改等。应用数据存储在外部数据库中。数据库和应用一样,也部署在数据中心的主机上,由用户负责运维。
开发人员进行业务开发时,需要关心很多和服务器相关的服务端开发工作,比如存储和计算资源、缓存、消息服务、数据库,以及防止服务器被安全攻击,负载均衡和横向扩展能力,考虑服务器容灾稳定性等非专业逻辑的开发。这些服务器的运维和开发知识、经验极大地限制了开发者进行业务开发的效率。
传统的架构:
应用被部署在Serverless平台之上。应用的功能点变成若干个函数定义,部署于FaaS之中。数据仍然存放在后端数据库中。应用函数通过访问后端的数据库服务(BaaS)获取订单数据。
Serverless 场景下,客户端需要通过 API 网关 Baas 来访问函数 FaaS 服务,然后在通过函数计算做数据库链接实现数据库的写入和拉取。
在Serverless架构下。当用户完成应用开发后,软件应用将被部署到指定的运行环境,这个运行环境不再是具体的一台或多台服务器,而是支持Serverless的云计算平台。Serverless云计算平台保证该主机提供应用正常运行所需的计算资源。在访问量升高时,云计算平台动态地增加应用的部署实例。当应用空闲一段时间后,云计算平台自动将应用从主机中卸载,并回收资源。
Serverless服务架构:
相相同点:
1.两个应用都存在一个逻辑层,负责处理用户请求;
2.两个应用的数据都存储在应用外部的数据库中。
不同点:
1.Serverless架构的应用部署于Serverless平台之上,由Serverless平台提供运行所需的计算资源。
2.在Serverless架构下,由于应用的逻辑分散成了若干个函数,推荐通过API网关对这些函数逻辑进行统一的管控(如流量控制、安全管控、版本管理等)
详解Serverless:
无服务器计算是一种云计算执行模型,云厂商提供程序运行的服务器,并动态管理机器资源的分配。云厂商基于应用程序消耗的实际资源量进行定价,而不是用户预先购买的容量。
Serverless并不能按字面上理解为无服务器,而是说对应用开发者而言,不再需要操心大部分跟服务器相关的事务,比如应用运行环境配置、负载均衡、日志搜集、系统监控等,这些事情统统交给Serverless平台即可,应用开发者唯一需要做的就是编写应用代码,实现业务逻辑。
Serverless主要的两个特征是:免运维,按资源的使用量付费
目前业界的各类Serverless实现按功能而言,主要为应用服务提供了两个方面的支持:函数即服务(Function as a Service,FaaS)以及后台即服务(Backend as aService,BaaS)
那么下面来说说IaaS,PaaS,Saas,FaaS和BaaS
以做披萨生意为例,如果从买设备,制作,销售都是自己一个人做,未免会太过于劳累,所以需要别人的服务来让这个生意更好做,下面就是一些让别人服务你的方法:
1.IaaS
别人给你提供厨房,炉子,煤气这些基础设施,你去制作
2.PaaS
除了别人给你提供的基础设施之后,还有人帮你做饼皮,自己只需要把其他配料撒上去,之后还有人帮你烤
自己能决定的就是这个披萨的味道
3.SaaS
自己不参与制作,直接用别人做好的披萨,自己只需要包装一下,给披萨打上自己的logo卖出去就可以
4.BaaS
提供了一些服务让你选择,别人提供了烤披萨,调配料这些服务,用哪个就可以点哪个
5.FaaS
比提供某一项服务更加具体,具体到某一项服务的具体内容
c技术特点:
按需加载
应用的加载(load)和卸载(unload)由Serverless云计算平台控制。这意味着应用不总是一直在线的。只有当有请求到达或者有事件发生时才会被部署和启动。当应用空闲至一定时长时,应用会被自动停止和卸载。 事件驱动
应用的加载和执行由事件驱动,通过将不同事件来源(EventSource)的事件(Event)与特定的函数进行关联,实现对不同事件采取不同的反应动作。
状态非本地持久化
云计算平台自动控制应用实例的加载和卸载,且应用和服务器完全解耦,应用不再与特定的服务器关联。因此应用的状态不能,也不会保存在其运行的服务器之上,不能做到传统意义上的状态本地持久化
应用函数化
每一个调用完成一个业务动作,应用会被分解成多个细颗粒度的操作。由于状态无法本地持久化,这些细颗粒度的操作是无状态的。
依赖服务化
所有应用依赖的服务都是一个个后台服务(BackendService),应用通过BaaS方便获取,而无须关心底层细节。
Serverless的局限性:
可移植性
Serverless应用的实现在很大程度上依赖于Serverless平台及该平台上的FaaS和BaaS服务。不同IT厂商的Serverless平台和解决方案的具体实现并不相同。
安全性
在Serverless架构下,用户不能直接控制应用实际所运行的主机。不同用户的应用,或者同一用户的不同应用在运行时可能共用底层的主机资源。对于一些安全性要求较高的应用,这将带来潜在的安全风险。
性能
当一个Serverless应用长时间空闲时将会被从主机上卸载。当请求再次到达时,平台需要重新加载应用。应用的首次加载及重新加载的过程将产生一定的延时。对于一些对延时敏感的应用,需要通过预先加载或延长空闲超时时间等手段进行处理。
执行时长
Serverless的一个重要特点是应用按需加载执行,而不是长时间持续部署在主机上。目前,大部分Serverless平台对FaaS函数的执行时长存在限制。因此Serverless应用更适合一些执行时长较短的作业。
技术成熟度
目前Serverless相关平台、工具和框架还处在一个不断变化和演进的阶段,开发和调试的用户体验还需要进一步提升。
如何实现FaaS?
微服务和FaaS的差别在于粒度,微服务是功能级别,FaaS 是函数级别。server 要实现FaaS,首先必须将单体应用演进到微服务,然后才能进一步地分解到函数级别,实现FaaS。