开源项目:如何选择、使用以及二次开发?

2023-11-09

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

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

除此以外,虽然 DRY 原则摆在那里,但实际上开源项目反而是最不遵守 DRY 原则的,重复的轮子好多,你有 MySQL,我有 PostgreSQL;你有 MongoDB,我有 Cassandra;你有 Memcached,我有 Redis;你有 Gson,我有 Jackson;你有 Angular,我有 React……总之放眼望去,其实相似的轮子很多!相似轮子太多,如何选择就成了让人头疼的问题了。

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

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

1. 聚焦是否满足业务

架构师在选择开源项目时,一个头疼的问题就是相似的开源项目较多,而且后面的总是要宣称比前面的更加优秀。有的架构师在选择时有点无所适从,总是会担心选择了 A 项目而错过了 B 项目。这个问题的解决方式是聚焦于是否满足业务,而不需要过于关注开源项目是否优秀

Tokyo Tyrant 的教训
在开发一个社交类业务时,我们使用了 TT(Tokyo Tyrant)开源项目,觉得既能够做缓存取代 Memcached,又有持久化存储功能,还可以取代 MySQL,觉得很强大,于是就在业务里面大量使用了。但后来的使用过程让人很郁闷,主要表现为:

  • 不能完全取代 MySQL,因此有两份存储,设计时每次都要讨论和决策究竟什么数据放 MySQL,什么数据放 TT。

  • 功能上看起来很高大上,但相应的 bug 也不少,而且有的 bug 是致命的。例

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开源项目:如何选择、使用以及二次开发? 的相关文章

  • Matplotlib 标准化颜色条 (Python)

    我正在尝试使用 matplotlib 当然还有 numpy 绘制轮廓图 它有效 它绘制了它应该绘制的内容 但不幸的是我无法设置颜色条范围 问题是我有很多图 并且需要所有图都具有相同的颜色条 相同的最小值和最大值 相同的颜色 我复制并粘贴了在
  • 打印 scrapy 请求的“响应”

    我正在尝试学习 scrapy 在遵循教程的同时 我正在尝试进行细微的调整 我想简单地从请求中获取响应内容 然后我会将响应传递到教程代码中 但我无法发出请求并获取响应内容 建议就好 from scrapy http import Respon
  • 在 Python 中使用 XPath 和 LXML

    我有一个 python 脚本 用于解析 XML 并将某些感兴趣的元素导出到 csv 文件中 我现在尝试更改脚本以允许根据条件过滤 XML 文件 等效的 XPath 查询将是 DC Events Confirmation contains T
  • Dask DataFrame 的逐行处理

    我需要处理一个大文件并更改一些值 我想做这样的事情 for index row in dataFrame iterrows foo doSomeStuffWith row lol doOtherStuffWith row dataFrame
  • Sorted(key=lambda: ...) 背后的语法[重复]

    这个问题在这里已经有答案了 我不太明白背后的语法sorted 争论 key lambda variable variable 0 Isn t lambda随意的 为什么是variable在看起来像的内容中陈述了两次dict 我认为这里的所有
  • 无法包含外部 pandas 文档 Pycharm v--2018.1.2

    我无法包含外部 pandas 文档Pycharm v 2018 1 2 例如 numpy gt http docs scipy org doc numpy reference generated module name element na
  • Python3 查找 2 个列表中有多少个差异才能相等

    假设我们有 2 个列表 always具有相同的长度和always包含字符串 list1 sot sot ts gg gg gg list2 gg gg gg gg gg sot 我们需要找到 其中有多少项list2应该改变 以便它等于lis
  • python中函数变量的作用域

    假设我们有两个函数 def ftpConnect ftp FTP server ftp login ftp cwd path def getFileList ftpConnect files ftp nlst print files 如果我
  • 如何使用 openpyxl 对工作簿中的 Excel 工作表/选项卡进行排序

    我需要按字母数字对工作簿中的选项卡 工作表进行排序 我在用openpyxl https openpyxl readthedocs io en default 操作工作表 您可以尝试排序workbook sheets list workboo
  • VSCode pytest 测试发现失败

    Pytest 测试发现失败 用户界面指出 Test discovery error please check the configuration settings for the tests 输出窗口显示 Test Discovery fa
  • 如何在 Windows 上使用 Python 3.6 来安装 Python 2.7

    我想问一下如何使用pip install对于 Python 2 7 当我之前安装并使用 Python 3 6 时 我现在必须使用 Windows 上的 Python 版本 pip install 继续安装 Python 3 6 我需要使用以
  • Python:随时接受用户输入

    我正在创建一个可以做很多事情的单元 其中之一是计算机器的周期 虽然我将把它转移到梯形逻辑 CoDeSys 但我首先将我的想法放入 Python 中 我将进行计数 只需一个简单的操作 counter 1 print counter 跟踪我处于
  • 使用 reposurgeon 将 svn repo 转换为 git

    我正在尝试使用 svn repo 转换为 git再生外科医生 http www catb org esr reposurgeon 这是我所做的 有一个具有 svn 名称 gt git 名称映射的 repo map 文件 svnadmin d
  • Python While 循环,and (&) 运算符不起作用

    我正在努力寻找最大公因数 我写了一个糟糕的 运算密集型 算法 它将较低的值减一 使用 检查它是否均匀地划分了分子和分母 如果是 则退出程序 但是 我的 while 循环没有使用 and 运算符 因此一旦分子可整除 它就会停止 即使它不是正确
  • Python unicode 字符代码?

    有没有办法将 Unicode 字符 插入 Python 3 中的字符串 例如 gt gt gt import unicode gt gt gt string This is a full block s unicode charcode U
  • MVC 框架中的缓存策略?

    我编写了自己的小型 PHP MVC 框架 现在正在探索 PHP MVC 框架中的缓存策略 我正在考虑可以缓存什么 在哪里以及如何缓存 我的框架是简单的MVC框架 我有前端控制器 它启动应用程序 注册类自动加载 设置 php 运行时指令 最后
  • Python 矩阵每一行的总和

    lista 1 2 3 4 5 6 7 8 9 print lista def filas lista res for elemento in lista x sum lista elemento res append x print re
  • WindowsError:[错误 5] 访问被拒绝

    我一直在尝试终止一个进程 但我的所有选项都给出了 Windows 访问被拒绝错误 我通过以下方式打开进程 一个python脚本 test subprocess Popen sys executable testsc py 我想杀死那个进程
  • 使用“pythonw”(而不是“python”)运行应用程序时找不到模块

    我尝试了这个最小的例子 from flask import Flask app Flask name app route def hello world return Hello World if name main app run deb
  • 将此 MATLAB 代码转换为 Python 时我做错了什么?

    我正在努力将生成波形的 MATLAB 代码转换为 Python 就上下文而言 这是原子力显微镜带激发响应的模拟 与代码错误无关 在 MATLAB 中从 r vec 生成的图形与我在 Python 中生成的图形不同 我是否正确地将 MATLA

随机推荐

  • 4、删除数据表(DORP TABLE语句)

    在 MySQL 数据库中 对于不再需要的数据表 我们可以将其从数据库中删除 在删除表的同时 表的结构和表中所有的数据都会被删除 因此在删除数据表之前最好先备份 以免造成无法挽回的损失 下面我们来了解一下 MySQL 数据库中数据表的删除方法
  • 二、【服务器】服务器入门·服务器简介

    服务器其实就是一种特殊的电脑或者说是一种特殊的 电脑主机 但是这种 电脑 在普通的生活中是不常见的 真的很少看见 但它在生活中却是无处不在的 服务器 Server 顾名思义就是提供特殊服务的机器 那它都提供什么服务呢 例如手机APP在上传下
  • 对 blur 平台上面的任意地址,获取他的出价信息(附代码)

    对 blur 平台上面的任意用户地址 获取他的出价信息 代码是 Python 脚本 可用于采集用户的出价信息 脚本定义一个 save userinfo 函数 该函数用于将用户的出价信息写入 CSV 文件 该函数接收两个参数 文件名和文本 它
  • win10企业版无法访问共享文件夹

    Win10系统电脑在更新后 当我们访问共享文件夹时可能会出现如下图所示窗口 导致我们无法访问 那么这个问题如何解决呢 下面小编就来为大家介绍具体方法 具体如下 1 首先我们按 window R键 打开运行窗口 2 在该窗口文本输入处输入 g
  • Java集合框架:ArrayList详解

    目录 一 ArrayList简介 二 ArrayList源码介绍 动态扩容以及构造方法是如何实现的 1 扩容机制 源码 源码详解 编辑 如何扩容 2 扩容源码详解 三 ArrayList的构造方法 构造方法的演示 四 ArrayList类的
  • 在win ce中如何使正在运行的软件自动升级更新

    创建两个独立的程序A和B A是现正在运行的程序 B是用于辅助新版本的A覆盖旧版A 在客户端先运行A 使A提供从服务器端下载新版A放于一临时文件夹中 并运行B 关闭A 运行的B用于执行 用新版A覆盖旧版A 并运行A 关闭B 更新完毕
  • STM32标准库编程中USE_STDPERIPH_DRIVER的用法理解

    STM32单片机编程中 我们要在C C 选项下定义宏USE STDPERIPH DRIVER 它的作用是什么呢 1 USE STDPERIPH DRIVER宏的作用 main c是入口 在main c中会包含头文件 stm32f10x h
  • [转](二)Git 与 GitHub 的历史

    Linux 之父 林纳斯 Linus 在 1991 年创建了开源的 Linux 系统 随着 Linux 代码量越来越大 合并志愿者提交的代码已经无法依靠人工完成 所以 林纳斯 选择了商业的管理软件 BitKeeper 来管理 Linux 的
  • 100天精通Python(数据分析篇)——第66天:Pandas透视表基础+实战案例(pivot_table函数)

    文章目录 一 透视表基础参数说明 实战案例 0 导入Excel数据 1 data 2 index 3 values 4 columns 5 aggfunc 6 fill value 7 dropna 8 margins 9 margins
  • nginx的yum源

    nginx官方提供的yum原地址 http nginx org packages 如果使用centos7 则找到源地址 然后使用命令 sudo rpm Uvh http nginx org packages centos 7 noarch
  • Spring的优势

    方便解耦 简化开发 提供了IOC容器 支持AOP面向切面编程 支持声明式事务 方便程序的测试 方便集成各种优秀的框架 降低了Java EE API的使用难度
  • Ajax Autocomplete for jQuery 配置

    原文 https github com devbridge jQuery Autocomplete ajax only settings 通用设置 1 noCache 默认值false 是否缓存suggestion结果 2 delimite
  • SQL_SERVER中不建议用NOT IN 和IN 的替代方案

    在SQL Server中 子查询可以分为相关子查询和无关子查询 对于无关子查询来说 Not In子句比较常见 但Not In潜在会带来下面两种问题 1 结果不准确2 查询性能低下 一 在SQL Server中 Null值并不是一个值 而是表
  • SVN 版本回退

    当我们想放弃对文件的修改 可以使用 SVN revert 命令 svn revert 操作将撤销任何文件或目录里的局部更改 我们对文件 readme 进行修改 查看文件状态 root runoob svn runoob01 trunk sv
  • Android开发都需要使用什么语言?

    Android是以Linux为核心的手机操作平台 作为一款开放式的操作系统 随着Android的快速发展 如今已允许开发者使用多种编程语言来开发Android应用程序 而不再是以前只能使用Java开发Android应用程序的单一局面 那么
  • 小红书点赞收藏有什么用_小红书买赞有用吗 小红书有偿点赞收藏

    小红书买赞有用吗 有些小伙伴们看到自己的作品无人问津确实很难受吧 小编注意到最近出现了小红书有偿点赞收藏这种方式 小红书买赞有用吗 这取决于小红书的内置算法 小红书中的算法机制是什么 首先 他会将您上传的作品放入一个通常超过100人的播放列
  • hlsl register

    https msdn microsoft com en us library dd607359 v VS 85 aspx register Optional keyword for assigning a shader variable t
  • 腾讯云上传图片COS

    腾讯云上传COS 简介 腾讯云对象存储 COS 使用 XML API 这是一种轻量级的 无连接状态的接口 调用此接口您可以直接通过 HTTP HTTPS 发出请求和接受响应 实现与腾讯云对象存储后台的交互操作 由于使用了不同的数据传输框架
  • 【图像】焦距与景深的关系

    在光圈恒定 被摄物体在取景框内大小恒定的前提下 焦距与景深成反比关系 即焦距越长 景深越浅 反之亦然 当焦距越长时 成像的前虚后实 即浅景深 效果会越明显 被摄物清晰但周围环境模糊 当焦距越短时 成像的前虚后实 即深景深 效果会越小 被摄物
  • 开源项目:如何选择、使用以及二次开发?

    软件开发领域有一个流行的原则 DRY Don t repeat yourself 翻译过来更通俗易懂 不要重复造轮子 开源项目的主要目的是共享 其实就是为了让大家不要重复造轮子 尤其是在互联网这样一个快速发展的领域 速度就是生命 引入开源项