从用户到开发者是一种思维进化过程 | 访 StarRocks Committer 周威

本文主要是介绍从用户到开发者是一种思维进化过程 | 访 StarRocks Committer 周威,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

身处技术创新驱动的时代,只有开放协作才能带来巨大进步,创造非凡成就。

StarRocks 社区的发起和发展,正是立足于各个开发者的“贡献”和“集智”。

周威,腾讯游戏高级工程师,对 StarRocks、MySQL、Ceph、k8s 等有比较深入的理解。他有着“技术匠人”典型的思维洞察力,认为技术开发就是把自己的想法翻译给计算机听。在开源社区实现了从用户到开发者的思维进化的他,为 StarRocks 社区贡献了 serverless 等多项功能的优化和创新。

近期,经过 StarRocks 社区 PMC 提名与投票,周威接受邀请,正式成为 StarRocks 项目的 Committer。

他在项目上的主要贡献有:

1. 主导了 serverless 的 compute node 的设计,并且实现了 BE 部分的功能

2. 开发了 window_funnel array_contains_all 等函数

3. 完成了 IEG 部分 StarRocks 代码 reivew 工作

4. 推动了 k8s-starrocks-operator 的设计和贡献工作

5. 帮助腾讯 IEG 在大规模使用 StarRocks 做了大量 trouble shooting 工作

后续,周威还会在以下几方面继续贡献:

1. IcebergV2 source connector 的开发

2. k8s-starrocks-operator 的完善

3. Iceberg sink connector 

4. compute node 多集群

作为技术领域资深的开发者,你对这个身份是如何理解的?

我认为是某种意义上的“翻译”,就是把自己的想法通过计算机能理解的程序语言来表达出来,从而让计算机理解并执行。对开发者来说,如何形成自己的想法、准确精练地表达出来是核心能力。

谈谈你的技术开发经历

毕业后就去了华为,在华为开发网络协议,搞 TCP/IP 协议栈。后来到腾讯做存储,一开始是做 MySQL,后面我们基于 MySQL 做了分布式的存储引擎 Spider。其实理念上和 StarRocks 比较类似,是用 hash 的方式来按照某列做分桶后发给不同的后端。

工作中的第一个 Commit 就是做的 MySQL 的主备同步 Binlog 压缩功能,这个功能其实早就有社区成员提出来要做,正好腾讯游戏内部也有需求,就接过来了。当时在社区里和大家在实现方案上争论了很久,不过最终还是我说服了他们,按照我的思路实现了这个功能。

再之后就转做通用的分布式存储 Ceph,Ceph 这种通过两级架构(mon-osd)的构建方式给了我比较大的启发。在云原生的趋势之下,腾讯游戏也积极地想把一些工作搬到 k8s 加容器之上,我就搞了一段时间的 k8s。直到分析引擎选用了 StarRocks,我就又继续回到了存储这块来。

如何踏上了开源之路?有什么开源社区的经历可以分享?

第一次接触是在大二上操作系统课期间,我把自己的笔记本装成了 Ubuntu。当时还能申请安装光盘,结果他们真的给我从英国寄了过来。在笔记本上用 Linux 问题还比较多,就一直需要网上问,社区的人也比较热心,解决了不少问题,自己也就逐渐参与进去了。

所以社区新人不要有畏惧心理,大部分社区是很欢迎大家参与的,只要注意提问时尽量提供比较全面的信息、准确描述现象。迈出了第一步,以后就会越来越顺。比如我第一次给 Linux 内核发 patch,邮件发出去之后没多久就有人回复并且提了 review 意见,来回改了 5 个版本,包括代码格式验证这种问题都有人耐心解答。

( 周威、他的爱人和 Linux )

参与开源社区给我带来了从用户到开发者的思维转变。之前遇到问题,一般是提一个 Issue,期待着有人能解决问题。后面就会想:为什么会有这个问题?能不能自己解决?如果可以的话就会自己提 PR,我比较享受 PR 被合并的过程。

(周威在开源社区提的第一个 bug)

你在大数据行业、OLAP 产品方面都有怎样的经历和心得?如何成为了 StarRocks Committer?

做 OLAP 是一个需要在性能和成本两方面做取舍的过程。很明显的,如果我们不在乎成本,总可以通过堆机器或者提前计算等方式来提升性能。但现实又逼迫我们必须不断压缩成本,在一定成本条件下达到可以接受的性能。

基于想节省成本的朴素想法,并结合了之前做容器的经验,就产生了一个想法:能不能把 StarRocks 放到容器里面呢,从而做到按需扩缩容,不使用的时间就可以把资源释放掉。于是我就提出了把计算能力抽出来单独拆分出一个 CN 节点,并实现一个配套的 Operator,从而实现了 serverless 的能力的想法。这个方案做完以后就把这个功能提交到了 StarRocks 社区,得到了认可,从而成为了一名 Committer。

作为最早加入 StarRocks 社区的开发者之一,遇到过哪些问题?最有成就感/获得感的事情是什么?

最初遇到的主要是稳定性问题,包括 BE crash、FE 卡死等,当时因为对 StarRocks 没那么熟悉,所以花费了一些时间。目前这些问题已经在社区解决了。

最有成就感的事情是做的 serverless 功能被更多小伙伴们去一起使用,大家反馈问题并参与到解决的过程中。

在使用 StarRocks 的过程中,我提高了自己定位和解决问题的能力。在阅读代码时,StarRocks 不少执行计划的优化方式启发颇多,在业务优化 SQL 方面带来了不少帮助。

说到“创造”,你会想到什么?

比起“创造”,我更喜欢的是“创新”这个词语。比如容器这个概念,其实容器所依赖的主要技术(namespace 和 cgroup)很早就在内核实现了,Docker 做的就是把这些技术给组合起来,搞出了容器的实现方式。在我看来,比起直接“创造”出一个新事物,“创新”的门槛可能低一些,然而带来的收益并不低。

听说你大学时代研究过机器人?

平时还是挺喜欢折腾的,大学时是机器人小组的成员,和同学一起搞了 4 年机器人,他们后面出去创业专门搞机器人了。我没有跟着去,不过平时对这些东西玩得还比较多,也喜欢写一些和硬件相关的代码。当看到你的代码控制了一个机械臂在动,和控制台上刷一些 log 带来的成就感还是不一样的。

搞的比较有意思的有两个东西。一个是机械手臂,就是有一个手套,手上做什么动作,机械臂就跟着做。另外一个是蜘蛛一样的六条腿爬行机器人,通过 WIFI 来控制。很有意思的一点是,它是正反同构的,所以我们给它搞了一个翻身的动作,翻过来之后也可以继续爬。

(研究过机器人的周威和他如今的小小人)

最近在学什么?有没有可以分享的学习方法?

最近在看 GPU/CUDA 编程,想看看 GPU 的能力在 OLAP 能不能用得上。

我觉得搜索能力是一种学习过程中非常需要的能力。出了学校之后,大部分学习只能靠自己了,接触的东西都是新的,很多情况下就只能从网上找资料。但是网络信息杂乱无章,就需要有一定的信息筛选和检索能力。搜索的时候,用英文关键字找到的有效信息会相对多些。

关于 StarRocks 

StarRocks 创立两年多来,一直专注打造世界顶级的新一代极速全场景 MPP 数据库,帮助企业建立“极速统一”的数据分析新范式,助力企业全面数字化经营。

当前已经帮助腾讯、携程、顺丰、Airbnb 、滴滴、京东、众安保险等超过 150 家大型用户构建了全新的数据分析能力,生产环境中稳定运行的 StarRocks 服务器数目达数千台。 

2021 年 9 月,StarRocks 源代码开放,在 GitHub 上的星数已超过 3200 个。StarRocks 的全球社区飞速成长,至今已有超百位贡献者,社群用户突破 7000 人,吸引几十家国内外行业头部企业参与共建。

这篇关于从用户到开发者是一种思维进化过程 | 访 StarRocks Committer 周威的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730036

相关文章

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件