我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SequoiaDB监控与开发实践分析

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SequoiaDB监控与开发实践分析

SequoiaDB监控与开发实践分析

使用背景

公司近期上线了一个新应用,底层数据库采用了国产的分布式数据库 SequoiaDB

 

因为需要将 SequoiaDB 集群纳入到公司的整个监控体系中,所以需要对 SequoiaDB 的状态、性能指标等信息收集起来,然后提供监控系统使用。

 

SequoiaDB 数据库本身提供了一个图形化的监控界面 – SAC,但是里面的监控项,和我们公司过去常用的指标有很大出入。所以在咨询了 SequoiaDB 的相关人员后,决定自己开发一套监控程序。

 

SequoiaDB 存储引擎的监控

在 SequoiaDB 数据库,存在两个大的体系,一个是计算层,像我们就是使用了 MySQL 实例,另外一个就是 SequoiaDB 的分布式存储层,也是整个数据库对性能影响最大的部分。

 

关于 MySQL 的监控,公司本来就已经存在一整套完备的监控程序,所以这块就不需要再额外的开发了。但是对于 SequoiaDB 底层的分布式,还是非常有必要将相关指标收集起来的。

 

SequoiaDB 在监控体系上,其实做得还是比较完整的,只是在展现方式上,还需要再打磨一下。SequoiaDB 底层分布式的所有运行信息,用户都可以通过snapshot,或者是list 命令获取。

 

我从 SequoiaDB 的技术人员中了解到,其实像 SAC,或者 sdbtop 等这种 SequoiaDB 官方提供的监控工具,实际上也是基于 snapshot 和 list 命令开发。大家可以通过查阅官网信息中心了解更多的方法说明,snapshot 方法介绍 和 list 方法介绍。

 

2.1 SequoiaDB 的快照说明

在 SequoiaDB 存储引擎中,如果你要查看运行状况,可以通过快照来获取信息。

 

SequoiaDB 的快照命令非常简答,如果使用它提供的 sdb 客户端,可以这么来执行,例如查看整个集群中,每个 table 的使用情况:


> db.snapshot(SDB_SNAP_COLLECTIONS)
{
  "Name": "foo.bar",
  "UniqueID": 4294967297,
  "Details": [
    {
      "GroupName": "group1",
      "Group": [
        {
          "ID": 0,
          "LogicalID": 0,
          "Sequence": 1,
          "Indexes": 1,
          "Status": "Normal",
          "TotalRecords": 1,
          "TotalDataPages": 1,
          "TotalIndexPages": 2,
          "TotalLobPages": 0,
          "TotalDataFreeSpace": 65432,
          "TotalIndexFreeSpace": 65486,
          "TotalDataRead": 1,
          "TotalIndexRead": 0,
          "TotalDataWrite": 1,
          "TotalIndexWrite": 1,
          "TotalUpdate": 0,
          "TotalDelete": 0,
          "TotalInsert": 1,
          "TotalSelect": 1,
          "TotalRead": 1,
          "TotalWrite": 1,
          "TotalTbScan": 1,
          "TotalIxScan": 0,
          "ResetTimestamp": "2020-05-26-13.42.20.163109",
          "NodeName": "datanode:11820"
        }
      ]
    }
  ]
}

 

大家从返回的结果就能够了解,首先 SequoiaDB 的分布式存储引擎,在获取快照时,它返回的结果格式为 JSON ,这个和我们过去使用 Oracle 或者 MySQL 数据非常的不同,可能有一些朋友在开始时不大适应。但是当你习惯了JSON 的灵活结构后,你会打开一片新的大陆 。

 

我给大家演示的例子中,是查询整个集群表级的快照信息。它能够让大家清晰地了解每个table 在各个 group 上的分布,以及它对应的数据读,索引读这类关键信息的瞬时绝对值。当然,如果大家直接这么查看信息,估计大家眼睛都要看瞎,所以在后续的工具跟进上,SequoiaDB 数据库还需要多多努力的。

 

2.2 SequoiaDB SQL 快速处理

如果大家已经在使用SequoiaDB 存储引擎提供的 snapshot 和 list 功能了,那么你是否也发现了一个问题,sdb 客户端提供的 api 命令,执行起来的计算能力实在太弱了,例如我要关联把 SDB_SNAP_SESSIONS 快照(http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1479173713-edition_id-304)和 SDB_SNAP_TRANSACTIONS 快照(http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1479173720-edition_id-304) 关联起来,查看当前 SequoiaDB 存储引擎中,到底有哪些事务在等待锁。这个时候,单纯使用 api 就会痛苦万分,因为要自己手工编写一个关联程序。我相信大部分的 DBA 朋友都会怀念那些单纯使用 SQL 命令的时光。

 

通过自己不断的努力(翻官网信息中心),终于找到了一种优雅的方式来解决,就是 sql 语法的监控视图 http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1559546719-edition_id-304)

 

例如刚才的提出的问题,就可以通过这个 sql 命令获取信息:


> db.exec("select trans.NodeName as node, session.LastOpType as lastOpType, session.LastOpInfo as lastOpInfo from $SNAPSHOT_TRANS as trans inner join $SNAPSHOT_SESSION as session on trans.RelatedID = session.RelatedID where trans.WaitLock.CSID is not null ")
{
  "node": "datanode:11820",
  "lastOpType": "GETMORE",
  "lastOpInfo": "ContextID:297, NumToRead:-1"
}
{
  "node": "datanode:11820",
  "lastOpType": "UPDATE",
  "lastOpInfo": ""
}

SequoiaDB 存储引擎中这个简易版的 SQL 语法解析,对于日常的操作和运维监控来说,已经达到了事半功倍的效果了。

 

2.3 开发语言选择

SequoiaDB 存储引擎,支持多种开发语言获取引擎的监控信息,包括常见的:Java、PHP、Python、C++、C等等。大家在开发时,可以在 SequoiaDB 官网中下载对应的驱动包,在开发和编译时,将 SequoiaDB 的驱动包加入到 ClassPath 就可以了。

 

对于我个人来说,虽然 Java 很香,但是我还是选择了 REST 接口作为我的程序与 SequoiaDB 引擎的交互方式。REST 接口虽然不像 Driver 驱动使用那么便利,但是它胜在脱离语言与环境的要求,我可以在任何地方调用它,并且获得的结果都是一样的。

 

引玉抛砖引玉的Demo程序

为了给大家演示,我基于 SequoiaDB 提供的 REST 接口,使用 Python 语言做了一个能够实时监控 SequoiaDB 中某张表的数据读、写情况的小程序,算是回馈 SequoiaDB 社区的小贡献。

 

程序的源码可以从:

https://github.com/yuki0703/Demo

Github项目中获取。

 

程序的逻辑非常简单,就是通过 SequoiaDB 提供的 REST 接口,通过 SequoiaDB 的 SQL 语法中的监控视图方法,获取某张表的快照信息,然后通过计算1秒以内的数值差距,得出该表每秒钟所执行数据操作。

程序的 help 信息如下:


SequoiaDB Monitor


optional arguments:
  -h, --help   show this help message and exit
  --host HOST  coord host
  -u USERNAME  username
  -p PASSWORD  password
  -t TABLE     table name

监控 SequoiaDB 某张表的效果如下:

 

后记

整理来看,SequoiaDB 所提供的接口还是很丰富的,但是在可视化监控界面上,还需要多多努力,能够直接提供对接目前市面上大部分的监控系统,那样就更加完美了。但是不管怎么说,能够做出一款属于国人自己的分布式数据库,还是非常值得大家敬佩和学习的。

 

共勉之!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SequoiaDB监控与开发实践分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SequoiaDB监控与开发实践分析

使用背景 公司近期上线了一个新应用,底层数据库采用了国产的分布式数据库 – SequoiaDB。   因为需要将 SequoiaDB 集群纳入到公司的整个监控体系中,所以需要对 SequoiaDB 的状态、性能指标等信息收集起来,然后提供监控系统使用。   S
SequoiaDB监控与开发实践分析
2019-02-26

利用MySQL开发实现实时日志分析与监控的项目经验探讨

项目背景现今互联网时代,日志数据的产生和存储量日益增大,如何高效地分析和监控这些日志数据对企业的运营和决策至关重要。本文将对一种基于MySQL开发的实时日志分析与监控项目进行经验探讨。项目需求该项目旨在实时地对大规模的日志数据进行分析和监控
利用MySQL开发实现实时日志分析与监控的项目经验探讨
2023-11-02

Git版本控制与敏捷开发实践:项目经验分享

Git版本控制与敏捷开发实践:项目经验分享引言:在当今软件开发行业中,版本控制和敏捷开发已经成为不可或缺的工具和方法。Git作为目前最流行的分布式版本控制系统,有效地解决了多人协同开发的问题,而敏捷开发则强调快速响应变化、持续交付和团队协作
Git版本控制与敏捷开发实践:项目经验分享
2023-11-02

YOLOv5车牌实时监控与分析怎么实现

这篇文章主要介绍“YOLOv5车牌实时监控与分析怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“YOLOv5车牌实时监控与分析怎么实现”文章能帮助大家解决问题。1.实时视频流处理import
2023-07-05

C#开发经验分享:云端开发与部署实践

在当今信息时代,云计算已经成为企业的一种新型架构和解决方案,它不仅可以帮助企业降低运营成本,提高安全性和灵活性,同时也更好地支持跨平台和高并发的业务应用。C#作为一种流行的编程语言,在云计算领域也具有广泛的应用,能够帮助开发者快速、高效地开
C#开发经验分享:云端开发与部署实践
2023-11-23

构建高效的日志分析与监控系统:Go语言开发指南

构建高效的日志分析与监控系统:Go语言开发指南随着互联网的迅猛发展,大量的应用程序和服务需要处理和记录海量的日志数据。日志分析与监控系统成为了保证应用程序高可用性和优化性能的关键工具之一。而Go语言作为一种高效、易用和支持并发的编程语言,正
构建高效的日志分析与监控系统:Go语言开发指南
2023-11-20

如何优化PHP开发中的性能监控和分析

概述:在PHP开发过程中,性能监控和分析是非常重要的,它可以帮助我们发现代码中的瓶颈,从而进行针对性的优化,提高系统的响应速度和运行效率。本文将介绍如何使用一些常见的性能监控工具和技术,以及如何应用具体的代码示例进行优化。一、使用PHP的内
2023-10-21

PHP 开发中 Elasticsearch 实现实时日志监控与报警

随着互联网的普及和数据量的不断增长,日志的实时监控和报警成为了很多系统开发中必备的功能。在PHP开发中,我们可以利用Elasticsearch这个强大的搜索引擎和分析工具来实现实时日志监控与报警功能。本文将详细介绍如何使用PHP开发,利用E
2023-10-21

微信小程序开发实践的示例分析

这篇文章主要介绍了微信小程序开发实践的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。小程序由于微信提供了一些组件,在微信中的一些体验确实不错,对于开发来说,由数据驱动
2023-06-26

Git与敏捷开发实践:项目经验分享

随着技术的不断发展,软件开发行业也面临着各种挑战。为了更好地应对市场需求的变化和项目开发的复杂性,敏捷开发模式逐渐成为了主流。在敏捷开发中,版本控制系统Git也扮演了重要角色。本文将通过分享我在项目实践中的经验,探讨Git与敏捷开发的相互关
Git与敏捷开发实践:项目经验分享
2023-11-02

YOLOv5车牌识别实战教程(七)实时监控与分析

这篇文章主要介绍了YOLOv5车牌识别实战教程(七)实时监控与分析,在这个教程中,我们将一步步教你如何使用YOLOv5进行车牌识别,帮助你快速掌握YOLOv5车牌识别技能,需要的朋友可以参考下
2023-05-14

C#开发经验分享:微服务与容器化实践

C#开发经验分享:微服务与容器化实践随着云计算和分布式架构的兴起,微服务和容器化成为了现代软件开发的两个热门话题。微服务架构可以帮助开发人员更好地划分系统功能,提高可拓展性和可维护性;而容器化技术则可以实现快速部署和弹性扩展。本文将针对C#
C#开发经验分享:微服务与容器化实践
2023-11-22

C#开发经验分享:高效编程技巧与实践

C#开发经验分享:高效编程技巧与实践在现代软件开发领域,C#已经成为了广受欢迎的编程语言之一。作为一门面向对象的语言,C#可以用于开发各种类型的应用程序,包括桌面应用程序、Web应用程序和移动应用程序等等。然而,开发一个高效的应用程序并不仅
C#开发经验分享:高效编程技巧与实践
2023-11-23

Android编程开发之Spinner控件用法实例分析

本文实例讲述了Android编程开发之Spinner控件用法。分享给大家供大家参考,具体如下: 下拉列表 Spinner,Spinner是一个每次只能选择所有项的一个项的控件。它的项来自于与之相关联的适配器中。 Spinner的使用,可以极
2022-06-06

微服务的服务注册与发现实践示例分析

本文小编为大家详细介绍“微服务的服务注册与发现实践示例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“微服务的服务注册与发现实践示例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1 服务注册中心前面我们对
2023-06-29

编程热搜

目录