Limpiar filtro
Artículo
Mario Sanchez Macias · 16 ene, 2020
¡Hola Comunidad!
Voy a empezar a traducir los artículos de mi compañero Murray sobre rendimiento, pues son muy interesantes y merece la pena echarles un vistazo. Aprovecho para comentar que si tenéis preguntas y /o problemas de rendimiento os animéis a escribir y entre todos trataremos de ayudaros. Empecemos...
Tu aplicación está implementada y todo funciona bien. ¡Genial, enhorabuena! Pero, de repente, el teléfono empieza a sonar sin parar: son usuarios que se quejan de que la aplicación a veces se vuelve "lenta". Pero... ¿qué quiere decir eso? ¿A veces? ¿De qué herramientas dispones y a qué estadísticas deberías prestar atención para encontrar y resolver la lentitud? ¿La infraestructura de tu sistema está a la altura de la carga de usuarios? ¿Qué preguntas de diseño de infraestructura deberías haber hecho antes de haber pasado a producción? ¿Cómo puedes hacer la planificación de capacidad para nuevo hardware con confianza y sin gastar en más hardware del necesario? ¿Cómo hacer que el teléfono deje de sonar? ¿Cómo podrías haber evitado que sonara desde un principio?
Aquí puede ver un listado con otros artículos de esta serie >>
Esto será un largo viaje
Este es el primer artículo de una serie que explorará las herramientas y métricas disponibles para supervisar, analizar y resolver problemas de rendimiento de los sistemas, así como consideraciones de diseño de arquitectura y sistemas que afectan el desempeño. Por el camino nos desviaremos por varias ramas para entender el desempeño de Caché, los sistemas operativos, el hardware, la virtualización y otras áreas que cobren relevancia en base a los comentarios que vayáis haciendo.
Seguiremos el bucle de retroalimentación por el cual los datos de rendimiento permiten ver las ventajas y limitaciones de las aplicaciones y la infraestructura implementada, para finalmente volver a mejorar el diseño y la planificación de capacidad.
No debería ser necesario aclarar que las métricas de rendimiento se deben revisar constantemente. Es increíble la cantidad de veces que nuestros clientes se ven sorprendidos por problemas de rendimiento que se podrían haber detectado mucho antes, si hubieran prestado atención a los datos. Pero, claro, que la pregunta es: ¿qué datos? Comenzaremos el viaje recolectando algunas métricas básicas de Caché y del sistema, para poder tener una impresión general de la salud actual del sistema. En posteriores publicaciones analizaremos el significado de las métricas clave.
Hay muchas opciones disponibles para la monitorización del sistema, desde dentro de Caché y desde fuera, y examinaremos muchas de ellas en esta serie
Para empezar, veremos mi herramienta favorita para recogida continua de datos, que ya viene instalada en cada sistema Caché: ^pButtons.
Para asegurarte de que cuentas con la última versión de pButtons, por favor consulta la siguiente publicación:
https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-how-update-pbuttons
Recogida de métricas de rendimiento del sistema - ^pButtons
pButtons de Caché genera un informe de rendimiento HTML legible, a partir de los archivos de registro que crea. Las métricas de rendimiento generadas por pButtons se pueden extraer, representar mediante gráficos y analizar sin dificultad.
Algunos datos recogidos en el archivo html de pButtons son:
Implementación de Caché: con configuración, drive mappings, etc.
mgstat: métricas de rendimiento de Caché - la mayoría de los valores son promedios por segundo
Unix: vmstat e iostat: métricas de rendimiento y recursos del sistema operativo
Windows: performance monitor: métricas de rendimiento y recursos de Windows
Otras métricas de utilidad
La recogida de datos de pButtons tiene muy poco impacto sobre el rendimiento del sistema, porque las métricas ya son recopiladas por el sistema. pButtons simplemente las empaqueta para facilitar su archivado y transporte.
Para el análisis de tendencias y la resolución de problemas, una buena práctica puede ser recoger un pButtons de 24 horas cada día (de medianoche a medianoche), para tener un ciclo completo. Un ciclo podría ser un mes o más, por ejemplo para capturar datos desde el procesamiento de fin de mes. Si no se cuenta con otro sistema externo de recogida o supervisión de rendimiento, se puede usar pButtons todo el año.
Hay que tener en cuenta los siguientes puntos clave:
Cambia el directorio del registro a una ubicación separada de los datos de producción, para almacenar los archivos de salida acumulados y evitar discos llenos de problemas
Ejecuta un script de sistema operativo o comprima de alguna otra forma, y archive frecuentemente el archivo pButtons. Esto es de particular importancia en Windows, ya que estos archivos pueden ser grandes
¡Revisa los datos con frecuencia!
En el caso de un problema que requiera de un análisis inmediato, puedes previsualizar los datos de pButtons (recogidos inmediatamente), mientras las métricas se siguen almacenando para ser recogidas al final del día.
Para más información sobre pButtons, incluyendo la vista previa, detener una ejecución y agregar una recogida de datos personalizada, consulte la "Guía de monitarización de Caché" en la documentación de Caché más reciente:
http://docs.intersystems.com
Los datos del archivo HTML de pButtons se pueden separar y extraer (por ejemplo a archivo CSV) para procesar y generar gráficas u otros análisis mediante scripts o simplemente copiando y pegando. Más adelante en el siguiente artículo veremos ejemplos de gráficos.
Por supuesto, si surgen problemas de rendimiento urgentes, debe contactar con el Centro de Soporte Internacional (WRC).
Programar una recogida de datos de pButtons de 24 horas
^pButtons se puede iniciar manualmente desde un terminal o se puede programar. Para programar una recogida diaria de 24 horas:
1. Inicia un terminal de Caché, pase al namespace %SYS y ejecute manualmente pButtons una vez para configurar las estructuras de archivos pButtons:
%SYS>d ^pButtons Current log directory: /db/backup/benchout/pButtonsOut/
Available profiles:
1 12hours - 12 hour run sampling every 10 seconds
2 24hours - 24 hour run sampling every 10 seconds
3 30mins - 30 minute run sampling every 1 second
4 4hours - 4 hour run sampling every 5 seconds
5 8hours - 8 hour run sampling every 10 seconds
6 test - A 5 minute TEST run sampling every 30 seconds
Selecciona la opción 6. para la prueba, una ejecución de TEST de 5 minutos con muestreo cada 30 segundos. Tenga en cuenta que la numeración podría ser distinta, pero el resto debería ser obvio.
Durante esta ejecución, ejecute un Collect^pButtons (como se muestra abajo). Verá la información, incluyendo el runid. En este caso, “20160303_1851_test”.
%SYS>d Collect^pButtons
Current Performance runs:
20160303_1851_test ready in 6 minutes 48 seconds nothing available to collect at the moment.
%SYS>
Ten en cuenta que a esta ejecución de 5 minutos le quedan 6 minutos y 48 segundos (?) pButtons agrega un período de gracia 2 minutos a todas las ejecuciones para permitir un tiempo para la recogida y compilación de los registros en formato html.
2. ¡IMPORTANTE! Cambia el directorio de salida de los registros pButtons. La ubicación de salida predeterminada es la carpeta <cache install path>. Por ejemplo, en Unix, la ruta al directorio de registros podría verse así:
do setlogdir^pButtons("/somewhere_with_lots_of_space/perflogs/")
Asegúrese de que Caché tenga permisos para el directorio y de que haya suficiente espacio en disco disponible para acumular los archivos de salida.
3. Crea un nuevo perfil de 24 horas con intervalos de 30 segundos. Ejecute lo siguiente:
write $$addprofile^pButtons("My_24hours_30sec","24 hours 30 sec interval",30,2880)
Verifica que el perfil se haya agregado a pButtons:
%SYS>d ^pButtons
Current log directory: /db/backup/benchout/pButtonsOut/
Available profiles:
1 12hours - 12 hour run sampling every 10 seconds
2 24hours - 24 hour run sampling every 10 seconds
3 30mins - 30 minute run sampling every 1 second
4 4hours - 4 hour run sampling every 5 seconds
5 8hours - 8 hour run sampling every 10 seconds
6 My_24hours_30sec- 24 hours 30 sec interval
7 test - A 5 minute TEST run sampling every 30 seconds
select profile number to run:
Nota: puedes variar el intervalo de recogida. 30 segundos es adecuado para una supervisión de rutina. Yo no bajaría de 5 segundos para una ejecución de rutina de 24 horas (…”,5,17280), ya que los archivos de salida pueden volverse muy grandes cuando pButtons recoge datos en cada intervalo. Si está intentando resolver un problema en un momento específico del día y necesita datos más detallados, use uno de los perfiles predeterminados o cree un nuevo perfil personalizado con un período más breve, por ejemplo 1 hora con intervalos de 5 segundos (…”,5,720). Puede ejecutar múltiples pButtons a la vez, así que podría tener pButtons más cortos con un intervalo de 5 segundos ejecutándose al mismo tiempo que los pButtons de 24 horas.
4. Consejo Para sitios UNIX, consulte el parámetro "disk". Puede que los parámetros predeterminados usados con el comando "iostat" no incluyan los tiempos de respuesta de disco. Primero muestre los comandos de disco actualmente configurados:
%SYS>zw ^pButtons("cmds","disk")
^pButtons("cmds","disk")=2
^pButtons("cmds","disk",1)=$lb("iostat","iostat ","interval"," ","count"," > ")
^pButtons("cmds","disk",2)=$lb("sar -d","sar -d ","interval"," ","count"," > ")
Para recoger estadísticas de disco, use el comando adecuado para editar la sintaxis de su instalación de UNIX. Tenga en cuenta el espacio final. Estos son algunos ejemplos:
LINUX: set $li(^pButtons("cmds","disk",1),2)="iostat -xt "
AIX: set $li(^pButtons("cmds","disk",1),2)="iostat -sadD "
VxFS: set ^pButtons("cmds","disk",3)=$lb("vxstat","vxstat -g DISKGROUP -i ","interval"," -c ","count"," > ")
Se pueden crear archivos html de pButtons muy grandes si deja ejecutándose tanto el comando iostat como el sar. Para análisis de rendimiento habituales, generalmente uso solo iostat. Para configurar solo un comando:
set ^pButtons("cmds","disk")=1
Puede encontrar más detalles sobre la configuración de pButtons en la documentación online.
5. Programa pButtons para que se inicie a medianoche en Management Portal > System Operation > Task Manager:
Namespace: %SYS
Task Type: RunLegacyTask
ExecuteCode: Do run^pButtons("My_24hours_30sec")
Task Priority: Normal
User: superuser
How often: Once daily at 00:00:01
Recogida de datos de pButtons
La versión de pButtons incluida en las versiones más recientes de las plataformas de datos InterSystems incluyen recogida automática. Para recoger y compilar manualmente los datos en un archivo html: en el namespace %SYS, ejecute el siguiente comando para generar cualquier archivo de salida html de pButtons pendiente:
do Collect^pButtons
El archivo html estará en el logdir que configuraste en el paso 2 (si no lo hiciste, ¡ hazlo ahora!). Si no, la ubicación predeterminada es <Caché install dir/mgr>
Los archivos se nombran <hostname_instance_Name_date_time_profileName.html> por ejemplo vsan-tc-db1_H2015_20160218_0255_test.html
Consideraciones sobre Windows Performance Monitor
Si el sistema operativo es Windows, entonces puede usar Windows Performance Monitor (perfmon) para recoger datos de forma sincronizada con las otras métricas recolectadas. En distribuciones viejas de pButtons, deberás configurar perfmon manualmente en Windows.
Si resultara útil, puedo escribir una publicación sobre cómo crear una plantilla de perfmon para definir los contadores de rendimiento para supervisar y programar una ejecución para el mismo período e intervalo que pButtons.
Resumen
Con estos pasos, podemos empezar a recoger datos para analizarlos y ver qué significan.
http://docs.intersystems.com
Anuncio
Esther Sanchez · 27 ene, 2020
¡Hola Comunidad!
Tenemos un nuevo vídeo, disponible en el canal de YouTube de la Comunidad de Desarrolladores en inglés, grabado por @Benjamin De Boe:
⏯ Lo que a los desarrolladores les encanta de InterSystems IRIS
Benjamin De Boe, Product Manager de InterSystems, nos comenta lo que a los desarrolladores les encanta de la plataforma de datos InterSystems IRIS - que los datos y el código están "uno al lado del otro", haciendo que el código sea muy eficiente.
¡Esperamos que os resulte útil! 👍🏼
Podéis probar InterSystems IRIS aquí: https://www.intersystems.com/try
Artículo
Jose-Tomas Salvador · 3 feb, 2020
¡Hola Comunidad!
Ahora que la plataforma de datos InterSystems IRIS Data Platform Community Edition está disponible en Docker Hub, parece el momento ideal de probar InterSystems IRIS en un contenedor. Desde hace un tiempo, la Community Edition ha estado disponible en la nube, por ejemplo en AWS, pero podría ser interesante probarla localmente también. Los usuarios de Windows estamos acostumbrados a ver caras de desconfianza y escuchar que "nuestros resultados podrían variar" cada vez que mencionamos usar Docker para Windows. A veces incluso nos dicen que realmente deberíamos considerar ejecutar Docker dentro de máquinas virtuales con Ubuntu. Pfff...
Docker y Windows, especialmente al usar contenedores basados en Linux (el único tipo soportado por InterSystems IRIS) puede que no sean una combinación ideal. Para más detalles sobre esto, vea: Linux Containers on Windows. Sin embargo, con algo de paciencia, ganas de aventura y unos pasos adicionales, es perfectamente posible ejecutar InterSystems IRIS en un contenedor Docker en Windows. Esta configuración, aunque no está soportada para casos de producción, funciona suficientemente bien como para probar varias funcionalidades de InterSystems IRIS. Por ejemplo, he creado namespaces y bases de datos, he cargado datos, creado producciones y hasta ejecutado algunas consultas SPARK.
A continuación, enumeraré los pasos que seguí para lanzar la plataforma de datos InterSystems IRIS Community Edition. Mostraré tanto un enfoque por línea de comandos de Docker como el enfoque más práctico de componer un archivo. Advertencia: no soy un experto en Docker y estaremos hablando de Docker para Windows, así que tengan en cuenta que "nuestros resultados podrían variar" ;-)
Configuración
Windows 10 Pro
Docker Desktop Community Edition, versión 0.0.3 (31259) Canal: estable, disponible aquí
Algunos ajustes de Docker
1. Cambié el “bip” en mis ajustes de Daemon para evitar los conflictos de red
2. Configuré mi unidad C:\ como unidad compartida. Esto permitirá que el contenedor acceda a los archivos de C:\
Apunte sobre Name Volumes y Montajes Bind
Los contenedores son efímeros. Los iniciamos. Los detenemos. Los eliminamos. Sin embargo, a menudo quisiéramos que los datos generados y usados por el contenedor persistan. Docker ofrece dos enfoques para la persistencia de datos de un contenedor: volúmenes y montajes bind. Los contenedores de InterSystems IRIS incluyen la funcionalidad %SYS perdurable (Durable %SYS) para datos generados y usados por la plataforma de datos. En Docker para Windows, el %SYS perdurable debe usar un volumen Docker. Al usar Docker en otros sistemas operativos, por ejemplo Docker para Mac o Docker para Ubuntu, un %SYS perdurable puede usar tanto un montaje bind como un volumen.
Los volúmenes son totalmente gestionados por Docker. A diferencia de los montajes bind, no se corresponden directamente con cualquier archivo o directorio en el sistema de archivos del host. Debemos usar comandos de Docker para crear, eliminar e inspeccionarlos. El hecho de que no podamos ajustar o usar productos y herramientas avanzadas para gestionar los datos en volúmenes Docker es una gran desventaja de usar Docker en Windows. Claramente no es un entorno de producción.
Creación de un Named Volume
Mi próximo paso fue crear un named volume desde la línea de comandos de Windows:
docker volume create durable
Para ver los detalles de este volumen, use el comando docker volume inspect. Cuando quiera eliminarlo, usaré el comando docker volume rm.
Puesta en funcionamiento del contenedor
Finalmente, estaba listo para lanzar el contenedor. Aquí está el comando de ejecución:
docker run –it –d –p 51773:51773 –p 52773:52773 –-name iris –-volume durable:/durable –-env ISC_DATA_DIRECTORY=/durable/irissys store/intersystems/iris:2019.1.0.510.0-community
Algo más de información sobre las opciones que pasé al comando run:
Opción
Descripción
it
Básicamente, significa ejecutar en modo interactivo y brindar acceso por terminal
d
Significa ejecutar en modo detached, separado del proceso principal de la consola Windows
p
Mapea los puertos dentro del contenedor a puertos exteriores del contenedor en el host. Usaremos estos puertos desde Windows para acceder a InterSystems IRIS. Tenga en cuenta que si tiene IRIS instalado localmente, es muy probable que esté usando los puertos 51773 y 52773 y obtendrá conflictos de puertos si intenta mapear estos puertos
volume
Mapea el named volume creado antes, a un directorio dentro del contenedor
env
Configura las variables de entorno. En este caso, estamos configurando la ubicación del %SYS perdurable para que sea nuestro directorio duradero dentro del contenedor.
Para verificar que todo estuviera bien con el contenedor, usé el siguiente comando:
docker container ls
Esto listó todos los contenedores en ejecución en mi sistema. La primera vez que ejecuté el comando, listó el estado de mi contenedor iris como "starting" (iniciando). Cuando volví a ejecutarlo luego de pasado algún tiempo, listó el estado del contenedor como "healthy" (saludable).
Acceso a InterSystems IRIS
Una vez que mi contenedor se estuvo ejecutando sin problema, el siguiente paso fue acceder a la plataforma de datos. Para lograrlo, primero lancé el Portal de gestión usando la URL usual: http://localhost:52773/csp/sys/UtilHome.csp
La página me solicitó un usuario/contraseña. Indiqué SuperUser/SYS y luego me llevó a una página de cambio de contraseña. Después tuve acceso completo al Portal de gestión.
A continuación probé usar el acceso por línea de comandos. Para hacerlo, primero ejecuté una shell bash dentro del contenedor con el siguiente comando en la línea de comandos de Windows:
docker exec –it iris bash
Esto abrió una shell bash. Desde ahí, abrí una sesión del terminal IRIS de la siguiente forma:
iris session iris
Inicié sesión usando el usuario/contraseña definido arriba.
Detener el Contenedor
Finalmente, para detener el contenedor, añadí lo siguiente en la línea de comandos de Windows:
docker container stop iris
Pasar a Compose
Usar el comando run de Docker con todas esas opciones a escribir es bastante tedioso. Por suerte, Docker admite colocar las opciones en un archivo compose y luego iniciar un contenedor usando comandos de docker-compose para leer las opciones desde el archivo e iniciar el contenedor adecuadamente.
Para usar este método, primero hay que crear un directorio de Windows. Yo creé un directorio llamado iris_community. Ten en cuenta que el nombre del directorio se convierte en el nombre del proyecto Docker. Dentro de iris_community creé otro directorio llamado local. Mi archivo compose creará un montaje bind usando este directorio y podré usarlo para pasar datos y código entre mi sistema de archivos Windows y mi contenedor. Luego coloqué mi archivo compose, llamado docker-compose.yml dentro de iris_community. Por lo tanto, la estructura del directorio se ve así
iris_community
local
docker-compose.yml
Estos son los contenidos de mi docker-compose.yml. Espero que los comentarios sean suficientes para explicar lo que hace.
version: '3.2'
services:
iris:
image: store/intersystems/iris:2019.1.0.510.0-community
container_name: iris-community
ports:
# 51773 is the superserver default port
- "51773:51773"
# 52773 is the webserver/management portal port
- "52773:52773"
volumes:
# Maps directory in containr, named durable, to named volume defined below
- durable:/durable
# Mounts a local directory for passing in files and test scripts
- ./local:/Samples/local
environment:
# Uses ISC_DATA_DIRECTORY to place the durable %SYS in the named volume
- ISC_DATA_DIRECTORY=/durable/irissys
# Creates the named docker volume
volumes:
durable:
Iniciar con docker-compose
Para iniciar el contenedor, abrí una línea de comandos de Windows en mi directorio: iris_community y añadí lo siguiente:
docker-compose up
Esta vez no definí la opción detach (separar), por lo que veo un flujo de salida desde docker. Tenga en cuenta que el volumen nombrado creado en este caso será iris_community_durable, por lo que no entrará en conflicto con el volumen anterior.
Para detener el contenedor, uso el siguiente comando, siempre desde el directorio: iris_community:
docker-compose down
Anuncio
David Reche · 24 mar, 2020
¡Hola Comunidad!
El plazo para participar en el Primer Concurso para Desarrolladores de InterSystems terminó ayer y empieza la fase de votación.
Hemos recibido 20 aplicaciones hasta ahora - así que ya hay suficientes para elegir la mejor!
¿Cómo puedes votar?
Es muy fácil: tienes un voto, y tu voto irá en la Nominación de los Expertos o en la Nominación de la Comunidad.
Nominación de Expertos
Si eres Product Manager de InterSystems, moderador de la Developer Community o embajador de Global Masters con nivel Experto o superior, tu voto va en esta nominación.
Nominación de la Comunidad
Si eres un miembro registrado en la Comunidad y al menos has publicado una vez (un artículo, una pregunta o una respuesta que no fuera considerada como spam), tu voto va en esta nominación.
Votación
La votación se realiza en esta página para el concurso en Open Exchange y tienes que registrarte en Open Exchange - puedes hacerlo con tus credenciales de acceso a la Comunidad.
Si en algún momento quieres cambiar el voto, puedes cancelar el que hayas dado y dárselo a otra aplicación - tienes 7 días para votar.
Los participantes en el concurso pueden corregir errores ("bugs") e introducir mejoras en sus aplicaciones durante esta semana. Para no perderte los cambios, suscríbete a los avisos sobre nuevas actualizaciones!
Cómo probar
Según los requisitos del concurso, los desarrolladores deben usar la versión Docker de InterSystems IRIS Community edition o InterSystems IRIS Community Edition for Health.
Por lo que cada solución podría ser ejecutada como:
$ git clone https://github.com/repository
$ cd repository
$ docker-compose up -d
$ docker-compose exec iris iris session iris
Y entonces verás el Terminal de IRIS donde podrás seguir las instrucciones de la aplicación para probar su funcionalidad.
Criterios de selecciónEscoge la aplicación que más te guste. Pero los criterios generales son:
Idea y valor - la app hace del mundo un lugar mejor o, al menos, mejora la vida de los desarrolladores;
Funcionalidad y usabilidad - cómo lo hace y cuánto hace la aplicación/librería;
La "belleza" del código - que tenga un código ObjectScript legible y de calidad.
¡Vota la mejor solución sobre InterSystems IRIS! ¡Tú decides!
Artículo
Mathew Lambert · 25 mar, 2020
¡Hola Comunidad!
Creo que hoy en día todo el mundo guarda el código fuente de sus proyectos en repositorios como Github, GitLab, bitbucket, etc. Lo mismo sucede con proyectos de InterSystems IRIS, se pueden ver algunos ejemplos en Open Exchange.
¿Qué hacemos cada vez que empezamos o continuamos nuestro trabajo con un repositorio en particular con la plataforma de datos InterSystems?
Necesitamos una máquina de InterSystems IRIS local, configurar el entorno para el proyecto e importar el código fuente.
Por eso, cada desarrollador hace lo siguiente:
Bajarse el código del repositorio
Instalar/Ejecutar una instalación de IRIS local
Crear un nuevo namespace/database para un proyecto
Importar el código a ese nuevo namespace
Configurar el resto del entorno
Iniciar/continuar codificando el proyecto
Si pasas tu repositorio a Docker, estos pasos podrían reducirse a 3:
Bajarse el código del repositorio
Ejecutar docker-compose build
Iniciar/continuar desarrollando el proyecto
Ventaja - evitar los pasos 3, 4 y 5, que pueden llevar varios minutos y de vez en cuando generan algún dolor de cabeza.
Puedes dockerizar (casi) cualquiera de tus repositorios de InterSystems en unos pocos pasos. ¡Comenzamos!
Cómo dockerizar el repositorio y lo que significa
Básicamente la idea es tener Docker instalado en tu máquina, que compilará el código y el entorno en un contenedor, que a su vez se ejecutará en Docker y funcionará tal como el desarrollador lo introdujo en el primer lugar. Así nos olvidamos de preguntarnos "¿Cuál es la versión del sistema operativo?" o "¿Qué más tenía en esta instalación de IRIS?".
Cada vez tenemos una página limpia (o un contenedor de IRIS limpio) que podremos usar para configurar el entorno (namespaces, bases de datos, web-apps, usuarios/roles) e importar código a una base de datos limpia y recién creada.
¿Este procedimiento de "dockerizar" dañará gravemente tu repositorio actual?
No. Necesitará añadir 2 o 3 nuevos archivos en la raíz del repositorio y seguir unas pocas reglas que podrás configurar por ti mismo.
Requisitos previos
Descargar e instalar docker.
Descargar e instalar la imagen de IRIS docker. En este ejemplo, usaré la vista previa completa de InterSystems IRIS: iris:2019.1.0S.111.0, que puedes descargar de WRC-preview., mira los detalles.
Si trabajas con una instancia que requiere una clave, coloca el iris.key en el lugar que usarás todo el tiempo. Yo la pongo en mi Mac en el directorio Home.
Dockerizar el repositorio
Para dockerizar tu repositorio, deberás añadir tres archivos a su carpeta raíz.
Este es un ejemplo de un repositorio dockerizado - el proyecto ISC-DEV, que ayuda a importar/exportar código fuente desde la base de datos IRIS. Este repositorio tiene un Dockerfile adicional, docker-compose.yml e installer.cls que describiré a continuación.
Primero está Dockerfile, que será usado por el comando build de docker-compose.
Dockerfile
FROM intersystems/iris:2019.1.0S.111.0 # need be the same image as installed
WORKDIR /opt/app
COPY ./Installer.cls ./
COPY ./cls/ ./src/
RUN iris start $ISC_PACKAGE_INSTANCENAME quietly EmergencyId=sys,sys && \
/bin/echo -e "sys\nsys\n" \
# giving %ALL to the user admin
" Do ##class(Security.Users).UnExpireUserPasswords(\"*\")\n" \
" Do ##class(Security.Users).AddRoles(\"admin\", \"%ALL\")\n" \
# importing and running the installer
" Do \$system.OBJ.Load(\"/opt/app/Installer.cls\",\"ck\")\n" \
" Set sc = ##class(App.Installer).setup(, 3)\n" \
" If 'sc do \$zu(4, \$JOB, 1)\n" \
# introducing OS Level authorization (to remove login/pass prompt in container)
" Do ##class(Security.System).Get(,.p)\n" \
" Set p(\"AutheEnabled\")=p(\"AutheEnabled\")+16\n" \
" Do ##class(Security.System).Modify(,.p)\n" \
" halt" \
| iris session $ISC_PACKAGE_INSTANCENAME && \
/bin/echo -e "sys\nsys\n" \
| iris stop $ISC_PACKAGE_INSTANCENAME quietly
CMD [ "-l", "/usr/irissys/mgr/messages.log" ]
Este Dockerfile copia installer.cls y el código fuente desde la carpeta /cls del repositorio a la carpeta /src en el contenedor.
También ejecuta algunos ajustes de configuración, que otorgan al usuario admin el rol %All, contraseña infinita "SYS", introduce la autorización de nivel de sistema operativo y ejecuta el %Installer.
¿Qué contiene %Installer?
Class App.Installer
{
XData MyInstall [ XMLNamespace = INSTALLER ]
{
<Manifest>
<Default Name="NAMESPACE" Value="ISCDEV"/>
<Default Name="DBNAME" Value="ISCDEV"/>
<Default Name="APPPATH" Dir="/opt/app/" />
<Default Name="SOURCESPATH" Dir="${APPPATH}src" />
<Default Name="RESOURCE" Value="%DB_${DBNAME}" />
<Namespace Name="${NAMESPACE}" Code="${DBNAME}-CODE" Data="${DBNAME}-DATA" Create="yes" Ensemble="0">
<Configuration>
<Database Name="${DBNAME}-CODE" Dir="${APPPATH}${DBNAME}-CODE" Create="yes" Resource="${RESOURCE}"/>
<Database Name="${DBNAME}-DATA" Dir="${APPPATH}${DBNAME}-DATA" Create="yes" Resource="${RESOURCE}"/>
</Configuration>
<Import File="${SOURCESPATH}" Recurse="1"/>
</Namespace>
</Manifest>
}
ClassMethod setup(ByRef pVars, pLogLevel As %Integer = 3, pInstaller As %Installer.Installer, pLogger As %Installer.AbstractLogger) As %Status [ CodeMode = objectgenerator, Internal ]
{
Return ##class(%Installer.Manifest).%Generate(%compiledclass, %code, "MyInstall")
}
}
Crea el namespace/database ISCDEV e importa el código desde la carpeta fuente -/src.
A continuación viene el archivo docker-compose.yml, que se usará cuando ejecutemos el contenedor con el comando up de docker-compose.
version: '2.4'
services:
iris:
build: .
restart: always
ports:
- 52773:52773
volumes:
- ~/iris.key:/usr/irissys/mgr/iris.key
Esta configuración le indicará a Docker en qué puerto esperamos que IRIS trabaje en nuestro host. Primero (52773) es un host, segundo es el puerto interno del contenedor de un contenedor (52773)
En la sección de volúmenes, docker-compose.yml otorga acceso a una clave de IRIS en tu máquina dentro del contenedor en el lugar, donde IRIS la buscará:
- ~/iris.key:/usr/irissys/mgr/iris.key
Para empezar a codificar con este repositorio, hay que hacer lo siguiente:
1. Clonar/hacer un pull de git del repositorio hacia cualquier directorio local.
2. Abrir el terminal en este directorio y ejecutar
user# docker-compose build
esto compilará el contenedor.
3. Ejecutar el contenedor IRIS con tu proyecto
user# docker-compose up -d
Abre tu IDE favorito, conéctate al servidor en localhost://52773 y desarrolla con InterSystems IRIS Data Platforms ;)
Puedes usar estos 3 archivos para dockerizar tu repositorio. Simplemente tienes que introducir el nombre correcto del código fuente en Dockerfile, el o los namespace(s) adecuados en Installer.cls y el sitio de iris.key en docker-compose.yml y usar los beneficios de los contenedores Docker en tus tareas diarias de desarrollo con InterSystems IRIS.
Este artículo ha sido etiquetado como "Mejores prácticas" ("Best practices").
Los artículos con la etiqueta "Mejores prácticas" incluyen recomendaciones sobre cómo desarrollar, probar, implementar y administrar mejor las soluciones de InterSystems.
Artículo
Alberto Fuentes · 3 abr, 2020
¡Hola a todos! Hoy hablaremos de cómo cargar un modelo de Machine Learning en IRIS y cómo probarlo, a través de un artículo genial de Niyaz Khafizov.
Nota: lo siguiente se realizó utilizando Ubuntu 18.04, Apache Zeppelin 0.8.0 y Python 3.6.5.
Introducción
Actualmente, muchas de las diferentes herramientas que están disponibles para data mining permiten desarrollar modelos predictivos y analizar los datos con gran facilidad. La plataforma de datos InterSystems IRIS proporciona un soporte sólido para analizar grandes cantidades de datos e incrementar la velocidad de las aplicaciones, al tiempo que ofrece interoperabilidad junto con modernas herramientas de data mining.
En esta serie de artículos estamos explorando las capacidades de InterSystems IRIS para la minería de datos . En el primer artículo configuramos nuestra infraestructura y nos preparamos para empezar. En el segundo artículo construimos nuestro primer modelo predictivo para predecir las especies de flores utilizando instrumentos de Apache Spark y Apache Zeppelin. En este artículo, construiremos un modelo KMeans PMML y lo probaremos en InterSystems IRIS.
Intersystems IRIS proporciona excelentes funcionalidades para ejecutar PMML. Puedes subir tu modelo y probarlo con cualquier tipo de datos, IRIS mostrará su exactitud, precisión, F-score y muchas cosas más.
Comprobación de los requisitos
Primero, descarga jpmml (echa un vistazo a la tabla y selecciona la versión adecuada) y colócalo en cualquier directorio. Si utilizas Scala, esto será suficiente.
Si utilizas Python, ejecuta la siguiente línea de comando en el terminal
pip3 install --user --upgrade git+https://github.com/jpmml/pyspark2pmml.git
Después del mensaje de que la instalación se realizó con éxito, ve a Spark Dependencies y añade la dependencia al jpmml descargado:
Crear modelo KMeans
El builder de PMML utiliza pipelines, por eso modificamos un poco el código escrito en el artículo anterior. Ejectua el siguiente código en Zeppelin:
%pysparkfrom pyspark.ml.linalg import Vectorsfrom pyspark.ml.feature import VectorAssemblerfrom pyspark.ml.clustering import KMeansfrom pyspark.ml import Pipelinefrom pyspark.ml.feature import RFormulafrom pyspark2pmml import PMMLBuilder
dataFrame=spark.read.format("com.intersystems.spark").\option("url", "IRIS://localhost:51773/NEWSAMPLE").option("user", "dev").\option("password", "123").\option("dbtable", "DataMining.IrisDataset").load() # load iris dataset
(trainingData, testData) = dataFrame.randomSplit([0.7, 0.3]) # split the data into two setsassembler = VectorAssembler(inputCols = ["PetalLength", "PetalWidth", "SepalLength", "SepalWidth"], outputCol="features") # add a new column with features
kmeans = KMeans().setK(3).setSeed(2000) # clustering algorithm that we use
pipeline = Pipeline(stages=[assembler, kmeans]) # First, passed data will run against assembler and after will run against kmeans.modelKMeans = pipeline.fit(trainingData) # pass training data
pmmlBuilder = PMMLBuilder(sc, dataFrame, modelKMeans)pmmlBuilder.buildFile("KMeans.pmml") # create pmml model
El código creará un modelo para predecir las especies utilizando PetalLength, PetalWidth, SepalLength, SepalLength y SepalWidth como características. Utilizaremos el formato PMML.
PMML es un formato para intercambiar modelos predictivos basado en XML. Proporciona una manera para que las aplicaciones analíticas describan e intercambien modelos predictivos generados por la minería de datos y los algoritmos de Machine Learning. Esto nos permite separar el desarrollo de los modelos, de su ejecución.
En el resultado verás una ruta hacia el modelo PMML.
Subir y probar el modelo PMML
Abre IRIS Portal Gestión -> Menu -> Manage Web Applications -> haz clic en tu namespace -> habilita Analytics -> Save.
Ahora, ve a Analytics -> Tools -> PMML Model Tester
Deberías ver algo como la imagen que se muestra a continuación:
Haz clic en New, escribe un nombre para la clase, sube el archivo PMML (la ruta estaba en el resultado), y haz clic en Import . Pega la siguiente consulta SQL en Custom data source :
SELECT PetalLength, PetalWidth, SepalLength, SepalWidth, Species, CASE Species WHEN 'Iris-setosa' THEN 0 WHEN 'Iris-versicolor' THEN 2 ELSE 1 ENDAs predictionFROM DataMining.IrisDataset
Usamos CASE aquí porque el agrupamiento KMedias devuelve conjuntos de números (0, 1, 2) y si no reemplazamos las especies por números, las contará de manera incorrecta.
Mi resultado es el siguiente:
Aquí puedes ver el análisis detallado:
Si deseas obtener más información sobre qué son los falsos positivos, los falsos negativos..., consulta Precision and recall.
Conclusión
Hemos descubierto que el PMML Model Tester es una herramienta muy útil para probar modelos con cualquier tipo de datos. Proporciona análisis detallados, gráficos y la posibilidad de enviar consultas SQL. Esto te permitirá probar tu modelo sin que necesites de alguna otra herramienta adicional.
Enlaces
Artículo anterior
PySpark2PMML
JPMML
ML Pipelines
Documentación sobre Apache Spark documentation
Anuncio
Esther Sanchez · 31 mar, 2020
¡Hola Desarrolladores!
El primer Concurso de Programación con InterSystems IRIS ya ha terminado. ¡Gracias a todos los participantes!
Recibimos 20 apps excelentes y ya podemos anunciar los ganadores.
Un fuerte aplauso para estos desarrolladores y sus aplicaciones:
🏆 Nominación de los expertos - los ganadores han sido elegidos por un jurado especialmente formado para el concurso:
🥇 1er puesto y $2,000 para el proyecto BlocksExplorer de @Dmitry.Maslennikov
🥈 2º puesto y $1,000 para el proyecto ISC DEV de @Gevorg.Arutiunian9096
🥉 3er puesto y $500 para el proyecto isc-utils de @Henrique.GonçalvesDias
🏆 Nominación de la Comunidad - las aplicaciones que recibieron el mayor número de votos:
🥇 1er puesto y $500 para el proyecto BlocksExplorer de @Dmitry.Maslennikov
🥇 1er puesto y $500 para el proyecto sql-builder de @Henry.HamonPereira
¡Enhorabuena a todos!
Y gracias de nuevo a todos los participantes por el esfuerzo e ingenio que habéis puesto en el concurso
¿Y qué más?
Esto no acaba aquí, porque ¡hemos preparado una serie de concursos para todo el año!
➡️ Echa un vistazo a los próximos concursos >> Enhorabuena a los ganadores!!
Como ya habéis visto vamos a hacer concurso cada mes, espero que os animéis a participar !!!
Cualquier duda sobre todo esto preguntad en la comunidad... estamos abiertos 24x7 ;-)
Anuncio
Esther Sanchez · 13 abr, 2020
¡Hola Comunidad!
Os traemos un nuevo vídeo, disponible en el canal de YouTube de la Comunidad de Desarrolladores en inglés, grabado por @Patrick.Jamieson3621
⏯ InterSystems API Manager y FHIR
Patrick Jamieson, Product Manager de InterSystems IRIS for Health, muestra cómo InterSystems API Manager (IAM) puede ser utilizada para ver y probar los recursos FHIR con InterSystems IRIS for Health.
Más publicaciones sobre InterSystems IRIS for Health.
Presentación de InterSystems API Manager.
¡Esperamos que os resulte útil! 👍🏼
Anuncio
David Reche · 29 abr, 2020
¡Hola Comunidad!
El plazo para participar en el Segundo Concurso para Desarrolladores de InterSystems ha terminado y empieza la fase de votación.
Hemos recibido 7 aplicaciones - así que ya hay suficientes para elegir la mejor!
¿Cómo puedes votar?
Es muy fácil: tienes un voto, y tu voto irá en la Nominación de los Expertos o en la Nominación de la Comunidad.
Nominación de Expertos
Si eres Product Manager de InterSystems, moderador de la Developer Community o embajador de Global Masters con nivel Experto o superior, tu voto va en esta nominación.
Nominación de la Comunidad
Si eres un miembro registrado en la Comunidad y al menos has publicado una vez (un artículo, una pregunta o una respuesta que no fuera considerada como spam), tu voto va en esta nominación.
Votación
La votación se realiza en esta página para el concurso en Open Exchange y tienes que registrarte en Open Exchange - puedes hacerlo con tus credenciales de acceso a la Comunidad.
Si en algún momento quieres cambiar el voto, puedes cancelar el que hayas dado y dárselo a otra aplicación - tienes hasta el domingo 3 de mayo para votar.
Los participantes en el concurso pueden corregir errores ("bugs") e introducir mejoras en sus aplicaciones durante esta semana. Para no perderte los cambios, suscríbete a los avisos sobre nuevas actualizaciones!
Criterios de selección
Escoge la aplicación que más te guste. Pero los criterios generales son:
Idea y valor - la app hace del mundo un lugar mejor o, al menos, mejora la vida de los desarrolladores;
Funcionalidad y usabilidad - cómo lo hace y cuánto hace la aplicación/librería;
La "belleza" del código - que tenga un código ObjectScript legible y de calidad.
Así que... estás a tiempo... ¡Vota la mejor solución sobre InterSystems IRIS! ¡Tú decides!
Artículo
Bernardo Linarez · 4 ago, 2020
En la última publicación programamos recogidas de métricas de rendimiento usando pButtons, a lo largo de 24 horas. En esta publicación, analizaremos algunas de esas métricas clave que se están recogiendo y cómo se relacionan con el hardware del sistema subyacente. También empezaremos a explorar la relación entre las métricas de Caché (o de cualquiera de las plataformas de datos de InterSystems) y las métricas del sistema. Veremos también cómo usar estas métricas para entender el pulso diario de tu sistema y diagnosticar problemas de rendimiento.
[Aquí puedes ver un listado con otros artículos de esta serie >>](https://community.intersystems.com/post/capacity-planning-and-performance-series-index)
***Editado en octubre de 2016...***
*[Añado un ejemplo de script para extraer datos de pButtons a un archivo .csv](https://community.intersystems.com/post/extracting-pbuttons-data-csv-file-easy-charting)*
***Editado en marzo de 2018...***
Las imágenes habían desaparecido, las volví a añadir.
# Grupos alimenticios de hardware

Como verás a medida que avancemos por esta serie de artículos, los componentes del servidor que afectan al rendimiento pueden categorizarse como:
- CPU
- Memoria
- Almacenamiento de entrada y salida
- Red de entrada y salida
Si alguno de estos componentes está bajo una carga excesiva, el rendimiento del sistema y la experiencia de usuario seguramente se vean disminuidas. Estos componentes también están todos relacionados entre sí, los cambios en un componente pueden afectar a otro, a veces con consecuencias imprevistas. He visto un caso en el que corregir un cuello de botella de E/S en una matriz de almacenamiento causó que el uso de CPU saltara a 100%. Esto resultó en una experiencia de usuario aún peor, ya que el sistema de pronto quedó libre para hacer más trabajo, pero no tenía los recursos de CPU para atender el aumento en la actividad de usuario y el rendimiento.
También veremos como la actividad del sistema Caché tiene un impacto directo sobre los componentes del servidor. Si los recursos de E/S de almacenamiento son limitados, un cambio positivo que se puede hacer es aumentar la memoria del sistema y aumentar la memoria para __búferes globales de Caché__, lo que a su vez puede reducir la __E/S de lectura de almacenamiento del sistema__ (¡pero quizás aumentar la CPU!).
Una de las métricas más obvias del sistema para monitorizar frecuentemente o para revisar cuándo reportan problemas los usuarios es el uso de CPU. Debemos mirar *top* o *nmon* en Linux o AIX, o *Windows Performance Monitor*. Como la mayoría de los administradores de sistemas revisan frecuentemente los datos de la CPU, especialmente si se presentan de forma gráfica, un rápido vistazo nos da una buena idea de la salud actual del sistema: qué es normal y qué es un pico repentino de actividad que podría ser anormal o indicativo de un problema. En este artículo revisaremos brevemente las métricas de CPU, y nos centraremos en las métricas de Caché. Comenzaremos por ver los datos de *mgstat* y entenderemos que mirar los datos de forma gráfica nos permite obtener, de un vistazo, una idea de la salud del sistema.
# Introducción a mgstat
mgstat es uno de los comandos de Caché incluidos y ejecutados en pButtons. mgstat es una gran herramienta para recoger métricas básicas de rendimiento para ayudarte a entender la salud de tus sistemas. Observaremos los datos de mgstat recogidos de un pButtons de 24 horas, pero si quieres capturar datos fuera de mgstat de pButtons, también puede ejecutarse a demanda de forma interactiva o como tarea en segundo plano desde el terminal de Caché.
Para ejecutar mgstat a demanda desde el namespace %SYS, el formato general es.
do mgstat(sample_time,number_of_samples,"/file_path/file.csv",page_length)
Por ejemplo, para ejecutar una tarea en segundo plano para una ejecución de una hora con período de muestreo de 5 segundos y salida a un archivo csv.
job ^mgstat(5,720,"/data/mgstat_todays_date_and_time.csv")
Por ejemplo, para mostrar en pantalla pero omitiendo algunas columnas, usa la entrada dsp132. Te dejaré como tarea revisar la salida para entender la diferencia.
do dsp132^mgstat(5,720,"",60)
Puedes encontrar información detallada sobre las columnas de mgstat en la *Guía de monitarización de Caché* en la documentación de InterSystems:
[InterSystems online documentation](https://docs.intersystems.com)
# Analizando los datos de mgstat
pButtons fue diseñado para compilarse en un único archivo HTML que se pueda navegar y empaquetar fácilmente para enviar a los especialistas del Centro de Soporte Internacional (WRC), que podrán diagnosticar problemas de rendimiento. Sin embargo, cuando ejecutas pButtons por tu cuenta y quieres mostrar los datos gráficamente, puedes volver a separarlos en un archivo csv para convertirlo en un gráfico, por ejemplo con Excel, usando un script de línea de comandos o simplemente cortando y pegando.
En este artículo, profundizaremos solo en algunas de las métricas de mgstat para mostrar como, incluso con un rápido vistazo, podemos hacernos una buena idea sobre si el sistema está funcionando bien, o si hay problemas reales o potenciales que afectarán a la experiencia del usuario.
## Glorefs y CPU
El siguiente gráfico muestra el uso de CPU del servidor de la base de datos en un sitio donde se ejecuta una aplicación hospitalaria con una tasa muy elevada de transacciones. Presta atención al pico de actividad de la mañana, cuando hay muchos pacientes externos, con una caída a la hora del almuerzo y un descenso mantenido durante la tarde y labnoche. En este caso, los datos provienen de Windows Performance Monitor *(_Total)\% Processor Time* - la forma del gráfico encaja con el perfil de un día laborable. No hay picos ni "valles" inusuales, lo que es normal para este sitio. Al hacer el mismo análisis para tu sitio, podrás empezar a tener una base de referencia de la actividad "normal". Un pico muy grande, especialmente si es prolongado, puede ser indicativo de un problema. En una publicación futura me enfocaré en el CPU.

Como referencia, este servidor de base de datos es un Dell R720 con dos procesadores E5-2670 de 8 núcleos, el servidor tiene 128 GB de memoria y 48 GB de búferes globales.
El siguiente gráfico muestra más datos de mgstat: Glorefs (referencias globales) o accesos a la base de datos para el mismo día que la gráfica de uso de CPU. Glorefs indica la cantidad de trabajo que se hace para procesar la carga de trabajo actual. Si bien las referencias globales consumen tiempo de CPU, no siempre consumen otros recursos del sistema, como lecturas físicas, por la forma en que Caché usa el recurso compartido de búfer de memoria global.

Como es típico en aplicaciones de Caché, hay una correlación muy fuerte entre Glorefs y uso de CPU.
>Otra forma de analizar estos datos de CPU y gloref es decir que *reducir las glorefs reducirá el uso de CPU*, lo que permitirá el uso de servidores con menos núcleos o escalar más sobre los sistemas existentes. Puede haber formas de reducir las referencias globales si hacemos que la aplicación sea más eficiente. Volveremos a este concepto en otros artículo posteriores.
## PhyRds y Rdratio
La forma del gráfico obtenido con los datos de mgstat *PhyRds* (Physical Reads, lecturas físicas) y *Rdratio* (Read ratio, tasa de lectura) también puede aportar información sobre qué esperar del rendimiento del sistema y ayudar con la planificación de capacidad. En futuras publicaciones hablaré con más detalle sobre el almacenamiento de entrada y salida para Caché.
_PhyRds_ son simplemente IOPS de lectura física desde el disco a las bases de datos de Caché. Deberías ver los mismos valores reflejados en las métricas del sistema operativo para discos lógicos y físicos. Recuerda al mirar las IOPS del sistema operativo que también podrían estar mostrando IOPS provenientes de aplicaciones que no son de Caché. Dimensionar el almacenamiento y no tener en cuenta las IOPS esperadas es una receta para el desastre. Necesitas conocer las IOPS que tu sistema realiza en horas pico para realizar una adecuada planificación de capacidad. El siguiente gráfico muestra las _PhyRds_ entre la media noche y las 15:30.

Observa el gran salto en lecturas entre las 05:30 y las 10:00. Hay otros picos menores a las 11:00 y justo antes de las 14:00. ¿Qué crees que los causa? ¿Ves este tipo de picos en tus servidores?
*Rdratio* es un poco más interesante: es la tasa de lectura de bloques lógicos por lectura de bloque físico. Así que es una tasa de cuántas lecturas son de búferes globales (lógicos) desde la memoria y cuántas son del disco, lo que es órdenes de magnitud más lento. Un *Rdratio* alto es algo bueno. Que caiga cerca de cero por largos períodos no es bueno.

Observa que al mismo tiempo que hay una alta cantidad de lecturas, *Rdratio* baja a cerca de cero. En este sitio me pidieron investigar cuando el departamento de TI comenzó a recibir llamadas de usuarios que se quejaban de que el sistema se volvía lento por largos períodos. Esto había estado sucediendo al parecer de forma aleatorio desde hacía semanas, y me pidieron analizar el sistema.
> _**Como pButtons había sido programado para ejecutarse diariamente durante 24 horas, fue relativamente sencillo analizar varias semanas de datos para empezar a ver un patrón de _PhyRds_ elevados y bajos _Rdratio_, correlacionados con las llamadas al soporte técnico.**_
Tras un mayor análisis, pude rastrear la causa hasta un trabajador por turnos nuevo, que estaba ejecutando varios informes metiendo parámetros "erróneos" junto con consultas mal redactadas, sin los índices adecuados, lo que causaba la elevada cantidad de lecturas a la base de datos. Este era el origen de las ralentizaciones aparentemente aleatorias. Como estos informes que abarcan mucho tiempo leen datos hacia los búferes globales, el resultado es que los datos de usuario interactivos se recuperan del almacenamiento físico en vez de hacerse desde la memoria. Esto ejerce una gran carga sobre el almacenamiento para atender las lecturas.
Supervisar _PhyRds_ y _Rdratio_ te dará una idea del estado de funcionamiento de tus sistemas y quizás te permita encontrar informes o consultas mal realizadas. Podría existir una razón válida para tener un _PhyRds_ alto -- quizás sea necesario ejecutar un informe a cierta hora. Con los servidores y sistemas operativos modernos de 64 bits y su gran capacidad de memoria física, deberías poder minimizar el _PhyRds_ en tus sistemas de producción.
> Si observas un _PhyRds_ alto en tu sistema, hay varias estrategias que puedes evaluar:
> - Aumentar la cantidad de búferes (globales) de base de datos (y la memoria del sistema) para mejorar el desempeño.
> - Mover fuera del horario de oficina la creación de informes o extractos que requieran un largo tiempo.
> - Los informes de solo lectura que requieran mucho tiempo, las tareas por lotes y las extracciones de datos pueden ejecutarse en un servidor de shadowing independiente o mirror asíncrono, lo que minimizará el impacto sobre los usuarios interactivos y quitará parte de la carga sobre los recursos del sistema, como CPU e IOPS.
Un _PhyRds_ que normalmente sea bajo es algo bueno, y debe ser nuestro objetivo al dimensionar sistemas. Sin embargo, si tienes un _PhyRds_ bajo y los usuarios se quejan del rendimiento, hay otras cosas que se pueden revisar para asegurarse de que el almacenamiento no sea un cuello de botella - la cantidad de lecturas podría ser baja debido a que el sistema ya no puede dar más servicio. Analizaremos el almacenamiento con mayor profundidad en un artículo posterior.
# Resumen
En esta publicación hemos visto que mostrar con gráficos las métricas recogidas en pButtons puede darnos una idea del estado del sistema de un vistazo. En publicaciones futuras, analizaré en mayor profundidad la relación entre el sistema y las métricas de Caché, y cómo se pueden usar para planificar para el futuro.
Anuncio
David Reche · 1 jun, 2020
¡Hola Comunidad!
El plazo para participar en el Tercer Concurso para Desarrolladores de InterSystems ha terminado y empieza la fase de votación.
Hemos recibido 8 aplicaciones - así que ya hay suficientes para elegir la mejor!
¿Cómo puedes votar?
Es muy fácil: tienes un voto, y tu voto irá en la Nominación de los Expertos o en la Nominación de la Comunidad.
Nominación de Expertos
Si eres Product Manager de InterSystems, moderador de la Developer Community o embajador de Global Masters con nivel Specialist o superior, tu voto va en esta nominación.
Nominación de la Comunidad
Si eres un miembro registrado en la Comunidad y al menos has publicado una vez (un artículo, una pregunta o una respuesta que no fuera considerada como spam), tu voto va en esta nominación.
Votación
La votación se realiza en esta página para el concurso en Open Exchange y tienes que registrarte en Open Exchange - puedes hacerlo con tus credenciales de acceso a la Comunidad.
Si en algún momento quieres cambiar el voto, puedes cancelar el que hayas dado y dárselo a otra aplicación - tienes hasta el domingo 7 de junio para votar.
Los participantes en el concurso pueden corregir errores ("bugs") e introducir mejoras en sus aplicaciones durante esta semana. Para no perderte los cambios, suscríbete a los avisos sobre nuevas actualizaciones!
Criterios de selección
Escoge la aplicación que más te guste. Pero los criterios generales son:
Idea y valor - la app hace del mundo un lugar mejor o, al menos, mejora la vida de los desarrolladores;
Funcionalidad y usabilidad - cómo lo hace y cuánto hace la aplicación/librería;
La "belleza" del código - que tenga un código ObjectScript legible y de calidad.
Así que... estás a tiempo... ¡Vota la mejor solución sobre InterSystems IRIS! ¡Tú decides!
Anuncio
Esther Sanchez · 9 jun, 2020
¡Hola desarrolladores!
El tercer concurso de Programación con InterSystems IRIS ya ha terminado. ¡Muchas gracias a todos los participantes!
Recibimos 8 apps excelentes y ya podemos anunciar los ganadores.
Un fuerte aplauso para estos desarrolladores y sus aplicaciones:
🏆 Nominación de los expertos - los ganadores fueron elegidos por un jurado especialmente formado para el concurso:
🥇 1er puesto y $2,000 para el proyecto iris-python-suite de @Renato.Banzai
🥈 2º puesto y $1,000 para el proyecto WebSocket Client JS with IRIS Native API as Docker Micro Server de @Robert.Cemper1003
🥉 3er puesto y $500 para el proyecto ObjectScript Kernel de @Nikita.Mullin
🏆 Nominación de la Comunidad - las aplicaciones que recibieron el mayor número de votos:
🥇 1er puesto y $1,000 para el proyecto WebSocket Client JS with IRIS Native API as Docker Micro Server de @Robert.Cemper1003
🥈 2º puesto y $500 para el proyecto iris-python-suite de @Renato.Banzai
¡Enhorabuena a todos!
Y gracias de nuevo a todos los participantes, por el esfuerzo e ingenio que habéis puesto en el concurso
¿Y qué más?
Hay una serie de concursos planificados para todo el año, así que ya podéis inscribiros al siguiente!
➡️ Próximos concursos
Anuncio
Esther Sanchez · 18 jun, 2020
¡Hola Comunidad!
Os traemos el tercer episodio de Data Points, el podcast de InterSystems en inglés. En esta ocasión, charlamos con Thomas Dyar, especialista en Machine Learning en InterSystems. Escucha la conversación y descubre todo lo que ofrece IntegratedML.
Puedes escuchar el podcast dándole a Play o entrando en la web de Data Points: datapoints.intersystems.com
Aquí puedes escuchar los episodios anteriores:
Episodio 2. ¿Qué es Kubernetes?
Episodio 1. ¿Qué es InterSystems IRIS?
Esperamos que os resulte útil
Anuncio
Esther Sanchez · 19 jun, 2020
¡Hola Comunidad!
Os traemos un nuevo vídeo, disponible en el canal de YouTube de la Comunidad de Desarrolladores en inglés:
⏯ InterSystems IRIS y Node.js
InterSystems IRIS™ admite una API nativa para Node.js, que ofrece acceso directo a las estructuras de datos de InterSystems IRIS desde las aplicaciones en Node.js.
➡️ Aprende más sobre Node.js en el Área de Formación de nuestra página web.
Esperamos que os resulte útil 👍🏼
Anuncio
David Reche · 26 jun, 2020
¡Hola desarrolladores!
¡Ya hemos lanzado el siguiente concurso para crear soluciones de código abierto utilizando InterSystems IRIS Data Platform!
¡Así que damos la bienvenida al cuarto concurso de programación con InterSystems!
El tema de este concurso es Inteligencia Artificial y Machine Learning.
El concurso estará activo durante tres semanas: del 29 de junio al 19 de julio de 2020.
Premios
1. Nominación de los expertos - los ganadores serán elegidos por un jurado especialmente formado para el concurso. Los premios serán:
🥇 1er puesto - $2,000
🥈 2º puesto - $1,000
🥉 3er puesto - $500
2. Nominación de la Comunidad - ganará la aplicación que obtenga el mayor número total de votos. Los premios serán:
🥇 1er puesto - $1,000
🥈 2º puesto - $500
Si dos o más participantes obtienen la misma cantidad de votos, todos serán considerados ganadores y el dinero del premio se repartirá entre todos.
¿Quién puede participar?
Cualquier miembro registrado en la Comunidad de Desarrolladores de cualquier país puede participar en el concurso, excepto los empleados de InterSystems. Regístrate aquí en la Comunidad si aún no tienes una cuenta >>
Duración del concurso
Del 29 de junio al 12 de julio de 2020: Dos semanas para subir las aplicaciones a Open Exchange (durante este período, se podrán modificar los proyectos).
Del 13 al 19 de julio de 2020: Una semana para votar.
Los ganadores serán anunciados el día 20 de julio de 2020.
Tema del concurso
🤖 Inteligencia Artificial y Machine Learning 🤖
Desarrollo de una solución de IA/ML utilizando InterSystems IRIS.
Se elegirá la mejor solución de IA/ML construida con InterSystems IRIS. La aplicación puede ser una librería, paquete, herramienta o cualquier solución de IA/ML que utilice InterSystems IRIS.
La aplicación debe funcionar en IRIS Community Edition, en IRIS for Health Community Edition o en IRIS Advanced Analytics Community Edition.
La aplicación debe ser Open Source y publicarse en GitHub.
Y las aplicaciones que implementen unos requisitos tecnológicos adicionales, obtendrán bonus tecnológicos.
Aplicaciones de muestra
InterSystems IntegragedML Template
InterSystems PythonGateway Template
Recursos adicionales
1. Cómo enviar una aplicación a un concurso: Publish an application on Open Exchange y Submit an application for the contest
2. Documentación: Using IntegratedML
3. Cursos online:
Learn IntegratedML in InterSystems IRIS
Preparing Your Data for Machine Learning
Predictive Modeling with the Machine Learning Toolkit
Judgment
Consulta los Criterios del jurado y Reglas sobre los votos.
Así que... Ready. Set. Code.
¡Suerte a todos!
❗️ Echa un vistazo a los Términos Oficiales del Concurso.❗️
¡Hola desarrolladores!
Estos son los bonus tecnológicos adicionales para el 4º concurso:
1. Uso de IntegratedML - 2 puntos extra2. Uso de Python Gateway usage - 1 punto extra3. Contenedor Docker - 1 punto extra
Todos los detalles sobre los bonus extra en este post.
¡Hola desarrolladores!
Tenéis hasta el domingo para participar en el concurso.
¿Os animáis?