Serverless 架构与传统架构的区别
3.1、按需加载
与传统架构最大的区别在于,在 Serverless 架构中,由底层的容器平台管理应用的启动和关闭。应用程序是否正在运行取决于当前是否有事件触发或请求访问该服务。当有事件触发或者请求访问时,服务会被自动启动。当一段时间服务不被使用,平台将关闭该服务等待下次触发。
3.2、事件驱动
Serverless 架构的应用是通过事件驱动的方式实现按需加载,不需要传统函数中监听类型的应用一直在线。当事件源中包含的事件发生变化,会根据不同的事件源类型触发不同的事件,进而执行不同的响应函数完成对应的请求操作。事件源的类型可以有很多种,如 http 请求,数据库修改、消息发送和文件上传等。
3.3、状态非本地化持久
由于应用和服务器解耦,应用不再绑定到特定的服务器上,每次事件触发后的服务实例可能运行在集群中任意一个服务器节点。因此,服务器节点不会保存该节点上应用的状态,这个传统架构有很大的区别。
3.4、非会话保持
由于应用不再绑定到特定的服务器上,每次处理请求的服务实例可能在同一个服务器节点上,也可能在不同的服务器节点上。因此,同一个客户端的多次请求无法保证被同一个服务实例处理。传统架构中很容易实现的会话保持功能,不适用于 Serverless 架构应用。因此,无状态的应用比有状态的应用更加适合Serverless 架构。
3.5、自动扩缩容
Serverless 架构的底层平台原生支持自动扩缩容策略,会根据应用访问量的变化动态调整服务实例的数量来满足应用访问的需求。
3.6、应用函数化
Serverless 架构中一个应用被分解为多个细粒度的函数,通过多个函数之间的编排调度实现业务逻辑。这些函数本身都是无状态的函数服务,无法进行状态保存和会话保持。在 Serverless 架构的实现中,应用函数化是一种重要的实现方式。
3.7、依赖服务
为了提高开发效率,现在的服务在开发过程中利用了很多第三方工具,如消息队列、数据库、缓存等。如果只有当前应用服务化,其他依赖的第三方工具需要用户单独进行管理和部署,那么整个应用服务依旧被服务器资源等条件限制。因此,Serverless 架构应用所依赖的第三方工具也必须服务化。