Date post: | 16-Jan-2017 |
Category: |
Technology |
Upload: | cjava-peru |
View: | 89 times |
Download: | 2 times |
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. | 1
Principios básicos de las arquitecturasmultitenant en WebLogicChanda PatelTim QuinnProduct Development, OracleMarzo/abril de 2016
Aguarde un momento por favor. La sesión comenzaráen breve en el horario señalado en el programa. Muchas gracias.
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Temario• Conceptos clave, casos de uso• Grupos de recursos, plantillas de grupos de recursos• Targeting (determinación de destinos), destinos virtuales• Ciclo de vida de particiones• Demo
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Conceptos clave• Funcionalidad multitenant (MT)
Capacidad de admitir diversos tenants en una única instancia de software
• ParticiónUna porción virtual de un dominio de WLS. Las particiones son los módulos básicos de la funcionalidad MT en WLS
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Conceptos clave
• Microcontenedor de WLS• Cada una se configura y se administra por separado
– Configuración de seguridad– Puesta en marcha y apagado– Implementación de aplicaciones, recursos– Targeting– Administradores
• ... pero pueden compartir servidores administrados
Partición
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Conceptos clave
TrafficDirector
Servidor WebLogic
Partición 1
Destino virtual
App App Serv.JMS
Origen de
datos
Interfaz JNDI
Coherencia
Servicio 1
Servicio 2
… Servicio N
Partición 1
Base de datos
Partición 2
Destino virtual
App App Serv.JMS
Origen de
datos
Interfaz JNDIPartición 2
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Caso de uso de PaaS• PaaS (Consolidación)
–Consolidación de diversos dominios de WLS en numerosas particionesde un dominio de WLS
–Cada dominio antiguo se convierte en tenant del nuevo dominio
• Ejemplo con departamentos:–Partición de RRHH (HR)–Partición de Finanzas
• Ejemplo con desarrolladores–Partición de John Smith–Partición de Lisa Johnson
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Caso de uso de SaaS• SaaS
–Todos los tenants ejecutan el mismo software–El software se define en el dominio, pero se implementa por partición
• Ejemplo• Partición de Atención al cliente de Coca-Cola• Partición de Atención al cliente de Pepsi
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
• Grupo de recursos (RG)–Conjunto de recursos relacionados e implementaciones de aplicaciones–Cada RG que pertenece a un dominio o partición–Unidad de targeting
• Plantilla de grupo de recursos (RGT)–Agrupaciones de recursos reutilizadas, implementaciones de
aplicaciones–Un grupo de recursos puede referirse a una RGT
Reseña
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
• SaaS (software como servicio)–“Software” = aplicaciones + recursos definidos en RGT–Las particiones contienen grupos RG que se refieren a plantillas RGT–Cada partición puede invalidar atributos de recursos de manera
diferente
• PaaS (plataforma como servicio)–“Plataforma” = WLS expuesto como partición–Los grupos RG (no RGT) incluyen implementaciones de recursos y
aplicaciones–Partición ≈ "dominio virtualizado"
SaaS vs. PaaS
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
• ///Procedimiento similar a la creación de recursos, implementación de aplicaciones en un dominio en 12.1.3, excepto:–SaaS:
• Creación de recurso en plantilla de grupo de recursos• Implementación de aplicaciones en plantilla de grupo de recursos
–PaaS:• Creación de recurso en grupo de recursos• Implementación de aplicaciones en grupo de recursos
Creación de recursos e implementación de aplicaciones
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
startEdit()template = domain.createResourceGroupTemplate('T1')
mailSession=template.createMailSession('mailSess1')mailSession.setJNDIName('mail/sess1')props=Properties()props.setProperty('mail.user', 'joe')props.setProperty('mail.host','mail.mycompany')mailSession.setProperties(props)activate()
SaaS: Creación de recursos
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
startEdit()progress=deploy(appName='appName',path='pathToAppArchive',resourceGroupTemplate=template.getName(),deploymentOrder=10,securityModel='DDOnly')
activate()while not (progress.isCompleted() or progress.isFailed()) :
os.time.sleep(2)progress.printStatus()
SaaS: Implementación de aplicaciones
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
startEdit()newPart = domain.createPartition('pepsi')
# set up partition targeting – see later sections
rg = newPart.createResourceGroup('rg-1')rg.setUseDefaultTarget(true)rg.setResourceGroupTemplate(template)activate()
startPartitionWait(newPart)
SaaS: Creación de partición, grupo de recursos
Procedimiento similar para otras particiones
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
startEdit()hrPart = domain.createPartition('HR')
# set up partition targeting – see later sections
rg = hrPart.createResourceGroup('rg-1')rg.setUseDefaultTarget(true)
PaaS: Creación de partición, grupo de recursos
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
mailSession=rg.createMailSession('mailSess1')mailSession.setJNDIName('mail/sess1')props=Properties()props.setProperty('mail.user', 'joe')props.setProperty('mail.host','mail.mycompany')mailSession.setProperties(props)activate()
PaaS: Creación de recursos
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
startEdit()progress=deploy(appName='appName',path='pathToAppArchive',
partition='HR',resourceGroup='rg-1',deploymentOrder=10,securityModel='DDOnly')
activate()while not (progress.isCompleted() or progress.isFailed()) :
os.time.sleep(2)progress.printStatus()
startPartitionWait(hrPart)
PaaS: Implementación de aplicaciones
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
• El administrador puede personalizar los recursos para cadapartición–En la plantilla se especifican los atributos de los recursos–Cada partición puede invalidar atributos de manera diferente
• Principales tipos–///Beans de configuración para invalidación–Planes de implementación de recursos–Planes de implementación de aplicaciones para particiones específicas
Invalidación de recursos (SaaS)
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
• Definición en el nivel de la partición• Emparejamiento con los recursos correspondientes• Para cada partición:
–WLS usa los valores de invalidación de la partición en lugar de los valoresde la plantilla para las copias de recursos de esa partición
• Se simplifican las personalizaciones más frecuentes
Invalidación de recursos: ///beans de configuración parainvalidación
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
• Ejemplo: Recurso de sistema JDBC–URL–usuario–contraseña–nombre de origen de datos
Invalidación de recursos: ///beans de configuración para invalidación
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
dsOver=newPart.createJDBCSystemOverride('medrecPDB')dsOver.setDataSourceName('MedRecGlobalDataSourceXA')pdbURL='jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST='+pdbHost+')(PORT='+pdbPort+')))
(CONNECT_DATA=(SERVICE_NAME=’+pdbServiceName+')))'dsOver.setURL(pdbURL)dsOver.setUser(pdbUserName)dsOver.setPassword(pdbPassword)
Invalidación de recursos: ///beans de configuración para invalidación
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
• Definición en el nivel de la partición• Similar a los planes de implementación de aplicaciones
–Definición de variables–Definición de cambios de valores de variables para atributos específicos
• Agregar, modificar, eliminar• Expresiones de tipo Xpath exclusivas de WLS
• Principalmente para recursos o atributos no expuestos mediante ///beans de configuración para invalidación
Invalidación de recursos: plan de implementación de recursos
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
• El código aplica los valores de los atributos en el siguiente orden:–Plantilla–Plan de implementación de recursos–///Bean de configuración para invalidación
• "El último gana"
Invalidación de recursos: prioridad
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
• Implementación de aplicaciones en plantilla de grupo de recursos• Indicación de plan para partición específica
progress = updateApplication(appName='myApp',planPath='path/to/plan.xml',
partition='pepsi')
oprogress = redeploy(appName='myApp',planPath='path/to/plan.xml',
partition='pepsi’)
Planes de implementación de aplicaciones para particiones específicas
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
• ///Ámbitos de nombres de recursos–Dominio (y grupo de recursos por dominio)–Cada partición
• 12.2.1 no incluye herramientas para crear planes de implementación de recursos
• ConfigurationManagerMBean.getPropertyValues–Para un bean de configuración devuelve los valores de los atributos
requeridos:• Default, original, resource deployment plan, overriding config bean, effective
–Usado por EM pero accesible desde WLST, JMX
Sugerencias
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Grupos de recursos y plantillas de grupos de recursos
• DebugDeploymentPlan• DebugConfigurationRuntime (procesamiento de
invalidaciones)• DebugDeployment
Diagnóstico
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Targeting y destinos virtuales
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Destinos virtuales• Se usan para determinar destinos en particiones (y grupos de
recursos)• Existen dos aspectos
–Destinos físicos (servidor, clúster) que se usarán–Patrón URL para enrutamiento a la partición (más precisamente, al VT)
• Nombres de host virtuales• Prefijo URI• Número de puerto
• Provee servidor HTTP• Similar al VirtualHost existente
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ejemplos de destinos virtualesvt=domain.createVirtualTarget("PepsiVT")vt.addTarget(cluster)vt.getWebServer().getWebServerLog().setBufferSizeKB(0)
Por nombre de host:vt.addHostName("pepsi.com")
http://pepsi.com:7001/myapp
Por prefijo URI:vt.setUriPrefix("/pepsi")
http://any.com:7001/pepsi/myapp
Por nombre de host y prefijo URIvt.addHostName("cloud.com")vt.setUriPrefix("/pepsi")
http://cloud.com:7001/pepsi/myapp
Por número de puerto:vt.setExplicitPort(8001)
http://any.com:8001/myapp
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Sugerencias para trabajo con destinos virtuales• Solo se define cómo tratar una solicitud cuando esta llega a un servidor
– Deben usarse otros mecanismos (equilibrador de carga, DNS) para hacer que la solicitudllegue al servidor correcto
• El establecimiento de coincidencias de nombres de host se lleva a cabo mediantecomparaciones sencillas de cadenas– Puede haber numerosas coincidencias: pepsi.com, pepsi.us.com, pepsi
• Existe un algoritmo de coincidencia más preciso: – A mayor longitud de URL, mayor precisión; nombre de host + URL = mayor precisión; el
puerto es el que brinda la máxima precisión
• No se recomienda definir destinos virtuales que ///"acaparen" solicitudes relativas a dominios
• El establecimiento del número de puerto crea automáticamente canales para particiones
• El atributo partitionChannel solo se aplica cuando se modifican los puertos globalmente (port offset)
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Targeting en particiones• Destinos disponibles (available targets): es posible usar destinos virtuales para establecer
destinos en la partición
• Destinos predeterminados (default targets): subconjunto de destinos disponibles
• Es posible seleccionar como destino de los grupos de recursos uno o más de los destinos disponibles• Un destino si incluye un JMSServer, MessagingBridge, PathService, JMSBridgeDestination.
FileStore, JDBCStore, JMSSystemResource
• Si no se establecen destinos para el RG, se emplean los destinos predeterminados– Controlable con useDefaultTarget de tipo boolean
• Cada destino virtual puede ser compartido por más de una partición
• Y también puede usarse un host virtual
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ejemplos de targeting en particionespartition=domain.createPartition("PepsiPartition")partition.addAvailableTarget(vt1)partition.addAvailableTarget(vt2)partition.addDefaultTarget(vt1)rg=partition.createResourceGroup("RG1")
Explícito:rg.addTarget(vt2)
Nota: Esta instrucción también asigna a UseDefaultTarget el valor false
Uso de valor predeterminado de partición (vt1):rg.setUseDefaultTarget(true)Nota: Esto no suele ser necesario porque se trabaja con el valor predeterminado
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ciclo de vida de particiones
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ciclo de vida de particiones (y grupos de recursos)
• Sobre la base del ciclo de vida del servidor
• Se activan– Cambios de estado en el servidor– Instrucciones del administrador
relativas a las particiones– Acciones ante uso inadecuado de
recursos (recourse actions) como parte de la administración del uso de recursos (RCM)
Requisitos de alto nivel
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ciclo de vida de particiones
• Puesta en marcha de servidores: 12.1.3
Revisión: ///Elementos internos del ciclo de vida de los servidores
Servicio de servidor JDBC
Ciclo de vida de servidores
Servicio de servidor JMS B
Servicio de servidor de
implementación
Servicio de servidor JMS A
Todos losBasicDeploymentMBeans,DeploymentMBeansdel dominio
puesta en marcha de servidores
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ciclo de vida de particiones
• Puesta en marcha de servidores/particiones: 12.2.1
Cambios internos en 12.2.1
Servicio de servidor JDBC
Ciclo de vida de servidores
Servicio de servidor JMS B
Servicio de servidor de
implementación
Servicio de servidor JMS A
Ciclo de vida de particiones
Interceptor Interceptor InterceptorInterceptor
BasicDeploymentMBeans,DeploymentMBeans por dominio
BasicDeploymentMBeans,DeploymentMBeansde partición
puesta en marcha de servidores
Puesta en marcha de particiones
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ciclo de vida de particiones
• ParticióndomainRuntime()dpRT=cmo.lookupDomainPartitionRuntime(pName)plcRT=dpRT.getPartitionLifeCycleRuntime()task=plcRT.start()while task.isRunning():os.time.sleep(1)
Interfaces API - LifeCycleRuntimeMBeans
DomainPartitionRuntimeMBeanDomainPartition
RuntimeMBean1 por partición
PartitionLifeCycleRuntimeMBean xxx
xxx
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ciclo de vida de particiones
• Grupo de recursos en la particióndomainRuntime()dpRT=cmo.lookupDomainPartitionRuntime(pName)plcRT=dpRT.getPartitionLifeCycleRuntime()rglcRT=plcRT.lookupResourceGroupLifeCycleRuntime(rgName)task=rglcRT.start()while task.isRunning():os.time.sleep(1)
Interfaces API - LifeCycleRuntimeMBeans
PartitionLifeCycleRuntimeMBean
ResourceGroupLifeCycleRuntime
MBean
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ciclo de vida de particiones
• Grupo de recursos por dominiodomainRuntime()rglcRT=cmo.lookupResourceGroupLifeCycleRuntime(rgName)task=rglcRT.start()while task.isRunning():os.time.sleep(1)
Interfaces API - LifeCycleRuntimeMBeansDomainRuntime
MBean
ResourceGroupLifeCycleRuntime
MBean
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ciclo de vida de particiones
• Operaciones de ciclo de vida
• Destinos opcionales–Omit: la operación afecta a todos los destinos–Specify: la operación afecta solo a esos destinos
• Asincrónicas
Interfaces API - LifeCycleRuntimeMBeans
startstartInAdminshutdownforceShutdownsuspend
forceSuspendresume
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ciclo de vida de particiones
• En general, usar RuntimeMBeans para ciclo de vida• Pero es posible establecer una conexión directa con
un servidor administradoserverRuntime()cmo.startPartition(pName)cmo.startResourceGroup(rgName) # domain-level RG
pRT=cmo.lookupPartitionRuntime(pName)pRT.shutdown()• Sincrónicas
Interfaces API - RuntimeMBeans
ServerRuntimeMBean
PartitionRuntimeMBeanPartitionRuntime
MBean
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ciclo de vida de particiones
• Operaciones de ServerRuntimeMBean
• Operaciones de PartitionRuntimeMBean
Interfaces API - RuntimeMBeans
startPartitionstartPartitionInAdminstartResourceGroupstartResourceGroupInAdmin
shutdownResourceGroupforceShutdownResourceGroup
suspendResourceGroupforceSuspendResourceGroupresumeResourceGroup
shutdownforceShutdownstartResourceGroupstartResourceGroupInAdmin
shutdownResourceGroupforceShutdownResourceGroup
suspendResourceGroupforceSuspendResourceGroupresumeResourceGroup
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ciclo de vida de particiones
• Dos operaciones– startPartitionWait(partitionMBean)– forcePartitionShutdownWait(partitionMBean)
• Sincrónicas• Se devuelve un objeto de tarea
– getError()
Interfaces APC - Operaciones útiles de WLST
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ciclo de vida de particiones
• Cambios de estado persistentes• Operaciones sincrónicas vs. asincrónicas• Es mejor trabajar con RT Mbeans de ciclo de vida
–solo en servidor de administración
• Se debe poner en marcha explícitamente una partición creada de cero
• Información sobre estado provista por MBeans de ciclo de vida de partición/RG–///Agregado
Sugerencias
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Ciclo de vida de particiones
• Mensaje de log– <Oct 2, 2015 9:41:46 AM PDT> <Notice> <Partition Lifecycle> <BEA-2192303> <The
partition lifecycle operation "START" for partition "Pepsi" is initiated.>– <Oct 2, 2015 9:41:46 AM PDT> <Notice> <Partition Lifecycle> <BEA-2192304> <The
partition lifecycle operation "START" for partition "Pepsi" was successful.>
• Para obtener más detalles:– -Dweblogic.debug.DebugPartitionLifecycle=true
Diagnóstico
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Para obtener más información
• Documentación sobre WLS 12.2.1: https://docs.oracle.com/middleware/1221/wls/index.html
• https://blogs.oracle.com/WebLogicServer/entry/domain_partitions_for_multi_tenancy
• https://blogs.oracle.com/dipol/entry/partition_targeting_and_virtual_targets
• https://blogs.oracle.com/misty/entry/multi_tenancy_deployment
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Demo
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Declaración relativa a la norma de Safe HarborEl objetivo de esta presentación es señalar la dirección general de nuestros productos. Se ofrece solo con fines informativos y no podrá incorporarse en ningún contrato. No constituye un compromiso de proporcionar materiales, código ni funcionalidades de ningún tipo, y no debería servir de fundamento para la toma de decisiones de compra. El desarrollo, lanzamiento y cronograma de cualquiera de las características o funcionalidades descritas para los productos de Oracle quedan a criterio exclusivo de Oracle.
48
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. | 49
Preguntas y respuestas
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Siga aprendiendo con las capacitaciones de Oracle University
• Capacitación práctica presencial o en línea a cargo de instructores de trayectoria de todo el mundo
• Nuevos servicios de aprendizaje con suscripción para brindarle acceso a la capacitación en todo momento
• Programas de certificación para validar sus competencias
education.oracle.com
50
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. | 51
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. | 52
Copyright © 2016, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. | 53