全部產品
Search
文件中心

Function Compute:基本原理

更新時間:Dec 12, 2024

針對自訂運行時,您的代碼檔案ZIP包是一個HTTP Server程式。本文介紹冷啟動自訂運行時的基本原理和HTTP Server配置要求。

基本原理

針對自訂運行時,您的代碼檔案ZIP包是一個HTTP Server程式,您只需設定函數配置中的啟動命令啟動參數完成HTTP Server的啟動。Function Compute冷啟動自訂運行時時,會調用您設定的啟動命令啟動參數啟動您自訂的HTTP Server,該HTTP Server接管了來自Function Compute的所有請求。HTTP Server的預設連接埠是9000,如果您的HTTP Server是其他連接埠,例如8080,您可以設定函數配置中的監聽連接埠為8080。

例如,函數的程式包名稱為function.zip,該運行時各個語言程式包內的檔案形式和相應的啟動命令啟動參數樣本如下。

Java 8或Spring Boot

.
├── demo.jar


customRuntimeConfig:
 command:
 - java 
 args:
 - '-jar'
 - 'demo.jar'	

Python 3.7

.
├── server.py


customRuntimeConfig:
 command:
 - python
 args:
 - 'server.py'

Node.js 10

.
├── server.js


customRuntimeConfig:
 command:
 - node
 args:
 - 'server.js'

PHP 7.4

.
├── server.php


customRuntimeConfig:
 command:
 - php
 args:
 - 'server.php'
說明

customRuntimeConfig是函數的自訂啟動命令配置。其中command是容器的入口命令列表,args是啟動參數列表。Function Compute依次把commandargs列表中的內容進行拼接,形成完整的啟動命令。如果未配置啟動命令及啟動參數,HTTP Server將預設從/code/bootstrap啟動。

HTTP Server配置要求

建立HTTP Server時您需要滿足以下要求:

  • 自訂運行時啟動的服務一定要監聽0.0.0.0:CAPort*:CAPort連接埠。如果您使用127.0.0.1:CAPort連接埠,會導致請求逾時,出現以下錯誤:

    {
    "ErrorCode":"FunctionNotStarted",
    "ErrorMessage":"TheCA'shttpservercannotbestarted:ContainerStartDuration:25000000000.PingCAfaileddueto:dialtcp21.0.XX.XX:9000:getsockopt:connectionrefusedLogs:2019-11-29T09:53:30.859837462ZListeningonport9000"
    }

    自訂運行時的監聽連接埠,即函數屬性監聽連接埠預設是9000。如果自訂運行時使用預設的監聽連接埠,那麼您實現的自訂運行時的HTTP Server監聽的連接埠也必須是9000。如果自訂運行時使用的監聽連接埠是8080,那麼您實現的自訂運行時的HTTP Server監聽的連接埠也必須是8080。

  • Connection需要設定為Keep-Alive,Server端請求逾時時間需設定在24小時(函數最大已耗用時間)及以上。樣本如下:

    //例如Node.js使用express時。  
    
    var server = app.listen(PORT, HOST);
    server.timeout = 0; // never timeout
    server.keepAliveTimeout = 0; // keepalive, never timeout
  • HTTP Server需要在120秒內啟動完畢。