{"componentChunkName":"component---src-templates-best-practice-detail-tsx","path":"/best-practice/2021-01-11-serverless-mangguo2","result":{"data":{"currentBlog":{"id":"829120a2-4f13-50a8-a876-9ffe985c3f26","frontmatter":{"thumbnail":"https://main.qcloudimg.com/raw/0693730f68cc5d3b3a9398bb02b863dc.jpg","authors":["susu"],"categories":["best-practice"],"date":"2021-01-11T00:00:00.000Z","title":"Serverless 音视频转码 —— 芒果 TV 落地实践（下）","description":"实现音视频转码服务的详细操作步骤，两种方案任你选！","authorslink":null,"translators":null,"translatorslink":null,"tags":["Serverless","转码"],"keywords":null,"outdated":null},"wordCount":{"words":368,"sentences":79,"paragraphs":79},"fileAbsolutePath":"/opt/build/repo/content/best-practice/2021-01-11-serverless-mangguo2.md","fields":{"slug":"/best-practice/2021-01-11-serverless-mangguo2/","keywords":["go","serverless","云函数","日志","转码","函数","transcode","配置","tencent","异步"]},"html":"<p>在 <a href=\"https://serverlesscloud.cn/best-practice/2021-01-08-serverless-mangguo\">《Serverless 音视频转码——芒果 TV 落地实践（上）》</a>中，我们回顾了芒果 TV 吴坚强老师在 techo 大会的精彩分享，芒果TV 音视频编解码业务团队通过使用腾讯云 Serverless 音视频转码服务，成本降低 45% 以上，引起大家的广泛关注，小伙伴们都跃跃欲试！</p>\n<p>本文我们将带领大家一起使用云函数 + COS + CLS + FFmpeg 构建高可用、并行处理、实时日志、高度自定义的视频转码服务。我们在此提供了两种方案，您可以直接用转码应用，一键部署，也可以通过\n用函数的长运行方案来自己处理。</p>\n<h2 id=\"实现方案\"><a href=\"#%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%A1%88\" aria-label=\"实现方案 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>实现方案</h2>\n<p><strong>方案一：</strong> 使用官网的流式音视频转码，一键部署。查看<a href=\"https://cloud.tencent.com/document/product/583/51451\">详情</a></p>\n<p><strong>方案二：</strong> 利用云函数的异步执行机制，自主研发。查看<a href=\"https://cloud.tencent.com/document/product/583/51519\">详情</a></p>\n<h2 id=\"流式音视频转码方案\"><a href=\"#%E6%B5%81%E5%BC%8F%E9%9F%B3%E8%A7%86%E9%A2%91%E8%BD%AC%E7%A0%81%E6%96%B9%E6%A1%88\" aria-label=\"流式音视频转码方案 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>流式音视频转码方案</h2>\n<p>通过云函数创建 FFmpeg 任务进程，云函数进程与 FFmpeg 任务进程通过 pipe 和 FIFO 的方式进行数据传输。云函数进程中的两个任务线程分别接收 FFmpeg 任务进程向函数进程输出的 FFmpeg 日志流与转码后的文件流，从而实现流式读写 COS 和实时日志输出的转码应用场景。</p>\n<p><img src=\"https://main.qcloudimg.com/raw/749ac11a39c98a1ffbf5bb6d4b758e5a.svg\"></p>\n<h2 id=\"方案优势\"><a href=\"#%E6%96%B9%E6%A1%88%E4%BC%98%E5%8A%BF\" aria-label=\"方案优势 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>方案优势</h2>\n<ul>\n<li><strong>流式转码</strong>\n采用流式拉取源视频文件，流式上传转码文件的工作方式，突破了本地存储的限制，且不需要额外部署 CFS 等产品。</li>\n<li><strong>实时日志</strong>\n视频转码过程中，可通过 CLS 日志实时查看转码进度。同时支持输出 FFmpeg 应用的完整日志。</li>\n<li><strong>长时运行</strong>\n利用云函数的长时运行机制，支持 12h-24h 的运行时长，可覆盖大文件耗时较长的转码场景。</li>\n<li><strong>自定义参数</strong>\n支持用户自定义配置 FFmpeg 命令参数。</li>\n</ul>\n<p><strong>前提条件</strong></p>\n<ol>\n<li>安装 <a href=\"https://cloud.tencent.com/document/product/1154/42990\">Serverlesss Framework</a>。</li>\n<li>函数长时运行 <a href=\"https://cloud.tencent.com/apply/p/hz85krvp8s8\">白名单申请</a>。</li>\n<li>配置部署账号权限。参考 <a href=\"https://cloud.tencent.com/document/product/1154/43006\">账号和权限配置</a> </li>\n<li>配置 <a href=\"https://cloud.tencent.com/document/product/583/51451#.E8.BF.90.E8.A1.8C.E8.A7.92.E8.89.B2.3Ca-id.3D.22role.22.3E.3C.2Fa.3E\">运行角色</a> 权限。</li>\n</ol>\n<h2 id=\"操作步骤\"><a href=\"#%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A4\" aria-label=\"操作步骤 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>操作步骤</h2>\n<h3 id=\"1-下载转码应用\"><a href=\"#1-%E4%B8%8B%E8%BD%BD%E8%BD%AC%E7%A0%81%E5%BA%94%E7%94%A8\" aria-label=\"1 下载转码应用 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. 下载转码应用</h3>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">sls init transcode-app</code></pre></div>\n<p>进入项目目录 <code class=\"language-text\">transcode-app</code>，将看到目录结构如下：</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">transcode-app\n|- .env  #环境配置\n|- serverless.yml # 应用配置\n|- log/ #log 日志配置\n|  └── serverless.yml\n└──transcode/  #转码函数配置\n       |- src/\n       |   |- ffmpeg   #转码 FFmpeg 工具\n       |   └── index.py\n       └── serverless.yml</code></pre></div>\n<ul>\n<li><code class=\"language-text\">log/serverless.yml</code> 定义一个 CLS 日志集和主题，用于转码过程输出的日志保存，目前采用腾讯云 CLS 日志存储。每个转码应用将会根据配置的 CLS 日志集和主题去创建相关资源，CLS 的使用会产生计费，具体参考 <a href=\"https://cloud.tencent.com/document/product/614/47116\">CLS 计费规则</a>。</li>\n<li><code class=\"language-text\">transcode/serverless.yml</code> 定义函数的基础配置及转码参数配置。</li>\n<li><code class=\"language-text\">transcode/src/index.py</code> 转码功能实现。</li>\n<li><code class=\"language-text\">transcode/src/ffmpeg</code> 转码工具 FFmpeg。</li>\n</ul>\n<h3 id=\"2-配置环境变量和应用参数\"><a href=\"#2-%E9%85%8D%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E5%92%8C%E5%BA%94%E7%94%A8%E5%8F%82%E6%95%B0\" aria-label=\"2 配置环境变量和应用参数 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. 配置环境变量和应用参数</h3>\n<ul>\n<li>应用参数，文件 <code class=\"language-text\">transcode-app/serverless.yml</code></li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">#应用信息\napp: transcodeApp # 您需要配置成您的应用名称\nstage: dev # 环境名称，默认为 dev</code></pre></div>\n<ul>\n<li>环境变量，文件<code class=\"language-text\">transcode-app/.env</code></li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">REGION=ap-shanghai  # 应用创建所在区，目前只支持上海区\nTENCENT_SECRET_ID=xxxxxxxxxxxx # 您的腾讯云sercretId\nTENCENT_SECRET_KEY=xxxxxxxxxxxx # 您的腾讯云sercretKey</code></pre></div>\n<blockquote>\n<p>说明：</p>\n<ul>\n<li>您可以登录腾讯云控制台，可以在 <a href=\"https://console.cloud.tencent.com/cam/capi\">API 密钥管理</a> 中获取 SecretId 和 SecretKey。</li>\n<li>如果您的账号为主账号，或者子账号具有扫码权限，也可以不配置 SercretId 与 SercretKey，直接扫码部署应用。更多详情参考 <a href=\"https://cloud.tencent.com/document/product/1154/43006\">账号和权限配置</a>。</li>\n</ul>\n</blockquote>\n<h3 id=\"3-配置转码需要的参数信息\"><a href=\"#3-%E9%85%8D%E7%BD%AE%E8%BD%AC%E7%A0%81%E9%9C%80%E8%A6%81%E7%9A%84%E5%8F%82%E6%95%B0%E4%BF%A1%E6%81%AF\" aria-label=\"3 配置转码需要的参数信息 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. 配置转码需要的参数信息</h3>\n<ul>\n<li>\n<p>CLS 日志定义，文件<code class=\"language-text\">transcode-app/log/serverless.yml</code></p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">#组件信息\ncomponent: cls # 引用 component 的名称\nname: cls-video # 创建的实例名称，请修改成您的实例名称\n\n#组件参数\ninputs:\nname: cls-log  # 您需要配置一个name，作为您的cls日志集名称\ntopic: video-log # 您需要配置一个topic，作为您的cls日志主题名称\nregion: ${env:REGION} # 区域，统一在环境变量中定义\nperiod: 7 # 日志保存时间，单位天</code></pre></div>\n</li>\n<li>\n<p>云函数及转码配置，文件<code class=\"language-text\">transcode-app/transcode/serverless.yml</code> </p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">#组件信息\ncomponent: scf # 引用 component 的名称\nname: transcode-video # 创建的实例名称，请修改成您的实例名称\n\n#组件参数\ninputs:\nname: transcode-video-${app}-${stage}\nsrc: ./src\nhandler: index.main_handler \nrole: transcodeRole # 函数执行角色，已授予cos对应桶全读写权限\nruntime: Python3.6 \nmemorySize: 3072 # 内存大小，单位MB\ntimeout: 43200 # 函数执行超时时间, 单位秒, 即本demo目前最大支持12h运行时长\nregion: ${env:REGION} # 函数区域，统一在环境变量中定义\nasyncRunEnable: true # 开启长时运行，目前只支持上海区\ncls: # 函数日志\n  logsetId: ${output:${stage}:${app}:cls-video.logsetId}  # cls日志集  cls-video为cls组件的实例名称\n  topicId: ${output:${stage}:${app}:cls-video.topicId}  # cls日志主题\nenvironment: \n  variables:  # 转码参数\n    REGION: ${env:REGION} # 输出桶区域\n    DST_BUCKET: test-123456789 # 输出桶名称\n    DST_PATH: video/outputs/ # 输出桶路径\n    DST_FORMATS: avi # 转码生成格式\n    FFMPEG_CMD: ffmpeg -i {inputs} -y -f {dst_format} {outputs}  # 转码基础命令，您可自定义配置，但必须包含ffmpeg配置参数和格式化部分，否则会造成转码任务失败。\n    FFMPEG_DEBUG: 0 # 是否输出ffmpeg日志 0为不输出 1为输出\n    TZ: Aisa/Shanghai # cls日志输出时间的时区\nevents:\n  - cos: # cos触发器    \t\n      parameters:          \n        bucket: test-123456789.cos.ap-shanghai.myqcloud.com  # 输入文件桶\n        filter:\n          prefix: video/inputs/  # 桶内路径\n        events: &#39;cos:ObjectCreated:*&#39;  # 触发事件\n        enable: true</code></pre></div>\n</li>\n</ul>\n<blockquote>\n<ul>\n<li>输出桶与函数建议配置在同一区域，跨区域配置应用稳定性及效率都会降低，并且会产生跨区流量费用。</li>\n<li>内存大小上限为3072MB，运行时长上限为43200s。如需调整，请 <a href=\"https://console.cloud.tencent.com/workorder/category?level1_id=6&#x26;level2_id=668&#x26;source=0&#x26;data_title=%E6%97%A0%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BA%91%E5%87%BD%E6%95%B0%20SCF&#x26;step=1\">提交工单</a> 申请配额调整。</li>\n<li>转码应用必须开启函数长时运行 asyncRunEnable: true。</li>\n<li>运行角色请根据 <a href=\"https://cloud.tencent.com/document/product/583/51451#.E8.BF.90.E8.A1.8C.E8.A7.92.E8.89.B2.3Ca-id.3D.22role.22.3E.3C.2Fa.3E\">运行角色</a> 创建并授权。</li>\n<li>示例配置的 FFmpeg 指令仅适用于 AVI 转码场景，详细介绍参考 <a href=\"https://cloud.tencent.com/document/product/583/51451#ffmpeg-.E6.8C.87.E4.BB.A4.3Ca-id.3D.22ffmpeg.22.3E.3C.2Fa.3E\">FFmpeg 指令</a>。</li>\n</ul>\n</blockquote>\n<h3 id=\"4-部署项目\"><a href=\"#4-%E9%83%A8%E7%BD%B2%E9%A1%B9%E7%9B%AE\" aria-label=\"4 部署项目 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. 部署项目</h3>\n<p>在 <code class=\"language-text\">transcode-app</code> 项目目录下，执行 <code class=\"language-text\">sls deploy</code> 部署项目。</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">cd transcode-app &amp;&amp; sls deploy</code></pre></div>\n<h3 id=\"5-上传视频文件\"><a href=\"#5-%E4%B8%8A%E4%BC%A0%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6\" aria-label=\"5 上传视频文件 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. 上传视频文件</h3>\n<p>上传视频文件到已经配置好的cos桶指定路径，则会自动转码。本示例中是cos桶<code class=\"language-text\">test-123456789.cos.ap-shanghai.myqcloud.com</code>下的<code class=\"language-text\">/video/inputs/</code></p>\n<p>转码成功后，文件将保存在您配置的输出桶路径中。本示例中是cos桶<code class=\"language-text\">test-123456789.cos.ap-shanghai.myqcloud.com</code>下的<code class=\"language-text\">/video/outputs/</code></p>\n<h3 id=\"6-重新部署\"><a href=\"#6-%E9%87%8D%E6%96%B0%E9%83%A8%E7%BD%B2\" aria-label=\"6 重新部署 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. 重新部署</h3>\n<p>如果需要调整转码配置，修改文件 <code class=\"language-text\">transcode/serverless.yml</code> 后，重新部署云函数即可：</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">cd transcode &amp;&amp; sls deploy</code></pre></div>\n<h2 id=\"监控与日志服务\"><a href=\"#%E7%9B%91%E6%8E%A7%E4%B8%8E%E6%97%A5%E5%BF%97%E6%9C%8D%E5%8A%A1\" aria-label=\"监控与日志服务 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>监控与日志服务</h2>\n<p>批量文件上传到 COS 会并行触发转码执行。</p>\n<ol>\n<li>登录 <a href=\"https://console.cloud.tencent.com/scf/index?rid=1\">云函数控制台</a> 的【函数服务】页面中，单击函数名进入函数管理页面。</li>\n<li>单击【日志查询】，即可查看日志监控。\n<img src=\"https://main.qcloudimg.com/raw/366b8d44b84205d580af18703a1cd511.png\"></li>\n<li>单击【函数管理】>【函数配置】，单击日志主题的链接，跳转至日志服务控制台。\n<img src=\"https://main.qcloudimg.com/raw/a86502f7ecc77473501ce654a23435de.jpg\"></li>\n<li>在日志服务控制台的【检索分析】页面中，选择日志集合日志主题，即可查看日志检索分析 。\n<img src=\"https://main.qcloudimg.com/raw/caca6a584b5abe864559379fac8f3346.png\"></li>\n</ol>\n<h2 id=\"借助函数异步运行能力自主研发方案\"><a href=\"#%E5%80%9F%E5%8A%A9%E5%87%BD%E6%95%B0%E5%BC%82%E6%AD%A5%E8%BF%90%E8%A1%8C%E8%83%BD%E5%8A%9B%E8%87%AA%E4%B8%BB%E7%A0%94%E5%8F%91%E6%96%B9%E6%A1%88\" aria-label=\"借助函数异步运行能力自主研发方案 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>借助函数异步运行能力自主研发方案</h2>\n<p>在音视频转码、ETL 大体量数据处理、AI 推理等单任务重计算的场景下，函数的单实例运行时需要更多算力及更长时间的稳定运行。若函数的调用端长时间阻塞等待执行结果，不仅会持续占用调用方资源，还会对调用链路的稳定性产生较高要求。\n云函数 SCF 提供了一种全新的函数运行机制，您可通过 SCF 提供的函数异步执行模式，提升执行超时时间上限和解决现有运行机制的问题。</p>\n<h2 id=\"操作步骤-1\"><a href=\"#%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A4-1\" aria-label=\"操作步骤 1 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>操作步骤</h2>\n<ol>\n<li>登录 <a href=\"https://console.cloud.tencent.com/scf/list?rid=16&#x26;ns=default\">云函数控制台</a>，单击左侧导航栏的【函数服务】。</li>\n<li>在主界面上方选择期望创建函数的地域，并单击【新建】，进入函数创建流程。</li>\n<li>选择使用【空白函数】或选择使用【函数模板】来新建函数。</li>\n<li>在“函数配置”页面，展开【高级设置】，并勾选【异步执行】。</li>\n<li>单击【完成】即可创建函数。  </li>\n</ol>\n<h2 id=\"运行机制原理\"><a href=\"#%E8%BF%90%E8%A1%8C%E6%9C%BA%E5%88%B6%E5%8E%9F%E7%90%86\" aria-label=\"运行机制原理 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>运行机制原理</h2>\n<p>函数启用异步执行后，通过同步（例如 API 网关）或异步（例如 COS、CKafka、Timer 等）调用端进行事件调用，函数将以异步执行模式响应事件。\n即完成事件调度后立即返回事件的调用标识 RequestId，并结束调用操作，调用端无需阻塞等待。返回 RequestId 的同时，调用引擎将并行下发事件到函数运行时，开启函数逻辑执行。进入异步执行状态后，执行日志将实时上报至日志服务，提供对异步执行事件运行情况的实时反馈。其原理如图所示：</p>\n<p><img src=\"https://main.qcloudimg.com/raw/36557e028090175f79b879ac0ad6f66b.png\"></p>\n<blockquote>\n<p>注意事项：</p>\n<ul>\n<li>由于运行机制差异，暂不支持切换同步/异步执行模式。仅支持创建函数时选择是否开启“异步执行”功能，函数创建后该配置将锁定，不提供修改更新操作。</li>\n<li>事件调用成功，返回信息只包含 RequestId。事件执行结果需要在函数代码逻辑中自行实现回调特定的 API 或者发送通知消息。</li>\n<li>\n<p>实时日志强依赖于日志服务，系统将默认开启日志服务 CLS，您需要在函数高级配置中选定已有日志集及主题。</p>\n<ul>\n<li>如果没有日志集或日志主题，则需要新建。</li>\n<li>如果不开启日志服务 CLS，将无法获取实时日志。</li>\n</ul>\n</li>\n<li>异步执行目前支持最长执行时长为24小时。如需更长运行时长，可 <a href=\"https://console.cloud.tencent.com/workorder/category\">提交工单</a> 申请。</li>\n<li>如果通过函数运行角色获取对其他云服务组件的访问权限，角色密钥有效期最长为12小时，需要考虑延长有效期策略或使用长期有效密钥。</li>\n</ul>\n</blockquote>\n<h2 id=\"状态追踪原理\"><a href=\"#%E7%8A%B6%E6%80%81%E8%BF%BD%E8%B8%AA%E5%8E%9F%E7%90%86\" aria-label=\"状态追踪原理 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>状态追踪原理</h2>\n<p>函数高级配置启用状态追踪后，针对异步执行的事件，将开始记录并上报事件响应的实时状态，并提供事件状态的统计、查询及终止等事件管理相关服务。其原理如下图所示：\n<img src=\"https://main.qcloudimg.com/raw/d06476734d27d3308783e78af85897a2.png\"></p>\n<h2 id=\"相关接口\"><a href=\"#%E7%9B%B8%E5%85%B3%E6%8E%A5%E5%8F%A3\" aria-label=\"相关接口 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>相关接口</h2>\n<p>事件管理相关服务 API 通过云 API 的方式提供，详情参考<a href=\"https://cloud.tencent.com/document/product/583/51519\">官网</a></p>\n<h2 id=\"温馨提示\"><a href=\"#%E6%B8%A9%E9%A6%A8%E6%8F%90%E7%A4%BA\" aria-label=\"温馨提示 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>温馨提示</h2>\n<ul>\n<li>产生的事件状态数据仅保留3天，将以3天为时间窗口滑动清理。如需保留全部记录，则需要定期拉取并保存至自有存储。</li>\n<li>关闭状态追踪后，将停止提供异步执行事件相关记录、统计、查询、终止等事件管理相关服务，已产生的事件状态数据将在3天内清空。</li>\n<li>异步运行函数的事件调用 QPS 限制为并发数量的十分之一，超出部分将被限制，造成响应失败。</li>\n<li>由于请求 QPS 超限、账户欠费等原因，事件调用将由调度引擎直接返回对应异常，不会生成事件状态记录。</li>\n</ul>\n<hr>\n<p>欢迎访问：<a href=\"https://serverlesscloud.cn/\">Serverless 中文网</a>，您可以在 <a href=\"https://serverlesscloud.cn/best-practice\">最佳实践</a> 里体验更多关于 Serverless 应用的开发！</p>","tableOfContents":"<ul>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%A1%88\">实现方案</a></li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#%E6%B5%81%E5%BC%8F%E9%9F%B3%E8%A7%86%E9%A2%91%E8%BD%AC%E7%A0%81%E6%96%B9%E6%A1%88\">流式音视频转码方案</a></li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#%E6%96%B9%E6%A1%88%E4%BC%98%E5%8A%BF\">方案优势</a></li>\n<li>\n<p><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A4\">操作步骤</a></p>\n<ul>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#1-%E4%B8%8B%E8%BD%BD%E8%BD%AC%E7%A0%81%E5%BA%94%E7%94%A8\">1. 下载转码应用</a></li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#2-%E9%85%8D%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E5%92%8C%E5%BA%94%E7%94%A8%E5%8F%82%E6%95%B0\">2. 配置环境变量和应用参数</a></li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#3-%E9%85%8D%E7%BD%AE%E8%BD%AC%E7%A0%81%E9%9C%80%E8%A6%81%E7%9A%84%E5%8F%82%E6%95%B0%E4%BF%A1%E6%81%AF\">3. 配置转码需要的参数信息</a></li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#4-%E9%83%A8%E7%BD%B2%E9%A1%B9%E7%9B%AE\">4. 部署项目</a></li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#5-%E4%B8%8A%E4%BC%A0%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6\">5. 上传视频文件</a></li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#6-%E9%87%8D%E6%96%B0%E9%83%A8%E7%BD%B2\">6. 重新部署</a></li>\n</ul>\n</li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#%E7%9B%91%E6%8E%A7%E4%B8%8E%E6%97%A5%E5%BF%97%E6%9C%8D%E5%8A%A1\">监控与日志服务</a></li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#%E5%80%9F%E5%8A%A9%E5%87%BD%E6%95%B0%E5%BC%82%E6%AD%A5%E8%BF%90%E8%A1%8C%E8%83%BD%E5%8A%9B%E8%87%AA%E4%B8%BB%E7%A0%94%E5%8F%91%E6%96%B9%E6%A1%88\">借助函数异步运行能力自主研发方案</a></li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A4-1\">操作步骤</a></li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#%E8%BF%90%E8%A1%8C%E6%9C%BA%E5%88%B6%E5%8E%9F%E7%90%86\">运行机制原理</a></li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#%E7%8A%B6%E6%80%81%E8%BF%BD%E8%B8%AA%E5%8E%9F%E7%90%86\">状态追踪原理</a></li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#%E7%9B%B8%E5%85%B3%E6%8E%A5%E5%8F%A3\">相关接口</a></li>\n<li><a href=\"/best-practice/2021-01-11-serverless-mangguo2/#%E6%B8%A9%E9%A6%A8%E6%8F%90%E7%A4%BA\">温馨提示</a></li>\n</ul>"},"previousBlog":{"id":"7b4f03ab-952b-54c1-969a-54543aef68a8","frontmatter":{"thumbnail":"https://main.qcloudimg.com/raw/6f783dfe4d7c1d441e71cc51bebc7090.jpg","authors":["黄道泳"],"categories":["best-practice"],"date":"2021-01-12T00:00:00.000Z","title":"Serveless 助力新零售 —— 乐凯撒新餐饮服务落地实践","description":"云打印服务、会员画像系统、智能营业额预测应用案例分享","authorslink":null,"translators":null,"translatorslink":null,"tags":["Serverless","客户案例"],"keywords":null,"outdated":null},"wordCount":{"words":554,"sentences":106,"paragraphs":106},"fileAbsolutePath":"/opt/build/repo/content/best-practice/2021-01-12-lacesar.md","fields":{"slug":"/best-practice/2021-01-12-lacesar/","keywords":["serverless","云函数","函数","系统","Serverless","数据"]}},"nextBlog":{"id":"a1042bcb-7aa0-507a-94ea-e51a75168d19","frontmatter":{"thumbnail":"https://main.qcloudimg.com/raw/cce85c25d61f59681d8b0ea835aee127.jpg","authors":["吴坚强"],"categories":["best-practice"],"date":"2021-01-08T00:00:00.000Z","title":"Serverless 音视频转码 —— 芒果 TV 落地实践（上）","description":"芒果TV 使用 serverless 后，成本降低 45% 以上！","authorslink":null,"translators":null,"translatorslink":null,"tags":["Serverless","客户案例"],"keywords":null,"outdated":null},"wordCount":{"words":410,"sentences":66,"paragraphs":66},"fileAbsolutePath":"/opt/build/repo/content/best-practice/2021-01-08-serverless-mangguo.md","fields":{"slug":"/best-practice/2021-01-08-serverless-mangguo/","keywords":["serverless","函数计算","云函数","Serverless","视频","转码","芒果"]}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"blogId":"829120a2-4f13-50a8-a876-9ffe985c3f26","previousBlogId":"7b4f03ab-952b-54c1-969a-54543aef68a8","nextBlogId":"a1042bcb-7aa0-507a-94ea-e51a75168d19"}}}