mongodb时间范围查询少8个小时_为何要对开源mongodb数据库内核做二次开发

7525fd017cbbec1e9fc29ec95d3179ff.png

关于作者

前滴滴出行技术专家,现任OPPO文档数据库mongodb负责人,负责oppo千万级峰值TPS/十万亿级数据量文档数据库mongodb内核研发及运维工作,一直专注于分布式缓存、高性能服务端、数据库、中间件等相关研发。后续持续分享《MongoDB内核源码设计、性能优化、最佳运维实践》,Github账号地址:https://github.com/y123456yz

Mongodb数据库版本包含企业版本和社区版本,他们的区别是企业版本相比有更多功能,使用企业版本必须购买付费,所以mongodb部分核心功能没有开源。为了增强mongodb集群稳定性,企业需要对开源版本内核进行二次开发,主要包括以下功能模块的开发(增加以下功能后,会有很好的收益):

  1. mongos和mongod各种操作时延统计。
  2. Mongos代理慢日志记录。
  3. 普通用户权限细化控制,危险操作过滤。
  4. 危险操作日志审计。
  5. 所有增删改操作异步日志记录。
  6. mongodb增加热备功能。
  7. 。。。

1. 各种操作时延统计

开发背景:mongodb社区版本只有mongod有读写时延统计,没有各种详细时延统计功能,同时mongos没有时延统计,例如想看insert、update、delete、find操作的各种详细时延统计,开源版本没有该功能。

解决办法:给各种增、删、查、改操作增加详细的平均时延、最大时延、P99、P95等统计。

收益:1. 避免扯皮(例如之前线上某个业务线有一次故障,客户端时延提升了数倍,业务方抖动厉害,但是业务方时延监控包括了调用mongodb的时延及其他业务逻辑,这时候就区分不出来是mongodb抖动引起还是其他业务逻辑抖动引起)。2. 主动发现mongodb抖动问题,没有该功能前,mongodb抖动完全只能靠业务方发现,或者通过mongodb慢日志发现,但是mongodb慢日志记录得是100ms以上的操作,不能精确的反映各种时延问题。

2. mongos慢日志记录

开发背景: 由于mongos代理后端可以由多个sharding分片,例如mongos后端有50个sharding分片,如果我要分析整个mongodb集群的慢日志信息,那么就必现去分析后端50个sharding的慢日志,由于慢日志在每个sharding的主、从上都可能产生,如果每个sharding分片是一主两从架构,那么久必现分析3*50个mongo数据库实例。分析过程复杂繁琐。如果是分片模式,mongod记录的慢日志少了代理mongos到mongod这一段的时延。

解决办法: 由于代理默认部署就3个实例,直接在mongos代理拦截所有流量,记录下和后端sharding的详细慢日志即可。

收益:简化了慢日志收集分析过程,可以更快速的发现不合理的查询、写入等引起的慢日志。

3. 普通用户权限细化控制、危险操作过滤

开发背景: mongodb普通用户权限默认拥有所有操作权限(包括删库、删表、建索引等),除非在创建账号的时候通过privileges来指定actions,如果通过privileges来指定actions会非常麻烦,因为mongodb有数百个不同actions操作。此外,业务方还得根据自己实际情况来梳理代码使用的action操作,如果想增加某种action,还得提各种申请添加,限制了业务方使用灵活性。

解决办法: mongodb中增加普通用户权限控制并对各种危险操作进行过滤,只要是普通用户访问mongodb数据库,就禁止其删库、删表、建库、建表、建索引等危险操作。

收益: 通过在mongodb中增加普通用户权限控制、危险操作过滤,增强了mongodb权限控制及稳定性功能,同时也使得业务方可以随意使用各种不同的action,使用也更加灵活。

4. 危险操作日志审计

开发背景: 数据库管理人员具有数据库root权限,拥有删库、删表等危险操作权限,如果误操作,将会带来巨大损失。如果某个库被恶意删除,怎么确定是由那个用户删除的?通过那台客户端登录的,什么时候做了该操作?

解决办法: 增加危险操作日志审计功能,记录这些危险操作的详细信息,包括用户、IP地址、key信息等。

收益: 快速定位是由哪位管理员恶意操作引起。此外,如果是业务方使用了删库、删表的操作,同样会记录下整个详细操作信息。

5. 所有增删改操作异步日志记录

开发背景: 场景1. 业务方感觉某个数据丢了,怀疑是数据库丢数据了。但是mongodb管理员觉得mongodb很稳定,不存在丢数据的情况,管理员觉得是客户端自己删除了,究竟是业务方自己删的还是mongodb丢数据呢? 场景2. 业务方在某个时间段做了几个误操作,误删除了一些数据,想找出在这个时间段内误删除的具体数据。

解决办法: 把所有的增、删、改操作过程详细记录下来。

收益: 1. 避免扯皮。2.业务方想要的任意时间段的操作数据都可以获取出来,便于他们进行问题分析排查。

6. 给mongodb增加热备功能

开发背景: mongodb社区版本没有热备功能,如果需要备份数据库数据,需要对某个Mongod实例下线进行冷备。或者通过mongodump工具进行主从数据备份(该工具就是模拟mongodb的slave先做全量数据同步,然后拉取Oplog进行增量同步)。如果是冷备,需要停机某个副本,等cp拷贝整个mongodb数据完成后,然后在继续上线,这种备份方式需要下线实例对业务影响比较大。如果是通过mongodump方式模拟slave来拉取数据,在全量数据拉取过程中,会占用较大带宽,业务方时延会有较大抖动。此外,通过mongodump工具拉取数据非常慢,线上拉取400G数据需要10个小时左右,如果需要增加一个slave,通过这种方式完全不可接受。

解决办法: 借助wiredtiger存储引擎机制,增加热备功能。

收益: 1. 热备期间对业务影响较小。2. 备份数据时间降低百倍数量级,例如400G数据通过mongodump方式需要数小时,但是通过热备方式只需要几分钟即可。

7. 链接耗光,无法登陆mongod和mongos实例

可以新增特定端口或者特定IP放开最大链接数限制

8. 其他

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌微软高通反对英伟达收购ARM 值得国人深思

日前,外媒报道全球一些顶尖科技公司正在向美国反垄断监管机构表达反对英伟达公司收购ARM,认为该交易将损害对其业务至关重要的行业领域的竞争。谷歌、微软和高通公司等公司都对这笔价值400亿美元的交易感到担忧,并要求反垄断官员进行干预。谷…

爬虫 404 try_和我一起学爬虫

前几天就想写一个爬虫系列的文章,因为比较忙所以没有写(还不是因为懒),趁着现在屋里比较的凉爽,心也比较的静,总结下目前遇到的一些爬虫知识,本系列将从简单的爬虫开始说起,以后会逐…

女神一秒变路人!腾讯研究AI卸妆效果算法出品“一键卸妆”功能

综合自:快科技、腾讯国际计算机视觉大会(ICCV)于 10 月 22 日到 29 日在意大利威尼斯举办,会上,腾讯优图团队带来了一个让所有女生恨得牙痒痒的功能——“一键卸妆”。所谓道高一尺魔高一丈,美图秀秀造福了…

matlab基于ssd的角点匹配_基于关键点的目标检测

0 1前言:基于锚点的目标检测方法在基于关键点(key points)的目标检测方法出现之前,主流目标检测方法一般先设置一些预先定义好的 锚点 (anchor boxes)。 作为预测物体框的参考,神经网络只需要预测实际的物体框相对于这些锚点的偏移。 这样模型…

NLog整合Exceptionless

前言在实际的.Net Core相关项目开发中,很多人都会把NLog作为日志框架的首选,主要是源于它的强大和它的扩展性。同时很多时候我们需要集中式的采集日志,这时候仅仅使用NLog是不够的,NLog主要是负责代码中日志的落地,也就…

40个只有程序员才看得懂的段子

1. 一程序员去面试,面试官问:“你毕业才两年,这三年工作经验是怎么来的?!”程序员答:“加班。”2. 某程序员对书法十分感兴趣,退休后决定在这方面有所建树。于是花重金购买了上等的文房四宝。一…

MySQL8的inodb参数设置_MySQL8.0自适应参数innodb_dedicated_server

MySQL8.0有了一个新参数又叫自适应参数 innodb_dedicated_server将innodb_dedicated_server开启的时候,它可以自动的调整下面这四个参数的值:innodb_buffer_pool_size 总内存大小innodb_log_file_size redo文件大小innodb_log_files_in_group redo文件数…

让 gRPC 提供 REST 服务

让 gRPC 提供 REST 服务IntrogRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电…

10张图看懂瞎忙和高效的区别

时间是最公平的,每个人一天都是24小时,一年都是365天。但是,不同的人的产出却是天差地别。人和人的差距为什么这么大?而且这种差距,并不是家庭背景、权利财富或天赋带来的,仅仅是我们对时间的掌控。正好看到…

Canvas的save和restore

在创建新的控件或修改现有的控件时,我们都会涉及到重写控件或View的onDraw方法。 onDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布。 在onDraw方法里,我们经常会看到调用save和restore方法,它们到底是干什么用的…

鉴别一个人是否 js 入门的标准竟然是?!

不知不觉跳入前端「大坑」也已经有大半年了,学到了很多知识。为了让知识更好地沉淀,我打算写一系列的知识总结,希望能在回顾知识的同时也能帮到别的同学。忘记在哪里看到过,有人说鉴别一个人是否 js 入门的标准就是看他有没有理解…

面向对象编程设计模式--简单工厂模式讲解(历史上最简单明白的例子)

工作之余,在看资料过程中发现一个极易理解的简单工厂模式的例子,自己亲自试练一番,感觉对这个设计模式不熟悉的朋友,一看马上就知道是什么回事了。 简单工厂模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返的类…

.NET 6 Preview 1 开箱,带你体验新版本

最近 .NET 6 Preview 1 发布了,.NET 统一是此版本的核心。大家可以读一下原文博客:https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-1/.NET 6.0 SDK 和 Runtime 下载地址:https://dotnet.microsoft.com/download/dotnet/6.0…

redis 清空缓存_「镜头回放」简直了!spring中清除redis缓存导致应用挂死

异常场景springWeb应用一直运行正常,同事最近反应,每次版本更新完毕,刷新缓存,就会导致应用挂死。只有重启redis应用才恢复正常。项目概况springWeb项目,常用配置表做了redis缓存,配置表中只有少量数据&…

25岁社招进阿里,从电商到有赞新零售,他仅1年就打开了马云一直想做的新领域!

最近关于「新零售」的声音此起彼伏:阿里巨资收购高鑫零售,腾讯确认入股永辉超市……自2016年10月马云第一次提出了「新零售」概念之后,各巨头跑马圈地,线下成为了必争之地,新零售的蓝海才刚刚打开。而李星,…

C#连接MySQL数据库实例

项目目的:连接mysql查询数据并将数据显示到界面的datagridview里面.Step1:添加动态链接库文件Visual Studio,在 项目(右键)-管理NuGet程序包(N) 然后在浏览里面搜索MySql.Data并进行安装。Step2:using所需要的库using MySql.Data.MySqlClient;step3&…

链接服务器 慢_redis服务器cpu100%的原因和解决方案

首先引起cpu100%可能的几大原因:1.redis连接数过高2.数据持久化导致的阻塞3.主从存在频繁全量同步4.value值过大5.redis慢查询为了模拟redis服务器cpu100%,临时买了一台阿里云ecs,并把那天清空前的redis备份还原到服务器上。下面我们按照顺序…

有人问我:AI这么火,要不要去追赶AI的热潮?

12月14日,吴恩达发布微博:我很高兴地宣布Landing.ai的成立,开始进入AI产业。 作为一家人工智能(AI)公司,Landing.ai旨在帮助企业在人工智能时代实现转型。这一动作让人们对AI的关注度在2017年的末尾又一次升…

过完年,又不想上班了?

大家新年好,我是Z哥。每次过完年,不少人会多增加一份焦虑,这份焦虑表面上看是“不想上班”,但实际上可能是职业规划的缺失导致。因为缺少对未来的预期、憧憬,导致对自己的工作没有热情。这种情况的另一种叫法是「职业倦…

15天助你掌握问卷统计与Spss实战

最近总是有小伙伴咨询超模君关于数据分析的问题,比如数据分析是什么、怎样才能速成数据分析等等,今天超模君就抽个空跟大家谈谈数据分析那些事儿。首先,我们先来了解了解小伙伴所提到的数据分析。数据分析是指用适当的统计分析方法对收集来的…