sábado, 21 de noviembre de 2020

FILOSOFÍA DE SISTEMAS


Según lo indicado por (Arnold Cathalifaud & Osorio, 1998) donde tuvo en cuenta la definición proporcionada por Bertalanffy, la filosofía de sistemas es una teoría, esta se puede definir como un conjunto de múltiples saberes que buscan establecer los principios generales de organización y orientación del conocimiento de la realidad y de la existencia humana.
Con ello se busca obtener respuestas respecto a las relaciones entre fenómenos naturales, sociales y tecnológicos. Por lo tanto, la filosofía de sistemas no solo se quiere involucrar en un solo campo o ley, sino que busca encarnarse en la mayoría por no decir en todas las leyes y principios.

 

 

La filosofía de sistemas consta de tres áreas:  

  1. La ontología de sistemas: La ontología de sistemas trata de definir a un sistema y entender cómo están plasmados los sistemas en los distintos niveles del mundo de la observación. Trata de distinguir el sistema real de un sistema conceptual; de un sistema real, de uno ideal.
  2. La epistemología de sistemas: Permite identificar los métodos de adquisición del conocimiento más acorde con la realidad. Diferencia la filosofía de sistemas con otros pensamientos filosóficos como: el positivismo, el empirismo lógico y el mecanicismo.
  3. Filosófica de valores de sistema: Busca la relación entre los seres humanos y el mundo, es decir, como llegaremos a ser en el futuro, como nos afecta en el sentido ético de la persona esta nueva forma de pensar, y otros.

Como profesionales en ingeniería, la filosofía de sistemas permite ver, percibir y entender todo como un sistema, lo que permitiría solucionar los diferentes problemas a partir del pensamiento sistémico.

        Referencias
          Arnold Cathalifaud, M., & Osorio, F. (1998). Introducción a los Conceptos Básicos de la         Teoría General de Sistemas. Redalyc.org, 12. Recuperado el 20 de Noviembre de             2020, de https://www.redalyc.org/comocitar.oa?id=10100306

 

lunes, 14 de septiembre de 2020

SISTEMAS DE ARCHIVOS QUE SE UTILIZA PARA EL ALMACENAMIENTO EN LA NUBE


Un sistema de archivos en la nube es un sistema de almacenamiento jerárquico que proporciona acceso compartido a los datos de archivos. Los usuarios pueden crear, eliminar, modificar, leer y escribir archivos, además de organizarlos de manera lógica en árboles de directorios para lograr un acceso intuitivo. Los sistemas de archivos que utilizan los sistemas de almacenamiento en la nube son los siguientes:

1. GlusterFS: Es un sistema de ficheros diseñado para la nube que puede ser escalable y distribuido permitiendo añadir recursos de almacenamiento desde distintos orígenes bajo un mismo espacio de nombres.

GlusterFS empezó siendo un sistema de almacenamiento clásico, basado en archivos. Más tarde pasó a ser orientado a objetos y al hacer el cambio se le dio una especial importancia a que pudiese integrarse adecuadamente en la conocida solución de código abierto OpenStack. En un segundo plano, GlusterFS sigue trabajando con archivos: a cada archivo se le asigna un objeto y la conexión entre ellos se establece mediante hardlinks en el sistema de archivos. De cara al usuario, no se muestra ningún servidor dedicado, sino que él o ella dispone de sus propias interfaces para guardar sus datos en GlusterFS, que se presenta como un único sistema. 

2. HDFS: Hadoop Distributed File System es un sistema distribuido basado en Java que permite obtener una visión de los recursos como una sola unidad. Para ello crea una capa de abstracción como un sistema de ficheros único. HDFS se encarga de almacenar los datos en varios nodos manteniendo sus metadatos. Distribuir los datos en varios nodos de almacenamiento aumenta la velocidad de procesamiento, el paralelismo en las operaciones y permite la replicación de los datos.

Está basado en la idea de que mover el procesamiento es mucho más rápido, fácil y eficiente que mover grandes cantidades de datos, que pueden producir altas latencias y congestión en la red. HDFS proporciona a las aplicaciones la capacidad de acceder a los datos en el lugar en el que se encuentren almacenados. 

3. Ceph – FS: Ceph File System es un sistema de archivos distribuido libre, está diseñado para el uso con gran cantidad de datos, está muy enfocado para el uso con Big Data. Ceph tiene como objetivo ser POSIX-compatible y completamente distribuido sin ningún punto de fallo. Los datos tienen replicación libre de errores, haciéndolo tolerante a fallos. 

Todos los componentes funcionan de manera descentralizada. Todos los OSD (Object Based Storage Device, es decir, los dispositivos de almacenamiento de objetos) tienen los mismos derechos. De esta forma, se pueden conectar entre sí tantos servidores como se quiera, con sus diferentes discos duros, para formar un sistema de almacenamiento unificado. 

4. GooFS: Google File System es un sistema de archivos distribuido que soporta toda su infraestructura informática de procesamiento de información en nube. ​ Está especialmente diseñado para proveer eficiencia, fiabilidad de acceso a datos usando sistemas masivos de clúster de procesamiento en paralelo.

5. MAPR-FS: Es un sistema de archivos distribuido, que es la base de la Plataforma Convergente MapR, con capacidades de almacenamiento distribuido de archivos, una base de datos NoSQL con múltiples APIs, y un sistema de transmisión integrado de mensajes. MAPR-FS está optimizado para la escalabilidad, el rendimiento, la fiabilidad y disponibilidad. Su capacidad de almacenamiento de archivos es compatible con la API de Apache Hadoop Distributed File System (HDFS) pero con varias características de diseño que lo distinguen de HDFS. Entre las diferencias más notables son que MAPR-FS es un sistema de archivos / escritura leído completamente con los metadatos de los archivos y directorios distribuidos en el espacio de nombres, así que no hay NameNode.

6. BeeGFS: Es el sistema de archivos paralelo de alto rendimiento desde el Centro de Competencia de Fraunhofer para la computación de alto rendimiento. La arquitectura de metadatos distribuida de BeeGFS ha sido diseñado para proporcionar la escalabilidad y la flexibilidad necesaria para ejecutar HPC y aplicaciones similares con altas demandas de E/S.

7. PVFS: El sistema de archivos virtual paralelo es un sistema de archivos paralelo de código abierto. Un sistema de archivos paralelo es un tipo de sistema de archivos distribuido que distribuye datos de archivos a través de varios servidores y proporciona acceso simultáneo mediante múltiples tareas de una aplicación paralela.

PVFS consta de 4 componentes principales y varios programas de utilidad. Los componentes son PVFS2-server, pvfslib, PVFS-client-core y el módulo de núcleo PVFS. Las utilidades incluyen la herramienta de administración de karma, utilidades como pvfs-ping, pvfs-ls, pvfs-cp, etc. que operan directamente en el sistema de archivos sin usar el módulo del kernel (principalmente para mantenimiento y pruebas). Otro punto clave del diseño es el protocolo PVFS que describe los mensajes que se pasan entre el cliente y el servidor, aunque esto no es estrictamente un componente. 

8. Lustre-FS: Sistema de archivos de código abierto que ofrece latencias inferiores a milisegundos, hasta cientos de gigabytes por segundo de rendimiento y millones de IOPS. Ofrece múltiples opciones de implementación y tipos de almacenamiento para optimizar el costo y el rendimiento para sus requisitos de carga de trabajo. 

Referencias

·       Andrew, S., & Maarten, V. S. (2006). Distribuidos principios de los sistemas y paradigmas.
·       Aprender BIG DATA. (20 de Julio de 2020). Aprender BIG DATA. Obtenido de https://aprenderbigdata.com/hdfs/
·       IONOS. (28 de Julio de 2020). Digital Guide IONOS. Recuperado el 13 de Septiembre de 2020, de https://www.ionos.es/digitalguide/servidores/know-how/glusterfs-vs-ceph/
·       WIKIPEDIA. (2018). WIKIPEDIA. Recuperado el 13 de Septiembre de 2020, de Enciclopedia Libre: https://es.qwe.wiki/wiki/Distributed_file_system_for_cloud#Google_file_system
·       Zonadam. (2019). Zonadam. Recuperado el 13 de Septiembre de 2020, de https://zonadam.com/glusterfs-sistema-de-almacenamiento-distribuido/

 

viernes, 17 de julio de 2020

FASES DE UN PROGRAMA "Holamundo.java"

A continuación se explicará las fases por las que pasa un programa en java, desde la cabeza del programador, hasta la ejecución en un sistema.  Esta explicación estará basada en un ejemplo similar que propone Deitel en su libro “How to program in Java”.

Las fases de un programa en java son las siguientes:

  • Fase de Creación o Edición
  • Fase de Compilación
  • Fase de Carga del programa en memoria
  • Fase de Verificación de Bytecodes
  • Fase de Ejecución

1.     Fase de creación o edición

Lo primero que hace un programador una vez que ya tiene en mente la aplicación que desea desarrollar es empezar a escribir el código. Esto es lo que se conoce como fase de edición y el resultado de la misma es el código fuente.

Podemos escribir un programa en java usando algo tan simple como el editor de texto en Windows; vi, vim o gedit en GNU/linux; o bien podemos usar una herramienta más orientada al desarrollo, o sea una IDE, como puede ser Eclipse, Netbeans, Sublime, entre otras.

El archivo que contiene el código fuente de un programa en java tendrá la extensión .java.

Un ejemplo simple de una aplicación que imprima algo en consola es la siguiente:

El nombre del archivo .java debe coincidir con el nombre de la clase (class), en este caso Holamundo.java

2.     Fase de compilación

Una vez el programador baja su idea a un código fuente, es hora de compilar el mismo. Este proceso convierte nuestro código fuente en códigos de bytes que más tarde serán interpretados por la JVM.

A diferencia de muchos otros lenguajes, los códigos de bytes compilados, pueden ejecutarse en cualquier sistema (Linux, Windows, MacOS, etc) que tenga la JVM correspondiente. Esto les da la característica de portabilidad a los mismos, lo cual es uno de los puntos fuertes de java.

Para compilar el código fuente, puede hacerse a través de IDE o por consola, con el comando javac (java compiler). Para el ejemplo sería:

javac Holamundo.java

Si todo va bien, la salida de esto es un archivo Holamundo.class, el cual contiene los bytecodes de la aplicación.

3.     Fase de Carga del programa en memoria

Cuando se ejecuta el programa en java con el comando java, entra en juego un componente llamado cargador de clases. Este, carga las clases dinámicamente en la JVM. Cabe recordar que la JVM es como una especie de computadora virtual. Lo primero que hará el cargador de clases es intentar cargar nuestro .class en memoria e ir cargando todos los .class a los que el programa (en el ejemplo Holamundo.class) haga referencia. Las clases a las que la aplicación haga referencia pueden encontrarse localmente en el disco duro o bien remotamente.

Todas las JVMs incluyen un cargador de clases, el cual es conocido como cargador de clases primordial.

4.     Fase de Verificación de Bytecodes

A fin de asegurar que no se violan restricciones de seguridad, a medida que se van cargando las clases en memoria, el verificador de bytecodes examina los bytecodes para asegurar que sean válidos. Esto se realiza por que el sistema Java run-time no confía en el código que se está cargando.

Se realizan pruebas tales como que el formato del fragmento de código sea el correcto, así como también:

  • Que no se forjen punteros
  • Que no haya violaciones de acceso a la memoria
  • Que los objetos sean accedidos por lo que son (Por ejemplo, que un objeto System siempre sea usado como System y nada más)

5.     Fase de Ejecución

Esta es la fase donde la JVM ejecuta las acciones especificadas por los bytecodes cargados en su memoria.

Los archivos .class se cargan en la memoria virtual y es la máquina virtual la que se encarga de traducir estas instrucciones que ella puede entender a instrucciones que entiende el Sistema Operativo y hardware subyacente.

Como se observa en la imagen, la JVM actúa como una capa intermedia entre su lenguaje “máquina” (entendible por la JVM) y el sistema subyacente. Esto hace que el código compilado sea independiente de la plataforma en la cual se va a ejecutar.

A fin de ganar eficiencia en el proceso de interpretar el código que la JVM puede entender a código que sea entendible por la computadora, las JVMs actuales utilizan una técnica conocida como compilación Just in Time o JIT (También se lo conoce como HotSpot compiler). Cuando se detecta que hay bytecodes que se ejecutan con frecuencia el compilador JIT los traduce a lenguaje de máquina, con lo cual la próxima vez que la JVM encuentre estos bytecodes los ejecutará directamente sin necesidad de pasar por el proceso de interpretación, sumando eficiencia a la ejecución del programa en java.

Referencias

  • Deitel, H. M. (2005). Java How to Program in Java. Prentice-Hall.

  • Osorio, V. (23 de Agosto de 2010). Lo Que Andabas Buscando. Recuperado el 15 de Julio de 2020, de http://virginia-ingsystem10.blogspot.com/2010/08/proceso-de-compilacion-en-java.html

  • SITEOWNER. (18 de Julio de 2015). KNOW DIMENSION. Recuperado el 16 de Julio de 2020, de http://knowdimension.com/blog/lenguajes/programando-en-java-de-la-escritura-a-la-ejecucion/#:~:text=Las%20fases%20de%20un%20programa,Carga%20del%20programa%20en%20memoria

  • Un Aprendiz De Programación. (2012). Obtenido de http://unaprendizprogramacion.blogspot.com/2015/08/fases-de-un-programa-en-java.html

 

 

 

 

 

 


FILOSOFÍA DE SISTEMAS

Según lo indicado por (Arnold Cathalifaud & Osorio, 1998) donde tuvo en cuenta la definición proporcionada por Bertalanffy, la filoso...