前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CDH6中的第三方库

CDH6中的第三方库

作者头像
Fayson
发布2018-11-08 16:34:03
1.7K0
发布2018-11-08 16:34:03
举报
文章被收录于专栏:Hadoop实操Hadoop实操

在最近发布的CDH6版本中,Cloudera投入了大量的人力和物力用于升级所使用的第三方库。这次CDH的大版本更新可以让我们使用到一些较新的库。升级库的目的主要是可以避免一些安全漏洞,使用某些库的流行版本以及标准化CDH所使用的库。

现在的软件开发依赖于重用其他人的代码。以这种方式重用的代码称为“第三方库”(third-party library)。有很多这样的例子:需要Web服务器的工程师不会重写一个,而会使用比较流行的第三方库代替比如Jetty。如果需要文件压缩,则可以选择Apache Commons-Compress。如果需要序列化数据,则Jackson-Databind是一个不错的选择。这种例子举不胜举,而且一直在扩充。

使用第三方库有很多好处。开发人员不用重新造轮子。最受欢迎的库往往质量很高,经过严格测试,得到广泛使用,并且得到很好的管理。流行的库一般是开源的,并且可以自由使用。大多数情况下,在一些特定任务中它们都会比程序猿自己开发实现的要做的更好。在使用一些第三方库的时候,可以使整个开发任务变得简单,从而让程序猿可以更专注于创建一些新的或者有趣的东西。现在的软件工具也意识到了这一点,比如,在Java中,Maven生态系统可以让与第三方库交互变得非常容易。

虽然它们可以节省大量时间,但第三方库并不是完全没有麻烦的。它们也需要维护,特别是由于以下原因需要定期升级:

1.如果第三方库存在安全漏洞,我们必须快速升级到已经解决该漏洞的版本。

2.有时,第三方库会达到使用寿命,过时或更改名称。如果我们不迁移到新版本,则安全漏洞或者其他的已知问题可能永远得不到修复。

3.为了更容易地将不同的CDH组件集成到一起使用,最好对于所有项目中使用到的第三方库保持相同的版本。

4.升级第三方库到大版本(一般会向后兼容)可能会存在问题。对于这种情况,最好跟着你的软件升级发布一起来做,而不是为了修复一个比如安全漏洞就升级大版本。

对于升级第三方库的一个最重要的原因就是安全漏洞。一个值得纪念的例子是Equifax泄露事件(https://www.ftc.gov/equifax-data-breach)。Equifax使用Apache Struts,但在发现重大安全漏洞后未对其进行升级。攻击者利用此漏洞窃取了1.43亿美国人的数据。我们不希望同样的事情发生在我们的客户身上。

第三方库的维护很复杂,因为它们可能不会被项目直接使用。例如,我们可能使用库X,而库X可能使用库Y。我们将库X称为“直接”依赖,而库Y则称为“间接”或“传递”依赖。升级直接依赖库通常很简单,但是升级间接依赖库有时则较为复杂。比如,假设我们使用库X,而库X使用具有安全漏洞的库Y。此时,如果我们想升级库X,则需保证没有安全漏洞的库Y升级也已经准备好,但是这个往往是我们无法控制的。当库的依赖越来越多的时候,这个情况可能更糟,比如库X包括库Y,库Y又包括库Z。

在CDH5的时候,其实使用的许多第三方库都相当旧。我们想升级它们,但由于担心会破坏向后兼容性,而无法升级它们。但是当这一次做大版本更新时(C5到C6),允许打破向后兼容性(https://semver.org/),所以我们能很好的开展工作。

与某项目的向后兼容相关的修改往往都非常明显,但应该让开发人员更平滑的过度。比如用户必须重新编译作业,但不必重写它们。 SQL接口(如Apache Impala)的服务用户应该看不出任何区别。

这里有一些统计数据可以显示这个问题的难度和规模。在我们支持的所有软件中,我们拥有600多个单独的直接依赖关系。如果算上间接依赖,这个数字攀升到1500以上!我们的一些大型项目,如Apache Hive,Cloudera Manager和Apache Hadoop,拥有100多个直接依赖项和300多个间接依赖项。

为了跟踪和衡量我们对第三方库的使用情况,我们构建了一个名为“Dependency Report”的工具,它来自于以下输入:

1.根据Maven显示的每个项目使用的第三方库。

2.根据Maven Central得到的每个库的最新版本。

3.每个库的年龄。

4.每个库是否有安全漏洞,根据Dependency Check

(https://www.owasp.org/index.php/OWASP_Dependency_Check)来判断。同时可以参考:

https://www.owasp.org/index.php/Main_Page

利用这些丰富的数据,我们能够为每个项目创建一个仪表盘。该仪表盘可以显示比如“这里有所有具有安全漏洞的库”,“这些库至少落后1个大版本应该升级”和“这些库已超过10年。”每个库都会有一个打分,可以帮助开发人员判断升级库的优先级。有一个All-Projects视图,显示项目如何相互比较。一个视图显示了我们所有项目中使用的每个库,另一个视图突出显示了所有项目中第三方库版本的差异。

这是Apache Hadoop依赖库的视图:

以下视图显示在CDH中同一个库的不同版本:

我们很高兴地说这项努力取得了成功。在C6开发过程中,我们解决了400多个问题!以下是一些更值得注意的成就:

1.在C5中,我们使用了两种不同类型的Web服务 - Jetty和Tomcat。 Jetty版本已超过8年,而Tomcat版本已超过其寿命。在C6中,我们在所有项目中标准化了新的Jetty。

2.在C5中,我们使用了至少六种不同的旧版本和不安全版本的jackson-databind库。在C6中,我们已经标准化了一个没有已知安全漏洞的新的jackson。这项工作几乎要求每个项目都需要改变,并需要所有团队的大量协调和努力。

展望未来,我们构建了一个仪表盘来跟踪的第三方库的指标。它能够监控新的安全漏洞,提醒团队并更快地解决问题。

由于这些改变,C6提供了更安全,更主流的第三方库,Cloudera将能够保持这一质量标准,因为我们将继续投资产品在未来的安全性。

原文参考:

http://blog.cloudera.com/blog/2018/10/third-party-libraries-in-c6/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档