PDA

View Full Version : loadbalancer و ارتباط آن با MBean



bahareh12
یک شنبه 07 مهر 1387, 12:25 عصر
سلام دوستان هرچی تا حالا سوال کردم یا توی این froum پاک شده یا اصلا جواب ندادید از اساتید جاوا این سوال را دارم که من برنامه ای دارم که client یه message رو میفرسته و برنامه ای به اسم loadbalancer پیغامی که از طرف client میره را دریافت کرده و به serverمیدهد البته بین دو server پخش یا distribute میکند و در آن طرف کار server پیغام را گرفته و جواب را هر دو server به loadbalancer میدهد و اینبار loadbalancer است که پیغام را به client میدهد. حال میخوام بدونم رفتار دو گانه loadbalancer در مواجه شدن با یک client و دو server چگونه است حال چگونه این loadbalancer به صورت mbean در میاد که قابل manage باشه ؟


البته کدی را که نوشتم برای دوستان میزارم تا منو راهنمایی کنید؟




import java.net.*;

import java.util.ArrayList;

import java.util.Iterator;

import java.io.*;


public class udp {
private ServerSocket ServerSocket;

public udp(int port) {

try {
ServerSocket = new ServerSocket(port);
System.out.println("mbean wating to client on port "

+ ServerSocket.getLocalPort());
while (true) {
Socket Socket = ServerSocket.accept();
System.out.println("new client asked for a connection");
TcpThread t = new TcpThread(Socket);
t.start();

}
} catch (IOException e) {
System.out.println("Exception on new ServerSocket:" + e);
}
}

public static void main(String[] args) {
new udp(1500);
}
}


class TcpThread extends Thread {
Socket Socket;


static ObjectInputStream Sinput;

static ObjectOutputStream Soutput;

TcpThread(Socket Socket) {
this.Socket = Socket;
}

public void run() {
System.out

.println("Thread Trying To Creat Object Input/Output Stream ");
try {
Soutput = new ObjectOutputStream(Socket.getOutputStream());
Soutput.flush();
Sinput = new ObjectInputStream(Socket.getInputStream());
} catch (IOException e) {
System.out.println("Exception Creating new Input/Output Stream:"

+ e);
return;
}
System.out.println("Thread wating to string client");

String msg = " Command = Invite " + " Call Id = 5" + " Seq No = [1-20]"

+ " Src Address = client IP:Port"

+ " Dest Address = udpMBean: Port";

System.out.println(" UdpMBean resive \"" + msg + "\" from client");

distribute(msg);

sendMessageserver1(msg);
theClientbehavior();
getResponse(msg);
try {
sendMessageserver2(msg);
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block

e1.printStackTrace();
}
try {
Soutput.writeObject(msg);
Soutput.flush();
} catch (IOException e) {
System.out.println("Error writting to the socket: " + e);
return;
}

}




public static void distribute(String msg){

msg="Command = Invite Call ID = 5 Seq No = [1-20] Src Address =UdpMBean IP :Port DestAddress = serverAddress IP:5070";

int count =+1;


if(count %2==0){

sendMessageserver1(msg);

}
else {
try {
sendMessageserver2(msg);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block

e.printStackTrace();
}
}

}


private static void sendMessageserver1(String msg) {

String Server1Address = "192.168.1.42:5070";

String msg1 = msg.replaceAll("udpMBean: Port", Server1Address);

msg1 = msg1.replaceAll(" client IP:Port", "udpMBean Ip: Port");

System.out.println(" UdpMBean sending \"" + msg1 + "\" to server1");

}
private static void sendMessageserver2(String msg) throws ClassNotFoundException {

String Server2Address = "192.168.1.79:5070";

String msg1 = msg.replaceAll("udpMBean: Port", Server2Address);

msg1 = msg1.replaceAll(" client IP:Port", "udpMBean Ip: Port");

System.out.println(" UdpMBean sending \"" + msg1 + "\" to server2");
}

private void theClientbehavior() {


// TODO Auto-generated method stub

try {
socket = new Socket("localhost", port);
}
catch(Exception e) {
System.out.println("Error connectiong to server:" + e);
return;
}
System.out.println("Connection accepted " +
socket.getInetAddress() + ":" +
socket.getPort());

/* Creating both Data Stream */

try

{
Sinput = new ObjectInputStream(socket.getInputStream());
Soutput = new ObjectOutputStream(socket.getOutputStream());
}
catch (IOException e) {
System.out.println("Exception creating new Input/output Streams: " + e);
return;
}




}
private void getResponse(String msg) {
// TODO Auto-generated method stub

msg = " Command = Invite " + " Call Id = 5" + " Seq No = [1-20]"

+ " Src Address = client IP:Port"

+ " Dest Address = udpMBean: Port";

msg=msg.replaceAll( "client IP:Port", "Server1Address 192.168.1.42:5070");

msg= msg.replaceAll("UdpMBean IP :Port","UdpMBean IP :Port" );
String response;
try {

response = (String) Sinput.readObject();

System.out.println("Read back from server1 : " + response);
}
catch(Exception e) {
System.out.println("Problem reading back from server1 : " );

try{
Sinput.close();
Soutput.close();
}
catch(Exception e1) {
}
}
}


private int port;

private Socket socket;
}












udp همون loadbalancer ماست.

manvaputra
دوشنبه 08 مهر 1387, 02:37 صبح
سلام دوست عزیز راستشو بخوای این کد طولانی که گذاشتی یکم کارو مشکل می کنه یعنی بعید می دونم کسی وقت کنه تجزیه و تحلیلش کنه ببینه مشکل کجاست! بخ نظر من اگه شما برنامه رو تیکه تیکه توضیح میدادید و بقول معروف مسئله رو ریز می کردید زودتر می به جواب می رسیدید.

bahareh12
دوشنبه 08 مهر 1387, 09:48 صبح
مرسی . من یه client دارم که میخواد با استفاده از پروتکل udp یه message به server بفرسته اما چون که ترافیک روی server زیاد میشه ما از یه software بنام load balancer استفاده میکنیم .
حالا در مرحله اول من loadbalancer رو شبیه سازی میکن به یه سوییچ که از یه طرف پیغام رو از client گرفته در مرحله بعد پیغام رو بین دو تا serverبه شکل الگوریتم Round Robin به صورت یکی در میون distribute میکنه به صورت tcp که کدشو گذاشتم مشکل حل نمیشه لطفا اگه کسی میتونه به صورت udp مشکل منو حل کنه . البته ما باید از tread استفده کنیم.

manvaputra
دوشنبه 08 مهر 1387, 11:04 صبح
آها پس ببین من درست فهمیدم شما یه برنامه واسط داری که حالا بش می گیم loadbalancer که پیامهایی رو از کلاینت می گیره و یکی در میون به دو تا سرور میفرسته.ساختار برقراری ارتباط هم پروتکل UDP

manvaputra
دوشنبه 08 مهر 1387, 11:14 صبح
پیشنهاد می کنم یه نگاه هم به این بخش ها بندازید می تونه کمک خوبی باشه اگه جئاب نگرفتید بگید:

ارتباط UDP در جاوا (کلاینت-سرور) (http://barnamenevis.org/forum/showthread.php?t=122366)

ارتباط TCP در جاوا (http://barnamenevis.org/forum/showthread.php?t=119875)

Thread در جاوا (قسمت اول) (http://barnamenevis.org/forum/showthread.php?t=123116)

Thread در جاوا (قسمت دوم:ایجاد ترد با استفاده از روش بسط کلاس Thread) (http://barnamenevis.org/forum/showthread.php?t=123261)

Thread در جاوا (قسمت سوم:ایجاد ترد با استفاده از واسط Runnable) (http://barnamenevis.org/forum/showthread.php?t=123547)

Thread در جاوا (قسمت چهارم:پیاده سازی مثال چت با استفاده از مالتی ترد) (http://barnamenevis.org/forum/showthread.php?t=124632)

bahareh12
سه شنبه 09 مهر 1387, 09:32 صبح
تشکر از راهنمایییتون .از این مطالب استفاده کردم حالا میخوام بدونم به چه صورت ما از thread تو udp از سمت server استفاده میکنیم اگر امکان داره لطفا کدشو شرح بدید . بازم تشکر.

manvaputra
سه شنبه 09 مهر 1387, 14:10 عصر
دوست عزیز این بستگی به ساختار سرور شما داره توی اولین قدم باید ببینید مجموعه کارهایی که قراره سرورتون انجام یده چیه و اصولا چه کارهایی قراره همزمان صورت بگیره. الان سوال اینجاست که سرور شما قراره چه کارهایی بکنه؟؟؟؟؟

bahareh12
شنبه 13 مهر 1387, 08:11 صبح
این سرور کار management را قرار بکنه .

manvaputra
شنبه 13 مهر 1387, 09:59 صبح
این سرور کار management را قرار بکنه
خوب این خیلی کلیه و هیچ نتیجه ای نمیشه ازش گرفت. ببینید سرور شما قراره manage کنه خوب چی رو باید manage کنه؟ تا مراحل کاری به طور کامل معلوم نشه نمیشه هیچ کد مشخصی براش زد.

bahareh12
شنبه 13 مهر 1387, 10:56 صبح
ببینید با عرض معذرت اصلا شما وارد این مبحث نشید که سرور من چه کار میکنه فعلا از الگوریتم جز به کل استفاده میکنیم چیزهایی که لازم داریم .

1 - یه client ساده که server یه پیغام رو میفرسته .با استفاده از پروتکل udp.
2- یه loadbalancer که در اینجا در طرف client همان server است که پیغام را دریافت

میکنه .حال نقش clientای گرفته و پیغام را بین دو server پخش میکنه .

3- 2 تا server که پیغام را گرفته به loadbalance داده .

4- loadbalancer پیغام را به client میفرستد.

bahareh12
شنبه 13 مهر 1387, 11:01 صبح
البته loadbalancer من از thread استفاده میکنند. یعنی یه متد run داره که توی این متد متدهای distribute , send to clent را call میکنه .

manvaputra
شنبه 13 مهر 1387, 17:52 عصر
ببینید با عرض معذرت اصلا شما وارد این مبحث نشید که سرور من چه کار میکنهبا عرض معذرت اصلا من نیازی ندارم وارد این مبحث بشم که سرور شما داره چه کار میکنه ظاهرا شما فکر می کنی بدون طرح سوال میشه جواب گرفت! شما که پروژت فوق سریه بهتره توی فروم های عمومی دنبال جواب نگردی فکر نمی کنم کسی اینجا بتونه اینطوری راهنماییتون کنه با تشکر من اصلا لزومی نمیبینم که دیگه توی تاپیک شما نظری بدم!

bahareh12
یک شنبه 14 مهر 1387, 10:29 صبح
چرا ناراحت میشید . اصلا منظوری نداشتم . چون خودمم به اون صورت درگیر قسمت manage نشدم و چیزی نمدونم که بخوام برای شما بگم .بازم تشکر از راهنماییتون.