当前位置 : 主页 > 网页版传奇归来 > 正文

那些年,追好玩的传奇过的开源软件和技术

Hive:Facebook领导的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计。像一些data scientist 就可以直接查询,不需要学习其他编程接口。

AMP Lab三剑客

参考资料:

Web 服务器:

LevelDB:Google开发的,一个速度非常块的KV存储库(storage library),它支持字符串的key与value,并且这种映射关系按key排序(ordered mapping)

Berkeley DB:文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数。之后被Oracle收购了。

Hibernate:数据持久框架,ORM,对数据库的CRUD操作进行对象化映射。

Impress.js: 基于CSS3转换和过渡、工作于现代浏览器、并受prezi.com的理念启发的演示工具。

Struts:View层,有很多tag库可以选择,有个JSTL 标签可以搭配选择。

JQuery:Javascript的最流行的库,可以做一些Ajax调用。

Helix:通用的集群管理框架,Linkedin出品。

还有一些语言,Ruby,R,Object-C, Swift,Matlab, Perl, SQL, D, Lisp就是偶尔用了,有个TIOBE编程语言排名。

Maven:同上,有个比较Java构建工具:Ant vs Maven vs Gradle

工具类:

框架:

D3:各种可视化的效果,确实非常酷。

Spark:已经成为Apache的顶级项目了,2014年的当红炸子鸡,我在这个帖子里面也介绍的比较全面了,有什么关于 Spark 的书推荐? – Spark,它们也成立公司Databricks对cloud管理进行产品化。

SummingBird:将批处理和流处理无缝连接,通过整合批处理与流处理来减少它们之间的转换开销。把上面的Storm跟Scalding结合起来,所谓Lambda Architecture。跟这个相关组件是Algebird: 利用一些概率算法HyperLogLog来提高计算速度。

RocksDB: 比LevelDB更彪悍的引擎,代码层面上是在LevelDB原有的代码上进行开发的,但却借鉴了Apache HBase的一些好的idea。

Nutch:是一个开源Java 实现的搜索引擎,当时Hadoop的前身就是为了做这个项目。

Gradle:新一代的编译构建工具,结合ivy自动匹配和下载官方稳定版本

Lucene:基于Java的全文检索引擎,很有名也非常强大,elasticsearch就是基于这个开源基础二次开发。

Thrift:Apache Thrift 是Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。

数据存储:(NoSQL)

ProtoBuf:Google提出的跟上面很像,用来序列化结构化数据的技术,支持多种语言持久化数据或者序列化成网络传输。

CouchBase:文档型数据库,由CouchOne与Membase合并,之后的公司叫做Couchbase,功能还是挺强大的,自动备份,自动分片,在Linkedin广告组和运维部门都大力推荐。

有一些基于各种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

属于创业公司的最经典组合。

Tomcat/Jetty: Java J2EE容器,经常用的,我记得当时最喜欢看到配置成功后,页面显示的小猫图案。在Linkedin,这两个都用。一个用来做前端服务器,一个用来做后端。

编程语言:

Solr:基于Lucene的XML接口的独立运行的搜索服务器。通过HTTP协议以XML格式将文档放入搜索服务器(索引),GET来查询搜索服务器得到结果。

Nginx:高性能web服务器,异步,C10K(意思是单机同时维持一万的连接)杰出代表。俄国人写的,代码可读性不如上面的,但确实功能更强大些。

JUnit:java的单元测试,属于测试驱动的利器。

Backbone.js:前端的MVC,为复杂Javascript应用程序提供模型(models)、集合(collections)、视图(views)的结构。

MongoDB:一个基于分布式文件存储的数据库。为WEB应用提供可扩展的高性能数据存储解决方案。 介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。

Docker:作为一种新兴的虚拟化方式,Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多,运行时所需的资源比虚拟机少,而效率又比虚拟机高提供隔离的执行环境。算是2014年上升最快的一个工具了。

Sphinx:Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能。反正比MySQL内置的全文检索要快很多。

Spark Streaming:建立在Spark上的应用框架,利用Spark的底层框架作为其执行基础,并在其上构建了DStream的行为抽象。利用DStream所提供的api,用户可以在数据流上实时进行count,join,aggregate等操作。

AMP Lab 是Berkeley的一个王牌实验室,汇集系统,数据库,机器学习,各个领域的教授和丰富工业经验的学生,它们做出了很多有意思得到工业界认可的技术。

Redis:一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多。

搜索

有个笑话,让程序员打架的一个最有效的方式是去讨论区问大家那种编程语言最好,这就会没完没了的讨论。大致分成C++派,Java派,Python等脚本派。

Java出来之后,为了提高大规模网站的开发效率,提出了很多框架,最经典就是分层J2EE, 在企业级,如银行系统大量使用,什么servlet,java bean,EJB,RMI,JMS, JSP,JNDI,JDBC,容器,管道,数据库连接池,当时最火的就是什么Java架构师,年薪百万啊有木有。那当然一般人玩不会了,后来出现了轻量级的MVC解耦合分层结构,在本科时候经常做管理系统,就使用这种轻量级J2EE框架,搭系统。里面重要3个组件

Tez:Hortonworks主推的优化MapReduce执行引擎,与MapReduce相比较,Tez在性能方面更加出色。

Cascading/Scalding:Cascading是Twitter收购的一个公司技术,主要是提供数据管道的一些抽象接口,然后又推出了基于Cascading的Scala版本就叫Scalding。Coursera是用Scalding作为MapReduce的编程接口放在Amazon的EMR运行。

Kafka: 是Linkedin开源的一种分布式发布-订阅消息系统,它主要用于处理活跃的流式数据。我面试过很多硅谷创业公司都在使用,比如最重要的用户Tracking数据。LinkedIn的开发者也出来成立公司Confluent,最新发布platform。

前端技术

Memcached:是高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。性能瓶颈第一个就要想到用这个。有点万金油的感觉。

Python:跟Perl, PHP,合成3P语言,都是脚本:) 非常方便实用,初学编程就可以拿它练习,有很多方便的库,比如urlib, beautifulsoap。有句话说:人生苦短 我用Python。做数据分析的有个超好的工具叫iPython,它是结合在线notebook,可以交互式编程,非常爽。据说Python的创始人在Dropbox,当年他简历就一句话,说I wrote Python. 在面试Google时候还被一些人误会,想会python算个啥,但人家是作者。有一本书集体智慧编程 (豆瓣)用Python作为实践做机器学习,推荐给大家。

Java: 估计是目前用的最广的项目语言,容易上手,概念简单,无数的库,大量的代码。我就不多介绍了,传奇归来国际版sf,我自己也是大半的项目用Java写的。缺点时配置比较烦,很多什么XML,Config,适合写服务端。

Espresso:文档型NoSQL数据存储系统,MySQL作为底层数据存储,具有高性能、高扩展性、支持事务、容错能力等重要特征。

Scala:各种集大成,面向对象,函数式编程,面向过程。我目前也在学习,东西实在太多,Coursera上面有Scala作者的一门课,https://www.coursera.org/course/progfun公司技术部也主推这种语言,这也是为啥我们墙上员工证书中最多就是Scala这门课的。另外著名的Spark,Kafka也是Scala写的,确实在高性能,高并发上面表现不错,又保持了优雅精炼的写法。值得玩味。

The Architecture of Open Source Applications

Linux: 不用说,大多数公司都用这个,随着虚拟机越来越成熟,大家喜欢创建虚拟的Image,来提供某个Linux版本,我接触过一些常用的,Ubuntu,Redhat,Debian, Gentoo, CentOS, Federo,OpenSuse。

Mesos:一个分布式环境的资源管理平台,它使得Hadoop、MPI、Spark作业在统一资源管理环境下执行。它对Hadoop2.0支持很好。Twitter,Coursera都在使用。

Rest.li:RESTful是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。使用HTTP协议中的请求方法来对应后端操作数据时候的增删添改(CRUD)。LinkedIn提出Rest.Li编程框架,是一款REST+JSON框架,使用动态发现和简单的异步API即可构建健壮可伸缩的服务架构体系。

GO:Google开源的语言,比C++容易上手,却有相似的性能,很多从Google出来的人喜欢人,据说Square, Pinterest就在用。Go语言有哪些好处,谁用谁知道,为什么要使用 Go 语言,Go 语言的优势在哪里?

PHP:当时很多网站用Java写的,php提出就是为了简化网站开发,为web而写。Facebook早年也是PHP写的,是很灵活的脚本语言,Coursera之前也是用Php搭建的,但却是很难维护,主要问题是每个人都可以写一个小框架,编程风格随便,难统一。除了Facebook他们花了大量人力去完善,基本上重写了Php,底层加速成C++,也发明了新语言Hack。

MySQL:经典开源数据库,被Oracle收购,Facebook, Baidu, Taobao都是大量基于MySQL做出非常稳定靠谱的系统。我记得Pinterest也总结过他们为什么用MySQL提高他们的规模。

Javascript: 本来这是个前端客户端的动态语言,做一些页面特效,主要特点是天然支持异步,又跨平台,弱类型,比较安全 (有sandbox),有人把它拓展到后台,随着V8,Node.js, Angular出现也显得越来越厉害了。

浏览器:

Firefox:开源浏览器,当时靠丰富插件很强大,就靠Google的默认搜索来维持,但Google也开发了Chrome,给Firefox市场份额极大打击。所谓成也Google,败也Google。这个组织是Mozilla,就跟Coursera是邻居。我当时用过很多插件,比如proxy,去除广告,Firebug来调试,还有什么换皮肤,监控网络流量等。

Lighttpd:当时在百度我就是把它作为云平台(Baidu App Engine)的服务器。为了彻底搞懂它,我真的看了它所有的源代码,代码很精炼,大概5w行,又研读了所有它的maillist,jira上面的进度,还给开源社区打了补丁。感觉就像武林高手修炼一样。

Storm: 所谓流处理框架,就是一种分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易。经常用于在实时分析、在线机器学习、持续计算、分布式远程调用和ETL等领域。Twitter是他们的主推。

Webkit:自从苹果开源了这么好的内核引擎,Google就就直接用它开发了Chrome。当时做信息抽取,有一种办法是基于视觉的信息提取,VIPS算法,如果通过webkit,就可以拿到正文的一些具体坐标和字体颜色大小,然后再分块确定重点内容做提取。

Drill:先说Dremel,是Google 的“交互式”数据分析系统。可以组建成规模上千的集群,处理PB级别的数据。MapReduce处理一个数据,需要分钟级的时间。Dremel将处理时间缩短到秒级。Apache推出Dremel的开源实现Drill。

Ruby>Django:Python的前端管理框架,直接生成管理页面。有人经常那上面的作为PK相比于 Django、Pylon 等 Python 框架,Ruby>Smarty:PHP的一种模板语言,很容易上手。

Git:强大的分布式代码版本管理,Linux那么多分支都没乱正是它的功劳。但还是挺复杂,一大堆命令比SVN要多多了。目前GitHub就是最大的源码管理平台,我们公司也用它的企业版。有个结合Git和代码审查的工具由Facebook开发,Phabricator

Impala: Cloudera公司主导开发的新型查询系统,它提供SQL语义,能够查询存储在Hadoop的HDFS和HBase中的PB级大数据,号称比Hive快5-10倍,但最近被Spark的风头给罩住了,大家还是更倾向于后者。

当时为了解决Scale的问题,伴随分布式系统发展,形成各个NoSQL软件,百花齐放。下面介绍常见的一些:

SVN: 简化的代码管理,还有perforceAmazon和Google也用。最老的是CVS估计现在没人用了呃。

HBase:是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化数据集群。像Facebook,都拿它做大型实时应用Facebook’s New Realtime Analytics System: HBase to Process 20 Billion Events Per Day

Voldemort:NoSQL 键/值存储引擎,完全是分布式且去中心化的,支持分区与容错。

Ant:Java的传统打包工具,需要写个build.xml

Node.js:js写的后端服务器,处理高并发场景性能佳,使用 Node.js 的优势和劣势都有哪些?特别适合移动的服务器端。Socket.IO是其中一个组件,为了在浏览器和移动设备上创建实时应用而产生的,它可以模糊不同传输机制之间的差异

上一篇:略知一二43u游戏《37传奇游戏原始传奇》新手前路未必渺茫
下一篇:“时间”37传奇网页版狂欢下周开启