首页 > 经验 > 关键词 > 开源项目最新资讯 > 正文

使用开源项目的正确姿势,都是血和泪的总结!

2016-02-26 13:48 · 稿源:阿里百川专区的网站

软件开发领域有一个流行的原则:DRY,Don’t repeat yourself,我们翻译过来更形象通俗:不要重复造轮子。开源项目主要目的是共享,其实就是为了让大家不要重复造轮子,尤其是在互联网这样一个快速发展的领域,速度就是生命,引入开源项目,可以节省大量的人力和时间,大大加快业务的发展速度,何乐而不为呢?

然而现实往往没有那么美好,开源项目虽然节省了大量的人力和时间,但带来的问题也不少,相信绝大部分同学都踩过开源软件的坑,小的影响可能是宕机半小时,大的问题可能是丢失几十万数据,甚至灾难性的事故是全部数据都丢失。

除此以外,虽然DRY原则摆在那里,但实际上开源项目反而是最不遵守DRY原则的,重复的轮子好多,尤其是歪果仁,一看哪个开源方案不爽,自己就吭哧吭哧搞一个差不多的:你有MySQL,我有PostgreSQL;你有MongoDB,我有Cassandra;你有memcached,我有redis;你有Gson,我有Jackson;你有Angular,我有React。。。。。。总之放眼望去,其实相似的轮子很多!相似轮子太多,选择就是让人头疼的问题了。

怎么办?完全不用开源项目几乎是不可能的,我们需要更加聪明的去选择和使用开源项目。形象点说:不要重复发明轮子,但要找到合适的轮子!你开的是保时捷,可别找个拖拉机的轮子。

接下来我将根据加入UC 5年与开源项目有关的经历,总结出一些“如何正确使用开源项目”的经验和教训。有的项目是我亲身经历,有的是我接触到的,有的是我观察的,其中部分描述细节可能并不完全准确,大家可以结合自己的经历一起探讨。

以下内容主要分3个部分进行描述,分别是“选”、“用”、“改”。

选:如何选择一个开源项目 【聚焦是否满足业务】

我们在选择开源项目的时候,一个头疼的问题就是相似的开源方案较多,而且后面的总是要宣称比前面的更加牛逼。我们在选择的时候有点无所适从,总是会担心选择了A方案而错过了B方案,或者反过来。这里我们的经验是聚焦于是否满足业务,而不需要过于关注开源方案是否牛逼。

案例:当时尝试一个社交类业务时,我们发现了TT(Tokyo Tyrant)这个开源方案,觉得既能够做缓存取代Memcached,又有持久化存储功能,可以取代MySQL,很牛逼,很高大上,于是就在业务里面大量使用了。但后来的使用过程让人很蛋疼,主要表现为:

1)不能完全取代MySQL,因此有两份存储,设计的时候每次都要讨论和决策

2)功能上看起来很高大上,但相应的bug也不少,而且有的bug是致命的,例如所有数据不可读,后来是自己研究源码写了一个工具才恢复了部分数据。

3)功能确实牛逼,但需要花费较长时间熟悉各种细节

后来我们反思和总结,其实当时的业务Memcached + MySQL完全能够满足,且大家都熟悉,当时的业务完全不需要引入TT。

简单来说:如果你的业务要求1000 TPS,那么一个20000 TPS 和50000 TPS的方案是没有区别的。有的人可能会担心我TPS不断上涨怎么办?其实不用担心,我们的架构会不断演进的,等到真的需要这么高的时候我们再来架构重构,记住:不要过早优化,过早优化是万恶之源 —— 《UNIX编程哲学》

【聚焦是否成熟】

很多新的开源项目往往都会声称自己比以前的项目更加牛逼:性能更高、功能更强、引入更多新概念。。。。。。看起来都很诱人,但实际上都有意无意的隐藏了一个负面的问题:都更加不成熟!不管多牛逼的程序员写出来的项目都会有bug,千万不要以为作者牛逼就没有bug,Windows、Linux、MySQL的开发者都是顶级的开发者吧,一样很多bug。

不成熟的开源项目应用到生产环境,风险极大。轻则宕机,重则宕机后重启都恢复不了,更严重的是数据丢失都找不回了。还是以上面提到的TT为例:我们真的遇到异常断电后,文件被损坏,重启也恢复不了的故障,还好当时每天做了备份,于是只能用1天前的数据进行恢复,但当天的数据全部丢失了。后来我们花费了大量的时间和人力去看源码,自己写工具恢复了部分数据,还好这些数据不是金融相关的数据,丢失一部分问题也不大,否则就有大麻烦了。

所以在选择开源项目的时候,尽量选择成熟的开源项目,降低风险,形象点说:宁要2.0的熟女,不要0.2的处女!一般建议除非特殊情况,否则不要选0.X版本的,至少选1.X版本的,版本号越高越好。

【聚焦运维能力】

我们在选择开源项目的时候,基本上都是聚焦于技术指标,例如性能、可靠性、功能这些方案,而几乎不会去关注运维方面的能力。但如果要将方案应用到线上生产环境,运维能力是必不可少的一环,否则一旦出问题,运维、研发、测试都只能干瞪眼,求菩萨保佑了!

可以从以下几个方案去考察运维能力:

1)开源方案日志是否齐全:有的开源方案日志只有寥寥启动停止几行,出了问题根本无法排查

2)开源方案是否有命令行、管理控制台等维护工具,能够看到系统运行时的情况

3)开源方案是否有故障检测和恢复的能力,例如告警、倒换等

用:如何使用开源方案 【深入研究,仔细测试】

很多人用开源项目,其实是完完全全的“拿来主义”,看了几个Demo,把程序跑起来就开始部署到线上应用了。就好像看了一下开车指南,知道了方向盘是转向、油门是加速、刹车是减速,然后就开车上路了,其实是非常危险的。

案例:我们有团队使用了elasticsearch,基本上是拿来就用,倒排索引是什么不太清楚,配置都是用默认值,跑起来就上线了,结果就遇到节点ping时间太长,剔除异常节点太慢,导致整站访问挂掉。

案例2:UC很多团队最初使用MySQL的时候,也没有怎么研究过,经常有业务部门抱怨MySQL太慢了,其实经过定位,发现最关键的几个参数(例如innodb_buffer_pool_size, sync_binlog,innodb_log_file_size等)都没有配置或者配置错误,性能当然会慢。

可以从如下几方面进行研究和测试:

1)通读开源项目的设计文档或者白皮书,了解其设计原理

2)核对每个配置项的作用和影响,识别出关键配置项

3)进行多种场景的性能测试

4)进行压力测试,连续跑几天,观察cpu、内存、磁盘io等指标波动

5)进行故障测试:kill,断电、拔网线、重启100次以上、倒换等

‌【小心应用,灰度发布】

假如我们做了上面的“深入研究、仔细测试”,发现没什么问题,是否就可以放心大胆的应用到线上了呢?别高兴太早,即使你的研究再深入,测试再仔细,也还是要小心为妙,因为再怎么深入的研究,再怎么仔细的测试,都只能降低风险,但不可能完全覆盖所有线上场景。

案例:还是以TT为例吧,其实我们在应用之前专门安排一个大牛看源码、做测试,做了大约1个月,但最后上线还是遇到各种问题。线上生产环境的复杂度,真的不是测试能够覆盖的,必须小心谨慎。

所以,不管研究多深入、测试多仔细、自信心多爆棚,时刻对线上要有敬畏之心,小心驶的万年船。我们的经验就是先在非核心的业务上用,然后有经验后慢慢扩展。

【做好应急,以防万一】

即使我们前面的工作做得非常完善和充分,也不能认为就万事大吉了,尤其是刚开始使用一个开源项目,运气不好的话就可能遇到一个之前全世界的使用者从来没遇到的bug,导致业务都无法恢复,尤其是存储方面,一旦出现问题无法恢复可能就是致命的打击。

案例(此案例是听说的):某个业务使用了MongoDB,结果宕机后部分数据丢失,无法恢复,也没有其它备份,人工恢复都没办法,只能接一个用户投诉处理一个,导致DBA和运维从此以后都反对我们用MongoDB,即使是尝试性的。

虽然因为一次故障就完全反对尝试是有点反应过度了,但确实故障也给我们提了一个醒:对于重要的业务或者数据,使用开源项目时,最好有另外一个比较成熟的方案做备份,尤其是数据存储。例如:如果要用MongoDB或者Redis,可以用MySQL做备份存储。这样做虽然复杂度和成本高一些,但关键时刻能够救命!

改:如何基于开源项目做二次开发 ‌【保持纯洁,加以包装】

当我们发现开源项目有的地方不满足我们的需求的时候,自然会有一种去改改的冲动,但是怎么改是个大学问。一种方式是投入几个人从内到外全部改一遍,将其改造成完全符合我们业务需求。但这样做有几个比较严重的问题:

1)投入太大,一般来说,redis这种级别的开源方案,真要自己改,至少要投入2个人,搞个1个月以上

2)失去了跟随原方案演进的能力:改的太多的话,即使原有开源项目继续演进,我们也无法合并了,因为差异太大。

所以我们的建议是不要改动原系统,而是要开发辅助系统: 监控,报警,负载均衡,管理等。以Redis为例,如果我们想增加集群功能,不要去改动Redis本身的实现,而是增加一个proxy层来实现,Twitter的Twemproxy就是这样做的,而Redis到了3.0后本身提供了集群功能,原有的方案简单切换到Redis 3.0即可。详细可参考(http://www.cnblogs.com/gomysql/p/4413922.html )

如果实在想改到原有系统,怎么办呢?我们的建议是直接给开源项目提需求或者bug,但弊端就是响应比较缓慢,这个就要看业务紧急程度了,如果实在太急那就只能自己改了,不过不是太急,建议做好备份或者应急手段即可。

【发明你要的轮子】

这点估计让很多人大跌眼镜,怎么讲了半天,最后又回到了“重复发明你要的轮子”呢?

其实选与不选开源项目,核心还是一个成本和收益的问题,并不是说选择开源项目就一定是最优的方案,最主要的问题是:没有完全适合你的轮子!

软件领域和硬件领域最大的不同就是软件领域没有绝对的工业标准,大家都很尽兴,想怎么玩怎么玩,不像硬件领域,你造一个尺寸与众不同的轮子,其它车都用不上,你的轮子工艺再高,质量再好也是白费;软件领域可以造很多相似的轮子,也基本上能到处用,例如你把缓存从Memcached换成Redis,不会有太大的问题。

除此以外,开源项目为了能够大规模应用,考虑的是通用的处理方案,而不同的业务其实差异较大,通用方案并不一定完美适合具体的某个业务。比如说Memcached,通过一致性hash提供集群功能,但是我们的一些业务,缓存如果有一台宕机,整个业务可能就被拖慢了,这就要求我们提供缓存备份的功能,但Memcached又没有,而Redis当时又没有集群功能,于是我们投入2~4个人花了大约2个月时间基于LevelDB的原理,自己做了一套缓存框架支持存储、备份、集群的功能,后来又在这个框架的基础上增加了跨机房同步的功能,很大程度上提升了业务的可用性水平。如果完全采用开源方案,等开源方案来实现,是不可能这么快速的,甚至都有可能开源项目完全就不支持我们的需求。

所以,如果你有钱有人有时间,投入人力去重复发明完美符合自己业务特点的轮子也是很好的选择!毕竟,土豪们(BAT......等)很多都是这样做的,否则的话我们也就没有那么多好用的开源项目了 :)

关于阿里百川

阿里百川(baichuan.taobao.com)是阿里巴巴集团“云”+“端”的核心战略是阿里巴巴集团无线开放平台,基于世界级的后端服务和成熟的商业组件,通过“技术、商业及大数据”的开放,为移动创业者提供可快速搭建App、商业化APP并提升用户体验的解决方案;同时提供多元化的创业服务-物理空间、孵化运营、创业投资等,为移动创业者提供全面保障。

  • 相关推荐
  • 大家在看
  • 著名开源项目Apache Doris开发者徐冬奇加入微博广告技术团队

    著名开源项目、在线分析型分布式数据库Apache Doris的主要开发者,原百度凤巢广告系统高级架构师、阿里巴巴数据智能商业化技术负责人徐冬奇,已于近日入职微博广告技术团队,担任微博广告技术总架构师。据百度内部人士爆料,Doris最初是只为解决凤巢广告报表需求而设计的专用系统。2012年徐冬奇在前百度首席架构师James Peng(前Google 核心工程师,现自动驾驶独角兽小马智行CEO)指导下,作为Dor

  • 谷歌开源项目飞马PEGASUS:可以自动进行文章摘要

    谷歌于去年年底发布了一个精简型的机器语义分析项目:飞马(PEGASUS):预先机器学习及训练后的自动文章摘要项目。近期这个项目迎来的新的版本,这个小型项目可以非常精准的自动提取出文章中的摘要,并且只用一千个训练模型就可以生成媲美人类的摘要内容。 当对包括文本摘要在内的下游NLP任务进行微调时,最近针对大型文本语料库进行自我学习的目标的预训练工作已显示出巨大的成功。但是,尚未探讨为抽象文本摘要量身定制的预训练

  • 2019 年热门开源项目中的漏洞增加了一倍以上

    ​RiskSense 发布了一份新报告,该报告提供了有关目前热门的开源软件中漏洞的深入发现,其中包括武器化漏洞数、哪种软件最容易受到威胁、攻击的最主要类型等内容。

  • GitHub今日的宕机事件影响数千名软件开发者

    今天上午,GitHub发生服务瘫痪的情况,对于数千名软件开发者来说是一个灾难。这家微软旗下的服务通过Git提供版本控制,并为软件开发提供托管的重要服务宕机一个多小时。故障表现在GitHub用户在登录该服务时出现了错误,一些用户甚至无法使用他们的集成开发环境(IDE),因为软件开发环境与该服务的联系非常紧密。

  • 喜马拉雅成立新公司,主要经营网络技术、软件开发等业务

    天眼查数据显示,6月1日,陕西喜马拉雅文创科技有限公司成立,注册资本1000万,法定代表人为沈结强,公司一般项目:网络技术服务;软件开发;许可项目:基础电信业务。该公司由上海喜马拉雅科技有限公司全资持股。

  • 首届“开源软件供应链点亮计划-暑期2020”项目申请开启

    [中国北京, 2020 年 6 月 1 日]今日,“开源软件供应链点亮计划-暑期2020”活动项目申请正式启动。本次活动共吸引国内外 40 多家开源社区参与、累计发布 388 个项目,覆盖操作系统、人工智能、大数据、分布式系统等技术领域,现已全面开放接收全国高校学生的项目申请。 “开源软件供应链点亮计划-暑期2020”(以下简称“暑期2020”)是由中科院软件所与 openEuler 社区共同举办、中科院软件研究所南京软件技术研究院承办的一项面向?

  • 因认为PPT太呆板,她一气之下开发了自己的演示软件

    Digidecks是一款多媒体幻灯片软件,它的诞生非常戏剧性,源自于创始人Angelina Lawton(安吉丽娜·劳顿)对PPT的不满。当时,劳顿正在为Tampa Bay Lightning(坦帕湾闪电队)宣传。她无法接受的是,这样一支令人兴奋的专业曲棍球队竟然用如此呆板的形式向潜在赞助商推广。

  • openEA专访丨浅谈开源的未来:中国开源社区建立是关键

    摘要:今天,openea.net重新上线,这次社区会给我们哪些便利呢?未来的发展方向又是什么呢?听说这次改版增加很多额外价值包!开源君独家采访了社区建设与运营相关负责人,现在带大家一起走进openEA开源社区吧。openEA开源社区(ID:openEA)| 出品小夕 | 编辑Dream | 作者开源君 | 采访openEA运营部 | 受访开源,天生带有“共享精神”的基因,开源生态同时也是被验证过的商业模式。目前国内领先的互联网企业也在开源领域争相布局:

  • OPPO 加入 OpenChain,与谷歌微软共建开源许可标准

    据外媒彭博新闻社 10 日报道,2020 年 5 月 27 日,OPPO 正式成为内地首家OpenChain 白金会员,与谷歌、微软、ARM等行业领军企业一起,参与开源许可标准的制定,共建更加健康的全球开源体系。 OpenChain 作为 Linux 基金会下的项目,旨在制定开源软件供应链标准,帮助各种组织更高效地解决开源许可证一致性地问题。通过 OpenChain 认证后,开源许可流程将更为轻松。目前 ARM、微软、谷歌、高通等各领域巨头纷纷加入 OpenChain,为

  • 录屏软件怎么用?好用的录屏软件有哪些

    录屏软件怎么用?日常工作以及生活当中,录屏的需求是非常多的!比方说录屏游戏集锦、录屏在线直播、录屏课程课件、录屏会议纪要等等。所以,对于有这些需求的小伙伴来说,能够有一款操作简单的录屏软件实在是太重要了。那么,录屏软件怎么用呢?好用的录屏软件又有哪些呢?其实您无需担心,接下来将为大家分享两款以及用法,一起来看下吧。分享一:专业录屏软件以及用法这里为大家分享的第一款是专业录屏软件以及用法,即使用“嗨

  • 什么录屏软件好用?找对录屏软件是关键

    什么录屏软件好用?录屏软件有很多,但是不同的录屏软件在使用上有很大的差异。对于很多需要录制电脑视频的小伙伴来说,找到一个实用的软件很重要。如果你也在寻找一个合适的录屏软件,不如看看下面分享的录屏方法~方法一:系统录制视频软件分享一个适用于Windows系统的软件,可以使用“Xbox录屏”来实现。首先,在电脑的开始菜单中打开Xbox应用。还可以使用快捷键“Windows+G”打开软件。然后打开需要录屏的内容,点击左上角的“?

  • 录屏软件哪个好用?详细录屏软件教学

    录屏软件哪个好用?很多在使用电脑的人都在寻找一个好用的电脑录屏软件,其实除了电脑系统自带的方法,还有专业的录屏工具。电脑录屏帮助我们快速记录电脑上的内容,如果你也在寻找一个好用的电脑录屏软件,不如试试下面分享的电脑录屏方法!方法一、使用好友对话框录屏有时候和好友在晚上聊天,想要记录视频聊天的内容,其实可以直接使用电脑中的聊天软件来录屏。像QQ中就有录屏的方法,先打开与QQ好友的聊天对话框。选择截屏中的

  • 早期红利不等人,开源征信助你把握信用经济财富先机

    古人说:“人无信不立,业无信不兴”。在如今信用经济时代,个人信用就更显重要,无论是就业升职、资格审查、出国签证、评先评优,还是买房买车办贷款,都绕不开征信,因此,建立与健全个人征信体系已经成为经济发展的要求之一。然而,目前我国的征信体系建设并不全面,一个完整的征信产业链应当包含前端的征信业务,中端的信用监测和后端的信用修复,相比于火热的前端市场,我国信用修复业务却发展缓慢,成为整个征信系统建设的薄

  • openEuler开源社区成立Ceph SIG

    「中国,深圳, 2020 年 6 月 16 日」今天,openEuler开源社区(以下简称“openEuler社区”)正式成立Ceph SIG(Special Interest Group 特别兴趣小组),完善openEuler操作系统在分布式存储场景的适配。openEuler社区参与者和用户可获得由专业存储团队维护的稳定的Ceph版本构建分布式存储系统,并通过openEuler社区获得技术支持。 Ceph是一个具备高性能、可靠性和可扩展性的分布式存储解决方案,可以同时提供块、文件和对象三种服务

  • 手机备份软件哪个好用?汇总全网值得推荐的备份软件

    手机备份软件哪个好用?我们在使用手机的过程中,会定期备份一下里面的重要数据,所以手机备份软件是我们备份数据的一个重要的帮手,那简单专业的手机备份软件都有哪些呢?今天小编就给大家汇总全网值得推荐的几款,一起来看看吧。一、iCloudiCloud是苹果公司提供的云端服务,使用者有5GB的免费存储空间,可以备份苹果手机中的照片、音乐、通讯录、短信等内容,可以随时存储和备份,包括与朋友分享你的位置。优点:自动备份、同账?

  • 微信生态的 IP 江湖:社群、培训、项目、孵化

    现在和未来的生意,由无数的 IP 组成,这句话真的不是知识付费说说而已啊!!这是真的,实打实存在的案例,今天我就给群响铁子分享一下我看到的 IP 案例打法,非常得劲儿,还是那句话,都是现金奶牛啊,利润是咔咔咔咔。

  • 录制视频软件哪个好用?电脑录屏软件推荐

    录制视频软件哪个好用?现在可以给电脑录屏的软件有很多,不同的电脑录屏方法之间有很大的差异。比如很多的电脑录屏参数没有办法设置具体的参数,也没有录制结束后剪辑的功能。今天分享有关电脑录屏的专业方法,如果你也有电脑录屏的需求,不如看看下面的方法!分享一:系统录制视频软件如果你的电脑正好是Windows系统,可以使用Windows10 自带的“Xbox录屏”来实现。首先,打开电脑中需要录屏的内容。在电脑的开始菜单中打开Xbox?

  • 免费的录屏软件有什么?原来可以这样录屏

    免费的录屏软件有什么?可以通过电脑录屏的方式,来记录电脑上的内容。录屏软件有很多,但是不同的录屏软件使用感觉上有很大的差异。像有些录屏软件可以设置具体的参数,下面推荐实用的录屏软件,一起来看看具体的操作吧!方法一:windows系统方法录制分享适合windows系统电脑的方法,可以使用电脑中的Xbox录屏功能,先打开电脑中需要录屏的内容,然后使用“Win+G”键打开软件。在弹出的框中点击开始录屏,录屏结束之后就可以在桌?

  • 京东:今日在港公开发售 最高公开发售价为236港元/股

    今日,京东在港交所公告称, 6 月 8 日(星期一)上午九时开始香港公开发售,预期 6 月 11 日(星期四)定价, 6 月 18 日上午九时正在香港联交所交易。在港上市最高公开发售价为 236 港元/股,将发行1. 33 亿股发售股份。

  • 和鲸科技发布《数据科学教育白皮书》,开源打造最佳教学路径

    随着大数据应用和数据科学应用逐渐升温,数据科学教育项目也在世界每个国家迅速发展,数据科学项目部署不仅代表着高校水平,更能反映出城市发展与国家竞争力。那么,我们的教育距离真正的数据科学教育到底有多远呢?2020 年 3 月,国内领先的数据科学协同平台和鲸科技联合TalkingData旗下腾云大学、全球知名云计算服务平台AWS、开源学习社群Datawhale多家机构共同发布了《数据科学教育白皮书》,旨聚焦于数据科学教育领域,研究基?

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议