如何使用开源项目并且快速应用到自己的项目中,来看阿里大牛们的总结!

转载 2018年04月16日 09:40:42

选:如何选择一个开源项目?


聚焦是否满足业务?


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

聚焦是否成熟?


可以从以下几个方面考察是否成熟:

1)版本号:一般建议除非特殊情况,否则不要选0.X版本的,至少选1.X版本的,版本号越高越好。
2)使用的公司数量:一般开源项目都会把采用了自己项目的公司列在主页上,公司越大越好,数量越多越好
3)社区活跃度:看看社区是否活跃,发帖数、回复数、问题处理速度等

聚焦运维能力?


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

1)开源方案日志是否齐全:有的开源方案日志只有寥寥启动停止几行,出了问题根本无法排查
2)开源方案是否有命令行、管理控制台等维护工具,能够看到系统运行时的情况
3)开源方案是否有故障检测和恢复的能力,例如告警、倒换等

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

用:如何使用开源方案?


深入研究,仔细测试


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

1)通读开源项目的设计文档或者白皮书,了解其设计原理
2)核对每个配置项的作用和影响,识别出关键配置项
3)进行多种场景的性能测试
4)进行压力测试,连续跑几天,观察cpu、内存、磁盘io等指标波动
5)进行故障测试:kill,断电、拔网线、重启100次以上、倒换等

小心应用,灰度发布


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


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


做好应急,以防万一

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

改:如何基于开源项目做二次开发?


‌保持纯洁,加以包装

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

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

  

发明你要的轮子


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

转自:https://mp.weixin.qq.com/s/IWE5LBYzsUZL5YL8xP_mKA

绝对干货,程序员必知必备的开源库,真是太好用了

【回复“1024”,送你一个特别推送】今天的这篇文章是优质博客推荐系列的第二篇。怎么说呢?其实不想搞一个系列,因为搞一个系列容易让大家烦,很多人就不太爱看了,感觉都差不多。但是,我这个人就是一个有始有...
  • OQjya206rsQ71
  • OQjya206rsQ71
  • 2017-12-29 00:00:00
  • 448

各种开源项目/库/工具介绍

值得学习的C语言开源项目- 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性...
  • QKK612501
  • QKK612501
  • 2017-01-16 19:15:23
  • 1590

如何参与到开源项目中去

编者:开源项目是程序员学习的一个途径,面对那些发展多年的代码,我们到底该如何才能参与其中?     如果你想参与到开源项目中去,却又不知道从何入手,这里提供一些参考方法或许能给你提供一些帮助,哪怕你对...
  • u014800380
  • u014800380
  • 2016-09-23 10:19:02
  • 1296

推荐几个比较好的开源项目和开源库

最近比较忙,北京天气又很闷热,没有太写文章,公众号后台经常有人问:为什么这几天没推送?说实话,确实有点忙,天太热而且身体有些不舒服,还请大家见谅。今天推送的这篇文章,我给大家推送几个比较好的开源库,希...
  • qq_30513483
  • qq_30513483
  • 2016-07-14 21:53:07
  • 896

Hibernate在SSH项目中的应用

Hibernate的应用(包括关联关系的映射和HQL等)可以参考其在线文档:http://docs.jboss.org/hibernate/core/3.6/reference/zh-CN/html/...
  • dongzi87
  • dongzi87
  • 2011-07-20 23:35:19
  • 2412

ibatis使用总结

  • 2010年10月22日 22:47
  • 55KB
  • 下载

开源项目

来源 http://blog.csdn.net/tangyeegg/article/details/51769957 第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括List...
  • Xs15073722800
  • Xs15073722800
  • 2016-06-27 19:45:39
  • 776

经典算法在几个开源项目中的应用

PS:很多学生和软件工程师都会好奇自己过去学习的算法有什么实际应用的价值。这个StackExchange的回答列出了各种经典算法在几个开源项目中的应用。作者罗列出了从最基础的hash table到字...
  • leonzhouwei
  • leonzhouwei
  • 2013-11-24 19:45:06
  • 2224

activiti项目使用总结

activiti初始化配置 /** * Copyright (c) 2017 Avant-Port All Rights Reserved. */ package com.avp.mem.njpb...
  • amberwangfeng
  • amberwangfeng
  • 2017-11-28 18:40:29
  • 826

如何将Github上的开源项目集成到我们的项目——Android篇

一般来说,Github上的项目可以分为两种:作为一个完整的项目和作为库发布的项目。 一、作为一个完整的项目         对于这种项目,我们通过eclipse或者androi...
  • rockmilk1
  • rockmilk1
  • 2016-02-22 22:11:23
  • 3366
收藏助手
不良信息举报
您举报文章:如何使用开源项目并且快速应用到自己的项目中,来看阿里大牛们的总结!
举报原因:
原因补充:

(最多只允许输入30个字)