在互联网和云计算时代,HTTP协议已经成为应用程序设计的基本元素,甚至某些编程语言本身就几乎可以和web服务器划等号。云计算平台提供的函数服务大多都支持HTTP触发器,将web服务器架构作近一步抽象。在云中运行的应用,尽管形式不同,大多都可以使用基于HTTP事件的API或者函数来构建。
REST API
API是函数服务的最基本应用场景,使用AWS Lambda或者Azure Functions可以快速搭建API。在配置API Gateway和相应的身份认证方案后,基于HTTP触发器的函数服务就可当作API使用,尤其适用于按调用量计费的场景。在基于微服务的系统中,函数服务可以作为微服务的载体,发挥灵活部署和弹性伸缩的优势。
Webhook
Webhook可以看作是退化了的REST API,用来接收消息推送。一般来说webhook是匿名的,或者采用弱身份验证方式。发送端通常只关心webhook所返回的response的状态码,而正文会被忽略。函数服务是实现webhook的理想选择。
SPA网站
HTTP函数服务也可以作为Single Page Application的后端。一种搭建网站的做法是将前端的脚本等静态资源放在CDN上,然后在脚本里通过ajax访问后端的API,而API就可以通过函数服务搭建。
后台程序
传统的应用设计一般不会采用web服务器来实现后台的工作流,但一切程序的执行入口都是基于事件的,所以一些后台job也可以改造成由HTTP事件触发。最典型的后台应用模式是基于schedule的,可以使用函数服务外加一个外部定时器来触发,比如Azure Scheduler。需要注意的是,很多函数服务都是有较短timeout限制的,如果业务逻辑的后台工作流可能会耗时较久,应该考虑采用异步调用,并配置函数服务的运行和计费模式。
消息分发
消息队列是分布式系统中常用的中间件,一般来说消息的接收有轮询,长连接和推送通知三种模式。推送模式可以直接应用webhook来实现,而轮询和长连接模式在收到消息后,可以将消息分发为基于HTTP的调用,转化为下游的API或者webhook。这样的设计理念可以近一步推广到其他的应用场景,将系统拆分,把主要的计算工作交给HTTP函数或者微服务。
上面的各种应用场景,都可以看作是某种形式的API实现。开发者可以把“后端”这个概念和基于HTTP的API划上约等号,由此专注相关技术,并采用成熟的设计模式和工具。我坚持的一个奇葩观点是,即便写Hello World也应该走HTTP协议。