扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要为大家展示了“CDH6中的第三方库有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CDH6中的第三方库有什么用”这篇文章吧。
网站设计制作过程拒绝使用模板建站;使用PHP+MYSQL原生开发可交付网站源代码;符合网站优化排名的后台管理系统;网站建设、网站制作收费合理;免费进行网站备案等企业网站建设一条龙服务.我们是一家持续稳定运营了10多年的创新互联建站网站建设公司。
在最近发布的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将能够保持这一质量标准,因为我们将继续投资产品在未来的安全性。
以上是“CDH6中的第三方库有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流