Serverless架构就是“无服务器”架构。和云计算、容器、人工智能一样,Serverless是近两年IT行业的热词,在各种技术文章和论坛上都有很高的曝光度。目前业界可能更多的是在容器Docker+Kubernetes,使用IaaS、PaaS和SaaS来快速构建和部署应用。什么是无服务器?简单来说,Serverless是一种软件系统架构思想和方法。其核心思想是用户无需关注支撑应用服务运行的底层主机。这种架构的思想和方法将对未来软件应用的设计、开发和运行产生深远的影响。所谓“无服务器”,并不是说基于无服务器架构的软件应用程序可以在没有服务器的情况下运行。意味着用户无需关心软件应用运行所涉及的底层服务器的状态和资源(如CPU、内存、磁盘、网络等)。和数量。软件应用正常运行所需的计算资源由底层云计算平台动态提供。Serverless技术实现Serverless的核心思想是让作为计算资源的服务器不再是用户关注的资源。其目的是提高应用交付效率,减少应用运维的工作量和成本。各种基于Serverless思想的框架、工具、平台,都是各种Serverless的实现。Serverless不是一个简单的工具或框架。用户不可能简单地通过实现某个产品或工具来实现Serverless。但是,要实现Serverless架构,需要一些真正的工具和框架作为强大的技术支撑和基础。随着Serverless的日益普及,近年来业界出现了多种平台和工具来帮助用户改造和实现Serverless架构。目前,市场上比较流行的Serverless工具、框架和平台包括:AWSLambda,这是大众公认的最早的Serverless实现。AzureFunctions,来自Microsoft公共云的无服务器实现。OpenWhisk,来自Apache社区的开源无服务器框架。Kubeless,一个基于Kubernetes架构的开源无服务器框架。Fission,Platform9推出的开源无服务器框架。OpenFaaS,一个以容器技术为核心的开源无服务器框架。Fn,来自Oracle的开源无服务器框架,由最初的IronFunctions团队开发。列出的一些无服务器实现是公共云服务,而其他一些是可以部署在私有数据中心私有云中的框架工具(私有云无服务器框架OpenWhisk、Fission和OpenFaaS)。每个无服务器服务或框架的实现方式都不同,并具有自己的特点。FaaS和BaaSIT是永不停歇的行业。在这个行业中,各种新名词、新技术不断诞生。云计算(CloudComputing)的出现是21世纪IT行业最重大的变革。云计算的发展逐步从基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)、功能即服务(FunctionasaService,FaaS)和后端即服务服务(BackendasaService,BaaS),无服务的Serverless。目前业界各种Serverless实现主要在功能上对应用服务提供两方面的支持:功能即服务(FunctionasaService,FaaS)和后台即服务(BackendasaService,BaaS)。1、FaaSFaaS以一种或多种功能的形式提供了一个应用程序开发、运行和管理的计算平台。FaaS平台为功能应用提供运行环境,普遍支持Java、PHP、Python等多种主流编程语言。FaaS可以根据实际流量进行应用的自动动态加载和资源的自动动态分配。大多数FaaS平台都是基于事件驱动(EventDriven)的思想,可以根据预定义的事件触发指定的功能应用逻辑。业界最成功的FaaS平台之一是AWSLambda平台。AWSLambda是AWS公有云服务的功能计算平台。借助AWSLambda,AWS用户可以在AWS公有云上快速构建基于函数的应用服务。2、BaaS为了实现serverless应用后台服务,BaaS(backgroundasaservice)也应该包含在一个完整的serverless实现的范围内。通过BaaS平台,服务和发布应用所依赖的数据库、消息队列、存储等第三方服务。用户通过向BaaS平台申请即可消费所需的服务,无需关心这些服务的具体运维。BaaS涵盖了任何应用程序所依赖的广泛服务。一个典型的例子是数据库即服务(DBaaS)。很多应用程序都有存储数据的需求,大多数应用程序都将数据存储在数据库中。传统上,数据库运行在数据中心,由用户运维团队负责运维。在DBaaS场景下,用户从DBaaS平台申请数据库资源,无需担心数据库的安装、部署、运维等问题。Serverless的技术特点为了实现应用和服务器资源的解耦,实现服务器资源对用户的透明,与传统架构相比,Serverless架构有很多不同的技术特点。1、按需加载在Serverless架构下,应用的加载和卸载由Serverless云计算平台控制。这意味着应用程序并不总是一直在线。它只会在请求到达或事件发生时部署和启动。当应用程序空闲一段时间后,应用程序会到达或部署并启动一个事件。当应用程序空闲一定时间后,应用程序会自动停止并卸载。因此,应用不会持续在线,不会持续占用计算资源。2、事件驱动的serverless架构的应用不是一直在线的,而是按需加载和执行的。应用程序的加载和执行是由事件驱动的,例如HTTP请求的到达、消息队列收到的新信息或服务中存储的文件的修改。通过将来自不同事件源(EventSource)的事件与特定的功能相关联,可以实现对不同事件的不同反应,从而可以非常容易地实现事件驱动(EventDriven)架构。3、非本地持久化状态云计算平台自动控制应用实例的加载和卸载,应用与服务器完全解耦,应用不再与特定的服务器相关联。因此,应用程序的状态不能也不会保存在其运行的服务器上,无法实现传统意义上的状态本地持久化。4.非会话持久化应用程序不再与特定服务器相关联。每次处理请求的应用实例可以是同一服务器上的应用实例,也可以是新生成的服务器上的应用实例。因此,用户不能保证来自同一个客户端的两个请求会被同一个服务器上的同一个应用程序实例处理。也就是说,不可能实现传统意义上的stickysession。因此,Serverless架构更适合无状态应用。5.自动弹性伸缩Serverless应用可以原生支持高可用,应对突如其来的高流量。应用实例的数量由云计算平台根据实际访问量弹性自动扩展或收缩,云计算平台动态保证有足够的计算资源和足够数量的应用实例来处理请求。6.应用功能化每次调用完成一个业务动作,应用会被分解成多个细粒度的操作。由于状态无法在本地持久化,因此这些细粒度的操作是无状态的,类似于传统编程中的无状态函数。Serverless架构下的应用会功能化,但不能说Serverless就是FunctionasaService(FaaS)。Serverless涵盖了FaaS的一些特性。可以说,FaaS是实现Serverless架构的重要手段。Serverless的应用场景通过结合Serverless的概念和目前Serverless实现的技术特点,Serverless架构可以应用于各种业务场景。1.web应用的serverless架构可以很好的支持各种静态和动态的web应用。比如RESTfulAPI的各种请求动作(GET、POST、PUT、DELETE等)可以很好的映射到FaaS的各个功能上,建立功能与功能之间良好的对应关系。通过FaaS的自动弹性扩展功能,serverlessweb应用可以快速构建能够承载高流量的站点。2、移动互联网Serverless应用通过BaaS连接不同的后端服务,满足业务需求,提高应用开发效率。前端通过FaaS提供的自动弹性扩容对接移动端流量,开发者可以更轻松地应对突如其来的流量增长。FaaS架构下,应用以函数的形式存在。各功能逻辑相对独立,使应用更新更容易,缩短新功能开发、测试、上线时间。3.物联网(InternetofThings,IoT)物联网(InternetofThings,IoT)应用需要连接大量不同的设备。不同的设备需要不断地收集数据并将数据传输到服务器。无服务器架构可以帮助物联网应用程序连接到不同的数据输入源。4、多媒体处理视频图片网站需要对用户上传的图片、视频信息进行处理和转换。但是,这种多媒体转换工作并不是时时刻刻都在执行的,只有在某些特定的事件发生时才需要执行,比如用户上传或编辑图片和视频时。通过Serverless的事件驱动机制,用户可以在特定事件发生时触发处理逻辑,从而节省闲置期间的计算资源开销,最终降低运维成本。5、数据和事件流处理Serverless可以用来对一些连续的事件流和数据流进行实时分析和处理,对事件和数据进行实时过滤、转换和分析,进而触发下一步的处理。例如实时分析各种系统的日志或社交媒体信息,对符合特定特征的关键信息进行记录和告警。6、系统集成Serverless应用的功能架构非常适合系统集成。用户不需要像过去那样为了一些简单的集成逻辑去开发和维护一个完整的应用。用户可以更专注于所需的集成逻辑,只编写和集成相关的代码逻辑,而不是一个完整的应用程序。功能应用的去中心化架构使得添加和更改集成逻辑更加灵活。Serverless的局限性世界上没有可以解决所有问题的通用解决方案和架构概念。Serverless有它的特点和优势,但也有它的局限性。有些限制是由它的架构特性决定的,有些是由当前技术的成熟度决定的。Serverless毕竟还是一个起步时间不长的新兴技术领域,需要在很多方面逐步完善。1.控制Serverless的一个突出优势是用户无需关注底层的计算资源,但与此优势相反的是用户对底层计算资源没有控制权。对于一些想要控制底层计算资源的应用场景,Serverless架构并不是最合适的选择。2.可移植性Serverless应用的实现很大程度上依赖于Serverless平台以及平台上的FaaS和BaaS服务。Serverless平台的具体实现方式和不同IT厂商的解决方案都不尽相同。而且目前Serverless领域还没有相关的行业标准,这意味着用户将一个平台上的Serverless应用移植到另一个平台上的成本会比较高。较低的可移植性将导致供应商锁定(VendorLock-in)。这对于想要开发无服务器技术,但又不想过度依赖特定供应商的企业来说是一个挑战。3.安全在Serverless架构下,用户无法直接控制应用实际运行的主机。不同用户的应用程序或同一用户的不同应用程序可能在运行时共享底层主机资源。对于一些对安全性要求较高的应用,这会带来潜在的安全风险。4.性能当无服务器应用程序长时间空闲时,它会从主机上卸载。当请求再次到来时,平台需要重新加载应用。应用程序的首次加载和重新加载都会有一定的延迟。对于一些延迟敏感的应用,需要通过预加载或者延长空闲超时时间来处理。5、执行时间Serverless的一个重要特点是应用是按需加载和执行的,而不是长时间持续部署在主机上。目前,大多数Serverless平台都对FaaS函数的执行时间进行了限制。因此,无服务器应用程序更适合执行时间短的作业。6.技术成熟度尽管Serverless技术发展迅速,但它仍然是一个起步时间不长的新兴技术。因此,目前serverless相关的平台、工具和框架还处于不断变化和演进的阶段,开发调试的用户体验有待进一步提升。Serverless相关的文档资料比较少,对Serverless架构有深入了解的架构师、开发人员、运维人员也比较少。
