Archive

Author Archive

高性能集群服务器(Erlang解决方案)

July 30th, 2011 2 comments

Erlang supervisor规格的dynamic行为分析

July 26th, 2011 6 comments

今天benjamin同学在网上问了以下问题:

我在看mochiweb和misultin的代码时有一些不理解的地方,以下是代码:

init({MainSupRef, Port, OptionsTcp, AcceptorsPoolsize, RecvTimeout, SocketMode, CustomOpts}) ->
?LOG_DEBUG(“starting listening ~p socket with options ~p on port ~p”, [SocketMode, OptionsTcp, Port]),
case misultin_socket:listen(Port, OptionsTcp, SocketMode) of
{ok, ListenSocket} ->
Acceptors = [
{{acceptor, N}, {misultin_acceptor, start_link, [MainSupRef, ListenSocket, Port, RecvTimeout, SocketMode, CustomOpts]},
permanent, brutal_kill, worker, dynamic}
|| N ],
{ok, {{one_for_one, 5, 10}, Acceptors}};

我不明白的就是为什么是dynamic,我查看supervisor文档,文档上写只有gen_event才应该是dynamic,而这里misultin_acceptor这个进程是使用proc_lib:spawn_link产生的。我在proc_lib的文档中也没有发现这里为什么应该使用dynamic。请您指教。

考虑到这种应用很多,而且基本上supervisor文档上讲的不是很清楚,所以我花时间调查了下,以下是我调查的过程和结果:
Read more…

Categories: Erlang探索 Tags: ,

简易的python web服务器用途

July 22nd, 2011 6 comments

我们在工作中经常会需要看下报表,如tsung的统计报表或者lcov的覆盖情况,这些报表通常为了方便都会作成html格式的。我们可以把这些html网页打包拉回去用浏览器慢慢看,但是每次都要打包,拉数据非常麻烦。我们可以架设个web服务器来做这个事情。

apache或者nginx都太庞大,设置起来太麻烦。简易Python服务器来帮忙了。

只要在你的html的目录下运行:
Read more…

Erlang R15最大的卖点Native Process

July 21st, 2011 34 comments

R15最激动人心的东西就是这个Native Process,请参看Rickard Green写的Future Extensions to the Native Interface:看 这里

我来blabla下。 做过Erlang规模程序的人都知道有个痛, Erlang的公平调度引起的痛。 举个例子,比如说日志服务。当我们的系统有成千上万的进程需要日志服务的时候,我们通常会把日志的内容发给一个日志进程由它来负责持久化。这是个典型的模块划分方法,我们之前的c程序也都是这么干的。但是在erlang下这样很容易有问题。大家知道Erlang讲究公平,进程调度是公平的,port调度是公平的,bif使用是公平的,甚至ets这样的模块使用也是公平的。那么我们就可以这么理解。如果一个系统里面有N个进程需要服务,那么总进程数目是N+1, 平均来分配时间片。反过来说就是这个日志进程只能分的整个系统的1/(N+1)的cpu计算能力,但是要干N个活。后果就是这个进程忙不过来,导致消息队列不停的加大,消息队列需要堆内存,这个内存需求越来越大,最后系统分配不出内存,最终vm挂掉了。
Read more…

Categories: Erlang探索 Tags: ,

Flashcache新版重大变化

July 21st, 2011 Comments off

facebook释出的flashcache见 https://github.com/facebook/flashcache, 也可以参考我之前写的 ppt 如何使用,或者参考我们的dba写的详细使用和配置,见 这里, 这里, 这里

7月20号,作者Mohan做了重大的改变,极大的提高了易用性。

1) Integration of all 3 caching modes (writeback, writethrough and
writearound) into the main flashcache module. Flashcache utilities
have been modified to add support for this as well.

2) Total Overhaul of the flashcache sysctls. Creates per-cache device
sysctl sets, so each individual cache device can be tuned differently.

之前的flashcache版本分成writeback和writethrough独立的版本,开发和维护倾向于writeback,导致很多特性writethrough跟不上,用起来就很不爽。现在好了。

随着磁盘越来越多,每个磁盘cache就非常的必要,因为每个cache的用途不同,需要做的策略也会很大不同。

这个版本更新非常重要。

祝玩得开心!

Categories: Linux, 工具介绍 Tags:

The Erlang/OTP Roadmap(Erlang Factory London 2011)

July 11th, 2011 1 comment

刚结束不久的Erlang Factory London 2011我很关心的是The Erlang/OTP Roadmap, 每年由Kenneth Lundin宣布的下一年的开发计划,对我们掌握erlang团队的开发进度和方向非常有帮助。
今年的ppt参看 这里

R15的开发包括:

  • Line number info in crash reports
  • 64bit Windows version
  • SMP performance improvements
  • ASN.1 encode/decode performance

更长期的包括:

  • compilation(using HiPE/LLVM)
  • Experiments and EEP for new
  • datatype Hashes
  • Native processes (maybe some steps already in R15B)
  • More multicore scalability improvements

重点还是在提高Erlang的性能和易用性,感谢OTP团队给我们带来这么好的产品。

更多的话题看这里:http://www.erlang-factory.com/conference/London2011/talks

玩得开心!

 

Categories: Erlang探索 Tags: , ,

”Erlang supervisor 极其白痴的 Bug“的澄清

July 4th, 2011 2 comments

2008-05-26的时候, 著名的Trustno1发表了这篇文章 http://www.iteye.com/topic/197097 抱怨Erlang supervisor 极其白痴的一个bug.

今天 @淘李福 同学重新提起这个事情:

翻到一个老帖子: http://www.iteye.com/topic/197097
现在是 R14 ,代码还是那样,我觉得是不是我们理解错了,shutdown属于normal退出

由于该帖子关闭评论, 所以我在这里澄清下,这个不是bug!

前几天我重新读了下init.erl的代码,是特地的设计,目的是在系统init:stop的时候为了让kernel进程包括supervisor tree有个正常退出的机会。

我们来看下init:stop 的代码:
erts/preloaded/src/init.erl
Read more…

Categories: Erlang探索 Tags: ,