FaaS运行的是后端代码而不是整个后端程序。例如AI应用仅仅包含处理图片上传完成这个事件的逻辑,并不是一个完整的后端程序,而是一段后端代码。 代码通过事件触发。由于不再有一个长期运行的进程等待或轮询用户请求,代码只能通过特殊的事件触发。这些事件由FaaS框架定义,例如上传文件到对象存储、消息队列收到一条新的消息、API Gateway收到一个新的API请求等。 代码的生命周期很短。例如我们的AI应用,从收到事件后Function Handler被调用开始,到调用返回结束,不会有常驻内存的进程运行。此外公共云提供商还会限制代码执行的时间,超出时间后执行代码的进程会被强行销毁。例如AWS的Lambda可执行的最长时间为5分钟。 代码必须做到彻底无状态,两次调用间不能共享内存状态。我们的AI应用最早使用了一个全局变量统计处理的图片数,每处理完一张图片该计数器就加一。使用FaaS后我们不能再用任何全局变量或内存数据结构(例如Hashmap)在调用间共享数据,因为代码运行在独立的进程中,无法访问对方的内存地址空间。于是我们对代码进行了改造,将全局计数器放到了公共云的Redis服务中,这为代码增加了额外的复杂性。 水平扩展不再是需要担心的问题,FaaS会为每个事件和请求运行一份新的代码。 应用的部署方式从上传、配置整个程序变成上传一份打包代码的文件(例如Jar文件或一个Zip文件)。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。