组件分享之后端组件——基于Golang实现的高性能和d性的流处理器benthos

组件分享之后端组件——基于Golang实现的高性能和d性的流处理器benthos,第1张

近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。

本节我们分享的是基于Golang实现的高性能和d性的流处理器 benthos ,它能够以各种代理模式连接各种 源 和 接收器,并对有效负载执行 水合、浓缩、转换和过滤 。

它带有 强大的映射语言 ,易于部署和监控,并且可以作为静态二进制文件、docker 映像或 无服务器函数 放入您的管道,使其成为云原生。

Benthos 是完全声明性的,流管道在单个配置文件中定义,允许您指定连接器和处理阶段列表:

Apache Pulsar, AWS (DynamoDB, Kinesis, S3, SQS, SNS), Azure (Blob storage, Queue storage, Table storage), Cassandra, Elasticsearch, File, GCP (Pub/Sub, Cloud storage), HDFS, >不同的方向有不同的技能要求和发展前景,需要根据自己的情况选择,两个方向都是目前主流的开发行业。游戏后端开发需要掌握网络编程、高并发、消息队列等技术,开发出高性能、高可用性的游戏服务器。后端开发需要熟悉数据库、API设计、服务架构等知识,开发出高质量、易维护的Web应用。运维开发需要熟悉Linux、云计算、自动化运维等技术,保障系统的稳定性和高可用性。

Redis-Shake一简要介绍
Redis-Shake二 Sync功能实现简介

Redis-shake是一个基于golang语言开发的,用于在两个redis之间同步数据的工具,满足用户非常灵活的同步、迁移需求。

github地址 >skiplist是一种有序的数据结构, 不同于各种平衡树, skiplist看起来就是多层的链表, 具体点每个元素是个数组, 这个元素的数组除了0层是和下个元素直连, 1层和n层之间可能和下个, 或者下下个节点连接起来。

这些skiplist节点的多层结构,构成实施二分搜索的基础, 理论从而达到可观的效率, 开源界大名鼎鼎的redis的zset一部分使用skiplist。

对于这个被吹爆了的数据,下面会使用redis的套路在go里面实现下, 是骡子是马拉出来溜溜压测下性能如何。

表头和节点

还是以上面的skiplist为例, 下面会画出查找每个元素的搜索路径。

skiplist里面head节点有个两个重要的特点:

下面的查找路径,

查找的过程就是先从head节点的 MaxLevel-1 索引查找, 查找的大致走位是向右向下向右向下就逼近目标位置

新增先使用 update[] 数组维护每层需要插入节点的位置, 通过抛硬币的函数决定这个新节点的level, 最后修改节点的前后关系, 就是插入链表节点的多层版本, 维护多层信息就是 update[] 干的事情。

把1当成硬币的正面, 0当作硬币的反面, 直到抛到0时就结束, 这时连续的正面就是skiplist里面需要建的level数。

如果在单链表中执行插入 *** 作

skiplist的插入和单链表相似, 无非是扩展到多层, 使用一个数组记录每一层的prev指针,skiplist的新节点也是数组,这里使用一个for循环遍历层,每个层内的 *** 作与单链表中的 *** 作是一样的。

插入节点5

如果在单链表中执行删除 *** 作, prev是待删除节点的前面一个节点, 如果要删除待删除节点n, 直接prevnext = nnext就完成一个节点的删除, skiplist的删除也和单链表类似。

删除节点5

从压测上来看, 本文中的skiplist的实现, 相比golang map性能接近,同时保持有序特性,值得王婆卖瓜

有小伙伴对完整实现感兴趣的可查看如下链接, 除了上面聊过的Get、Set、Remove外, 还有遍历、TopMax、TopMin等 *** 作。

>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13492060.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-17
下一篇 2023-08-17

发表评论

登录后才能评论

评论列表(0条)

保存