faas/guide/asynchronous.md
Abhinandan Prativadi 1aa6270fcc Update asynchronous.md
Fixing typo

Signed-off-by: abhi <abhi@docker.com>
2017-11-30 01:02:58 +01:00

3.1 KiB

Guide on Asynchronous processing

Asynchronous function calls can be queued up using the following route:

$ curl --data "message" http://gateway:8080/async-function/{function_name}

Summary of modes for calling functions via API Gateway:

Mode Method URL Body Headers Query string
Synchronous POST http://gateway:8080/function/{function_name} Yes Yes Yes
Synchronous GET http://gateway:8080/function/{function_name} Yes Yes Yes
Asynchronous POST http://gateway:8080/async-function/{function_name} Yes Yes Yes #369
Asynchronous GET Not supported - - -

This work was carried out under PR #131.

Logical flow for synchronous functions:

Why use Asynchronous processing?

  • Enable longer time-outs

  • Process work whenever resources are available rather than immediately

  • Consume a large batch of work within a few seconds and let it process at its own pace

How does async work?

Here is a conceptual diagram

screen shot 2017-10-26 at 15 55 19

You can also use asynchronous calls with a callback URL

screen shot 2017-10-26 at 15 55 06

Deploy the async stack

The reference implementation for asychronous processing uses NATS Streaming, but you are free to extend OpenFaaS and write your own queue-worker.

Swarm:

$ ./deploy_extended.sh

K8s:

$ kubectl delete -f ./faas.yml
$ kubectl apply -f./faas.async.yml,nats.yml

Call a function

Functions do not need to be modified to work asynchronously, just use this alternate route:

http://gateway:8080/async-function/{function_name}

If you want the function to call another function or a different endpoint when it is finished then pass the X-Callback-Url header. This is optional.

$ curl http://gateway:8080/async-function/{function_name} --data-binary @sample.json -H "X-Callback-Url: http://gateway:8080/function/send2slack"

You can also use the following site to setup a public endpoint for testing HTTP callbacks: requestb.in

Extend function timeouts

Functions have three timeouts configurable by environmental variables expressed in seconds:

HTTP:

  • read_timeout
  • write_timeout

Hard timeout:

  • exec_timeout

To make use of these just add them to your Dockerfile when needed as ENV variables.

Function watchdog reference