开源数据库往往不具备商业数据库一样的高端能力,然而却因简略易用,无需 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集群中蕴含若干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服务,该产品具备以下特点:

云存储服务,是腾讯云平台提供的面向互联网利用的数据存储服务。
提供了高性能、高牢靠、易用、便捷的MongoDB集群服务,每一个实例都是至多一主一从的正本集或者蕴含多个正本集的分片集群。
整合了备份、扩容等性能,尽可能的保障用户数据安全以及动静伸缩能力
当然,为了用户的平安思考,咱们所有的数据,都是须要用户被动开启审计的前提下,才会记录流水数据,并对数据进行过滤和存储。

应用云数据库MongoDB服务的益处:

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