mochiweb源码
MochiWeb是一个用来构建Web应用的轻便,高效的HTTP应用框架的Erlang库
开发语言: ErLang
项目主页: https://github.com/basho/mochiweb
文档地址:
下载地址: https://github.com/mochi/mochiweb
cowboy
https://github.com/extend/cowboy
网络服务器
emysql,eredid
持久化
protobuff
协议层
ets
用自己这个简单的cache
联系写aoi一类的算法
逻辑程
rebar源码
lager
https://github.com/basho/lager
protobuffs
https://github.com/roowe/erlang_protobuffs
ibrowse
https://github.com/cmullaparthi/ibrowse
getopt
https://github.com/roowe/getopt
recon
https://github.com/ferd/recon
gen_smtp
https://github.com/Vagabond/gen_smtp
dynarec
https://github.com/dieswaytoofast/dynarec
folsom
https://github.com/boundary/folsom
ets_cache
https://github.com/roowe/ets_cache
gproc
https://github.com/uwiger/gproc
gs_cron
https://github.com/roowe/gs_cron
gs_tcp
https://github.com/roowe/gs_tcp
reloader
https://github.com/roowe/reloader
emysql
https://github.com/Eonblast/Emysql
cover_tool
https://github.com/roowe/cover_tool
uuid
https://github.com/avtobiff/erlang-uuid
jiffy
https://github.com/davisp/jiffy
NIF json解析库
CouchDB 项目
CouchDB是一个"面向文档"的数据库,采用 ErLang 语言开发,文档的格式是一个JSON字符串(也可包含二进制附件)。 底层结构是由一个"存储"(storeage) ,以及多个"视图索引"(view indexs)。 "储存"用来储存文件, "视图索引"用于查询处理。
CouchDB落实到最底层的数据结构就是两类B+Tree 。
CouchDB 能够适应非常广泛的应用场景,在某些偶尔连接网络的应用中,我们可以用CouchDB暂存数据,随后进行同步。也可以在Cloud环境中,作为大型的分布 式的数据存储。CouchDB提供了基于 HTTP的API的访问方式,这样,保证了所有的常见的语言都可以使用CouchDB。
开发语言: ErLang
项目主页: http://incubator.apache.org/couchdb/
文档地址: http://incubator.apache.org/co ... .html
下载地址: http://incubator.apache.org/couchdb/downloads.html
ejabberd 项目
ejabberd是的Jabber / XMPP协议的即时通讯服务器,持牌GPLv2许可下(自由和开放源码) ,写的爱尔朗/检察官办公室。在其它特性中, ejabberd是跨平台,容错, clusterable和模块化。
开发语言: ErLang
项目主页: http://www.ejabberd.im/
文档地址: http://www.process-one.net/doc ... .html
下载地址: http://www.process-one.net/en/ejabberd/downloads/
rabbitmq 项目
rabbitmq 是一个实现了AMQP协议的消息服务器
开发语言: ErLang
项目主页: http://www.rabbitmq.com/
文档地址: http://www.rabbitmq.com/documentation.html
下载地址: http://www.rabbitmq.com/download.html
Disco 项目
Disco 是一个实现了Map-Reduce 的框架,采用 Erlang + Python 开发
开发语言: ErLang Python
项目主页: http://discoproject.org/
文档地址: http://discoproject.org/doc/
下载地址: http://discoproject.org/download.html
tsung 项目
压力测试工具,可以测试包括HTTP, WebDAV, PostgreSQL, MySQL, LDAP, and XMPP/Jabber等服务器
开发语言: ErLang
项目主页: http://tsung.erlang-projects.org/
文档地址:
下载地址: http://tsung.erlang-projects.o ... ar.gz
wxErlang 项目
wxErlang不仅是一个跨平台ErLang的GUI框架。它不像其他许多现有的GUI库,采用了本地的外观和感觉的基本平台。也就是 说,如 果一个 应用程序的执行在Mac OS X的应用程序会看起来像一个真正* * Mac OS X的应用程序。 Linux下和GNOME ,它的外观就像一个普通的GNOME应用程序。和Windows环境下,它会看起来像一个Windows应用程序。
wxErlang 是一个 Erlang 语言对 C++ 的 GUI 库 wxWidgets 的封装。
开发语言: ErLang
项目主页: http://apps.sourceforge.net/me ... _Page
文档地址: http://apps.sourceforge.net/me ... ation
下载地址: http://sourceforge.net/project ... 15117
Dynomite 项目
Dynomite 是采用 ErLang 语言开发的分布式的Key-Value存储系统。
开发语言: ErLang
项目主页: http://wiki.github.com/cliffmoon/dynomite
Ringo 项目
Ringo 是一个分布式的Key-Value存储系统,采用 ErLang 语言开发。支持磁盘数据存储。
开发语言: ErLang
项目主页: http://github.com/tuulos/ringo/tree/master
riak_sysmon
github : basho/riak_sysmon · GitHub
对erlang:system_monitor/0,1,2 的封装,尽快的发现系统中存在的long_gc,large_heap等性能隐患。针对上述痛点中的“refc binary”和“OOM”。
2、recon
github : ferd/recon · GitHub
封装了erlang:process_info/1,2 函数,并提供了TOPN的feature,recon_alloc封装了度量虚拟机内部内存的使用量的查询。
不仅如此,recon提供了一种近似度量Erlang进程CPU消耗的方案,Erlang tool -- recon ,memory leak的检查。针对上述痛点中的“Erlang进程CPU消耗度量”、“refc binary”,并且提供了种种便利。好用到爆的感觉。
3、eper/redbug
github : massemanet/eper · GitHub
刚开始接触Erlang时,社区提供的一种代码调试方案是日志。然,这种方式太不优雅,使用起来非常麻烦。
redbug是对Erlang系统中dbg模块的封装,提供了非常安全有效的代码调试方式。“安全”对生产环境来说,确实太过重要了。
4、pooler/poolboy
github : seth/pooler · GitHub
github : devinus/poolboy · GitHub
池。Erlang单进程效率的问题,非常常见的三种方式,第一种是池,第二种是noblock call,第三种是修改某个进程的资源配置。
在社区中,常见的是第一种方案,而第二种和第三种方案常见于Erlang编程语言编源码中(rpc模块,net_kernel模块)。针对上述痛点中的“单进程问题”。
5、jiffy
github : davisp/jiffy · GitHub
json处理库,而且是nif的,能够尽可能保证效果,并且可以支持return_maps已经encode force_utf8,decode 的return_maps能直接返回map 数据类型,非常之方便。(虽然17的map效率不怎么样,但是18版本做了很大的优化)
6、entop
github : mazenharake/entop · GitHub
有没有觉得Erlang自带的etop有些难用?entop提供了非常不错的可替代方案。
7、erlang-lz4
github : szktty/erlang-lz4 · GitHub
不管是Erlang系统,还是其他系统,所倡导的都是“小消息,大计算”,加之Erlang消息传递是值传递的方式,对于大的message,稍微做一下压缩,获取能取得意想不到的效果。不放试一试,lz4 的算法,请Google 之。
8、sync
github : rustyio/sync · GitHub
on-the-fly recompiling and reloading in Erlang. 大幅度提高工作效率,避免接二连三的重新compile、generate。不过,要注意的是,最好只用在开发环境下。
> 关于热更,多叨叨两句:
> 1,在supervisor下增删 gen_server child 热更会失败,目前无解,除非修改supervisor源代码
> 2,gen_server record 增删字段,这个可用 “使用proplists字段值”或者是“map字段值”
> 3,gen_server init 函数逻辑无法热更,解决办法,重写code_change 代码
> 至于常规的逻辑代码,热更基本上没什么问题
9、erlang_term
github : okeuday/erlang_term · GitHub
存了一个Term到ETS表中,难道不应该知道这个Term到底占用了多大的内存空间吗?要send一个大的message给另一个进程,不度量一点内存占用大小就随心所欲?恐怕不太好。erlang_term可以作为贴心小工具。Erlang ets -- something about cache continue
10、folsom
github : boundary/folsom · GitHub
提供了多种Metrics 模型,根据自己的应用场景,选择不同的模型就行。内部主要使用ets:update_counter/3,4,性能效果很有保证。
11、ej
github : seth/ej · GitHub
Helper module for working with Erlang terms representing JSON
试试就知道有没有意思,好不好玩了。
12、task
github : redink-toys/task · GitHub
遇到过这样一个有意思的场景:主进程是一个普通进程,有10W量级的列表,我想将其过滤之后,将1/2或者是1/4的列表写入到ETS表中,然后进行后续的操作。如果我在主进程中做这一些列操作,这个主进程就会被挂住,因为GC(Erlang的GC不会STW,但很有可能会STP)。考虑到ETS表可以在不同的进程之间共享数据,我就可以在主进程中spawn一个进程,这个这个进程去执行过滤、写入操作,然后这个进程生命周期结束之后,GC是很简单快速的。
task就是一个spawn、receive的简单封装。
13、xref_runner
github : inaka/xref_runner · GitHub
做xref检查:善待Erlang 代码 -- Xref 实践
- 1.学习
- 1.1安装与运行环境
- 1.2编辑器、集成开发环境与其它工具
- 1.3代码编译运行
- 2.基础
- 2.1 Erlang终端
- 2.2 基础语法
- 2.2.1 异常处理
- 2.3 数据类型
- 2.4 操作符
- 2.5 模块属性
- 3.库函数
- 3.1 常用模块
- 3.2 OTP模块
- 3.2.1 函数
- 3.2.2 receive
- 3.2.3 .app.src文件
- 3.2.4 _app.erl
- 3.2.5 _sup.erl
- 3.2.6 gen_server
- 3.2.7 gen_fsm
- 3.3 erts
- 3.3.1 init
- 3.3.2 BIF
- 3.3.3 NIF
- 3.4 kernel
- 3.4.1 code_server
- 3.4.2 inet
- 3.4.3 net_kernel
- 3.4.4 net_adm
- 3.4.5 error_logger
- 3.4.6 global
- 3.4.7 application
- 3.5 stdlib
- 3.5.2 array
- 3.5.4 base64
- 3.5.5 binary
- 3.5.6 c
- 3.5.8 calendar
- 3.5.9 code
- 3.5.11 dict
- 3.5.12 erl_
- 3.5.13 file
- 3.5.14 filelib
- 3.5.15 gb_trees
- 3.5.16 gb_sets
- 3.5.17 gen_tcp
- 3.5.18 gen_server
- 3.5.19 httpc
- 3.5.20 init_parse
- 3.5.21 init
- 3.5.22 inet
- 3.5.23 io
- 3.5.24 lists
- 3.5.25 maps
- 3.5.26 os
- 3.5.27 ordsets
- 3.5.28 proplists
- 3.5.29 queue
- 3.5.30 qlc
- 3.5.31 re
- 3.5.32 random
- 3.5.33 rfc4627-json
- 3.5.34 string
- 3.5.35 ssh
- 3.5.36 soft
- 3.5.37 sets
- 3.5.38 supervisor
- 3.5.39 tuple
- 3.5.40 timer
- 3.5.41 unicode
- 3.5.42 cpu
- 3.5.43 math
- 3.5.44 zip
- 3.5.45 shell
- 3.6 SASL
- 3.7 asn1
- 3.8 compiler
- 3.9 tools
- 3.10 OS_Mon
- 3.11 crypto
- 3.12 Port
- 4.工具
- 4.1 Erlang预处理器
- 4.2 Erlang节点
- 4.3 Erlang多节点
- 4.3.1主从节点
- 4.4 Epmd
- 4.5 断点工具
- 4.6 dialyzer
- 4.7 dbg-debug 模块
- 4.7.1 dbg
- 4.8 Erlang跟踪工具
- 4.9 etop
- 4.10 profiling
- 4.10.1 fprof
- 4.10.2 eprof
- 4.10.3 cprof
- 5.进阶
- 5.1 TCP粘包、大小端
- 5.2 rebar发布系统
- 5.3 ErlangVM 心跳
- 5.4 Erlang GC
- 5.5 Erlang Time
- 5.6 Erlang 启动
- 5.6.1 SASL配置
- 5.7 Erlang系统限制
- 6.项目
- 6.1 the_seed
- 6.2 network
- 6.3 parse_tool
- 6.4 cache
- 7.项目研究
- 7.1 Mnesia
- 7.1.1 Mnesia模式
- 7.1.2 Mnesia操作
- 7.1.3 Mnesia增删改查
- 7.1.4 Mnesia过载分析
- 7.1.5 Mnesia高级特性
- 7.1.6 分布式
- 7.1.7 Mnesia表分片
- 7.1.8 Mnesia锁
- 7.1.9 dets
- 7.1.10 ets
- 7.2 Ejabberd
- 7.2.1 mod_echo.erl
- 7.2.2 hooks for module developers
- 7.2.3 Events list
- 7.3 cowboy
- 7.4 rebar
- 7.4.1 rebar Wiki
- 7.4.2 rebar.config.script
- 7.5 RIAK CS
- 7.6 Leofs
- 7.6.1 简介
- 8.资料整理
- 8.1 资料
- 8.1.1 Erlang的调度原理
- 8.1.2 虚拟机代码执行原理
- 8.1.3 SMP
- 8.2 杂记
- 8.2.1 设计