那些年,追过的开源软件和技术(下)
数据存储:(NoSQL)
当时为了解决Scale的问题,伴随分布式系统发展,形成各个NoSQL软件,百花齐放。下面介绍常见的一些:
Memcached:是高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。性能瓶颈第一个就要想到用这个。有点万金油的感觉。
Redis:一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多。
Cassandra:名称来源于希腊神话,是特洛伊的一位悲剧性的女先知的名字。最初由Facebook开发,用于储存收件箱等简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式架构于一身,可扩展型和性能都不错,Coursera也是大量使用作为数据对象存储。
Berkeley DB:文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数。之后被Oracle收购了。
CouchBase:文档型数据库,由CouchOne与Membase合并,之后的公司叫做Couchbase,功能还是挺强大的,自动备份,自动分片,在Linkedin广告组和运维部门都大力推荐。
RocksDB: 比LevelDB更彪悍的引擎,代码层面上是在LevelDB原有的代码上进行开发的,但却借鉴了Apache HBase的一些好的idea。
LevelDB:Google开发的,一个速度非常块的KV存储库(storage library),它支持字符串的key与value,并且这种映射关系按key排序(ordered mapping)
MongoDB:一个基于分布式文件存储的数据库。为WEB应用提供可扩展的高性能数据存储解决方案。 介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
有一些基于各种NoSQL 特性和性能的比较: Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Couchbase vs Hypertable vs ElasticSearch vs Accumulo vs VoltDB vs Scalaris comparison
Benchmarking LevelDB vs. RocksDB vs. HyperLevelDB vs. LMDB Performance for InfluxDB
下面几个都是Linkedin开源的数据技术 Projects | LinkedIn Data Team
Voldemort:NoSQL 键/值存储引擎,完全是分布式且去中心化的,支持分区与容错。
Espresso:文档型NoSQL数据存储系统,MySQL作为底层数据存储,具有高性能、高扩展性、支持事务、容错能力等重要特征。
Databus:实时低延迟数据抓取系统
AMP Lab三剑客
AMP Lab 是Berkeley的一个王牌实验室,汇集系统,数据库,机器学习,各个领域的教授和丰富工业经验的学生,它们做出了很多有意思得到工业界认可的技术。
Mesos:一个分布式环境的资源管理平台,它使得Hadoop、MPI、Spark作业在统一资源管理环境下执行。它对Hadoop2.0支持很好。Twitter,Coursera都在使用。
Spark:已经成为Apache的顶级项目了,2014年的当红炸子鸡,我在这个帖子里面也介绍的比较全面了, 有什么关于 Spark 的书推荐? - Spark,它们也成立公司Databricks对cloud管理进行产品化。
Tachyon:是一个高容错的分布式文件系统,允许文件以内存的速度在集群框架中进行可靠的共享,就像Spark和MapReduce那样。有幸跟项目发起人 李浩源聊过几次,这个项目目前发展非常快,甚至比Spark当时还要惊人。目前到0.6版本,参与开源的规模和版本迭代速度都很快。
先进大数据技术:流式,实时
由于Hadoop的火红,整个业界都在喋喋不休地谈论大数据。Hadoop的高吞吐,海量数据处理的能力使得人们可以方便地处理海量数据。但是,Hadoop的缺点也和它的优点同样鲜明——延迟大,响应缓慢,运维复杂。
Storm: 所谓流处理框架,就是一种分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易。经常用于在实时分析、在线机器学习、持续计算、分布式远程调用和ETL等领域。Twitter是他们的主推。
Kafka: 是Linkedin开源的一种分布式发布-订阅消息系统,它主要用于处理活跃的流式数据。我面试过很多硅谷创业公司都在使用,比如最重要的用户Tracking数据。LinkedIn的开发者也出来成立公司 Confluent,最新发布 platform。
Samza: 一个分布式流处理框架,专用于实时数据的处理,非常像Twitter的流处理系统Storm,LinkedIn开源了这项技术。跟上面的几个技术就可以比较一下了, https://tsicilian.wordpress.com/2015/02/16/streaming-big-data-storm-spark-and-samza/
SummingBird:将批处理和流处理无缝连接,通过整合批处理与流处理来减少它们之间的转换开销。把上面的Storm跟Scalding结合起来,所谓 Lambda Architecture。跟这个相关组件是 Algebird: 利用一些概率算法HyperLogLog来提高计算速度。
Drill:先说Dremel,是Google 的“交互式”数据分析系统。可以组建成规模上千的集群,处理PB级别的数据。MapReduce处理一个数据,需要分钟级的时间。Dremel将处理时间缩短到秒级。Apache推出Dremel的开源实现Drill。
Druid:在大数据集之上做实时统计分析而设计的开源数据存储。这个系统集合了一个面向列存储的层,一个分布式、shared-nothing的架构,和一个高级的索引结构,来达成在秒级以内对十亿行级别的表进行任意的探索分析。
Impala: Cloudera公司主导开发的新型查询系统,它提供SQL语义,能够查询存储在Hadoop的HDFS和HBase中的PB级大数据,号称比Hive快5-10倍,但最近被Spark的风头给罩住了,大家还是更倾向于后者。
Spark Streaming:建立在Spark上的应用框架,利用Spark的底层框架作为其执行基础,并在其上构建了DStream的行为抽象。利用DStream所提供的api,用户可以在数据流上实时进行count,join,aggregate等操作。
Spark SQL: 之前Spark类似Hive的工具称为Shark,现在新替代就是Spark SQL, Big Data Benchmark 里面也跟Impala性能比较。
工具类:
Make:很多同学在学校时候,认为编程就是在编辑器里面运行,当离开了IDE,他们就不知道该怎么办。C语言的打包工具,比如解析依赖,生成二进制和可执行程序。
Ant:Java的传统打包工具,需要写个build.xml
Gradle:新一代的编译构建工具,结合ivy自动匹配和下载官方稳定版本
Maven:同上,有个比较 Java构建工具:Ant vs Maven vs Gradle
Homebrew: 最近几年都用Mac平台,那么包的管理可以用这个
Eclipse:使用最广泛的IDE,著名的日蚀标识。它的出现就是吃掉SUN(Java诞生地),我大多时间用这个,后来也用过Intellij 不过是商业版本的。跟Eclipse相比,管理大型代码库时候速度快。
Docker:作为一种新兴的虚拟化方式,Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多,运行时所需的资源比虚拟机少,而效率又比虚拟机高提供隔离的执行环境。算是2014年上升最快的一个工具了。
JUnit:java的单元测试,属于测试驱动的利器。
Git:强大的分布式代码版本管理,Linux那么多分支都没乱正是它的功劳。但还是挺复杂,一大堆命令比SVN要多多了。目前 GitHub 就是最大的源码管理平台,我们公司也用它的企业版。有个结合Git和代码审查的工具由Facebook开发, Phabricator
SVN: 简化的代码管理,还有 perforce Amazon和Google也用。最老的是CVS估计现在没人用了呃。
浏览器:
Firefox:开源浏览器,当时靠丰富插件很强大,就靠Google的默认搜索来维持,但Google也开发了Chrome,给Firefox市场份额极大打击。所谓成也Google,败也Google。这个组织是Mozilla,就跟Coursera是邻居。我当时用过很多插件,比如proxy,去除广告,Firebug来调试,还有什么换皮肤,监控网络流量等。
Webkit:自从苹果开源了这么好的内核引擎,Google就就直接用它开发了Chrome。当时做信息抽取,有一种办法是基于视觉的信息提取, VIPS算法,如果通过webkit,就可以拿到正文的一些具体坐标和字体颜色大小,然后再分块确定重点内容做提取。
Spidermonkey:就是Mozilla旗下的一个JS解析引擎,我用这个是因为当时为了抓取网页,一些很变态的网站比如水木社区:( 把内容写在javascript里面,都是用字符串拼接起来,我为了获取完整的源码就要涉及到JS的解析。
V8: Google 的一个开源项目,是一个高效的JavaScript 引擎,像 Node.js基于Google V8提供了基于事件的I/O处理
文章来源: 那些年,追过的开源软件和技术