viernes, 29 de noviembre de 2013

Justificación de Proyecto distribuido

J U S T I F I C A C I Ó N:
Se puede decir que el proyecto SCAF, desarrollado por la empresa HydraSoft a lo largo del semestre es distribuido ya que considera y cubre cada una de las características con las que se definió un sistema distribuido, a continuación, desglosaremos cada una de ellas y explicaremos de qué forma el proyecto las cubre.
Por definición, el proyecto tiene corriendo en distintas computadoras (con distintos procesadores), los distintos módulos que lo integran, se accede a él a través de una red local de computadoras, cuyos componentes se comunican a través de un protocolo (IP) para intercambiar mensajes para un fin común, por lo que lo que cumple con la definición estricta de  un sistema distribuido.


CARACTERISTICAS DEFINIDAS:
"Por definición estricta, se menciona que un sistema distribuido cumple con las siguientes características..." (Coulouris, 2005)

1.-Concurrencia: Los recursos del proyecto pueden ser utilizados o consultados al mismo tiempo por los diversos usuarios que utilizan el sistema. A su vez, dichos recursos están disponibles en forma de módulos para todos los usuarios, cada uno de ellos instalado y ejecutándose en una unidad de procesamiento distinta.

2.-Fallos independientes: Cuando se da el caso de que un modulo o servidor individual falle, los otros 3 pueden seguir corriendo los procesos propios de cada modulo, es decir que cada modulo tiene tolerancia a fallos independientes.

3.-Carencia de reloj global: Cada computadora tiene definida su propia hora de sistema y este no está conectado o relacionado de ninguna forma con el de los otros tres componentes del sistema, en los procesos en los que se requiere obtener hora de un sistema, se utiliza aquella obtenida del reloj de la unidad de procesamiento donde se está ejecutando el proceso.


DESAFIOS O CARACTERISTICAS REQUERIDAS:
"Como parte de las características requeridas para el óptimo funcionamiento de un sistema se señalan características, comúnmente llamados “desafíos” que deben ser cubiertas" (Liu, 2004)

1.-Heterogeneidad: La comunicación entre unidades de procesamiento está regulada y estandarizada por los protocolos de conexión y la estructura de las clases, aunado a la validación del sistema lo que permite una conexión que se da a través de múltiples elementos de hardware y software: De igual forma, al ser conformada por 4 equipos distintos, cada uno utiliza su propio hardware y un software estandarizado para el sistema.

2.-Seguridad:La seguridad se cubre dado que al establecerse el intercambio de mensajes entre las unidades de procesamiento, no puede haber intrusión de un agente externo y a su vez, la información que se guarda a base de datos, como por ejemplo contraseñas, se manejan de una forma distinta que los datos de comunicación comunes y siempre que el sistema este corriendo, estos están disponibles, aunado a la seguridad que proporciona centralizar la base de datos en un servidor, aun siendo 4 los que ejecuten el sistema integrado.

3.-Escalabilidad: Se conserva la capacidad de respuesta y efectividad del sistema al aumentar las peticiones y usuarios, lo que se puede hacer de una manera confiable y sin riesgo a que el proceso se vea afectado de ninguna forma desde cualquiera de los 4 servidores disponibles.

4.-Transparencia: La comunicación entre un cliente y los distintos servidores distribuidos que conforman al sistema en sí, es totalmente transparente para el usuario, ya que el re direccionamiento con la tecnología IP permite una navegación fluida y continua, sin necesidad de direccionar manualmente en ningún momento y sin muestras muy evidentes del cambio entre los distintos servidores.

5.-Extensibilidad: Puede darse el caso del desarrollo de un nuevo modulo del proyecto el cual podría acoplarse al sistema actual, pudiéndose ejecutar en un servidor externo a los que actualmente llevan a cabo la ejecución del sistema. Del mismo modo en el caso de la eliminación de un modulo actualmente implementado, es posible el retiro de dicho modulo del sistema sin afectar el resto.

El utilizar la tecnología de los sistemas distribuidos en el proyecto nos da la enseñanza de lo útiles y poderosas que pueden ser estas herramientas en el desarrollo de un sistema, ya que, aunque parecieran simples en un único, las características que se adquieren al distribuir una aplicación en servidores separados y modulares, son útiles en el proceso de la ejecución y también interesantes para el estudio de la lógica del programa.






miércoles, 20 de noviembre de 2013

SRC Juego distribuido


:D
public interface JugadorPelicula{
public void enviarPista();
public void masterTurn();
public void valida_Gana();
public boolean seguir();

}
////////////////////////////////////////////////
import java.io.*;
import java.net.*;
import java.util.*;
public class cJugador1 implements JugadorPelicula{
public String opcion="";
public String pelicula=null;
public String aux=null;
public String n="1";
public char gamer=' ';
Scanner scaner = new Scanner(System.in);
MulticastSocket s;
InetAddress grupo;
public boolean seguir()
{
if(gamer=='x')
return false;
else
return true;
}
public void masterTurn()
{
System.out.println("Eres el turno MAESTRO");
System.out.println("Teclea la pelicula a adivinar:");
pelicula=scaner.nextLine();
//System.out.println(pelicula);

}
public void enviarPista()
{
String pista = "";
try{
grupo=InetAddress.getByName("239.1.2.3");
s=new MulticastSocket(12345);
s.setTimeToLive(32);
System.out.println("Teclea la pista: ");
pista=n+(scaner.nextLine());
DatagramPacket paquete=new DatagramPacket(pista.getBytes(), pista.length(),grupo,12345);
s.send(paquete);
s.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
public void valida_Gana(){
String auxP="";
String auxO="";
String win="";
auxP=pelicula.replaceAll(" ","");
auxP=auxP.toLowerCase();
auxO=opcion.replaceAll(" ","");
auxO=auxO.toLowerCase();
//System.out.println(auxO.length());
String magia=auxO.substring(0,auxP.length());
if(auxP.equals(magia))
{  
try{
grupo=InetAddress.getByName("239.1.2.3");
s=new MulticastSocket(12345);
s.setTimeToLive(32);
if(gamer=='1')
{
win="xFELICIDADES Jugador 1, HAS GANADO!!!";
gamer='x';
}
if(gamer=='2')
{
win="xFELICIDADES Jugador 2, HAS GANADO!!!";
gamer='x';
}
if(gamer=='3')
{
win="xFELICIDADES Jugador 3, HAS GANADO!!!";
gamer='x';
}
if(gamer=='4')
{
win="xFELICIDADES Jugador 4, HAS GANADO!!!";
gamer='x';
}
DatagramPacket paquete=new DatagramPacket(win.getBytes(), win.length(),grupo,12345);
s.send(paquete);
s.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
else
{
try{
grupo=InetAddress.getByName("239.1.2.3");
s=new MulticastSocket(12345);
s.setTimeToLive(4);
String lose="RESPUESTA INCORRECTA, SIGUIENTE TURNO: ";
DatagramPacket paquete=new DatagramPacket(lose.getBytes(), lose.length(),grupo,12345);
s.send(paquete);
s.close();
opcion=null;
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
}
 /////////////////////////////////////////////////////////////////////////////////////
import java.io.*;
import java.net.*;
import java.util.*;

public class Jugador1
{
public static void main(String[] args) throws InterruptedException
{
 
boolean cont=true;
cJugador1 ejecutor = new cJugador1();
ejecutor.masterTurn();
while(cont==true)
{
ejecutor.enviarPista();
ejecutor.escuchar();
Thread.sleep(1000);
ejecutor.valida_Gana();
cont=ejecutor.ValidarContinuar();
// System.out.println(cont);
}  
}
}