腾讯云函数在它的帮助文档里面有已经提到了它的几个具体实践,通过管中窥豹,我也来谈谈在具体业务中的几个实践。
简而言之,云函数的个人看法就是提供一个代码的运行环境。
而具体怎么去运行在云函数里的代码时就得用到它的「触发器」。
腾讯云函数的触发器有API网关触发器、COS触发器、定时触发器、消息订阅相关的触发器、API触发器五种。
腾讯云函数是可以配置内网环境的,这样配合同地域的云服务器CVM、对象存储COS,能极大的降低的项目的维护难度以及对资源的合理利用。
下面本人的实践中使用过API网关触发器、定时触发器两种。按照个人的使用顺序,来说说个人在使用中的体会。
定时触发器
这个不难理解,就是定时触发云函数,当然你也知道不是服务器自己就有crontab吗?为什么还要使用云函数?首先实际情况是有的开发者可能是因为公司业务的权限不能够直接登录服务器去做写代码,其次crontab的话需要懂一些linux服务器的操作知识,这个对新人不友好。
具体的实践:
写了一个定时获取公司服务器的运行状态的钉钉机器人,如果服务宕机了就发钉钉消息进行通知。这个场景是可以发散的,
比如你关注了女朋友或者前女友(误)以及若干爱豆的微博,想第一时间去知道她们和点赞他们的微博动态,那么这个时候腾讯云函数贴心的给你准备你要的环境,而你只需要安安静静的把码打好(只需要关注业务层面),部署好再开启定时触发。
API网关触发器
API网关触发器就是通过网关去调用腾讯云函数,具体操作就是web访问去触发嘛,还可以绑定自己的域名,像是公众号、小程序的开发,就能极大的提高稳定性简化部署,逻辑处理在云函数,而持久化则可以使用腾讯云数据库MySQL和Redis去配合使用,为了降低流量走公网导致的网络IO开销以及提到安全性,尽量将云MySQL/Redis 云函数放在同一地域,让他们之间的通信走内网。
具体的实践:
这里顺嘴提一句,腾讯云函数默认分配的就是非固定ip,而有些第三方服务就是对固定ip访问有频率限制,如果某个IP访问频率过快,可能会导致IP被拉黑,这样就适得其反,直接导致服务不可用了。所以这个默认分配非固定IP这个限制在某些场景下就特别适合。
之前有个小程序项目就是使用第三方服务,最开始的架构是小程序调用腾讯云CVM里PHP开发的接口,PHP调用原始的第三方API,同时将结果缓存在redis内一段实践,后来某一天突然第三方服务使用IP限流了,稍微访问几下就被限流不能提供服务。后来为了解决这个问题业务就做了调整,把流程调整为:小程序调用云服务器CVM里PHP开发的接口,而CVM里的PHP则变成了中间层,首先从redis中去取对应的数据,如果没有数据就通过网关去调用云函数,此时的云函数就变成了反向代理,拿到结果后返回给CVM同时把结果存在了redis里面,虽然增加了一层调用,但是通过走内网,外加redis缓存结果还是最大程度在保证服务的情况下避免了IP限流导致的不可用问题。
优化的空间还是有很大的,比如可以配合定时触发器去进行加基于事件机制预处理结果,在用户访问首页时就触发任务去获取结果,典型的用空间换时间,不过用户量不大的情况下就没有进行进一步优化了。
总结:
基本上云函数加上云数据库的持久话就能取代很多常见开发中的工作,虽然价钱相对CVM来说更贵一点,但是它能简化部署的同时还能保证高可用,也能进一步简化架构,特别适合开发人员不多的公司,相信Serverless在以后的开发中也会是一种趋势。
------
本文为技术创作101训练营作业