{"componentChunkName":"component---src-templates-blog-detail-tsx","path":"/blog/2020-04-24-serverless-scf","result":{"data":{"currentBlog":{"id":"8d917612-ee1d-5f28-89aa-aa9ddfa8633d","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020523/1590217244198-16200.jpg","authors":["乂乂又又"],"categories":["user-stories"],"date":"2020-04-24T00:00:00.000Z","title":"万物皆可 Serverless 之关于云函数冷热启动那些事儿","description":"本文带大家了解一下云函数的冷热启动过程，以及面对云函数这种冷热启动模式，开发者需要注意哪些问题。","authorslink":["https://cloud.tencent.com/developer/article/1619032"],"translators":null,"translatorslink":null,"tags":["云函数","冷启动"],"keywords":"Serverless,Serverless冷启动,云函数","outdated":null},"wordCount":{"words":212,"sentences":43,"paragraphs":43},"fileAbsolutePath":"/opt/build/repo/content/blog/2020-04-24-serverless-scf.md","fields":{"slug":"/blog/2020-04-24-serverless-scf/","keywords":["java","python","serverless","无服务器","无服务器架构","云函数","函数","冷启动","调用","serverlesscloud","运行","实例","请求","serverless"]},"html":"<p>本文带大家来了解一下云函数的冷热启动过程，以及面对云函数这种冷热启动模式，开发者需要注意哪些问题。</p>\n<h2 id=\"效果展示\"><a href=\"#%E6%95%88%E6%9E%9C%E5%B1%95%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<p>云函数被第一次调用（冷启动）</p>\n<p><img src=\"https://img.serverlesscloud.cn/2020523/1590217244160-16200.jpg\" alt=\"云函数被第一次调用（冷启动）\"></p>\n<p>云函数被多次连续调用（热启动）</p>\n<p><img src=\"https://img.serverlesscloud.cn/2020523/1590217244159-16200.jpg\" alt=\"云函数被多次连续调用（热启动）\"></p>\n<h2 id=\"云函数的冷、热启动模式\"><a href=\"#%E4%BA%91%E5%87%BD%E6%95%B0%E7%9A%84%E5%86%B7%E3%80%81%E7%83%AD%E5%90%AF%E5%8A%A8%E6%A8%A1%E5%BC%8F\" 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>先跟大家讲下这里的云函数冷热启动模式是什么意思。</p>\n<ul>\n<li>冷启动是指你在服务器中新开辟一块空间供一个函数实例运行，这个过程有点像你把这个函数放到虚拟机里去运行，每次运行前都要先启动虚拟机加载这个函数，这是比较耗时的一个过程，所以云函数需要尽量减少自身冷启动的次数。</li>\n<li>热启动则是说如果一个云函数被持续触发，那我就先不释放这个云函数实例，下次请求仍然由之前已经创建了的云函数实例来运行，就好比我们打开虚拟机运行完这个函数之后没有关闭虚拟机，而是让它待机，等待下一次被重新触发调用运行，这样做的好处就是省去了给虚拟机「开机」的一个耗时环节，缺点是要一直维持这个虚拟机的激活状态，系统开销会大一些。</li>\n</ul>\n<p>当然这里的云函数资源分配的问题并不需要我们操心，云函数的底层会通过算法自行调配。</p>\n<p>在腾讯云云函数文档里的<a href=\"https://cloud.tencent.com/document/product/583/9199?from=10680\">简介</a> 里有这么一段描述：</p>\n<blockquote>\n<p>腾讯云云函数是腾讯云提供的 Serverless 执行环境。您只需编写简单的、目的单一的云函数即可将它与您的腾讯云基础设施及其他云服务产生的事件关联。\n使用云函数时，您只需使用平台支持的语言（Python、Node.js、PHP、Golang 及 Java）编写代码。腾讯云将完全管理底层计算资源，包括服务器 CPU、内存、网络和其他配置/资源维护、代码部署、弹性伸缩、负载均衡、安全升级、资源运行情况监控等。但这也意味着您无法登录或管理服务器、无法自定义系统和环境。\n云函数自动地在同一地域内的多个可用区部署，同时提供极高的容错性。云函数在执行时将根据请求负载扩缩容，从每天几个请求到每秒数千个请求，都由云函数底层自行伸缩。您无需人工配置和介入，只需为运行中的云函数付费，即可满足不同情景下服务的可用性和稳定性。若云函数未运行，则不产生任何费用。\n您可以自定义运行云函数的时机，例如，在 COS Bucket 上传时、删除文件时运行云函数、应用程序通过 SDK 调用时运行云函数，或指定云函数定期执行。您可以使用云函数作为 COS 服务的数据处理触发程序轻松实现 IFTTT 逻辑，您也可以通过构建灵活的定时自动化任务，用于覆盖手工完成的操作，轻松构建灵活可控的软件架构。</p>\n</blockquote>\n<p>大家注意这一句</p>\n<blockquote>\n<p>云函数在执行时将根据请求负载扩缩容，从每天几个请求到每秒数千个请求，都由云函数底层自行伸缩。</p>\n</blockquote>\n<p>可以看到云函数的函数实例个数在系统底层是通过算法自行伸缩的，</p>\n<p>我们再往下看</p>\n<blockquote>\n<p>在 Serverless 2.0 中，我们不仅在控制流和数据流的模块、虚拟化层、网络层、调度层都做了彻底的重构优化，还在安全性、可用性以及性能方面也进行了全面升级。通过采用轻量级虚拟化技术、VPC Proxy 转发方案等多种优化手段使用统一的底层架构。针对实时自动扩缩容核心的能力进行优化，彻底规避了传统无服务器架构中饱受诟病的冷启动问题。\n云函数不再限制运行时长，支持更丰富的应用场景。例如：\n服务型函数不限制单次请求的时长。当请求持续到来时，服务会保持一个长运行的模式，无温、冷启动时延。\n服务型函数支持 WebSocket 长连接。\nEvent Function（触发器函数）具备单次调用时长限制，但在请求持续到来时，服务是保持长运行模式，并无温、冷启动时延。</p>\n</blockquote>\n<p>注意这句：</p>\n<blockquote>\n<p>触发器函数具备单次调用时长限制，但在请求持续到来时，服务是保持长运行模式，并无温、冷启动时延。</p>\n</blockquote>\n<p>也就是说我们通过各种方式来触发的云函数实例，并不都是完全冷启动的，也有可能是之前调用的云函数的实例。</p>\n<p>下面我们一起来做一个实验</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"72618393920810130000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`import json\n\nglobal_v=1\n\n# api网关回复消息格式化\ndef apiReply(reply, code=200):\n    return {\n        &quot;isBase64Encoded&quot;: False,\n        &quot;statusCode&quot;: code,\n        &quot;headers&quot;: {'Content-Type': 'application/json', &quot;Access-Control-Allow-Origin&quot;: &quot;*&quot;},\n        &quot;body&quot;: json.dumps(reply, ensure_ascii=False)\n    }\n\n\ndef main_handler(event, context):\n    global global_v\n    global_v+=1\n    return apiReply({\n        'ok': True,\n        'message': global_v-1\n    })`, `72618393920810130000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> json\n\nglobal_v<span class=\"token operator\">=</span><span class=\"token number\">1</span>\n\n# api网关回复消息格式化\ndef <span class=\"token function\">apiReply</span><span class=\"token punctuation\">(</span>reply<span class=\"token punctuation\">,</span> code<span class=\"token operator\">=</span><span class=\"token number\">200</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token string\">\"isBase64Encoded\"</span><span class=\"token punctuation\">:</span> False<span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"statusCode\"</span><span class=\"token punctuation\">:</span> code<span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"headers\"</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span><span class=\"token string\">'Content-Type'</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'application/json'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Access-Control-Allow-Origin\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"*\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"body\"</span><span class=\"token punctuation\">:</span> json<span class=\"token punctuation\">.</span><span class=\"token function\">dumps</span><span class=\"token punctuation\">(</span>reply<span class=\"token punctuation\">,</span> ensure_ascii<span class=\"token operator\">=</span>False<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n\n\ndef <span class=\"token function\">main_handler</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">,</span> context<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    global global_v\n    global_v<span class=\"token operator\">+=</span><span class=\"token number\">1</span>\n    <span class=\"token keyword\">return</span> <span class=\"token function\">apiReply</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n        <span class=\"token string\">'ok'</span><span class=\"token punctuation\">:</span> True<span class=\"token punctuation\">,</span>\n        <span class=\"token string\">'message'</span><span class=\"token punctuation\">:</span> global_v<span class=\"token operator\">-</span><span class=\"token number\">1</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>上面是一个简单的 python 云函数，我们给它添加一个 API 网关触发器来试验一下它会返回什么结果：</p>\n<ul>\n<li>第一次调用，返回了1，说明我们的云函数被冷启动了</li>\n</ul>\n<p><img src=\"https://img.serverlesscloud.cn/2020523/1590217244158-16200.jpg\" alt=\"第一次调用，返回了1，说明我们的云函数被冷启动了\"></p>\n<ul>\n<li>继续调用，发现这次返回了2，说明我们的云函数是在上一个实例的基础上被热启动的：</li>\n</ul>\n<p><img src=\"https://img.serverlesscloud.cn/2020523/1590217244158-16200.jpg\" alt=\"继续调用，发现这次返回了2，说明我们的云函数是在上一个实例的基础上被热启动的\"></p>\n<p>再试几次我们发现有的是被热启动，有的依然是被冷启动：</p>\n<p><img src=\"https://img.serverlesscloud.cn/2020523/1590217244160-16200.jpg\" alt=\"serverless\"></p>\n<p><img src=\"https://img.serverlesscloud.cn/2020523/1590217244157-16200.jpg\" alt=\"serverless\"></p>\n<p><img src=\"https://img.serverlesscloud.cn/2020523/1590217826454-16202.jpg\" alt=\"serverless\"></p>\n<p>但是这种表现显然是与我们的预期不符的，我们期望前面的请求是不会影响到后面云函数运行结果的，这就是问题所在。</p>\n<p>好，我们现在再去看一下官方文档是怎么说的</p>\n<blockquote>\n<p>SCF 是否会重复使用函数实例？\n为了提高性能，SCF 会在一定时间内保留您的函数实例，将其再用于服务后续请求。但您的代码不应假设此操作总是发生。\n为何要保持 SCF 函数无状态？\n保持函数的无状态性可使函数按需要尽可能多地启动多个实例，从而满足请求的速率。</p>\n</blockquote>\n<p>也就是说，我们在编辑云函数时一定要保证 SCF 函数是无状态的，不然就会出现一些无法预测的奇怪问题。</p>\n<p>那么什么是无状态呢？说白了就是你的云函数不能依赖之前函数运行的状态或者是结果，并且要尽量避免全局变量的使用！</p>\n<p>因为就像我们之前实验中那样，全局变量的值会在云函数的冷热启动过程中变得无法预测，这在我们后续的函数调测过程中，无疑是一场灾难~</p>\n<p>更多关于腾讯云云函数 SCF 使用的常见问题，可参考<a href=\"https://cloud.tencent.com/document/product/583/9180?from=10680\">官方文档</a></p>\n<hr>\n<div id='scf-deploy-iframe-or-md'></div>\n<hr>\n<blockquote>\n<p><strong>传送门：</strong></p>\n<ul>\n<li>GitHub: <a href=\"https://github.com/serverless/serverless/blob/master/README_CN.md\">github.com/serverless</a></li>\n<li>官网：<a href=\"https://serverless.com/\">serverless.com</a></li>\n</ul>\n</blockquote>\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=\"/blog/2020-04-24-serverless-scf/#%E6%95%88%E6%9E%9C%E5%B1%95%E7%A4%BA\">效果展示</a></li>\n<li><a href=\"/blog/2020-04-24-serverless-scf/#%E4%BA%91%E5%87%BD%E6%95%B0%E7%9A%84%E5%86%B7%E3%80%81%E7%83%AD%E5%90%AF%E5%8A%A8%E6%A8%A1%E5%BC%8F\">云函数的冷、热启动模式</a></li>\n</ul>"},"previousBlog":{"id":"60228f3f-9f9d-55a4-9fd6-5c06c057cc38","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020424/1587706075995-%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_1587705040958.png","authors":["liujiang"],"categories":["news"],"date":"2020-04-24T00:00:00.000Z","title":"首届 ServerlessDays · China 大会来啦！","description":"今年，ServerlessDays 终于来到了中国！我们将面向开发者们发起首届 ServerlessDays · China 大会，大会将邀请全球顶级技术专家、架构师以及开发者，解读 Serverless 前沿趋势，分享 Serverless 技术落地经验。","authorslink":["https://github.com/jiangliu5267"],"translators":null,"translatorslink":null,"tags":["ServerlessDays","Meetup"],"keywords":"Serverless;ServerlessDays;","outdated":null},"wordCount":{"words":75,"sentences":15,"paragraphs":15},"fileAbsolutePath":"/opt/build/repo/content/blog/2020-04-24-serverlessdays-china.md","fields":{"slug":"/blog/2020-04-24-serverlessdays-china/","keywords":["serverless","无服务器","Serverless","ServerlessDays","serverlesscloud","serverless","开发者","大会"]}},"nextBlog":{"id":"c82fd707-caeb-5cc1-aab2-ebcd60d61f3b","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020424/1587690982414-Product%20Release%20%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2.png","authors":["Serverless"],"categories":["news"],"date":"2020-04-23T00:00:00.000Z","title":"Serverless Framework 一键部署正式发布","description":"新版本的 Serverless Framework，只需一键扫码，便可快速新建和部署项目，还等什么，赶快加入体验吧~","authorslink":["https://www.zhihu.com/people/Aceyclee"],"translators":null,"translatorslink":null,"tags":["Serverless","一键部署"],"keywords":"腾讯云 Serverless,Serverless,Serverless framework","outdated":null},"wordCount":{"words":115,"sentences":25,"paragraphs":25},"fileAbsolutePath":"/opt/build/repo/content/blog/2020-04-23-one-click.md","fields":{"slug":"/blog/2020-04-23-one-click/","keywords":["java","serverless","spa","website","serverless","express","部署","deploy","demo","serverlesscloud","tencent"]}},"recommendBlogs":{"edges":[{"node":{"id":"4300b21c-7209-5256-86ff-0d38e3daec9b","frontmatter":{"thumbnail":"https://main.qcloudimg.com/raw/14f1c8eed372e76c1b139703b2f6d0fa.jpg","authors":["KieranMcCarthy"],"categories":["user-stories","engineering-culture"],"date":"2018-01-09T00:00:00.000Z","title":"我是如何在四年时间里，从厨师转行为 Serverless 应用开发者","description":"我是厨师出身，现在成为了一名 Serverless 应用开发者。","authorslink":["https://serverless.com/author/kieranmccarthy/"],"translators":["Aceyclee"],"translatorslink":["https://www.zhihu.com/people/Aceyclee"],"tags":["应用开发","Serverless"],"keywords":"Serverless 应用开发,Serverless 管理,厨师转行为 Serverless 应用开发者","outdated":null},"wordCount":{"words":285,"sentences":38,"paragraphs":36},"fileAbsolutePath":"/opt/build/repo/content/blog/2018-01-09-from-chef-to-serverless-developer-in-4-years.md","fields":{"slug":"/blog/2018-01-09-from-chef-to-serverless-developer-in-4-years/","keywords":["无服务器","无服务器开发","云函数","学习","Serverless","构建","Framework","开发者","服务器","应用","学位","简历"]}}},{"node":{"id":"713a0563-4bf9-5721-bacb-3b4ef609fe4a","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/camp-fire/camp-fire-housing-thumb.jpg","authors":["EricWyne"],"categories":["guides-and-tutorials","user-stories"],"date":"2018-12-05T00:00:00.000Z","title":"Serverless Twitter 机器人帮助为坎普山火受灾者安置住房","description":"加利福尼亚州的坎普山火致使数千人流离失所，为此，我构建了一个简单的 Serverless Twitter 机器人来帮助将受灾者安置在临时住房！","authorslink":["https://serverless.com/author/ericwyne/"],"translators":["Aceyclee"],"translatorslink":["zhihu.com/people/Aceyclee"],"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":157,"sentences":26,"paragraphs":26},"fileAbsolutePath":"/opt/build/repo/content/blog/2018-12-05-serverless-twitter-camp-fire.md","fields":{"slug":"/blog/2018-12-05-serverless-twitter-camp-fire/","keywords":["serverless","无服务器","云函数","Serverless","org","住房","Twitter","函数","受灾","机器人","山火"]}}},{"node":{"id":"98602143-b837-5f50-a24f-3b1ec76044d7","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/sqquid/sqquid-serverless-thumb.jpg","authors":["RonPeled"],"categories":["user-stories"],"date":"2018-12-17T00:00:00.000Z","title":"SQQUID：100% 无服务器初创公司","description":"SQQUID 将 AWS Lambda 和无服务器框架用于其核心产品和营销网站。我们来看看一个完全无服务器的初创公司是怎样的。","authorslink":null,"translators":null,"translatorslink":null,"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":266,"sentences":42,"paragraphs":42},"fileAbsolutePath":"/opt/build/repo/content/blog/2018-12-17-sqquid-one-hundred-percent-serverless.md","fields":{"slug":"/blog/2018-12-17-sqquid-one-hundred-percent-serverless/","keywords":["go","serverless","无服务器","无服务器架构","服务器","架构","Lambda","集成","FaaS","串行","系统"]}}},{"node":{"id":"29dc2e58-d2ba-56f9-aee1-d21b0bc62e0e","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/ao-com-story/ao-serverless-thumbnail.png","authors":["NickGottlieb"],"categories":["user-stories"],"date":"2019-04-24T00:00:00.000Z","title":"AO.com：逐渐转向无服务器优先","description":"AO.com 的 SCV 团队率先尝试无服务器服务。折服于无服务器框架的快速周转时间和低维护成本，整个团队逐渐转向无服务器优先。","authorslink":null,"translators":null,"translatorslink":null,"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":236,"sentences":42,"paragraphs":35},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-04-24-ao-serverless-first.md","fields":{"slug":"/blog/2019-04-24-ao-serverless-first/","keywords":["serverless","无服务器","服务器","团队","Lambda","功能","构建"]}}},{"node":{"id":"752d08d1-387a-5bde-acf3-98141baab294","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020414/1586871710979-%E5%85%AC%E5%85%B1%E7%94%A8.png","authors":["Anycodes"],"categories":["user-stories"],"date":"2019-06-20T00:00:00.000Z","title":"如何用 Serverless 为 Python 云函数打包依赖","description":"在使用无服务器云函数SCF时通常会遇到导入第三方库的问题，很多小伙伴比较头疼是：应该如何打包进去？这里，推荐几个不错的方法。","authorslink":["https://zhuanlan.zhihu.com/ServerlessGo"],"translators":null,"translatorslink":null,"tags":["云函数","Serverless"],"keywords":"Serverless,Serverless应用,无服务器云函数","outdated":null},"wordCount":{"words":81,"sentences":43,"paragraphs":43},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-06-20-for-python-cloud-functions.md","fields":{"slug":"/blog/2019-06-20-for-python-cloud-functions/","keywords":["java","serverless","无服务器","无服务器云函数","云函数","serverlesscloud","安装","serverless","pillowtest"]}}},{"node":{"id":"2dc78814-9d77-555b-a1bb-ad202c8ec2d1","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/cloudforecast/thumbnail.png","authors":["FrancoisLagier"],"categories":["user-stories"],"date":"2019-08-07T00:00:00.000Z","title":"Serverless：初创企业的理想选择？（CloudForecast 案例分析）","description":"CloudForecast 是 2018 年成立的一家独立初创企业，本文将介绍他们决定选择 Serverless 的原因。","authorslink":["https://serverless.com/author/francoislagier/"],"translators":["Aceyclee"],"translatorslink":["zhihu.com/people/Aceyclee"],"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":211,"sentences":29,"paragraphs":29},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-08-07-serverless-for-startups.md","fields":{"slug":"/blog/2019-08-07-serverless-for-startups/","keywords":["serverless","云函数","serverless","函数","Serverless","utm","Framework","blog","CloudForecast","cloudforecast"]}}},{"node":{"id":"97450b07-658b-5207-8216-1c7b9b51b115","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020114/1578988490344-v2-8b2cd2c5275aa2c5a3c5083a148a7a9f_1200x500.jpg","authors":["Anycodes"],"categories":["user-stories"],"date":"2019-09-01T00:00:00.000Z","title":"如何通过 Serverless 与自然语言处理，让搜索引擎「看」到你的博客","description":"Serverless 与自然语言处理结合的一个小应用","authorslink":["https://www.zhihu.com/people/liuyu-43-97"],"translators":null,"translatorslink":null,"tags":["个人博客","serverless"],"keywords":"Serverless 自然语言处理","outdated":null},"wordCount":{"words":106,"sentences":34,"paragraphs":34},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-09-01-search-engine-blog.md","fields":{"slug":"/blog/2019-09-01-search-engine-blog/","keywords":["serverless","云函数","keywords","serverlesscloud","summary"]}}},{"node":{"id":"ae4fd2f8-515c-5aec-b584-38427ef33f7e","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020114/1578989800047-part-00492-780.jpg","authors":["Anycodes"],"categories":["guides-and-tutorials","user-stories"],"date":"2019-09-16T00:00:00.000Z","title":"突破传统 OJ 瓶颈，「判题姬」接入云函数","description":"通过 Serverless 实现在线编程","authorslink":["https://www.zhihu.com/people/liuyu-43-97"],"translators":null,"translatorslink":null,"tags":["在线编程","云函数"],"keywords":"Serverless 在线编程,Serverless OJ","outdated":null},"wordCount":{"words":169,"sentences":30,"paragraphs":30},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-09-16-online-Judge.md","fields":{"slug":"/blog/2019-09-16-online-Judge/","keywords":["python","serverless","云函数","代码","函数","serverless"]}}}],"totalCount":64}},"pageContext":{"isCreatedByStatefulCreatePages":false,"blogId":"8d917612-ee1d-5f28-89aa-aa9ddfa8633d","previousBlogId":"60228f3f-9f9d-55a4-9fd6-5c06c057cc38","nextBlogId":"c82fd707-caeb-5cc1-aab2-ebcd60d61f3b","categories":["user-stories"]}}}