{"componentChunkName":"component---src-templates-best-practice-detail-tsx","path":"/best-practice/2020-05-14-serverless-db","result":{"data":{"currentBlog":{"id":"4b52a989-be52-522e-91d8-b2cf558938a0","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020518/1589791034615-db%E5%89%AF%E6%9C%AC.jpg","authors":["April"],"categories":["best-practice"],"date":"2020-05-14T00:00:00.000Z","title":"Serverless DB 设计解读与实战","description":"Serverless PostgreSQL 组件和 Serverless TCB 组件满足了用户通过云上资源使用数据库的需求","authorslink":["https://zhuanlan.zhihu.com/ServerlessGo"],"translators":null,"translatorslink":null,"tags":["Serverless DB","PostgreSQL"],"keywords":"Serverless,Serverless Framework,DB,PostgreSQL,TCB","outdated":null},"wordCount":{"words":394,"sentences":63,"paragraphs":63},"fileAbsolutePath":"/opt/build/repo/content/best-practice/2020-05-14-serverless-db.md","fields":{"slug":"/best-practice/2020-05-14-serverless-db/","keywords":["go","nodejs","serverless","website","website 组件","云函数","Serverless","serverless","部署","数据库","组件","创建"]},"html":"<p>哈喽小伙伴们，我们都知道数据库在项目开发中往往是不可或缺的一环，而在云计算热度不断提升的背景之下，我们对于使用数据库的成本以及灵活性有了更高的要求。</p>\n<p><strong>Serverless 团队近期新发布了两款组件来填补这最关键的一块拼图 —— Serverless DB！</strong></p>\n<p>下面我们一起来看看吧！</p>\n<h2 id=\"serverless-postgresql-组件\"><a href=\"#serverless-postgresql-%E7%BB%84%E4%BB%B6\" aria-label=\"serverless postgresql 组件 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>Serverless PostgreSQL 组件</h2>\n<p>PostgreSQL for Serverless 是一款基于 PostgreSQL 数据库实现的按需分配资源的数据库产品，其数据库将根据用户的实际请求数来自动分配资源。通过 PostgreSQL ServerlessDB 组件，用户可以快速方便地创建、配置和管理腾讯云的 PostgreSQL 实例。</p>\n<p><strong>产品有以下特性：</strong></p>\n<ol>\n<li>低成本：产品按照用户使用的计算资源和容量来计费，没有请求时无需付费，减少使用成本。</li>\n<li>方便配置：默认配置将由 Serverless 为用户完成，用户也可自行在yaml文件中更改，短短几行即可完成配置工作，方便用户更好地关注自身业务逻辑。</li>\n<li>极速部署：部署过程流畅快捷，仅需几秒，即可创建或更新数据库。</li>\n<li>高可用：PostgreSQL for Serverless 支持一主一备高可用，当主实例出现意外导致不可用时，数据库将自动启动备用实例，此时业务连接将转移至备用实例当中，避免业务因意外情况而导致数据库无法使用。</li>\n</ol>\n<h2 id=\"serverless-tcb-组件\"><a href=\"#serverless-tcb-%E7%BB%84%E4%BB%B6\" aria-label=\"serverless tcb 组件 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>Serverless TCB 组件</h2>\n<p>用户在处理大数据时常常需要面临高并发读写、海量数据高效存储、高可扩展性等问题，传统的 RMDB 数据库难以满足用户需求，SLS 需要对创建 NoSQL DB 进行支持。有了基于云开发 TCB 的Serverless TCB 组件，用户通过该组件创建 tcb 环境，在代码中直接调用 tcb 的 SDK，实现 tcb 环境中 NoSQL DB 的创建和调用。</p>\n<p><strong>产品有如下优势：</strong></p>\n<ol>\n<li>完全兼容：数据库完全兼容 MongoDB 协议，既适用于传统表结构的场景，更适用于缓存、非关系型数据以及利用 MapReduce 进行大规模数据集的并行运算的场景。</li>\n<li>安全性高：云数据库通过备份机制保存多天的备份数据，以便于在灾难情况下进行数据恢复。</li>\n<li>低成本：按量计费，用户无需为未使用资源进行额外付费。</li>\n<li>极速部署，操作简便：用户仅需几行代码便可完成配置，部署速度快，效率高。</li>\n</ol>\n<hr>\n<p><strong>说了这么多，不如一起来试试吧！</strong></p>\n<p>准备工作：安装好 Node.js（Node.js 版本需不低于 8.6，建议使用 Node.js10.0 及以上版本）</p>\n<blockquote>\n<p>Nodejs 下载地址：<a href=\"https://nodejs.org/en/download/\">https://nodejs.org/en/download/</a></p>\n</blockquote>\n<p>还未安装的小伙伴，可以通以下文档指引安装完成：<a href=\"https://www.serverless.com/cn/framework/docs/getting-started/\">Serverless Framework 快速开始</a></p>\n<h2 id=\"实战一：部署-vue--express--postgresql-全栈网站\"><a href=\"#%E5%AE%9E%E6%88%98%E4%B8%80%EF%BC%9A%E9%83%A8%E7%BD%B2-vue--express--postgresql-%E5%85%A8%E6%A0%88%E7%BD%91%E7%AB%99\" aria-label=\"实战一：部署 vue  express  postgresql 全栈网站 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>实战一：部署 Vue + Express + PostgreSQL 全栈网站</h2>\n<ol>\n<li>通过 npm 全局安装 Serverless Framework：</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ npm install -g serverless</code></pre></div>\n<p>安装完毕后，用如下命令查看 Serverless Framework 的版本信息，确保版本不低于 Components: 2.30.1</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ serverless -v</code></pre></div>\n<ol start=\"2\">\n<li>新建本地文件夹 <code class=\"language-text\">serverless-wty</code>，下载相关的 template。</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ mkdir serverless-wty &amp;&amp; cd serverless-wty\n$ serverless create --template-url https://github.com/serverless-components/tencent-fullstack</code></pre></div>\n<p>目前 PostgreSQL 还不支持扫码一键部署，请在本地创建 <code class=\"language-text\">.env文件</code>，并在其中配置对应的腾讯云 SecretId、SecretKey、地域和可用区信息。</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ touch .env \nvim.env</code></pre></div>\n<blockquote>\n<p>.env\nTENCENT<em>SECRET</em>ID=xxx  // 您账号的 SecretId\nTENCENT<em>SECRET</em>KEY=xxx // 您账号的 SecretKey\n地域可用区配置\nREGION=ap-guangzhou //资源部署区，该项目中指云函数与静态页面部署区\nZONE=ap-guangzhou-2 //资源部署可用区 ，该项目中指 DB 部署所在的可用区</p>\n</blockquote>\n<p><em>说明：如果没有腾讯云账号，请先<a href=\"https://url.cn/UVqywKDk\">注册新账号</a>。如果已有腾讯云账号，请保证您的账号已经授权了 AdministratorAccess 权限。您可以在 API 密钥管理中获取 SecretId 和 SecretKey。</em></p>\n<p><em>ZONE 目前只支持 ap-beijing-3 、ap-guangzhou-2、ap-shanghai-2.</em></p>\n<ol start=\"3\">\n<li>通过执行以下命令，安装所需依赖</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ npm run bootstrap</code></pre></div>\n<ol start=\"4\">\n<li>执行以下命令，进行部署</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ sls deploy --all</code></pre></div>\n<p>部署成功后，您可以使用浏览器访问项目产生的 website 链接，即可看到生成的网站。</p>\n<ol start=\"5\">\n<li>执行如下命令，查看部署信息，该项目部署的信息：vpc、db、api、frontend（前端网站）</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ npm run info</code></pre></div>\n<ol start=\"6\">\n<li>执行如下命令，可移除项目</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$  sls remove --all</code></pre></div>\n<p><strong>上述实战主要包含以下组件:</strong></p>\n<ul>\n<li>Serverless RESTful API：通过云函数和 API 网关构建的 Express 框架实现\nRESTful API。</li>\n<li>Serverless 静态网站：前端通过托管 Vue.js 静态页面到 COS 对象存储中。</li>\n<li>PostgreSQL Serverless：通过创建 PostgreSQL DB 为全栈网站提供数据库服务。\nVPC：通过创建 VPC 和 子网，提供 SCF 云函数和数据库的网络打通和使用。</li>\n</ul>\n<h2 id=\"实战二：部署支持-nosql-数据库的全栈网站\"><a href=\"#%E5%AE%9E%E6%88%98%E4%BA%8C%EF%BC%9A%E9%83%A8%E7%BD%B2%E6%94%AF%E6%8C%81-nosql-%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E5%85%A8%E6%A0%88%E7%BD%91%E7%AB%99\" aria-label=\"实战二：部署支持 nosql 数据库的全栈网站 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>实战二：部署支持 NoSQL 数据库的全栈网站</h2>\n<ol>\n<li>通过 npm 全局安装 Serverless CLI：</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ npm install -g serverless</code></pre></div>\n<p>安装完毕后，用如下命令查看 Serverless Framework 的版本信息，确保版本不低于 <code class=\"language-text\">Components: 2.30.1</code></p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ serverless -v</code></pre></div>\n<ol start=\"2\">\n<li>新建一个本地文件夹，使用 <code class=\"language-text\">create --template-url</code> 命令，下载相关 template：</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ mkdir my_tcbdemo &amp;&amp; cd my_tcbdemo\n$ serverless create --template-url https://github.com/serverless-components/tencent-mongodb/tree/master/example/fullstack-demo</code></pre></div>\n<p>找到 <code class=\"language-text\">function-&gt;serverless.yaml</code> 文件，填入自己的 SecretId 和 SecretKey，再进入 <code class=\"language-text\">function-&gt;src</code> 文件夹目录下，通过以下命令安装所需依赖完成配置：</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ npm install</code></pre></div>\n<p><em>说明：如果没有腾讯云账号，请先<a href=\"https://url.cn/UVqywKDk\">注册新账号</a>。如果已有腾讯云账号，可以在 API 密钥管理 中获取 SecretId 和 SecretKey。目前 sls（serverless 的简称）支持在国内区域访问 TCB，部署时请注意 yaml 文件里的地域设置，其他地域可能会报错。</em></p>\n<ol start=\"3\">\n<li>配置完成后，进入根目录下，通过以下命令进行部署，创建一个新的云开发环境，将后台代码部署到云函数 SCF 平台，并通过 website 组件部署静态网站：</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ sls deploy --all</code></pre></div>\n<p>访问命令行输出的 website url，即可查看您的 Serverless 站点。</p>\n<p><strong>注意：</strong></p>\n<ul>\n<li>由于 sls 运行角色限制，需要用户登录 访问管理角色页面，手动为 SLS_QcsRole 添加 TCBFullAccess 的策略，否则无法正常运行。</li>\n<li>当前 deploy --all 指令只支持2.30.1及以上版本 Serverless Framework Component，请确保您的组件已更新至最新版本。</li>\n<li>目前 TCB 端仅支持每月最多创建销毁4次环境，请谨慎创建，若超过4次部署将会报错。</li>\n<li>DB组件默认为用户创建一个免费云开发环境，如您已有该环境，部署时会报错，请删去db文件夹中的yaml文件，并在function的yaml文件中MongoId参数里输入您已有TCB环境的ID，完成项目的部属。</li>\n<li>部署结束后，您可通过以下命令移除项目：</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ sls remove --debug</code></pre></div>\n<p><strong>上述实战主要包含以下组件：</strong></p>\n<ul>\n<li>Serverless Website： 前端通过托管 HTML 静态页面到对象存储 COS 中。</li>\n<li>Serverless Cloud Function： 后端函数部署到云端，通过 HTTP 进行触发调用。</li>\n<li>云开发 TCB 环境： 通过创建云开发环境并调用 NoSQL DB，为全栈网站提供数据库服务。</li>\n</ul>\n<p>Serverless PostgreSQL 组件和 Serverless TCB 组件不仅满足了大家通过云上资源使用数据库的需求，还同时支持 PostgreSQL 与 NoSQL 两种数据库类型，大家可以按照自己的使用习惯选择合适的组件完成部署。</p>\n<p>更多文档资料参考：<a href=\"https://cloud.tencent.com/product/sls\">https://cloud.tencent.com/product/sls</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=\"/best-practice/2020-05-14-serverless-db/#serverless-postgresql-%E7%BB%84%E4%BB%B6\">Serverless PostgreSQL 组件</a></li>\n<li><a href=\"/best-practice/2020-05-14-serverless-db/#serverless-tcb-%E7%BB%84%E4%BB%B6\">Serverless TCB 组件</a></li>\n<li><a href=\"/best-practice/2020-05-14-serverless-db/#%E5%AE%9E%E6%88%98%E4%B8%80%EF%BC%9A%E9%83%A8%E7%BD%B2-vue--express--postgresql-%E5%85%A8%E6%A0%88%E7%BD%91%E7%AB%99\">实战一：部署 Vue + Express + PostgreSQL 全栈网站</a></li>\n<li><a href=\"/best-practice/2020-05-14-serverless-db/#%E5%AE%9E%E6%88%98%E4%BA%8C%EF%BC%9A%E9%83%A8%E7%BD%B2%E6%94%AF%E6%8C%81-nosql-%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E5%85%A8%E6%A0%88%E7%BD%91%E7%AB%99\">实战二：部署支持 NoSQL 数据库的全栈网站</a></li>\n</ul>"},"previousBlog":{"id":"fbc8c45c-831e-5675-974a-495badfa16c9","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020518/1589791033511-db%E5%89%AF%E6%9C%AC.jpg","authors":["董文枭"],"categories":["best-practice"],"date":"2020-05-15T00:00:00.000Z","title":"Serverless SSR 技术在猎豹移动的实践","description":"猎豹移动前端团队基于腾讯云 Serverless 技术在其项目中应用 SSR","authorslink":["https://zhuanlan.zhihu.com/ServerlessGo"],"translators":null,"translatorslink":null,"tags":["Serverless SSR","Koot.js"],"keywords":"Serverless,Serverless Framework,SSR","outdated":null},"wordCount":{"words":322,"sentences":33,"paragraphs":33},"fileAbsolutePath":"/opt/build/repo/content/best-practice/2020-05-15-ssr-interview.md","fields":{"slug":"/best-practice/2020-05-15-ssr-interview/","keywords":["serverless","webpack","服务器端渲染","Serverless","前端","技术","Koot","团队","koot","框架"]}},"nextBlog":{"id":"d29f5064-9edb-5acf-8649-8495ed7b43fd","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020518/1589791033503-db%E5%89%AF%E6%9C%AC.jpg","authors":["Tina"],"categories":["best-practice"],"date":"2020-05-13T00:00:00.000Z","title":"Serverless Dashboard 设计解读与实战","description":"基于用户需求推出了可视化的运维界，应用部署后可直观地进行应用监控、告警、日志排障等操作","authorslink":["https://zhuanlan.zhihu.com/ServerlessGo"],"translators":null,"translatorslink":null,"tags":["Serverless","Dashboard"],"keywords":"Serverless 多环境配置,Serverless 管理环境,Serverless配置方案","outdated":null},"wordCount":{"words":292,"sentences":47,"paragraphs":47},"fileAbsolutePath":"/opt/build/repo/content/best-practice/2020-05-13-dashboard.md","fields":{"slug":"/best-practice/2020-05-13-dashboard/","keywords":["serverless","云函数","Serverless","部署","应用","监控","Express","云端","Component","serverlesscloud","serverless"]}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"blogId":"4b52a989-be52-522e-91d8-b2cf558938a0","previousBlogId":"fbc8c45c-831e-5675-974a-495badfa16c9","nextBlogId":"d29f5064-9edb-5acf-8649-8495ed7b43fd"}}}