entity framework y cluster en mysql

16
ENTITY FRAMEWORK Y MYSQL CLUSTER 1 de enero 2012 Docente : Ing. Alexander Calderón Universidad de El Salvador Facultad Multidisciplinaria de Occidente Alumnos: Canales Mancia Guillermo Ernesto Flores Castro Francisco Alexander Marroquín Paniagua Kenny Guadalupe Rodriguez Umaña, Oscar Gustavo Salinas Rodríguez Arturo Ernesto

Upload: arturo-salinas

Post on 25-Jun-2015

1.750 views

Category:

Education


5 download

DESCRIPTION

Este documento contiene una introduccion al paradigna Entity Framework de Microsoft, ademas incluye un How To para el montaje de un Cluster en MySql.Universidad de El Salvador, Facultad Multidisciplinar de Occidente, Bases de Datos 2012.-

TRANSCRIPT

Page 1: Entity Framework y Cluster en Mysql

ENTITY FRAMEWORK Y MYSQL CLUSTER

1 de enero

2012 Docente : Ing. Alexander Calderón

Universidad de El Salvador Facultad Multidisciplinaria de Occidente

Alumnos:

Canales Mancia Guillermo Ernesto

Flores Castro Francisco Alexander

Marroquín Paniagua Kenny Guadalupe

Rodriguez Umaña, Oscar Gustavo

Salinas Rodríguez Arturo Ernesto

Page 2: Entity Framework y Cluster en Mysql

Entity Framework

Entity Framework es un conjunto de tecnologías de ADO.NET que permiten el desarrollo de aplicaciones de software orientadas a datos. Los arquitectos y programadores de aplicaciones orientadas a datos se han enfrentado a la necesidad de lograr dos objetivos muy diferentes:

modelar las entidades, las relaciones y la lógica de los problemas empresariales que resuelven.

trabajar con los motores de datos que se usan para almacenar y recuperar los datos.

Los datos pueden abarcar varios sistemas de almacenamiento, cada uno con sus propios protocolos; incluso las aplicaciones que funcionan con un único sistema de almacenamiento deben equilibrar los requisitos del sistema de almacenamiento con respecto a los requisitos de escribir un código de aplicación eficaz y fácil de mantener. Entity Framework permite a los programadores trabajar con datos en forma de objetos y propiedades específicos del dominio, por ejemplo, con clientes y direcciones, sin tener que pensar en las tablas de las bases de datos subyacentes y en las columnas en las que se almacenan estos datos. Con Entity Framework, los desarrolladores de software pueden trabajar en un nivel más alto de abstracción cuando tratan con datos, y puede crear y mantener aplicaciones orientadas a datos con menos código que en las aplicaciones tradicionales. Dado que Entity Framework es un componente de .NET Framework, las aplicaciones se pueden ejecutar en cualquier equipo en el que esté instalado .NET Framework a partir de la versión 3.5 SP1. Además permite a los desarrolladores crear aplicaciones de acceso a datos programando con un modelo de aplicaciones conceptuales en lugar de programar directamente con un esquema de almacenamiento relacional. El objetivo es reducir la cantidad de código y el mantenimiento necesarios para

Page 3: Entity Framework y Cluster en Mysql

las aplicaciones orientadas a datos. Las aplicaciones de Entity Framework ofrecen las siguientes ventajas:

Las aplicaciones pueden funcionar en términos de un modelo conceptual más centrado en la aplicación, que incluye tipos con herencia, miembros complejos y relaciones.

Las aplicaciones están libres de dependencias de codificación rígida de un motor de datos o de un esquema de almacenamiento.

Las asignaciones entre el modelo conceptual y el esquema específico de almacenamiento pueden cambiar sin tener que cambiar el código de la aplicación.

Los desarrolladores pueden trabajar con un modelo de objeto de aplicación coherente que se puede asignar a diversos esquemas de almacenamiento, posiblemente implementados en sistemas de administración de base de datos diferentes.

Se pueden asignar varios modelos conceptuales a un único esquema de almacenamiento.

La compatibilidad con Lenguaje Integrated Query (LINQ) proporciona validación de la sintaxis en el momento de la compilación para consultas en un modelo conceptual.

Un enfoque de diseño habitual para crear una aplicación o un servicio consiste en dividir la aplicación o el servicio en tres partes:

modelo de dominio: define las entidades y relaciones del sistema que se está modelando.

modelo lógico: relacional normaliza las entidades y relaciones en tablas con restricciones de claves externas.

modelo físico: abarca las capacidades de un motor de datos determinado especificando los detalles del almacenamiento en forma de particiones e índices.

Los administradores de bases de datos refinan el modelo físico para mejorar el rendimiento, pero los programadores que escriben el código de la aplicación principalmente se limitan a trabajar con el modelo lógico escribiendo consultas SQL y llamando a procedimientos almacenados. Los modelos de dominio se suelen usar como una herramienta para capturar y comunicar los requisitos de una aplicación, con frecuencia como diagramas inertes que se ven y se explican en las primeras etapas de un proyecto, y a continuación se abandonan. Muchos equipos de desarrolladores omiten la creación de un modelo conceptual y comienzan especificando las tablas, columnas y claves en una base de datos relacional.

Entity Framework da vida a los modelos conceptuales permitiendo a los programadores consultar las entidades y relaciones en el modelo de dominio (denominado modelo conceptual en Entity Framework) al tiempo que se basan para traducir esas operaciones en los comandos específicos del origen de datos. Esto libera a las aplicaciones de las

Page 4: Entity Framework y Cluster en Mysql

dependencias codificadas de forma rígida en un origen de datos determinado. El modelo conceptual, el modelo de almacenamiento y las asignaciones entre los dos se expresan en esquemas basados en XML y se definen en archivos que tienen extensiones de nombre correspondientes:

El lenguaje de definición de esquemas conceptuales (CSDL) define el modelo conceptual. CSDL es la implementación de Entity Framework del Entity Data Model. La extensión de archivo es .csdl.

El lenguaje de definición de esquemas de almacenamiento (SSDL) define el modelo de almacenamiento, que también se denomina modelo lógico. La extensión de archivo es .ssdl.

El lenguaje de especificación de asignaciones (MSL) define las asignaciones entre los modelos conceptuales y de almacenamiento. La extensión de archivo es .msl.

El modelo de almacenamiento y las asignaciones pueden cambiar según sea necesario sin requerir cambios en el modelo conceptual, las clases de datos o el código de la aplicación. Dado que los modelos de almacenamiento son específicos del proveedor, puede trabajar con un modelo conceptual coherente a través de varios orígenes de datos.

Entity Framework utiliza estos modelos y archivos de asignación para transformar las operaciones de creación, lectura, actualización y eliminación de las entidades y relaciones del modelo conceptual en las operaciones equivalentes en el origen de datos. Entity Framework incluso permite asignar las entidades del modelo conceptual a los procedimientos almacenados en el origen de datos.

Asignar objetos a datos

La programación orientada a objetos supone un desafío al interactuar con sistemas de almacenamiento de datos. Aunque la organización de clases suele reflejar la organización de las tablas de bases de datos relacionales, el ajuste no es perfecto. Varias tablas normalizadas suelen corresponder a una sola clase y las relaciones entre las clases se representan a menudo de forma diferente a las relaciones entre tablas. Por ejemplo, para representar el cliente de un pedido de ventas, una clase Order podría utilizar una propiedad que contiene una referencia a una instancia de una clase Customer, mientras que una fila de la tabla Order en una base de datos contiene una columna de clave externa con un valor que corresponde a un valor de clave principal en la tabla Customer (o conjunto de columnas). Una clase Customer podría tener una propiedad denominada Orders que contuviera una colección de instancias de la clase Order, mientras que la tabla Customer en una base de datos no tiene ninguna columna comparable.Entity Framework proporciona a los desarrolladores de software la flexibilidad para representar las relaciones de esta manera, o para modelar más estrechamente las relaciones tal como se representan en la base de datos

Las soluciones existentes han intentado cubrir este hueco, que se suele denominar "desigualdad de impedancia", asignando únicamente clases y propiedades orientadas a

Page 5: Entity Framework y Cluster en Mysql

objetos a las tablas y columnas relacionales. En lugar de seguir este enfoque tradicional, Entity Framework asigna las tablas relacionales, columnas y restricciones FOREIGN KEY de los modelos lógicos a las entidades y relaciones de los modelos conceptuales. Esto permite una mayor flexibilidad al definir los objetos y optimizar el modelo lógico. Las herramientas de Entity Data Model generan clases de datos extensibles según el modelo conceptual. Se trata de clases parciales que se pueden extender con miembros adicionales que el programador agrega. De forma predeterminada, las clases que se generan para un modelo conceptual determinado derivan de las clases base que proporcionan servicios para materializar las entidades como objetos y para realizar un seguimiento de los cambios y guardarlos. Los desarrolladores pueden utilizar estas clases para trabajar con las entidades y relaciones como objetos relacionados mediante asociaciones. Los desarrolladores también pueden personalizar las clases que se generan para un modelo conceptual. Para obtener más información,

Obtener acceso a los datos de entidad y cambiarlos

Como algo más que otra solución de asignación objeto-relacional, Entity Framework trata fundamentalmente de permitir que las aplicaciones obtengan acceso y cambien los datos que están representados como entidades y relaciones en el modelo conceptual. Entity Framework usa la información de los archivos del modelo y de asignación para traducir las consultas de objeto con los tipos de entidad que se representan en el modelo conceptual en consultas específicas del origen de datos. Los resultados de la consulta se materializan en objetos que Entity Framework administra. Entity Framework proporciona las maneras siguientes de consultar un modelo conceptual y devolver objetos:

LINQ to Entities. Proporciona compatibilidad con Language-Integrated Query (LINQ) para consultar los tipos de entidad que se definen en un modelo conceptual. Para obtener más información, vea LINQ to Entities.

Entity SQL . Un dialecto de SQL, independiente del almacenamiento, que trabaja directamente con entidades del modelo conceptual y que admite conceptos de Entity Data Model. Entity SQL se utiliza tanto con consultas de objeto como con consultas que se ejecutan utilizando el proveedor EntityClient. Para obtener más información, vea Información.

Métodos del generador de consultas Estos métodos permiten construir consultas de Entity SQL utilizando métodos de consulta del estilo de LINQ. .

El Entity Framework incluye el proveedor de datos de EntityClient. Este proveedor administra las conexiones, traduce las consultas de entidad en consultas específicas del origen de datos y devuelve un lector de datos que Entity Framework usa para materializar los datos de la entidad en los objetos. Cuando no se requiere la materialización de los objetos, el proveedor de EntityClient también se puede utilizar como un proveedor de datos ADO.NET estándar habilitando las aplicaciones para ejecutar consultas Entity SQL y usar el lector de datos de solo lectura devuelto

Page 6: Entity Framework y Cluster en Mysql

El diagrama muestra la arquitectura de Entity Framework para el acceso a datos.

Las herramientas de Entity Data Model pueden generar una clase derivada de ObjectContext que representa el contenedor de entidades definido en el modelo conceptual. Este contexto del objeto proporciona los medios para realizar el seguimiento de los cambios y administrar las identidades, la simultaneidad y las relaciones. Esta clase también expone un método SaveChanges que escribe las inserciones, actualizaciones y eliminaciones en el origen de datos. Al igual que las consultas, estas modificaciones son realizadas bien por los comandos que el sistema genera automáticamente o bien por los procedimientos almacenados que el programador especifica.

Consideraciones generales de seguridad

Las consideraciones de seguridad siguientes se aplican a todas las aplicaciones que utilizan Entity Framework.

Usar solo proveedores de orígenes de datos de confianza.

Para comunicarse con el origen de datos, un proveedor debe hacer lo siguiente:

Recibir la cadena de conexión de Entity Framework . Traducir el árbol de comandos al lenguaje de consultas nativo del origen de datos. Ensamblar y devolver los conjuntos de resultados.

Durante la operación de inicio de sesión, la información que se basa en la contraseña del usuario se pasa al servidor a través de las bibliotecas de red del origen de datos subyacente. Un proveedor malintencionado puede robar las credenciales del usuario, generar consultas malintencionadas o alterar el conjunto de resultados.

Cifrar la conexión para proteger los datos confidenciales.

Entity Framework no administra el cifrado de datos directamente. Si los usuarios tienen acceso a los datos a través de una red pública, la aplicación debería establecer una

Page 7: Entity Framework y Cluster en Mysql

conexión cifrada al origen de datos para aumentar la seguridad. Para obtener más información, consulte la documentación relacionada con la seguridad correspondiente al origen de datos. Para un origen de datos de SQL Server, vea Cifrar las conexiones a SQL Server.

Proteger la cadena de conexión.

La protección del acceso al origen de datos es uno de los objetivos más importantes a la hora de proteger una aplicación. Una cadena de conexión presenta una vulnerabilidad potencial si no se protege o si se construye incorrectamente. Al almacenar la información de conexión en texto sin formato o conservarla en la memoria, se pone en riesgo todo el sistema. A continuación se enumeran métodos recomendados para proteger las cadenas de conexión:

Utilice la autenticación de Windows con un origen de datos de SQL Server. Al utilizar la autenticación de Windows para conectarse a un origen de datos de SQL Server, la cadena de conexión no contiene información de contraseñas ni del inicio de sesión.

Cifre las secciones del archivo de configuración mediante una configuración protegida. ASP.NET incluye una característica denominada configuración protegida, que permite cifrar la información confidencial en un archivo de configuración. Si bien se ha diseñado principalmente para ASP.NET, la configuración protegida también puede usarse para cifrar secciones de los archivos de configuración en aplicaciones Windows

Para consultar una descripción detallada de las posibilidades de la nueva configuración protegida, vea Encrypting Configuration Information Using Protected Configuration.

Almacene las cadenas de conexión en archivos de configuración protegidos. Nunca debería incrustar las cadenas de conexión en el código fuente. Las cadenas de conexión también se pueden almacenar en archivos de configuración, lo que elimina la necesidad de incrustarlas en el código de la aplicación. De forma predeterminada, el Asistente para Entity Data Model almacena las cadenas de conexión en el archivo de configuración de la aplicación. Debe proteger este archivo para evitar el acceso no autorizado.

Utilice generadores de cadenas de conexión al crear dinámicamente las conexiones. Si debe construir las cadenas de conexión en tiempo de ejecución, utilice la clase EntityConnectionStringBuilder. Esta clase de generador de cadenas ayuda a evitar los ataques de inyección en las cadenas de conexión validando y anulando la información de entrada no válida. Para obtener más información, vea Cómo generar una cadena de conexión EntityConnection (Entity Framework). Use igualmente la clase de generador de cadenas adecuada para construir la cadena de conexión a un origen de datos que forme parte de la cadena de conexión de Entity Framework

Page 8: Entity Framework y Cluster en Mysql

HOW TO CLUSTER MYSQL

El término Clúster en Bases de Datos significa procesamiento paralelo, es decir como clientes nos conectamos a un servidor qué física y lógicamente está distribuido en varias PC’s , aprovechando el performance de todas en conjunto como una sola máquina, esto es posible ya que el procesamiento se distribuye teniendo la administración, las bases de datos y el servicio en nodos diferentes.

Hay que distinguir ciertos conceptos, en muchos contextos, el término "nodo" se usa para indicar una máquina, pero cuando se discute MySQL Clúster significa un proceso. Puede haber cualquier número de nodos en una máquina, para los que se usa el término máquina clúster.

MySQL Clúster es una tecnología que permite clustering de bases de datos en memoria en un entorno de no compartición. La arquitectura de no compartición permite que el sistema funcione con hardware barato, y sin ningún requerimiento especial de hardware o software. Tampoco tienen ningún punto único de fallo porque cada componente tiene su propia memoria y disco.

Hay tres tipos de nodos clúster, y en una configuración MySQL Clúster mínima, al menos habrá tres nodos, uno de cada tipo:

El nodo de administración (MGM) : El rol de este tipo de nodo es administrar los otros nodos dentro del MySQL Clúster, tal como proporcionar datos de configuración, iniciar y parar nodos, ejecutar copias de seguridad, y así. Como este tipo de nodo administra la configuración de otros nodos, un nodo de este tipo debe arrancarse primero, antes de cualquier otro nodo. Un nodo MGM se arranca con el comando ndb_mgmd.

El nodo de datos: Este es el tipo de nodo que almacena los datos del clúster. Hay tantos nodos de datos como réplicas, multiplicado por el número de fragmentos. Por ejemplo, con dos réplicas, cada uno teniendo dos fragmentos, necesita cuatro nodos de datos. No es necesario tener más de una réplica. Un nodo de datos se arranca con el comando ndbd.

Page 9: Entity Framework y Cluster en Mysql

El nodo SQL: Este es el nodo que accede a los datos del clúster. En el caso de MySQL Clúster, un nodo cliente es un servidor MySQL tradicional que usa el motor NDB Clúster . Un nodo SQL típicamente se arranca con el comando mysqld --ndbcluster o símplemente usando mysqld con ndbcluster añadido a my.cnf.

La configuración de un clúster implica configurar cada nodo individual en el clúster e inicializar los enlaces de comunicación individual entre los nodos. MySQL Clúster está diseñado con la intención que los nodos de almacenamiento son homogéneos en términos de procesador, espacio de memoria, y ancho de banda. Además, para proporcionar un punto único de configuración, todos los datos de configuración del clúster entero se guardan en un único fichero de configuración.

El servidor de administración (nodo MGM) administra el fichero de configuración del clúster y el log. Cada nodo en el clúster recibe los datos de configuración del servidor de administración, y necesita una forma de determinar dónde reside el servidor de administración. Cuando ocurren eventos interesantes en los nodos de datos, los nodos transfieren información acerca de estos eventos al servidor de administración, que guarda la información en el log del clúster.

Además, puede haber cualquier número de procesos clientes del clúster o aplicaciones. Hay de dos tipos:

Clientes MySQL estándar: No son diferentes para MySQL Clúster que para cualquier MySQL (no clúster). En otras palabras, MySQL Clúster puede ser accedido para aplicaciones MySQL existentes escritas en PHP, Perl, C, C++, Java, Python, Ruby, y así.

Clientes de administración: Estos clientes conectan al servidor de administración y proporcionan comandos para arrancar y parar nodos, arrancar y parar traceo de mensajes (sólo en versiones de depuración), mostrar versiones y estatus de nodos, arrancar y parar copias de seguridad, y así.

Hardware, software y redes

Una de las ventajas de MySQL Clúster es que puede ejecutarse en hardware normal sin ningún requerimiento especial a parte de grandes cantidades de RAM, debido al hecho que todos los datos se almacenan en memoria Naturalmente, CPUs múltiples y más rápidas mejoran el rendimiento. Los requerimientos de memoria para procesos clúster son relativamente pequeños.

Los requerimientos de software para Clúster son modestos. Los sistemas operativos de las máquinas no requieren ningún modulo no usual, servicios, aplicaciones o configuración extraña para soportar MySQL Clúster. Para Mac OS X o Solaris, la instalación estándar es suficiente. Para Linux, una instalación estándar debe ser todo lo necesario.

Page 10: Entity Framework y Cluster en Mysql

Para una comunicación entre nodos, el clúster soporta red TCP/IP en cualquier topología estándar, y como mínimo se espera una red 100 Mbps Ethernet, más un switch, hub, o router para proporcionar conectividad de red al clúster entero. Recomendamos que MySQL Clúster se ejecute en su subred que no está compartida con máquinas no-clúster por las siguientes razones:

Seguridad: La comunicación entre nodos del clúster no están cifradas. La única forma de proteger transmisiones dentro de un MySQL Clúster es ejecutar su clúster en una red protegida. Si trata de usar MySQL Clúster para aplicaciones Web, el clúster debe residir detrás de un firewall y no en su DMZ (DMZ) o en otro lugar.

Eficiencia: Inicializar un MySQL Clúster en una red privada o protegida permite que el clúster haga uso exclusivo del ancho de banda entre máquinas del clúster. Usar un switch esperado para su MySQL Clúster no sólo ayuda a protegerse de accesos no autorizados a los datos del clúster, también asegura que los nodos del clúster están protegidos de interferencias causadas por transmisiones entre otras máquinas en la red. Para mayor confianza puede usar switches duales y tarjetas duales para eliminar la red como punto único de fallo; varios dispositivos soportan fallos para estos enlaces de comunicación.

Arquitectura de un Clúster.

Page 11: Entity Framework y Cluster en Mysql

INSTALACION Y CONFIGURACION DE CLUSTER

Todos los ordenadores tienen instalado sistema operativo Linux

Instalación de Nodo de Administración: (MGM NODE):

1- Descargar archivo mysql-cluster-gpl-7.2.6-linux2.6-i686.tar 2- Descomprimir archivo 3- Ubicarse en el directorio del archivo recién descompreso 4- Copiar los binarios en la carpeta /usr/local/bin de la siguiente manera:

cp bin/ndb_mgm* /usr/local/bin

5- Ubicarse en el directorio /usr/local/bin 6- Dar permisos de ejecución a los binarios recién copiados:

chmod +x ndb_mgm*

7- Crear en /var/lib/mysql_cluster un archivo llamado config.ini, el cual tiene que lucir de la siguiente manera:

192.168.1.5 192.168.1.9

192.168.1.6 192.168.1.4

Page 12: Entity Framework y Cluster en Mysql

Instalación de Nodos de datos:

1-Agregar un usuario y un grupo llamado mysql al sistema operativo:

#groupadd mysql #useradd -g mysql mysql

2-Descargar y descomprimir archivo archivo mysql-cluster-gpl-7.2.6-linux2.6-i686.tar:

#tar -C /usr/local -xzvf mysql-cluster-gpl-7.2.6-linux2.6-i686.tar 3-Renombrar directorio recién descompreso a mysql para evitar sentencias muy

largas #mv /usr/local/ mysql-cluster-gpl-7.2.6-linux2.6-i686 /usr/local/mysql

Page 13: Entity Framework y Cluster en Mysql

4-Situarse en directorio recién descompreso: #cd /usr/local/mysql

5-Instalar bases de datos del sistema (propias de mysql): #scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql

6-Aplicar permisos al usuario mysql para la ejecución: #cd /usr/local/mysql # chown -R root . # chown -R mysql data # chgrp -R mysql .

7-Crear en el directorio /etc un archivo llamado my.cnf, este archivo es el

encargado de dictar la dirección

Instalación de nodo Mysql

1- Descargar y descomprimir archivo mysql-cluster-gpl-7.2.6-linux2.6-i686.tar

#tar -C /usr/local -xzvf mysql-cluster-gpl-7.2.6-linux2.6-i686.tar

2- Renombrar directorio # mv /usr/local/mysql-cluster-gpl-7.0.15-linux-i686-glibc23.tar.gz /usr/local/mysql

3- Agregar usuario y grupo mysql

# groupadd mysql

Page 14: Entity Framework y Cluster en Mysql

# useradd -g mysql mysql

4- Moverse al directorio recién descompreso y darle permisos al usuario mysql

# cd /usr/local/mysql # chown -R root . # chown -R mysql data # chgrp -R mysql

5- Crear entrada en registro de servicios de Linux para mysql y darle permisos de ejecución # cp support-files/mysql.server /etc/init.d/mysql # chmod +x /etc/init.d/mysql

ARRANCADO DE CLUSTER

El proceso de arranque de un clúster consta de los siguientes pasos:

1- Iniciar nodo de Administración

2- Iniciar nodos de datos:

3- Iniciar nodo Mysql

Page 15: Entity Framework y Cluster en Mysql

4- Verificar si en el nodo de administración aparecen conectados los nodos de datos y mysql Iniciando conexiones con nodos de datos

Nodos de datos conectados

Page 16: Entity Framework y Cluster en Mysql

Nodo Mysql Conectado