Este artículo proviene de un motor de traducción automática.

Interoperabilidad

Compartir tiempo de ejecución de datos por medio de una caché distribuida por la empresa

Iqbal kan

Muchas organizaciones utilizan una combinación de aplicaciones de Microsoft .NET Framework y Java, especialmente medianas a grandes organizaciones que no pueden asignar a una única tecnología por varias razones. A menudo, que emplean las aplicaciones Web, los servicios Web de la arquitectura orientada a servicios (SOA) y otras aplicaciones de servidor que procesan grandes cantidades de transacciones.

Muchas de estas aplicaciones se tienen que compartir datos entre sí en tiempo de ejecución. A menudo, trabaja todos de los datos empresariales comunes que se almacenan en una base de datos. Normalmente se tratan con secuencias continuas de datos (por ejemplo, aplicaciones comerciales financieras), y que necesitan para procesarlo y compartir los resultados con otras aplicaciones, vuelva a todos en tiempo de ejecución.

Aunque la base de datos debe ser el almacén de datos master para su almacenamiento permanente, no es muy apropiada para el uso compartido de datos de tiempo de ejecución. Uno de los motivos es que siempre no excelente rendimiento al leer datos de la base de datos. Además, la base de datos no puede escalar perfectamente de controlar las transacciones, por lo que puede ocasionar un cuello de botella rápidamente y reducir la velocidad de todas las aplicaciones que dependen de él.

Además, no se puede compartir de forma eficaz datos en tiempo real. Uso compartido de datos en tiempo real requiere que, cuando una aplicación actualiza algunos datos, todas las demás aplicaciones interesadas en que se deben informar a datos. De forma similar, algunas aplicaciones puede que se espera para ciertos tipos de datos que se crean y se ponen a disposición, y cuando esto ocurre, se deben notificar inmediatamente.

Estos problemas son comunes, si las aplicaciones que necesitan compartir los datos se basan en .NET Framework, o si algunos son .NET y Java de otros usuarios. De hecho, si las aplicaciones son una combinación de .NET y Java, los problemas se agrava porque no hay ninguna forma automática para estas aplicaciones compartir datos en el nivel de aplicación a aplicación de forma nativa.

La solución: Caché distribuida de empresa

Por suerte, la caché de la empresa que se distribuye puede resolver estos problemas. Este almacén en memoria se extiende por varios servidores, la agrupación de la memoria de los servidores para que la capacidad de almacenamiento de memoria es escalable. Capacidad de la transacción también se convierte en escalable, para los servidores más que agregar, mayor será la carga de transacciones que se puede controlar.

Las cachés de Enterprise que se distribuyen también proporcionan mecanismos de notificación de eventos, lo que permite que las aplicaciones a otra de alerta cuando se hayan actualizado los datos. Por lo tanto, se puede tener un mecanismo de notificación de sucesos asincrónicos en una aplicación genera algunos datos y otros usuarios, es posible que utilice, la creación de un modelo de productor/consumidor o el modelo de publicación/suscripción. Varias aplicaciones suscripción a ciertos tipos de datos y se le notificará cuando se publica.

También hay un mecanismo de read-through/escritura simultánea, lo que significa que la caché de empresa que se distribuyen por sí mismo puede leer datos importantes desde el origen de datos y las aplicaciones. Independientemente de si dichas aplicaciones están Java o. NET, su código es mucho más sencillo porque se leen los datos de la caché de la empresa que se distribuyen. No es necesario para que todo lo que se incorporan de forma de código de acceso a la base de datos. Consulte del 1 de la figura para obtener un ejemplo sencillo de utilizar una caché de la empresa que se distribuye una aplicación de .NET Framework.

Figura 1 de caché distribuida de una aplicación de .NET con una empresa

using System;
...
using Alachisoft.NCache.Web.Caching;

namespace Client
{
  class Program
  {
    static string _sCacheName = "myAppCache";
    static Cache _sCache = NCache.InitializeCache(_sCacheName);

    static void Main(string[] args)
    {
      string employeeId = "1000";
      string key = "Employee:EmployeeId:" + employeeId;
            
      // First check the cache for this employee
      Employee emp = _sCache.Get(key);

      // If cache doesn't have it then make database call
      if (emp == null)
      {
        emp = LoadEmployeeFromDb(employeeId);

        // Now add it to the cache for next time
        _sCache.Insert(key, emp);
      }
    }
  }
}

Por otra parte, una caché de la empresa distribuido puede sincronizar con los cambios de datos en la base de datos realizados por otras aplicaciones de terceros. Tiene una conexión con la base de datos, lo que permite que la base de datos notificar a los que cada vez que un determinado tipo de datos de los cambios en la base de datos. La figura 2 ilustra cómo las aplicaciones de .NET y Java pueden compartir datos entre sí a través de una caché de la empresa que se distribuyen en tiempo de ejecución.

image: .NET and Java Apps Sharing Data Through a Distributed Cache

La figura 2 de .NET y aplicaciones de Java para compartir datos a través de una caché distribuida

.NET y los datos de uso compartido de aplicaciones de Java

Con una empresa distribuye múltiples aplicaciones, caché, .NET y Java, puede tener acceso a los mismos datos de caché y el recurso compartido a través de él. Si fuera sólo las aplicaciones de .NET (o sólo las aplicaciones de Java) para compartir datos a través de una caché distribuida, que se podrían almacenar los objetos en un formato binario nativo y serializar/deserializarlos. Pero, cuando tratan de ambos tipos de compartir datos entre sí, tienen un formato de datos portátil para almacenar los datos en la caché distribuida.

Esto es debido a que cuando una aplicación .NET almacena un objeto en la caché distribuida, realmente transforma el objeto en un documento XML y almacena ese código XML. En el otro lado, cuando una aplicación Java lee los datos de la caché distribuida, transforma el XML en un objeto de Java. De hecho, el código XML se utiliza como un mecanismo de almacenamiento de datos portátiles como un objeto de .NET se transforma en XML y, a continuación, en el XML en Java y viceversa.

Un número de bibliotecas de código fuente abierto puede ayudarle a transformar los objetos de .NET o Java en XML y, a continuación, de nuevo en el formato de objeto. Puede desarrollar su propio, por supuesto, pero se recomienda que elija una biblioteca de código abierto. Yo personalmente como objetos en XML (WOX) del Web, desarrollado por Jaimez de Carlos y Simon Lucas (woxserializer.sourceforge.net ). Ejemplos de transformación de Java a .NET en su sitio Web va a utilizar en este artículo (con su permiso). La figura 3 muestra las clases de estudiante y curso definidas en Java y C#.

La figura 3 de estudiante y curso de las clases de Java y C#

// Java classes
public class Student
{
  private String name;
  private int registrationNumber;
  private Course[] courses;
}
public class Course
{
  private int code;
  private String name;
  private int term;
}

// ***************************************************
// .NET classes in C#
public class Student
{
  private String name;
  private Int32 registrationNumber;
  private Course[] courses;
}
public class Course
{
  private Int32 code;
  private String name;
  private Int32 term;
}

Si las aplicaciones .NET y Java se utilizan para almacenar estos objetos de estudiante y curso en una caché de la empresa que se distribuyen, a continuación, podemos utilizar la biblioteca WOX para transformarlos en XML. A continuación, cuando una aplicación en la que desea leer estos objetos de la caché de la empresa que se distribuyen, lee la biblioteca WOX para transformar el XML en el formato de objeto de Java o. NET. La figura 4 muestra las clases del alumno y en curso que transforma en XML.

La figura 4 de Java y las clases de .NET transformadas en XML

<object type="Student" id="0">
  <field name="name" type="string" value="Carlos Jaimez"/>
  <field name="registrationNumber" type="int" value="76453"/>
  <field name="courses">
    <object type="array" elementType="Course" length="3" id="1">
      <object type="Course" id="2">
        <field name="code" type="int" value="6756"/>
        <field name="name" type="string" 
          value="XML and Related Technologies"/>
        <field name="term" type="int" value="2"/>
      </object>
      <object type="Course" id="3">
        <field name="code" type="int" value="9865"/>
        <field name="name" type="string" 
          value="Object Oriented Programming"/>
        <field name="term" type="int" value="2"/>
      </object>
      <object type="Course" id="4">
        <field name="code" type="int" value="1134"/>
        <field name="name" type="string" value="E-Commerce Programming"/>
        <field name="term" type="int" value="3"/>
      </object>
    </object>
  </field>
</object>

Dentro de la aplicación, se debe llamar a WOX desde la capa de almacenamiento en caché o la capa de acceso a datos.

Notificaciones de eventos basado en el elemento

Las notificaciones de eventos son un mecanismo muy eficaz que permite que varias aplicaciones (.NET y Java) para coordinar los datos de uso compartido de forma asincrónica. Este mecanismo contribuye a evitar el costoso sondeo de la base de datos que las aplicaciones tendría que hacer si no dispone de una instalación de este tipo. Se comparte entre las aplicaciones de .NET y Java, por lo que pueden notificar a otros sin problemas.

Un tipo común de notificación de eventos está basado en el elemento de notificación. En este tipo, las aplicaciones registran interés en diversas claves de elemento en caché (que puede o no exista en la memoria caché aún) y le notifica por separado cada vez que dicho elemento se agrega, actualiza o quita de la caché distribuida por todo el mundo por cualquier motivo. Por ejemplo, incluso si se quita un elemento debido a la caducidad o su desalojo, se desencadena la notificación de eventos de eliminación de elemento.

Las aplicaciones de .NET y Java pueden registrar interés para los mismos elementos almacenados en caché y recibir notificaciones sobre ellos. La notificación normalmente incluye el afectado elemento almacenado en caché, que, como vimos en la sección anterior, se transforma en .NET o Java, en función del tipo de aplicación.

Generadas por la aplicación notificaciones de eventos personalizados

Una caché de la empresa que se distribuyen también es una plataforma de propagación de eventos muy eficaz para aplicaciones .NET y Java. Todas las aplicaciones que se conecta a una caché de la empresa que se distribuye pueden desencadenar eventos personalizados en la caché y, a continuación, recibirán una notificación mediante la caché, independientemente de que esas aplicaciones se encuentran todas las demás aplicaciones que se han registrado interés en los eventos personalizados. Esto por sí mismo proporciona un mecanismo de propagación de eventos de eficaces y plataforma independiente del lenguaje en una caché de la empresa que se distribuyen.

Esta característica permite que las aplicaciones a colaborar en los datos de uso compartido de forma asincrónica. Por ejemplo, si una aplicación coloca datos en la caché distribuida, puede, a continuación, desencadena un evento personalizado para que otras aplicaciones que se supone que la utilizan o procesar estos datos más se le notifica inmediatamente.

Notificaciones de eventos continuo basado en consultas

Notificación de eventos en el elemento es eficaz, pero requiere que la aplicación para conocer la clave del elemento almacenado en memoria caché. Si combina la notificación de eventos en el elemento sí las características de agrupación normalmente siempre en una caché de la empresa que se distribuyen (por ejemplo, etiquetas, grupos y subgrupos y más), se puede controlar prácticamente la mayoría de los casos donde las aplicaciones deben recibir una notificación basan en lo que ocurre con varios elementos almacenados en caché.

Sin embargo, hay dos limitaciones con los eventos basados en el elemento. En primer lugar, como se indica, la aplicación debe conocer todas las claves de los elementos almacenados en caché sobre el que desea recibir una notificación. En segundo lugar, se le notificará independientemente de qué se modifica estos elementos. La aplicación no puede crear criterios más detallados, para recibir la notificación sólo cuando se realizan cambios específicos a los datos.

Para controlar estos casos, una caché de la empresa distribuida proporciona una consulta continua, una consulta de tipo SQL que capture las reglas de negocio de la aplicación acerca de los datos en el que está interesado. Una consulta continua no es una consulta de búsqueda, sino más bien un “ criterios ” se mantiene la caché de la empresa distribuye;cada vez que algo se agrega o actualiza en la caché distribuida, la operación se compara con los criterios de consulta continua. Si coinciden con los criterios, se desencadena un evento y se notifica a la aplicación que emite los criterios de consulta continua.

Consulta continua permite que las aplicaciones inspeccionar los cambios más complejos y sofisticados y recibir una notificación sólo cuando se producen dichos cambios.

Read-Through y de escritura a través de controladores

En muchas ocasiones, aplicaciones intentan leer datos que no existen en la empresa que se distribuyen en caché y deben leerse desde una base de datos. En estas situaciones, las aplicaciones se podrían ir directamente a la base de datos y leer estos datos, pero que significa que todas las aplicaciones acaban teniendo el mismo código de acceso a datos repetido (especialmente en .NET y Java). O bien, solicite a la caché de la empresa distribuida para leer los datos de la base de datos para ellos cuando lo necesiten.

La función read-through/escritura a través permite que una caché de la empresa que se distribuyen leer datos directamente desde el origen de datos. Las aplicaciones pueden simplificar su código, por lo que no tienen que ir a la base de datos. Sólo puede pedir a la caché de la empresa que se distribuyen para darles a los datos, y si la caché no tiene los datos, se vaya y leerlo desde el origen de datos. La figura 5 muestra la lectura y escritura a través de la opción en una empresa distribuyen la caché.

image: How Read-Through/Write-Through Is Used

La figura 5 de cómo se utiliza Read-Through/Write-Through

Es necesario mencionar un punto de precaución aquí. Aunque hay gran ventaja de disponer de la caché distribuida leer los datos de la base de datos para, muchos tipos de datos se leen mejor directamente desde la base de datos de la aplicación. Si estás leyendo colecciones de datos que implican combinaciones complejas, conviene leer usted mismo y, a continuación, vuelva a colocarlo en la caché distribuida.

Sincronización de la base de datos

Debido a una gran cantidad de datos es que se va a colocar en la caché de la empresa distribuye, sólo tiene sentido para asegurarse de que los datos se mantienen sincronizados con el origen de datos maestros, suele ser una base de datos relacional. Una caché de la empresa distribuida proporciona una característica de este tipo.

Esta característica de sincronización de la base de datos permite que las aplicaciones especificar una relación (una dependencia) entre los elementos almacenados en caché y las filas en las tablas de base de datos. Cada vez que los datos de la base de datos, el servidor de base de datos desencadena un evento de. NET, si es una base de datos de SQL Server 2005 y 2008 y notifica a la caché de empresa que se distribuyen de este cambio. Para otras bases de datos que no admiten los eventos. NET, una caché de la empresa que se distribuyen también proporciona sondeo configurable, donde puede sondear la base de datos (por ejemplo, una vez cada 15 segundos) y sincronizar si los datos han cambiado no existe.

A continuación, la caché distribuida quita esos datos de la caché o lee una copia nueva del mismo, si ha configurado la característica de lectura. La figura 6 muestra cómo se sincroniza una caché de la empresa que se distribuye con SQL Server.

image: Database Synchronization in Distributed Cache

La figura 6 de sincronización de la base de datos en memoria caché distribuida

Alta disponibilidad: Cluster Dynamic autorreparación

Se utiliza una caché de la empresa que se distribuye como una plataforma entre múltiples aplicaciones (.NET para. NET, Java y Java para Java. NET) de uso compartido de datos en tiempo de ejecución. En muchos casos, estas aplicaciones son críticas para su negocio.

Esto significa que una caché de la empresa distribuido debe ser altamente disponible, ya que muchas aplicaciones de misión crítica dependen de él. La caché de la empresa distribuida no se puede ir hacia abajo o deje de funcionar y no debe que prácticamente ningún tiempo de inactividad de mantenimiento u otras operaciones normales.

Una caché de la empresa que se distribuyen consigue la alta disponibilidad al disponer de un clúster de recuperación automática y dinámico de los servidores de caché. Autorrecuperación aquí significa que el clúster es compatible con todos sus miembros y se ajusta dinámicamente si se abandona o se une a un miembro. También garantiza que los datos se replican de confiabilidad, y si se deja un miembro del clúster, sus datos de copia de seguridad está disponibles para las aplicaciones automáticamente. Todo esto se debe realizar de forma rápida y sin provocar interrupciones en las aplicaciones que utilicen la empresa distribuye la caché.

Escalabilidad: Caché de la partición y replicación

Muchas aplicaciones que utilizan una caché de la empresa distribuida son aplicaciones de alta la transacción. Por lo tanto, la carga en el clúster de la caché puede crecer con rapidez;Sin embargo, si el tiempo de respuesta de la empresa distribuye caídas de caché, pierden su valor. De hecho, se trata de un área en una caché de la empresa distribuida es superior de las bases de datos relacionales;Puede controlar muchas más transacciones por segundo debido a que pueden seguir agregando más servidores al clúster dinámico. Pero no se puede lograr escalabilidad a menos que se almacenan de forma inteligente datos en la caché distribuida. Esto se consigue a través de la partición de datos, con cada partición que se replican por confiabilidad.

Gracias a la caché de la empresa distribuido, se le permita aprovechar las ventajas de una topología con particiones para la escalabilidad. La figura 7 muestra una topología de replicación de particiones.

image: Partitioned-Replication Topology for Reliable Scalability

La figura 7 de topología de replicación con particiones para la escalabilidad confiable

Una caché de la empresa que se distribuye automáticamente crea particiones en todos los datos que se almacena en la caché. Cada partición se almacena en un servidor diferente, una copia de seguridad para esta partición se crea y almacena en otro servidor. Esto garantiza que si un servidor deja de funcionar, no se pierdan datos.

Por lo tanto, en resumen, la partición permite seguir agregando más servidores de caché para el clúster dinámico para aumentar la capacidad de almacenamiento, y también aumenta la capacidad de transacciones por segundo cuando se agregan más servidores. Y la replicación garantiza la fiabilidad de los datos porque no hay pérdida de datos se produce si un servidor deja de funcionar.

Capacidad y colaboración

Ajustar hacia arriba, una caché de la empresa distribuido es una solución ideal para las aplicaciones de .NET y Java de alta la transacción compartir datos con otras aplicaciones. Se asegura de que el uso compartido de datos se realiza en tiempo real debido de los mecanismos de propagación de eventos eficaces, incluida la notificación de eventos en el elemento, las notificaciones de eventos personalizados generados por la aplicación y las notificaciones de eventos basado en consultas de continua.

Una caché de la empresa distribuido es extremadamente rápida y escalable por diseño. Es rápido porque está en memoria. Es escalable porque puede aumentar en varios servidores. Se crea particiones en el almacenamiento real y almacena cada partición en un servidor diferente, y almacena una copia de seguridad de dicha partición en otro servidor, como un disco RAID.

Las aplicaciones actuales deben ser mucho más eficaces que en el pasado. Que se necesitan para trabajar de forma más colaboración para compartir datos e interactuar entre sí. Deben ser sumamente rápido mientras se reúne los requisitos de carga extremadamente elevada para evitar poner en riesgo de rendimiento y escalabilidad. Por otra parte, que deben realizar a través de plataformas diferentes para que las aplicaciones de .NET pueden trabajar de forma transparente y eficaz con las aplicaciones de Java. Una caché de la empresa que se distribuyen ayuda a cumplir con todos estos objetivos.

Iqbal Khan es el departamento de formación de tecnología y presidente de Alachisoft (alachisoft.com), de ), que proporciona una caché distribuida .NET para aumentar el rendimiento y escalabilidad de las aplicaciones empresariales, NCache. Khan recibió un grado de ’s master en informática por la Universidad de Indiana en 1990.Puede ponerse en iqbal@alachisoft.comde .

Gracias al siguiente experto técnico para este artículo: Stefan Schackow