challenge 分散関数呼び出し

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

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

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

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

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

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

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

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

Posted feedbacks - VB.net

.NET Remoting です。既にC#で出てますね。

CPU: Athlon 64 X2 5600+  メモリ: 4GB
同一マシン内で14秒ぐらいです。
 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
' Remote Object
Public Class RemoteClass
    Inherits MarshalByRefObject
    Public Function PriceString(ByVal value As Integer, ByVal saving As Integer) As String
        Return String.Format("販売価格 {0}円 (定価{1}円から{2}%引き)", (value * (100 - saving) / 100).ToString("N0"), value.ToString("N0"), saving)
    End Function
End Class
 
' Server
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels

Module ServerModule
    Sub Main()
        ChannelServices.RegisterChannel(New Http.HttpChannel(8088), False)
        RemotingServices.Marshal(New RemoteClass, "Price")
        Console.ReadLine()
    End Sub
End Module

' Client
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels

Module ClientModule
    Sub Main()
        ChannelServices.RegisterChannel(New Http.HttpChannel, False)
        Dim t As DateTime = Now
        For i As Integer = 1 To 10000
            CType(Activator.GetObject(GetType(RemoteClass), "http://localhost:8088/Price"), RemoteClass).PriceString(2000, 20)
        Next
        Console.WriteLine(Now.Subtract(t).TotalMilliseconds)
    End Sub
End Module

Index

Feed

Other

Link

Pathtraq

loading...