分享一点喜悦和云开发技术知识~
大家好,我是鱼皮,前段时间,我花费了大量精力在公司内部举办的 腾讯云 · 云开发技术竞赛 上。
先介绍下,这是一场关于腾讯 · 云开发技术应用的竞赛,简单的说,就是用云开发技术来完成一个作品,比如网站、小程序等。
我本来没打算参加的,因为竞赛中有我很讨厌的拉票环节,而且我也不是那种贪图奖金的人。但后来在队友的提议下,我开始重新思考参赛的意义,最终还是参加了,原因如下:
- 想学习更多技术,发现更多创意
- 通过比赛促使自己优化代码、整理文档
- 检验自己的作品,希望得到建议
- 参与就有 T 恤,奖金还挺多(
我也不是那种贪图奖金的人)
既然参加了,我就投入了 99 % 的精力,参赛作品是【编程导航】网站。且不说作品的开发过程,光比赛前梳理和补充文档、再根据评审规则针对性地优化文档,就承包了我整整一周的夜晚时间,再加上白天要工作,真是压得我喘不过气。
不过还好,最后顺利拿到了 一等奖 !围观我朋友圈的小伙伴应该之前就看到了~ ?
可惜工作比较忙,没有机会去深圳领奖啦,非常感谢我的队友锋哥,还有其他朋友,以及每位用户大大们的支持 ❤️。
近几年腾讯云开发技术持续发力,更新升级速度非常迅猛,功能也是越来越强大易用,这场公司级竞赛的举办也足以证明云开发的破茧化蝶。而通过这场比赛中大家提交的作品,我也看到了云开发的无限可能。
还不了解云开发的同学,可以阅读这篇文章:感谢,我升高啦!
为什么编程导航作品能拿到一等奖呢?我盲猜很大一部分原因是该网站的实现几乎用到了云开发所有的主流功能,应用大赛不就讲究个技术应用么?合理应用技术去解决系统中的问题。
下面就给大家分享下云开发在编程导航中的应用吧。
云开发在编程导航中的应用
该项目已开源,对想学习云开发的朋友有实践意义。 地址:https://github.com/liyupi/code-nav
先放一张全部功能的思维导图:
基础能力
云数据库
存储编程导航网站的业务数据,比如用户、资源等。通过在云开发网页控制台配置索引来加速查询。
云数据库管理
登录鉴权
用户未登录时,使用云开发 匿名登录 访问云开发资源;当用户输入动态码登录后,使用 自定义登录 实现用户登录态的前后端 token 存储和交互。
云函数
编程导航业务后台采用 serverless 架构,把后端打碎,每个接口都是一个云函数,独立部署。用于实现对数据库的增删改查、用户登录等功能。
通过云函数 定时触发器 实现用户排行周榜、月榜。
云函数管理
云存储
存储用户头像、资源图片等文件。
云存储管理
静态网站托管
一键部署编程导航静态网站,通过云开发提供的 CDN 加速网站的访问。
静态网站托管
HTTP 访问服务
暴露云函数,使其可供其他服务器调用,并通过配置多个域名实现网站域名重定向。
开放 HTTP 接口
云托管
以 Docker 容器集群的方式部署网站前端、微信公众号后台等服务。
安全规则
控制云开发资源的默认访问权限,保护数据安全,防止小贼偷家。
设置安全规则
日志管理
云开发默认提供了日志记录,并且通过在云函数中使用日志 SDK 实现自定义分级日志。可以通过这些日志,定位故障、分析异常流量来源。
查看业务日志
监控告警
通过在云开发网页控制台配置云函数等资源的监控告警规则,即时发现问题,保护业务。
告警管理
API 能力
服务端 SDK 访问云函数
让多个零散的云函数能够互相调用,可用于访问公共云函数,比如发送系统消息、增加用户积分等。(类似微服务架构的公共服务)
数据库事务
支持提交和回滚,用于保证数据库一致性,防止用户发布资源后没有增加积分等问题。
聚合查询
云开发的数据库聚合查询能力非常强大,通过随机查询实现对资源的随机推荐;并通过流水线、关联查询提高查询的灵活性和效率,比如查询评论列表的同时关联查询用户头像、昵称等信息。
评论列表
数据库实时推送
这是大家经常好奇的 socket 长连接解决方案,云开发允许用户实时监听数据库字段的变化,透明化底层 socket,从而实现网站实时公告、实时聊天室等功能。
实时聊天室
扩展能力
云 CMS 内容管理系统
提供了集中式可视化数据管理功能,便于管理员定义数据模型、全局管理数据,非常方便!
可视化管理数据
云 Redis
云开发支持内网访问 Redis 中间件,非常安全。我们编写了 Redis 内部公共服务,通过 setnx 等方式对接口进行限流,保证接口安全。
工具插件
CloudBase CLI
直接在本地一行命令就能快捷发布静态网站、部署云函数、触发器等。
CloudBase Framework
和 CLI 类似,使用 CloudBase Framework 命令工具,一键部署云开发完整应用,比如静态网站、云托管容器等。
其他能力
云环境共享
最开始编程导航只有网站,后来开发了小程序。总不能再单独给小程序开发一套接口(也就几十个)、提供一套数据吧?
所以我们通过云环境共享能力,直接复用 web 项目的接口、数据等资源。