开源选型中的基因论

传统的选型方式

一般而言,我们会按如下的方式进行选型验证:

  1. 功能上是否契合。也就是我的需求能通过该组件来完成
  2. 性能如何(会做一些压测)
  3. 稳定性如何
  4. 社区活跃度如何
  5. 是否能方便和其他的组件配合

如果能通过上面的几条,我么可能就会采用该套技术了。然而这往往会导致很多误用。比如很多人就把zookeeper当存储用了,因为倒也满足上面的一些需求。

基因论

这里的基因指的是,某个开源组件是因为什么而诞生到这个世界的。仍然以zookeeper为例,我们可以说zookeeper 是为分布式协调而诞生的,他的基因使得它适合做这一块的工作。但是zookeeper的很多特性又可以利用在很多领域:

  1. 配置变更通知
  2. 集中化的存储

于是有大量的应用围绕这两个功能点开发。这其实就是一种误用。比如Storm 拿 zookeeper存储偏移量,这样就会涉及到频繁的更新,这其实就是不合适的。或许这种场景HBase/Redis之类的存储会更合适些?

我们在选型的过程中过度的考虑了 功能是否匹配,而忽略了开源项目本身的基因,这必然会导致能够实现功能,但是却带来一些不可控的问题。

这里还有一个典型就是Docker,各种滥用导致各种问题,镜像存储问题,虚拟隔离的安全性问题等。如果知道Docker的基因其实是无侵入性的为应用加上资源限制,以及附带运行时环境,就不会各种折腾了。

所以在做选型的时候不妨问问: 我选用的开源组件是为了解决我这个问题而设计和诞生的么?我用的场景是不是吻合他的基因?

时间: 2024-09-20 21:08:24

开源选型中的基因论的相关文章

C# 类中隐藏基类方法和Partial

原文:C# 类中隐藏基类方法和Partial 今天对于.NET开发人员来说最开心的事情莫过于微软搞开源了,这觉得是给搞.NET开发的长脸.虽然我是一个初学者,这无疑给我极大的学习动力.Fighting!!! 当一个类从父类继承了一个成员时,也就继承了它的执行代码,如果成员时虚拟的,我们可以用override重写这段执行代码.但无论他是否是虚拟的,都可以通过new 关键字来隐藏它.例如: public class BaseClass { public void DoSomething() { //

C#中的基元类型

这篇文章我想复习下C#中的基元类型.虽然搞清楚基元类型的知识并不会是你工作的必要条件,但做为一个搞技术的人来说还是非常有必要的.起码可以对付有些显得比较BT的面试题,哈哈! 关于什么是基元类型,我想并不是每一位开发者都清楚的,有部分的朋友只知道怎么在工作中应用它(例如int,string).如果一个编程基础比较扎实的朋友来说当然不在话下,就不说别人,拿我自己来说,编程三年多,我都不太关心什么是基元类型,它有什么用,其实不知道这些对工作也不会产生决定性的影响.如果你不知道基类型的概念,但会用int

在C++中 怎么在派生类中使用基类中的成员变量 例如如下代码 怎样才能使其跑起来

问题描述 在C++中 怎么在派生类中使用基类中的成员变量 例如如下代码 怎样才能使其跑起来 #include using namespace std; class love{ public: char you() { int i=87, j=74 ,k=89; char a=char(i),b=char(j),c=char(k); return 0; } }; class Me:private love{ public: Me():l(a),u(b),n(c){} char const l,u,

开源软件中说明文件guide与tutorials有什么区别

问题描述 开源软件中说明文件guide与tutorials有什么区别 开源软件中说明文件guide与tutorials有什么区别? 解决方案 guide的话偏指南,更像是熟练者查询用的东西. tutorials的话偏教程,更像是初学者初学时要看的东西. 解决方案二: 就好比中文中指南.教程有什么区别一样. 说实话,没啥区别.

c++-C++中虚基类中关于内存计算的问题

问题描述 C++中虚基类中关于内存计算的问题 情况一: class D{ public: int a; }; class A:virtual public D{ }; class B :virtual public D{ }; class C:public A,public B{ public: int a1; }; 用sizeof(C)计算出等于16: 情况二: class D{ public: int a; }; class A:public D{ }; class B :public D{

C+++中的基类的虚方法在派生类中设为虚的还是非虚方法好?

问题描述 C+++中的基类的虚方法在派生类中设为虚的还是非虚方法好? //brass.h -- bank account classes#ifndef BRASS_H_#define BRASS_H_#include //brass account classclass Brass{private: std::string fullName; //x姓名 long acctNum; //账号 double balance; //当前结余public: Brass(const std::strin

开源代码中的安全隐患 要从DevOps的角度 进行6个方面的预防

各行各业的组织,无论规模大小,都会使用开源应用,眼下这种趋势有增无减.在开发阶段,将源代码嵌入软件中既经济.又高效.借助于其他资源,开发人员可以将更多的精力集中于组织的内部代码.但 DevSecOps 的问题不容忽视. 据GitHub调查,94%的受访者表示至少会时不时地使用开源应用,而81%的人则经常使用.实际上,82%的开发人员透露,所在单位接受使用开源软件,而84%的人被鼓励在应用中使用开源代码. 虽然使用开源代码 还需要在持续交付中确保安全 虽然开源部件可节约时间和成本,但其许可协议中均

Microsoft .NET 中的基类继承 (转自微软MSDN)(续)

MyBase 关键字可以从任一子类使用 MyBase 关键字,以调用基类中的任何属性或方法.即使基类的方法在子类中已被覆盖,您也可以使用该关键字对其进行调用.例如,如果在基类中存在 ReplaceAll 方法,但在子类中该方法已被覆盖,您可以从子类的 ReplaceAll 方法中调用基类的 ReplaceAll 方法.试一试打开 frmLineTest.vb 窗体. 双击 Replace(替换)以调出单击事件过程. 在 btnReplace 按钮的单击事件中编写以下代码:Protected Su

superword开源项目中的定义相似规则

两个词之间的关系有同义.反义.近义(有多近?).相关(有多相关?)等等.我们如何来判断两个词之间的关系呢?利用计算机能自动找出这种关系吗?当然可以,不仅能找出来,而且还能量化出有多近和有多相关. 本文描述了superword开源项目中的定义相似规则,利用词的定义计算词和词之间的相似性.词的定义使用的是韦氏词典,同时也支持牛津词典.相似性算法使用的是word分词提供的10大相似性算法. 定义相似规则主要包括以下6步: 1.获取要计算的词的定义: String wordDefinition = My