您的位置:首页 > 其它

面对软件错误构建可靠的分布式系统_笔记08

2009-02-01 22:18 323 查看
4.2 Erlang世界观

一切皆进程

web服务器的架构

server(Client) ->

receive

{Client, close} ->

true;

{Client, Request} ->

Response = generate_response(Request),

Client ! {self(), Response},

server(Client);

after 10000 ->

Client ! {self(), close}

end.

web服务器代码

relay(Socket, Server, State) ->

receive

{tcp, Socket, Data} ->

case parse_request(State, Data) of

{completed, Request, Stat1} ->

Server ! {self(), {request, Request}},

relay(Socket, Server, State1);

{more, State1} ->

relay(Socket, Server, State1)

end;

{tcp_closed, Socket} ->

Server ! {self(), close};

{Server, close} ->

gen_tcp:close(Socket);

{Server, Response} ->

Data = format_response(Response),

gen_tcp:send(Socket, Data),

relay(Socket, Server, State);

{'EXIT', Server, _} ->

gen_tcp:close(Socket)

end.

全部http代码:

http://www.sics.se/~joe/tutorials/web_server/http_driver.erl

4.3错误处理

原则:

(1)让其它进程修复错误

(2)要么成功,要么死掉

(3)任其崩溃

(4)不用防御式编程

4.3.1其它进程修复错误

Pid1如果错误,向Pid2发送消息: {'EXIT',Pid, Why}, 不论Pid1和Pid2是否在一个机器上

如果是Pid1的机器死掉,则发送:{'EXIT', Pid, machine_died} ,

4.3.2工作者和监督者

工作者执行正常工作

监督者检查工作者,负责错误处理等

4.4任它崩溃

由于有监督进程负责修复错误,因此对工作进程是任它崩溃。

这里的错误,只意料之外的错误,如果是正常工作流程的一种情况,则不算错误

4.5显意

保证一个函数处理一个问题,要显而易见
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: