3
回答
【开源访谈】Kyligence 软件架构师李栋:开源是程序员巨大的财富
极速云服务器,低至1.04元/天>>>   

作为领先的大数据OLAP分析平台,Apache Kylin正逐渐从Hadoop上的传统OLAP演变为一个实时数据仓库。尤其是新引入的Spark Cubing构建引擎,大幅度提升了Cube预计算过程的效率。在这个过程中架构进行了怎样的优化?遇到过什么问题?开源在这中间又起到什么作用?本期,【开源访谈】邀请到了Kyligence技术合伙人兼高级软件架构师李栋向你讲解架构师眼中的开源。

【本期嘉宾】

李栋,Kyligence技术合伙人兼高级软件架构师,Apache Kylin Committer & PMC Member,专注于大数据技术研发,KyBot技术负责人。毕业于上海交通大学计算机系;曾任eBay全球分析基础架构部高级工程师、微软云计算和企业产品部软件开发工程师;曾是微软商业产品Dynamics亚太团队核心成员,参与开发了新一代基于云端的ERP解决方案。

【访谈实录】

1、能否谈谈您成长为架构师的经历?

我在毕业之后加入了微软,参与商业软件Dynamics的开发 ,商业软件以需求为主导,所以在这个过程中我开始慢慢了解用户的需求,了解需求的重要性,并根据需求来设计一些功能和特性;后来加入了eBay全球分析基础架构部,主要参与Apache Kylin的开发、运维、运营和技术支持,面临着来自开源社区用户提出的各种各样的需求和问题,需要通过梳理、整合抽象出在架构上的改进,或者设计新的特性和功能等,慢慢地就走上了这条路。后来成为了Apache Kylin的PMC Member,开始主导新版本发布等重大的事情。在2016年的时候加入Kyligence公司,作为KyBot技术负责人,有更多项目和机会在这里,这些历练让我成长为一名软件架构师。    

2、开源在这个过程中起到了什么作用?能否谈谈您对开源的见解。

开源对于程序员来说是一笔巨大的财富,它在各个方面都能起到非常大的促进作用:

首先,开源是一个沟通渠道,打通了开发者和用户的联系,用户的声音可以更快地被开发者听到,开发者就会更加了解需求,也可以和用户讨论,从实际出发,设计最符合实际需求的架构,避免过度设计。

其次,开源是开发者协作的平台。对于一个开源项目来说,架构设计得好,社区开发者就可以更加容易地贡献;设计的不好,社区开发者也会及时指出,一起完善。

第三,开源是一个相互学习的平台。每个人在成长过程中都要先学后做,开源软件的代码人人可以看到,方便学习,以集他人之长,补自己之短,能参与到开源项目其实也是学习的过程。

3、您认为一个成功的架构在产品开发过程中起到怎样的作用?开源项目中有哪些成功的案例?

所谓的架构就是从用户的角度出发,了解他们的需求和实际的问题,从而找到解决问题的一些通用的方案,用更小的开发成本解决实际的问题。把问题抽象出来后再来做设计和开发,会达到事半功倍的效果。

很多明星项目都有良好的架构作支撑。以Apache Kylin为例, 以往这种大数据的OLAP系统都会面临查询性能和并发度的双重挑战,很少有系统既能实现高性能又能实现高并发。Apache Kylin 从需求出发来解决这个问题,通过预计算的手段,把查询的复杂度降低,提升查询的性能,同时把所有的存储和计算资源解耦,减小Apache Kylin节点的执行代价,所以如果用户的访问量很大的话可以简单地通过扩大Apache Kylin的节点数来实现,同时也实现了高并发。

4、能不能谈谈您所在的Kyligence团队是如何开展软件架构设计工作的?

首先是收集需求,我们有很多企业客户和开源用户,他们的需求和反馈是我们开展架构设计工作的源头,对需求进行抽象,找到满足需求但不过度设计的平衡;例如,金融、电信行业的客户会对数据安全有需求,比如不同地域或不同分公司数据不能互通等,经过需求分析,我们在企业版(KAP)中提供了单元格级数据权限控制的特性,作为查询引擎的扩展,能够良好的满足数据安全的需求。

在设计开发阶段,对于一些比较大的功能和版本发布,我们会先设计出POC版本,然后一起review,开源的功能还会在社区讨论,接下来进行相关的功能和性能测试,然后逐步完善,并按照开发流程进行实际开发。

5、您认为大数据研发领域中的架构师要考虑哪些方面的内容?

大数据目前发展比较火热,而且有比较成熟的生态,作为大数据架构师需要考虑到以下几点:

首先,技术选型应该符合目标用户最熟悉的标准。比如,对于Apache Kylin用户来说,SQL是分析师和开发者的标准,Hadoop是大数据平台的标准,Apache Kylin作为大数据平台上的OLAP分析引擎,向下依赖Hadoop生态,向上提供SQL标准接口,避免了很多重复制造轮子的过程,同时又紧贴用户体验。

其次,可扩展的架构能够让产品更加灵活。Apache Kylin从1.5开始支持可插拔架构,将数据源、计算引擎、存储引擎三大模块解耦,并抽象出API接口,使得用户可以简单地二次开发就可以接入任何的数据源、计算和存储引擎。满足很多企业用户二次开发的需求,也让社区用户更加容易的贡献代码。比如,基于这个架构,Apache Kylin在1.6推出了Streaming,在2.0即将推出Spark Cubing,高效开发离不开良好的架构设计。

6、您认为如何才能最大限度避免架构设计失败的问题?

Apache Kylin也有过失败的案例。在Apache Kylin 1.5的时候,我们新推出了IN-MEM构建算法,并把这个算法直接在Spark中进行尝试,最终测试的结果发现和MR相比并没有明显改进。后来我们反思这个问题,就是因为当时没有把Spark的核心优势充分发挥出来,比如Spark中对于大内存的使用,以及RDD cache的机制等等。所以我们在Apache Kylin 2.0的时候充分地考虑了这些因素,并重新对这一块进行设计和开发,最后构建性能提升了一倍,符合了我们的预期。

所以在动手之前一定要先充分地思考,一方面是把所有用户使用的场景,从需求的角度,看能否覆盖的全面;其次是要充分了解自己所依赖的底层技术,充分发挥它们的核心优势,把力用到点上。

7、目前主流大数据处理开源架构有什么值得借鉴的地方?

值得借鉴的地方有很多,比如Spark,通过封装了RDD这样一层通用的访问接口,底层可以链接各种数据源,集群管理也支持Yarn、Mesos等,使其在Cloud上能够方便的部署和接入数据,拥有极大的优势。这些都是值得学习的,Apache Kylin也从1.5开始提供可插拔架构,希望更加轻松地连接各种数据源等外部组件。此外,由于Apache Kylin支持的是标准Hadoop接口,使得Apache Kylin也能够在支持Hadoop的Cloud上方便部署和使用,并实现良好的资源管理。

8、对于刚刚步入架构领域的新人,有一些什么样的建议和经验分享?

第一,多从需求出发思考问题。可能一开始只是设计一些小功能或者优化,但是如何从需求的角度出发,把这个东西做得更加灵活通用,同时又能满足需求,不过度设计,是一个很需要思考的过程。

第二,多参与开源。现在整个开源的氛围很好,比如以开源中国为代表的很多国内开源社区都在推动开源的发展,大家可以在这些平台上讨论、学习,也可以为一些项目做贡献,提交patch,并从中了解这些项目的设计解决了什么问题,为什么这么设计等。

举报
OSC源创君
发帖于7个月前 3回/2K+阅
顶部