1.国产的数据库软件有那些
2.java后端如何对接SNMP\IPMI\syslog常用底层协议
3.PolarDB-X 源码解读(七):私有协议连接的一生(CN篇)
国产的数据库软件有那些
一、DM软件名称:达梦数据库(DM)。
开发商:武汉华工达梦数据库有限公司。
软件描述:
达梦数据库具有如下技术特色:支持多个平台之间的互联互访、高效的并发控制机制、有效的抖音小程序模板源码下载查询优化策略、灵活的系统配置、支持各种故障恢复并提供多种备份和还原方式。
具有高可靠性、支持多种多媒体数据类型、提供全文检索功能、各种管理工具简单易用、各种客户端编程接口都符合国际通用标准、用户文档齐全。
二、OpenBASE
软件名称:OpenBASE。
开发商:东软集团有限公司。
软件描述:
主要包括OpenBASE 多媒体数据库管理系统、OpenBASE Web应用服务器、OpenBASE Mini嵌入式数据库管理系统、OpenBASE Secure安全数据库系统等产品。
所有的这些产品涵盖了企业应用、Internet/Intranet、移动计算等不同的应用领域,具有不同的应用模式。
形成了OpenBASE面向各种应用的全面的解决方案。多媒体数据库管理系统OpenBASE是OpenBASE产品系列的核心和基础,其它的产品都是在其基础上,根据各自应用领域的不同特点发展、演变而成的。
三、OSCAR
软件名称:神舟OSCAR数据库系统。
开发商:北京神舟航天软件技术有限公司。
软件描述:
神舟OSCAR数据库系统基于Client/Server架构实现,服务器具有通常数据库管理系统的一切常见功能,此外还包括一些有助于提高系统对工程数据支持的特别功能,而客户端则在提供了各种通用的应用开发接口的基础上,还具有丰富的连接、操作和配置服务器端的能力。
提供与Oracle、SQL Server、DB 2等主要大型商用数据库管理系统以及TXT、ODBC等标准格式之间的数据迁移工具。
四、KingbaseES
软件名称:金仓数据库管理系统KingbaseES。
开发商:北京人大金仓信息技术有限公司。cloudreve网页源码
软件描述:
交互式工具ISQL;图形化的数据转换工具; 多种方式的数据备份与恢复; 提供作业调度工具;方便的用户管理;支持事务处理;支持各种数据类型;提供各种操作函数;提供完整性约束;支持视图;支持存储过程/函数;支持触发器。
五、iBASE
软件名称:iBASE。
开发商:北京国信贝斯软件有限公司。
软件描述:
包括五个部分:iBASE Reliax Server全文检索服务器。
iBASE Web网上资源管理与发布系统。
iBASE Index System文文件管理与发布系统。
iBASE Webrobot 网络资源采编发系统。
iBASE DMC 数据库管理中心。
扩展资料:
国产最新商业数据库系统:
一、阿里的数据库系统
软件名称:OceanBase & PolarDB
官方称为“完全自主研发的金融级分布式关系数据库”。下面是其官网的介绍:OceanBase 对传统的关系数据库进行了开创性的革新。
在普通硬件上实现金融级高可用,在金融行业首创“三地五中心”城市级故障自动无损容灾新标准,同时具备在线水平扩展能力,创造了万次/秒处理峰值的纪录(注:当时TPS官宣为.6w)。
现在OceanBase的版本已经2.x了,OceanBase TPC-C的评测刷遍了朋友圈,TPS达到了w (w tpmc),榜单第一。
二、腾讯的数据库系统
软件名称:TDSQL
其官网简介:分布式数据库(Tencent Distributed SQL,TDSQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性。
同时提供智能 DBA、自动化运营、监控告警等配套设施,为用户提供完整的分布式数据库解决方案。
目前 TDSQL 已经为超过+的政企和金融机构提供数据库的公有云及私有云服务,客户覆盖银行、保险、证券、互联网金融、计费、第三方支付、物联网、互联网+、政务等领域。TDSQL 亦凭借其高质量的产品及服务,获得了多项国际和国家认证,得到了客户及行业的入库清单源码一致认可。
三、华为的数据库系统
软件名称:GaussDB
全球首款AI-Native数据库,内部有、、多个版本,应该是基于PostgreSQL开发的。在国内,可能除了阿里,就到华为的团队了(高斯实验室)。和不少高校建立了合作。
java后端如何对接SNMP\IPMI\syslog常用底层协议
岗位职责
1、负责监控系统的研发以及平台工具建设;
2、承担监控系统开发任务,保证开发质量和效率;
3、优化代码架构,实施技术改进;
4、独立设计关键系统模块并实施;
5、快速响应并定位解决线上问题;
6、参与数据中心基础元数据管理系统的开发,实现资源线上全生命周期管理。
岗位要求
1、大专及以上学历,有数据中心DCM相关工作经验者优先;
2、精通Java,熟悉Spring、Mybatis、SpringMvc、SpringBoot框架;
3、3年以上主流运维工具使用和开发经验,了解Zabbix,Prometheus,Nagios等;
4、具有监控系统开发经验,熟悉SNMP、IPMI、syslog等底层协议;
5、掌握MySQL、Redis、Mongodb、Polardb等数据存储技术;
6、熟悉Promethus、Grafana、Skywalking等开源组件,对源码有深入了解者优先;
7、具备良好的gitlab源码修改编码习惯,熟悉面向对象编程;
8、了解Docker、K8S原理,有实际应用经验者优先;
9、具备学习能力、团队协作能力,自我驱动能力强,抗压能力佳,团队精神强。
企业简介
专注IT基础架构和信息安全领域,提供从方案设计、硬件交付、部署实施到售后巡检的全面服务。
企业规模
全国四地五中心,超人的团队,连续九年的营收增长。
业务范围
与多家知名厂家合作,提供计算、存储、网络、安全领域解决方案。
技术团队
拥有行业认证的技术工程师,实行标准化管理,确保技术服务的质量。
服务案例
服务过+企事业单位,涵盖制造业、互联网、高新技术企业、高等院校等。
企业使命
简化并确保数字化转型的顺利进行。
核心价值观
分享、尊重、共进、卓越。
PolarDB-X 源码解读(七):私有协议连接的一生(CN篇)
通过前文的介绍,大家基本了解了一条SQL在polardbx-sql中的解析和执行流程。由于polardbx-sql是无状态的计算节点,真正数据需要从存储节点传输到计算节点,这部分工作由私有协议完成。本文将详细介绍从发送请求到存储节点,接收返回数据的完整流程,重点在于私有协议连接的生命周期和关键代码解析。
概述
为了提高数据节点本地计算能力,同时减少网络数据传输量,计算节点会尽可能下推计算内容。react源码合集一个逻辑表可能需要多个物理分片,因此计算节点与存储节点的请求会话数量会随着分片数增加而增加。传统MySQL协议+连接池架构已不能满足PolarDB-X的需求,因此私有协议在这一需求场景下应运而生。
如图所示,私有协议采用连接与会话分离的RPC协议设计理念,支持多个会话在同一个TCP通道中并行运行,具备流控机制、全双工响应式工作模式和高吞吐、可扩展等特性。
更多关于私有协议解决上述问题的设计详情,可以参考《PolarDB-X私有协议设计》一文。本文主要从代码层面详细描述私有协议的工作流程。
我们将从计算节点和存储节点两个角度完整解析私有协议连接的生命周期。篇幅限制,本文仅关注计算节点上私有协议的处理,存储节点部分将在后续文章中详细说明。
计算节点
计算节点作为私有协议的客户端,负责发送下推请求,并接收返回的数据。
网络层框架
PolarDB-X私有协议网络层采用定制化Reactor框架实现,基于Java的NIO,改进自polardbx-sql中的Reactor框架。网络层初始化时,设置CPU核心数的2倍(上限为)作为NIOProcessor,每个Reactor使用独立的堆外内存池作为收发包缓冲,总缓冲内存大小限制为堆内存大小的%。
NIO接收的包直接调用注册的处理函数,发送数据仅写入send buf,网络写入由单独线程完成。线程优先写入TCP send buf,当无法写入时,注册OP_WRITE事件等待可写后再写入剩余内容。
数据包的编码和解码在NIOClient中实现。为实现最佳性能,解包流程直接在堆外内存上进行,使用protobuf对流直接解析,将结果放入堆内。堆外内存被切分为KB chunk,每个Reactor独占一个chunk,连续解析和复用,最大化接收、解析效率。对于特大包,额外构造堆内大buffer接收和解析,回退标志在定时任务中重置,连续s无超大包时释放堆内内存,恢复高性能堆外KB buffer接收。
请求发送集成在NIOClient中,writer优先尝试写入发送缓冲队列尾部的buffer,不足时新申请buffer填充并追加到队尾。buffer来自预分配的堆外缓冲池,超过chunk大小时分配堆内buf进行序列化。
同时,NIOClient负责TCP连接的建立和断开资源释放,作为独立的底层网络资源管理实现。
连接及会话
网络层之后,我们聚焦连接与会话分离的具体实现。通过剥离连接及收发包的具体实现,连接和会话的管理变得更加清晰简洁。
首先,一个TCP连接的逻辑抽象结构在XClient中实现,为避免误解,取名为client与JDBC中的Connection区别。该类管理TCP连接和并行运行的会话,负责TCP完整生命周期的管理、认证鉴权,并维护公共信息。其中,workingSessionMap记录了连接上并行运行的所有会话映射关系,可快速通过会话ID找到对应的会话抽象结构XSession。
XSession提供了所有会话相关的请求函数和信息存储,包括执行计划请求、SQL查询请求、SQL更新请求、TSO请求、会话变量处理、数据包处理及异步唤醒等。
连接池及全局单例管理器
为了提高性能,TCP连接和会话的复用必不可少。由于连接和会话的解绑,连接池不仅缓存了到计算节点的TCP连接,也缓存了到计算节点的会话。
XClientPool管理到一个存储节点的连接池,通过IP,端口,用户名三元组唯一确定目标存储节点,同时存储该节点的全部TCP连接(XClient)和建立的会话(XSession)。
XClientPool实现存储节点会话获取,对应JDBC接口中的getConnection,同时实现连接和会话生命周期管理、连接探活、会话预分配等功能。实现单个存储节点连接池后,XConnectionManager维护目标存储节点三元组到实例连接池的映射,管理定时任务线程池,实现定时探活、会话&连接最长生命控制以及连接池预热等功能。
JDBC兼容层
新的SQL协议层对上层使用者要求较高,为了提高开发效率,私有协议提供兼容JDBC的使用方法,实现从JDBC平滑切换至私有协议,并支持协议热切换。
JDBC兼容层代码目录在compatible目录下,Connection继承在XConnection文件中。提供包括DataSource、Connection、Statement、PreparedStatement、ResultSet、ResultSetMetaData在内的大部分常用接口函数实现,不支持的函数会明确抛出异常避免误用。
整体关系
至此,私有协议计算节点端的大部分结构已说明完成。给出一个整体的关系图。
私有协议连接的一生(CN视角)
了解了私有协议各层实现后,我们以发到存储节点的请求为例,完整梳理执行流程。绕开计算节点复杂流程,直接运行代码示例(注:需将com.alibaba.polardbx.rpc.XConfig#GALAXY_X_PROTOCOL设置为true)。
直接运行playground看到预期的select 1的结果。接下来,我们深入跟踪说明。
数据源初始化
要使用私有协议,需要初始化对应存储节点的XDataSource。构造过程中,XDataSource会到XConnectionManager注册新的实例连接池,已存在的连接池引用计数加一。
获取Connection
当需要执行查询时,首先获取会话。无论是显式开启事务还是使用auto commit事务,会话都是执行请求的最小上下文。通过XDataSource的getConnection方法获取到对应存储节点的会话。XDataSource根据存储的IP,端口,用户名三元组查找到XConnectionManager中的连接池,在最高并发检查后,会话获取逻辑在XClientPool实现。首先尝试在空闲会话池中拿会话,通过重置检查和初始化后返回给调用者。大部分场景下,ConcurrentLinkedQueue提供较好的并发性能。
在代码场景下,数据源刚新建,后台定时任务未运行,流程进入连接创建流程。会有一把大锁锁住连接池,在TCP连接未达上限且没有超时的情况下,快速新建一个XClient占坑。若超限,则进入busy waiting循环。真正的TCP connect(waitChannel)在锁外被调用,首先client以阻塞模式带超时方式connect,然后切换为非阻塞模式,round robin策略注册到NIOProcesser上,返回时,TCP连接已建立。
为了兼顾安全和性能,连接鉴权在TCP建连后只用做一次,会话创建不需要鉴权。鉴权在initClient中完成,发送SESS_AUTHENTICATE_START_VALUE包,后续校验由回调完成。认证采用标准的MySQL认证流程,server端返回challenge值,库名、用户名和加盐hash后的密码返回给MySQL即可完成认证。
至此,到存储节点的TCP连接已建立,创建会话是一个异步流程。在创建新XClient时,XConnection已new好,通过下断点跟进去可看到newXSession流程,分配session id,设置状态为init,将XSession绑定到XConnection上。
最后,XConnection经过初始化(重置auto commit状态)、重置默认DB、默认字符集(lazy操作)和统计信息记录,返回给用户使用。
发送查询请求
拿到初始化好的兼容JDBC的Connection,为了简化流程,直接调用XConnection中的execQuery。XConnection的execQuery包装了XSession的execQuery,执行前执行了设置流式模式。
首先记录调用信息进行统计,进入关键的initForRequest流程。XSession初始化流程lazy,仅分配session id,设置状态为Init,真正创建session时发送SESS_NEW给server,绑定新session和session id。如果session已复用,则状态为Ready。
执行字符集更改的lazy操作,session可能在其他请求中切换字符集,根据目标字符集和当前字符集对比,决定是否发送额外的字符集更改请求。
经过一系列变量设置、lazy DB设置和protobuf包构造,请求发送到存储节点执行。发送后,同步生成XResult负责结果解析,同时XResult按照请求顺序依次拉链表,确保结果与请求一一对应。
请求流水线结构如下图所示,处理完成前序请求后,才能解析后续结果。
接收结果集
请求已发送到存储节点执行,拿到XResult,通过XResult收集查询结果集。XResult与发送请求一一对应,存储节点处理也是在会话上排队进行,不会影响流水线上其他请求的返回,保证流水线正常工作。
首先,查看结果集处理的状态机,主要状态包括获取元数据、获取数据行、获取额外信息等,顺序固定,根据请求类型,部分环节可能被省略。报错处理贯穿整个状态机,任何报错信息都会导致状态机进入错误处理环节。
对于非流式数据读取,请求结束时主动调用finishBlockMode将所有数据读出并缓存到rows中。对于流式执行的情况,结果集状态机消费数据包队列由XResult的next函数推动,内部函数internalFetchOneObject递归调用前序XResult,消费前序请求结果,从数据包队列中消费并推动状态机流转。
对于查询,首先收到RESULTSET_COLUMN_META_DATA包,表示返回数据列定义,一个包表示一列。元数据包后,收到包含数据行的RESULTSET_ROW包,一个包对应一行。数据行传输完成后,server端发送RESULTSET_FETCH_DONE标示数据发送完成。请求结束前,NOTICE包用于告知客户端rows affected等信息。最后,SQL_STMT_EXECUTE_OK包标示请求结束。
至此,完整请求处理完成,控制台应显示查询结果。
总结
本文详细描述了私有协议连接流程中的关键点和关键数据结构,相信通过本文描述,大家掌握了私有协议连接流程的基本点,在调试和修改使用中能够更加得心应手。虽然本文篇幅较长,但实际使用中涉及更多高级特性的使用,如多请求流水线、流控、执行计划传输、chunk结果集传输等。通过本文,我们对私有协议连接流程有了深入理解,为在实际场景中应用提供坚实基础。