Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >腾讯云 TDSQL 审计原理揭秘

腾讯云 TDSQL 审计原理揭秘

原创
作者头像
腾讯云数据库团队
修改于 2017-06-30 08:55:10
修改于 2017-06-30 08:55:10
3.5K0
举报

作者:孙勇福,腾讯云高级工程师,负责腾讯云 TDSQL 产品研发,毕业至今一直从事数据存储系统运维和研发工作,在数据库领域以及 NoSQL 领域具有丰富的运维和开发经验。

开源数据库往往不具备商业数据库一样的高端能力,但是却因简单易用,无需 license 费用等深得大家喜欢,但在云服务时代,打造一款同时具备了开源数据库的性价比和商业数据库的安全性的数据库,几乎是所有使用者心中的梦想。腾讯云数据库 TDSQL 基于这样的考虑,实现了云化的审计能力,下面就让我们一起来看看具体的技术细节。

产品架构

各模块特点

1) proxy

  • 三个无差别 proxy Ip,保证一个或者两个 proxy 故障时,剩余 proxy Ip 正常工作用户无感知。
  • 旁路信息进入 kafka 时,对数据进行压缩上传同时 kafka 必须半数节点响应成功后才算正确上传。
  • 每个用户实例都有自己单独的 proxy,在数据上传是不同实例消息并发上传到 kafak 的 topic ,保证每个用户信息及时进入审计消息队列

2) Kafka

  • Kafka 是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下:
  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输
  • 支持 Kafka Server 间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输
  • 同时支持离线数据处理和实时数据处理

Kafka解析

Terminology

  • Broker:Kafka 集群包含一个或多个服务器,这种服务器被称为 broker。
  • Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为topic。(物理上不同topic的消息分开存储,逻辑上一个topic的消息虽然保存于一个或多个broker上但用户只需指定消息的topic即可生产或消费数据而不必关心数据存于何处)。
  • Partition:parition是物理上的概念,每个topic包含一个或多个partition,创建topic时可指定parition数量。每个partition对应于一个文件夹,该文件夹下存储该partition的数据和索引文件。
  • Producer:负责发布消息到Kafka broker
  • Consumer:消费消息。每个consumer属于一个特定的consumer group(可为每个consumer指定group name,若不指定group name则属于默认的group)。使用consumer high level API时,同一topic的一条消息只能被同一个consumer group内的一个consumer消费,但多个consumer group可同时消费这一消息。

Kafka框架

如上图所示,一个典型的kafka集群中包含若干producer(可以是web前端产生的page view,或者是服务器日志,系统CPU、memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干consumer group,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在consumer group发生变化时进行rebalance。producer使用push模式将消息发布到broker,consumer使用pull模式从broker订阅并消费消息。

3) audit-server

  • audit-server 是分布式服务,采用一致性hash算法进行路由
  • 多协程并发处理模式保证kafka数据秒级别消费。

一致性hash

在分布式集群中,对于机器的添加和删除已经故障机器自动脱离集群不影响服务是分布式集群的最基本的功能。本次审计服务采用一致性hash完成这种基本功能。

具体描述如下:按照常用的hash算法来将对应的key哈希到一个具有2^32次方个桶的空间中,即0~(2^32)-1的数字空间中,也就是将object1,object2, object3, object4 四个(假设有四个实例对象)实例对象通过hash 散列到hash环上。如图(来自于网络)

同时将三个服务节点(假设三个服务节点),通过hash也散列到hash环上。如图(来自于网络),通过找出距离自己最近的node节点,即可找到服务节点。

在服务节点添加删除或故障时实例对象都会自动的调整找到距离自己最近的服务节点进行审计服务。

同时,在引入audit-server路由时,我们发现node服务节点分布越均匀,每个服务节点的负载也就越均匀。这里引用了虚拟节点来解决这一问题。

审计策略

  • 独立规则加载协程:在规则加载时,不影响审计规则功能区性能
  • 优先级:策略支持用户自定义优先级,在策略匹配时,优先匹配到优先级较高的策略。
  • 规则设置丰富: 支持规则=, !=,>, >=, <, <= 以及正则匹配。
  • 权限:支持二次认证,保证数据安全性。

多并发协程

  • 协程,不需要抢占式调度,可以有效提高线程的任务并发性,而避免多线程的缺点(go原生支持)

故障优化

  • 耦合关系:保证一个子系统发生故障时,不会影响其他系统的正常运行。
  • 审计服务故障时保障数据不丢:消息消费时会动态的记录匹配到规则的或者超过一定阈值消息的offset,保证服务被分配到其他节点或者故障服务修复启动时都会从正确的位置消费消息。
  • 数据旁路kafka数据不丢:在数据传入到kafka是必须保证半数以上的节点响应此消息时,才进行下面的数据传输。
  • 告警及时感知:kafka 或者MongoDB不可用时会秒级别感知,发送告警信息给系统负责人,及时恢复服务。
  • 自动扩容:匹配规则消息存储采用腾讯云MongoDB,通过后台打通,在存储空间不够时支持自动扩容。
  • 数据顺序性:每个消息在旁路时都会被打上一个时间戳同时消息也是按顺序进入消息队列,在数据读取时按照时间戳顺序读取。

3) 腾讯云MongoDB

腾讯云MongoDB特点

设计服务数据存储采用,腾讯云自有的MongoDB服务,该产品具备以下特点:

  1. 云存储服务,是腾讯云平台提供的面向互联网应用的数据存储服务。
  2. 提供了高性能、高可靠、易用、便捷的MongoDB集群服务,每一个实例都是至少一主一从的副本集或者包含多个副本集的分片集群。
  3. 整合了备份、扩容等功能,尽可能的保证用户数据安全以及动态伸缩能力

当然,为了用户的安全考虑,我们所有的数据,都是需要用户主动开启审计的前提下,才会记录流水数据,并对数据进行过滤和存储。

使用云数据库MongoDB服务的好处:

  1. 安全:提供在线的至少两份数据存储,确保线上数据安全。同时通过备份机制保存多天的备份数据以便于在灾难情况进行数据恢复
  2. 高性能:集中安装专用高性能存储服务器(高内存全SSD机型)来支持海量访问。 省心:提供7×24小时的专业服务,扩容和迁移对用户透明且不影响服务。提供全面监控,可随时掌控MongoDB服务质量。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
史上最详细Kafka原理总结 | 建议收藏
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
大数据技术架构
2019/08/28
6.1K0
史上最详细Kafka原理总结 | 建议收藏
Kafka设计原理全览:一篇文章让你搞懂
Kafka 本质上是一个分布式流式处理平台,主要功能是消息队列(Message Queue)。它以高吞吐量、低延迟和可扩展性而闻名,被广泛应用于实时数据管道和流应用程序。使用消息队列的优点:
Lion 莱恩呀
2025/04/21
4100
Kafka设计原理全览:一篇文章让你搞懂
进击消息中间件系列(一):Kafka 入门(基本概念与架构)
系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
民工哥
2023/08/22
2.3K0
进击消息中间件系列(一):Kafka 入门(基本概念与架构)
阿里大牛实战归纳——Kafka架构原理
在一套kafka架构中有多个Producer,多个Broker,多个Consumer,每个Producer可以对应多个Topic,每个Consumer只能对应一个ConsumerGroup。
美的让人心动
2018/07/30
8210
阿里大牛实战归纳——Kafka架构原理
高性能消息队列 CKafka 核心原理介绍(上)
本文介绍了高性能消息队列CKafka的核心原理,包括设计初衷、核心概念、关键组件、工作流程、性能指标、应用场景以及消费者和生产者如何协同工作。CKafka通过集群部署、消息有序处理、可扩展的数据结构等方式实现高性能,支持大量消费者的同时维持低延迟,并通过简单的配置和API实现高效的生产和消费。
腾讯云中间件团队
2017/08/17
3.8K0
高性能消息队列 CKafka 核心原理介绍(上)
Java面试考点6之消息队列
先来看看相关知识点汇总,如下图。首先为了防止歧义进行说明,本课时中提到的“队列“就是指“消息队列“。
马拉松程序员
2022/04/26
3510
Java面试考点6之消息队列
一文了解Kafka核心概念和角色
比如说,topic有6个partition,有两个broker,那每个broker就管3个partition。
王知无-import_bigdata
2020/07/03
2.1K0
从演进式角度看消息队列
导语 | 市面上有非常多的消息中间件,rabbitMQ、kafka、rocketMQ、pulsar、 redis等等,多得令人眼花缭乱。它们到底有什么异同,你应该选哪个?本文尝试通过技术演进的方式,以redis、kafka和 pulsar为例,逐步深入,讲讲它们架构和原理,帮助你更好地理解和学习消息队列。文章作者:刘德恩,腾讯IEG研发工程师。 一、最基础的队列 最基础的消息队列其实就是一个双端队列,我们可以用双向链表来实现,如下图所示: push_front:添加元素到队首; pop_tail:
腾讯云开发者
2021/04/13
8720
消息队列的 6 种经典使用场景和 Kafka 架构设计原理详细解析
我是码哥,可以叫我靓仔。今天来聊一聊 Kafka 消息队列的使用场景和核心架构实现原理,帮助你全面了解 Kafka 其内部工作原理和设计理念。。
码哥字节
2024/05/28
2.6K0
消息队列的 6 种经典使用场景和 Kafka 架构设计原理详细解析
Kafka 原理详解
kafka的消息是存储在硬盘上的,因为“磁盘慢”这个普遍性的认知,常常使人们怀疑一个这样的持久化结构是否能提供所需的性能。但实际上磁盘因为使用的方式不同,它可能比人们预想的慢很多也可能比人们预想的快很多;而且一个合理设计的磁盘文件结构常常可以使磁盘运行得和网络一样快。
yingzi_code
2019/08/31
1.8K0
RocketMQ 设计原理与最佳实践
RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。
Java识堂
2021/06/01
1.2K0
RocketMQ 设计原理与最佳实践
小白也能看懂的简单明了kafka原理解析
介绍 分布式消息系统kafka的提供了一个生产者、缓冲区、消费者的模型 broker:中间的kafka cluster,存储消息,是由多个server组成的集群 topic:kafka给消息提供的分类
小小科
2018/05/03
1K0
小白也能看懂的简单明了kafka原理解析
Kafka实践与原理
其中Zookeeper是Kafka用来负责元数据的管理、控制器的选举。Producer将消息发送到Broker,Broker负责将消息存储到磁盘中,而Consumer负责从Broker订阅并消费消息。
mikelLam
2022/10/31
3950
Kafka实践与原理
【夏之以寒-kafka专栏 01】 Kafka核心组件:从Broker到Streams 矩阵式构建实时数据流
Broker:在Kafka中,Broker是Kafka集群中的一个节点,负责处理Kafka中的核心功能。从物理层面来看,Broker可以是单独的一台服务器,也可以是集群中的一个节点。从逻辑层面来看,Broker是Kafka服务端的实现,负责接收生产者发送的消息,并将这些消息转发给消费者。Broker是Kafka实现分布式、高吞吐、高可靠性的关键组件。
夏之以寒
2024/05/26
2890
一篇文章把RabbitMQ、RocketMQ、Kafka三元归一
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/07/12
7700
一篇文章把RabbitMQ、RocketMQ、Kafka三元归一
刨根问底 Kafka,面试过程真好使
Kafka最初是由Linkedin公司开发的,是一个分布式的、可扩展的、容错的、支持分区的(Partition)、多副本的(replica)、基于Zookeeper框架的发布-订阅消息系统,Kafka适合离线和在线消息消费。它是分布式应用系统中的重要组件之一,也被广泛应用于大数据处理。Kafka是用Scala语言开发,它的Java版本称为Jafka。Linkedin于2010年将该系统贡献给了Apache基金会并成为顶级开源项目之一。
蔡不菜丶
2022/12/19
5880
刨根问底 Kafka,面试过程真好使
消息队列基本原理和选型对比
作者:anncdchen,腾讯 PCG 后台开发工程师 消息队列使用场景 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,削峰填谷等问题。实现高性能、高可用、可伸缩和最终一致性架构。 解耦:多个服务监听、处理同一条消息,避免多次 rpc 调用。 异步消息:消息发布者不用等待消息处理的的结果。 削峰填谷:较大流量、写入场景,为下游 I/O 服务抗流量。当然大流量下就需要使用其他方案了。 消息驱动框架:在事件总线中,服务通过监听事件消息驱动服务完成相应动作。 消息队列模式 点对点模
腾讯技术工程官方号
2022/08/26
1.2K0
消息队列基本原理和选型对比
腾讯云消息队列(Ckafka)监控最佳指南
作者:朱丹阳,腾讯云监控开发工程师 腾讯云消息队列 CKafka 简介 消息队列 CKafka(Cloud Kafka)是基于开源 Apache Kafka 消息队列引擎,提供高吞吐性能、高可扩展性的消息队列服务。消息队列 CKafka 完美兼容 Apache Kafka 0.9、0.10、1.1、2.4 版本接口,在性能、扩展性、业务安全保障、运维等方面具有超强优势,让您在享受低成本、超强功能的同时,免除繁琐运维工作。 产品特点: 收发解耦:有效解耦生产者、消费者之间的关系。在确保同样的接口约束的前提
腾讯云可观测平台
2020/12/18
3.8K1
Kafka 架构及原理分析
为了理解 Kafka 是如何做到以上所说的功能,从下面开始,我们将深入探索Kafka 的特性。
架构探险之道
2023/03/04
5930
Kafka 架构及原理分析
kafka使用以及原理
每条发布到Kafka集群的消息都有一个类别,这个类别被称为topic。(物理上不同topic的消息分开存储,逻辑上一个topic的消息虽然保存于一个或多个broker上但用户只需指定消息的topic即可生产或消费数据而不必关心数据存于何处)
leobhao
2022/06/28
4360
kafka使用以及原理
相关推荐
史上最详细Kafka原理总结 | 建议收藏
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档