2009-04-15 12 views
6

Soy un novato total en el mundo de SOA. Como tal, estoy buscando algunos "frameworks/tecnologías SOA" y tratando de entender cómo utilizarlos para construir un sitio web altamente escalable (clase de Facebook).Práctica SOA para un novato

hay varios "dolores" Estoy tratando de resolver aquí:

(dependencias + gestión, Pub/Sub)
  1. Compuestabilidad
  2. independencia de lenguaje de los servicios
  3. Escalabilidad & Rendimiento
  4. Alta disponibilidad

Analicé algunas tecnologías que responden a un subconjunto de los criterios anteriores:

  1. Thrift - multiplataforma plataforma de Facebook RPC
  2. WCF - soporta SOAP, REST JSON &, por lo que puede considerarse un lenguaje interoperables. Genera archivos WSDL que se pueden usar para generar proxies Java.
  3. Microsoft DSS - solo lo incluí en mi encuesta, pero no parece relevante, ya que es altamente impulsado por el estado y específico de .NET.
  4. Servicios Web

Ahora, entiendo cómo consigo algunos aspectos de componibilidad e independencia de lenguaje de lo anterior. Pero, no he encontrado mucha información concreta (no zumbido) sobre cómo usar las herramientas anteriores/otras para escalabilidad y alta disponibilidad. Así que finalmente llego a mi pregunta:

¿Cómo se pueden aprovechar las tecnologías SOA para resolver los problemas que he definido anteriormente? ¿Dónde puedo encontrar guías técnicas para eso? Estoy buscando algo más que solo diagramas de sistema, sino bibliotecas reales, ejemplos de código, APIS ...

+0

WCF también admiten la creación de lo que se llama servicios RESTful, no solo SOAP. Estos son servicios basados ​​en URI que se pueden llamar desde cualquier otro idioma, y ​​envían representaciones XML de datos en formato AtomPub. Muy interoperable. –

+0

@ ripper234: Minor nit - WCF _is_ Web Services, además de mucho más. Es el reemplazo de los servicios web ASMX. –

Respuesta

0

Consulte el proyecto Mule que agrupa la pila de servicios CXF y también el paquete Mule REST que proporciona alternativas RESTful. Creo que verá que soluciona todos sus problemas y hay muchos ejemplos en la documentación, así como en la distribución.

6

Creo que la pregunta tiene más que ver con los conceptos involucrados que con las herramientas. Respuestas a los elementos:

  1. Comprender e internalizar bounded context. Mantener separadas las piezas no relacionadas es importante para obtener una reutilización real en diferentes servicios. Las tecnologías relacionadas no lo ayudarán en esto, es usted quien separa la aplicación en contextos apropiados, que puede reutilizar adecuadamente para diferentes servicios.
  2. Punto final claro para la comunicación basada en protocolos conocidos que permite implementar diferentes piezas con diferentes tecnologías
  3. Hacer que las operaciones fluyan como acciones independientes basadas en diferentes protocolos, le brinda muchos lugares donde puede agregar niveles.Es un subproceso particular del proceso general que usa muchos recursos y el servidor no puede soportarlo más, simplemente muévase a un servidor por separado. La carga siguió creciendo, y ese servidor no lo está tomando más, agrega un servidor adicional y un balance de carga. También tiene más oportunidad de usar el almacenamiento en caché y la agrupación de conexiones.
  4. Tiene un subproceso crítico que debe estar disponible todo el tiempo, agregue un servidor para que pueda realizar una conmutación por error. Tenga un proceso general que debe estar "disponible" todo el tiempo, use las colas para las piezas que puedan procesarse más adelante.

¿Realmente necesita soportar ese tipo de carga? Establezca objetivos de rendimiento/carga/interoperabilidad apropiados que se relacionen con el escenario específico. Si realmente necesita soportar ese tipo de carga, le recomiendo que contrate a alguien que la haya solucionado.

Si es algo para una carga que eventualmente podría ser, identifique los contextos delimitados y diseñe la interacción entre aquellos con una mentalidad SOA. Mantener el código limpio es todo lo que tiene que hacer para el resto, use TDD, acoplamiento flexible, pruebas de integración enfocadas, etc. en su base de códigos. Con un buen código, si luego necesita separar piezas del sistema, será mucho más fácil.

0

Puedo recomendar el libro: Enterprise Service Oriented Architectures publicado por Springer Verlag.

0

Todos los consejos aquí son buenos y buenos, pero no se preocupe hasta que realmente lo necesite.

Concéntrese en la creación de una aplicación útil y funcional que les guste a la gente. Cuando comiences a tener problemas, comienza a manejar los cuellos de botella.

Nunca podrá prever todas las formas en que fallará una aplicación, así que ¿cómo puede saber si [[insertar tecnología aquí]] es su respuesta?