Hello guys:
​
 Recently we are trying to migrate OpenWhisk from docker to K8S, but faced some 
problems, and one of it is: the performance droped a lot(the tps changed from 
thousands to dozens in our environment during benchmarks) after migrating to 
K8S, and the reason we founded is that all action containers will trying to 
fetch action logs from K8S api server after `run` are finished, and these log 
requests become very slow when there are logs of concurrent activations comes, 
which in turn leads to a very low tps of activations.
​
 To resolve such issue, we tried below 2 ways:
​

mount a shared volume for all action pods and invoker pods, and make invoker 
read action logs from shared volume directly

use sidecar container for each action container, read and send action logs to 
an external database(ElasticSearch here), and then invokers fetch logs from the 
external database
 


 But both 2 approaches has some problems, the shared volume needs some 
time(several seconds) to sync file contents and ElasticSearch also need to take 
some seconds to save action logs and return them to invokers.
​
 Then we finally come up with an another idea, which I think is preferable than 
above two, that to make action container capture the output of user's codes and 
then return them within the `run` request in a specified field like 
`__OW_LOGS`, so invokers can get action logs directly from the response of 
`run` uri, and this do improve the tps of activations. But this method also has 
some flaws needs to be solved.
​
 Any idea about this? I'm also curious that have you faced same performance 
issue when run openwhisk on K8S and how did you resolved it?
​
Sincerely
Jiang PengCheng

Reply via email to