腾讯云函数 数据库连接
在前面的文章中,我们实现了golang程序自动化构建并部署到腾讯云函数平台上,serverless服务是无状态的,只有在请求到达或者事件发生的时候才会对传入的信息做出处理,所以我们还需要想办法实现数据的持久化,可以考虑将数据存到数据库中或者是作为文件写入到对象储存。
这一章中,我们先从数据库开始,将这个云函数与数据库建立连接并尝试进行交互,我们的业务方案中直接使用了腾讯云的云mysql而非自建的方案。不得不说现在的PaaS平台提供了开发的各个阶段所需要的服务,原来各种复杂的运维操作都由云服务平台提供了解决方案,所以云计算时代的运维工作与传统的运维有着不小的差异。
vpc内网互联
需要注意的一点,腾讯云的云数据库是没有公网入口的,想要使用这个数据库我们需要将服务器/云函数和数据库加入同一个虚拟私有网络中(后文都用vpc代替),先不讨论跨地域vpc互联,通常来说一个vpc内的服务需要在同一个地域,比如都在上海或者都在香港。
官方文档已经有详细的流程介绍了,这里就不再一步一步记录,在购买云数据库后,同一个地域下会创建一个vpc。
经过测试,直接在网页上加入私有网络后,再通过serverless cli部署项目,之前加入的vpc依旧有效。当然,直接在serverless.yaml里面定义私有网络也是可以的。
最后在网页上创建一个数据库账号,并创建一个数据库并授权,在网页上通过可视化操作即可晚上上述步骤,还是很方便的。
连接数据库的测试
在之前的简易http服务器代码上做一些扩展(数据库部分的代码直接从网上找的,后续要用的话还是配合gorm之类的orm框架方便一些)
这里的代码很随意,之后也许会换一个完整一点的版本,不过其实从这里开始,与数据库的交互和传统的开发方式就没有区别了。
|
|
成功构建并部署之后还需要配置一下环境变量,去网页上设置一下几个环境变量 必须在 serverless.yaml里面设置,不然部署后会覆盖网页上设置的环境变量。
|
|
部署之后便能实现对数据库的访问和操作了。
另外需要注意的一些点:
在云函数 SCF 的运行机制下如何更加高效的管理数据库连接? SCF 的每个请求实际运行在一个容器上,容器在有连续请求的场景下可在一段时间内复用。数据库的连接创建建议在初始化容器的时候进行,即对应函数代码的全局部分。数据库连接建立后,在容器存在的时间段内均可以进行复用,在容器释放时会断开。避免在入口函数内部频繁进行数据库的连接和关闭,影响性能。为保证数据库的连接可用,可在入口函数内部进行连接检查。 建议使用数据库连接池进行容器数据库连接管理,最小连接数设置为1即可。
在函数高并发场景下如何进行数据库连接管理? 函数高并发场景下,并发数可能超过数据库最大连接数,可以参考如下方案进行处理:
增大数据库最大连接数。 设置函数最大独占并发配额,限制函数的并发数小于数据库最大连接数。 云数据库 MySQL 提供 数据库代理功能,通过代理集群中转访问数据库的主从节点,进行读写分离,将读请求转发至只读实例,降低主库的负载。