challenge 分散関数呼び出し

分散関数呼び出しを実装してください.

呼び出される関数は,定価を整数で,割引率(%)を整数で受け取り,
文字列で「販売価格 ○円(定価○円から○%引き)」を返すものとします.
また,数字は3桁のカンマ区切りにするものとします.

たとえば,pricestring(2000, 20) なら
"販売価格 1,600円 (定価2,000円から20%引き)"
を返します.

関数の呼び出し元と,呼び出される側は,物理的に異なる
サーバに配置できることを条件とします.
呼び出し方法は問いませんが,呼び出し方法に名前がある場合,
それをタグに加えてください.
(XML-RPC,SOAP,CORBA,RMI,など)

また,作成した関数を直列に1万回呼び出して,
実行にかかった時間を測定してください.
測定時は別サーバでなくても構いません.
(なるべく別サーバが望ましいです)

測定環境として,
・サーバとクライアントのCPU・メモリ
・同一サーバ内での実行か別サーバでの実行か
・別サーバの場合,通信経路.(100Mbps Ethernet等)
・言語のバージョン
・ミドルウェアを使用している場合,その名前とバージョン
も併記してください.

1つの言語で複数の分散関数呼び出しの実装方法がある場合,
複数の回答を歓迎します.

出題の意図は,様々な分散呼び出し方法の実装例と,
レスポンス速度の確認にあります.
このお題は沢渡 みかげさんの投稿です。 まったく手を加えないでいい完成度の投稿で本当に助かります。 ありがとうございました。

Posted feedbacks - PHP

最初はfsockopenで開いて一行ずつ読み込んでいたのですが、
あまりに遅いのでソケット関数で作り変えました。

実行結果:23.0054550171 秒

<測定環境>
 サーバサイド
  CPU: Intel(R) Celeron(R) CPU 2.40GHz
  MEM: 256MB
  Apache2.0.52 + PHP4.3.9
 クライアントサイド
  CPU: Intel(R) Celeron(R) CPU 2.80GHz
  MEM: 512MB
  PHP4.4.4(Cli)
 通信経路: 100Mbps Ethernet
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// サーバサイド
<?php
$lprice = strip_tags($_POST["lprice"]);
$dcrate = strip_tags($_POST["dcrate"]);
$dprice = $lprice - ($lprice * ( $dcrate / 100 ));

echo "販売価格 ".number_format($dprice)."円(定価".number_format($lprice)."円から".$dcrate."%引き)\n";
?>

// クライアントサイド
<?php
$host   = "192.168.*.*";
$script = "test/test_1.php";
$lprice = 2000;
$dcrate = 20;
$st_time = msec();
for ( $i = 0; $i < 10000; $i++ ) {
	$postdata = "lprice=".urlencode($lprice)."&dcrate=".urlencode($dcrate);
	$send  = "POST /$script HTTP/1.0\n";
	$send .= "Content-type: application/x-www-form-urlencoded\n";
	$send .= "Content-Length: ".strlen($postdata)."\n\n";
	$send .= $postdata."\n\n";
	$sct = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
	socket_connect($sct,$host,80);
	socket_write($sct,$send,strlen($send));
	$result = socket_read($sct,4096);
	list($head,$body) = explode("\r\n\r\n",$result);
	echo $body;
	socket_close($sct);
}
$ed_time = msec();
$total = $ed_time - $st_time;
echo "所要時間:$total\n";

function msec() {
	list($msec,$sec) = explode(" ", microtime());
	return $sec + $msec;
}
?>

Index

Feed

Other

Link

Pathtraq

loading...