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 日在意大利威尼斯举办,会上,腾讯优图团队带来了一个让所有女生恨得牙痒痒的功能——“一键卸妆”。所谓道高一尺魔高一丈,美图秀秀造福了…

perl对文件和目录进行操作

对文件和目录进行操作opendir 目录句柄,“目录”;for $a(readdir 目录句柄){printer $a}areaddir HOME;打印目录,没有排序。查找递归目录用File::Find删除文件:(只是删掉连接,数据应该还没有删掉。我是这样…

二进制序列化

在计算机世界,万物皆01二进制,包括各种各样的文件格式和网络协议,二进制格式最为常见!NewLife.Core 内置了完整的二进制序列化框架 Binary,经过十多年洗礼,发展到了第三代支持Handler处理器扩展。Binary的同…

python搭建项目结构_Django搭建项目实战与避坑细节详解

Django 开发项目是很快的,有多快?看完本篇文章,你就知道了。安装 Django前提条件:已安装 Python。Django 使用 pip 命令直接就可以安装:pip install django如果安装失败,很可能是因为网络连接超时了&#x…

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

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

python中summary_python summary_study.py

#!/usr/bin/env python#-*- coding:utf-8 -*-import os,sys,time,shutil,refrom _ast import Numfrom django.db.models.sql.datastructures import Join---------------------------此脚本用于之前学习内容的回顾装饰器还需要多看,目前还是不是很清楚类的继承prope…

NLog整合Exceptionless

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

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

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

bra型手机链

左看看,右瞧瞧,真不敢相信这个居然是手机链?带上它出门,回头率一定很高哦!就是有点贵,70元!转载于:https://blog.51cto.com/laizhngn5376/180850

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 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电…

python提取cad坐标到excel_使用python来操作autocad,并且将坐标点转换成cad可见对象...

由于工作需要,在项目中遇到一个棘手的问题,如何将(mssql)数据库中的BLOB文件转成cad可见图形(可能每个项目需求不一样,解决方式不同)第一步 . 需要转换的图形类型第二步 . 那我们先查询这个字段第三步 试试将这个写入一个文本中 看看是那种图…

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

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

pc模式 华为mate30_华为mate30与电脑连不上怎么回事

大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。系统版本为EMUI 10.1,华为mate30与电脑连不上的原因:1、可能是USB线连接不正常。建议更换数据线试试。2、确认电脑上的手机USB 驱动已经安装成功,…

ASP.NET Core 中的配置

背景ASP.NET Core 提供了一个灵活可扩展,基于键值的配置系统. 但是配置系统独立于ASP.NET Core是Microsoft.Extensions 类库的部分. 它可以用于任何类型的应用程序。1、以键-值对的形式读取配置appsettings.json 文件:{"Position": {"Title": &…

Canvas的save和restore

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

vs code python 插件_工具篇-vscode效率提升插件

工欲善其事必先利其器,开发前先把所以提升效率的利器搭好会让今后慢慢的编程长路舒服很多,我本来一直用pycharm,后来发现vscode貌似确实会好很多。。。就慢慢转过来了,下面介绍一些我在机器学习编程时经常会用到的一些插件。1. au…

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

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