beego 1.12.1 发布,Go 应用框架
作者:邓明 from beego-dev
不久前,我们发文说 Beego 重新组建了一个团队,再次开始维护了。
经过这一段时间的努力,我们终于完成了重启之后的第一个版本。这个版本,我们集中精力修复了很多陈年 issue,同时也尝试支持了一下 promethues
。欢迎大家使用。 Release Note
Prometheus 支持
一个没有观测性支持的框架是没有灵魂的。这一个版本,我们走出了解决 metric
问题的第一步,使用 Prometheus
开发了一个 Web Middleware
,用户可以在开启了 admin
服务之后尝个鲜了。
Prepare Statement 缓存优化
在 v1.12.0 的时候,我们引入了 Prepare Statement
的缓存机制。Beego 内部所有的查询都会通过 Prepare Statement
来执行,以提高安全性和性能。
但是在缓存 Prepare Statement
的时候,存在两个问题:
- 未能设置缓存的
Prepare Statement
的数量限制,用户使用不当的时候,会导致 "Can't create more than max_prepared_stmt_count statements" 的错误; - 任何一个
Prepare Statement
被创建出来以后,我们并没有主动关闭,而是依赖于会话结束之后自然释放;
这一次,我们也改进了这些缺点:
- 我们采用了 LRU 来缓存
Prepare Statement
,当一个Prepare Statement
被 LRU 淘汰的时候,我们主动关闭Prepare Statement
; - 为了解决
Prepare Statement
被 LRU 淘汰之后,还存在用户使用继续使用该Prepare Statement
的问题,我们引入了计数功能,会等到所有用户都释放了Prepare Statement
之后再关闭。
这个优化应该算是走在了 ORM 框架的前列。我们看过一些开源框架的代码,它们要么没有缓存 Prepare Statement
,要么如优化之前那样,没有主动关闭;要么则是将关闭的决策交给了用户,依赖于用户主动找到未被使用的 Prepare Statement
而后自己关闭,而用户其实也很难判断出来 Prepare Statement
有没有被别的用户使用。
静态缓存文件优化
社区里面一直反馈的一个问题是,Beego 缓存的静态文件的功能,会消耗大量的内存,而 Beego 并没有限制内存的使用。 这个功能比较常用的是将 Beego 作为下载服务器。
这一次我们通过三个角度的优化来彻底解决这个问题:
- 采用 LRU 来做缓存,淘汰长期未使用的缓存下来的文件;
- 大文件不再缓存。我们通过参数的形式,允许用户设置一个阈值,超过这个阈值的文件将不会被缓存下来;
- 限制缓存的文件数量。结合前面的文件大小限制,用户可以准确预估,在当前配置下,Beego 静态文件缓存将会最多占用多少内存;
如果文件以小文件为主,那么这个缓存效果将会十分好。
手机全号码段校验支持
我们再一次更新了手机号码校验的正则表达式,现在已经可以支持全号码段的手机号码校验了。
性能优化
这一次,我们合并了多个跟优化相关的 PR。优化集中在锁优化,包括缩小锁的范围,尽量使用读锁等;Redis 采用 Scan
命令来取代 Keys
命令...
更多
我们还修复了其余的问题,比如说遗漏加锁导致的并发问题,还有热更新模块,在设置了某些选项下主线程依旧存活的问题……
在经过这个版本以后,我们接下来的核心工作是 Beego v2,目前我们出了一个 V2 RoadMap 在征集社区意见。欢迎大家参与进来,出谋划策。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Nebula Graph 在大规模数据量级下的实践和定制化开发
本文作者系微信技术专家李本利 图数据在社交推荐、多跳实时计算、风控和安全等领域有可期待的前景。如何用图数据库高效存储和查询大规模异构图数据,是一个重大挑战。本文描述了开源分布式图数据库 Nebula Graph 实践中遇到的问题,并通过深度定制,实现:大数据集存储、小时级全量导入、多版本控制、秒级回滚、毫秒级访问等特性。 背景 为大众所熟知的图数据库大多在大数据集合上束手无策,如:Neo4j 的社区版本,采用 Cypher语言,由单机单副本提供服务,广泛应用于图谱领域。互联网公司只能在小数据集合下使用,还要解决 Neo4j 多副本一致性容灾的问题。JanusGraph 虽然通过外置元数据管理、kv 存储和索引的方式解决了大数据集合存储问题,但其存在广为诟病的性能问题。我们看到大部分图数据库在对比性能时都会提到和 JanusGraph 相比有几十倍以上的性能提升。 面临大数据量挑战的互联网公司,普遍走向了自研之路,为了贴合业务需求,仅支持有限的查询语义。国内主流互联网公司如何解决图数据库的挑战呢: 蚂蚁金服:GeaBase[1] 金融级图数据库,通过自定义类语言为业务方提供服务,全量计算...
- 下一篇
Jenkins CLI 命令行 v0.0.29 发布
截止到编辑本文时,GitHub 上统计到的下载量为:6,648次。GitHub 上的Star数为180,码云上的Star数为151。 Jenkins CLI 加入了码云最有价值开源项目计划(GVP),并且迎来了两位社区贡献者的首次贡献。非常感谢码云对该项目的认可,以及开源贡献者的努力。到目前为止,在 GitHub 上记录的有11位社区开发者参与过项目贡献,我们非常地欢迎更多的人加入! 🚀功能 支持把 HTTP 请求以 curl 命令的形式输出 (#409) @LinuxSuRen 支持关闭 Jenkins (#346) @LinuxSuRen 支持保存 token 到 keyring (#399) @LinuxSuRen 触发 Jenkins 参数化任务时,支持传递文件 @WangXiangUSTC 添加函数 default 到子命令 cwp 到配置文件解析 (#415) @LinuxSuRen 支持直接运行 jenkinsfile (#379) @sladyn98 🐛缺陷修复 修复读取 keyring 中的 token 时可能发生的错误 (#419) @LinuxSuRen 📝...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果