0 likes | 3 Views
Para los que se inician en la programaciu00f3n
E N D
TALLER DE PROGRAMACIÓN DISTRIBUIDA RIVELINO MANUEL CHOQUE CAMALA
Definición Es un paradigma de desarrollo de software que se centra en crear sistemas que funcionan en múltiples computadoras conectadas a través de una red. Este enfoque permite que las tareas se dividan y se ejecuten simultáneamente en diferentes máquinas, lo que mejora la eficiencia, escalabilidad y tolerancia a fallos.
Características: • Distribución de tareas: Las aplicaciones se diseñan para que diferentes computadoras realicen partes específicas del trabajo. • Escalabilidad: Es posible añadir más recursos (computadoras) para manejar mayores cargas de trabajo. • Tolerancia a fallos: Si una máquina falla, otras pueden continuar ejecutando el sistema. • Transparencia: Los usuarios no perciben que el sistema está distribuido; parece un único sistema cohesivo.
Ejemplos de uso: • Sistemas de almacenamiento en la nube (como Google Drive o Dropbox). • Redes de procesamiento masivo (como SETI@home o renderizado de películas). • Aplicaciones empresariales que requieren alta disponibilidad y rendimiento.
"Enterprise ResourcePlanning" o "Planificación de Recursos Empresariales".
Definiciones. Programación distribuida • Es un paradigma que permite ejecutar tareas en múltiples nodos o máquinas, trabajando de manera colaborativa para resolver problemas complejos. • es un lenguaje de programación de propósito general que se ha convertido en uno de los más populares del mundo debido a su versatilidad y facilidad de uso. PYTHON
Conceptos clave de la programación distribuida • Distribución de tareas: Dividir un problema en subtareas que se ejecutan en diferentes nodos. • Comunicación entre nodos: Los nodos deben intercambiar datos mediante protocolos como RPC (RemoteProcedureCall) o mensajes. • Sincronización: Asegurar que las tareas se coordinen correctamente para evitar conflictos.
Herramientas en Python para programación distribuida. frommultiprocessingimportProcess def tarea(nombre): print(f"Hola desde {nombre}") if __name__ == "__main__": procesos = [Process(target=tarea, args=(f"Proceso {i}",)) for i in range(4)] for p in procesos: p.start() for p in procesos: p.join() 1. Multiprocessing: Permite ejecutar procesos en paralelo en una sola máquina. Útil para tareas distribuidas simples.
Herramientas en Python para programación distribuida. 2. Celery: Ideal para tareas distribuidas y asincrónicas. Requiere un messagebroker como RabbitMQ o Redis. from celery import Celery app = Celery('tareas', broker='redis://localhost:6379/0') @app.task defsumar(a, b): return a + b
Herramientas en Python para programación distribuida. 3. Dask: Diseñado para computación distribuida y manejo de grandes volúmenes de datos. Permite paralelizar tareas en clústeres. fromdaskimportdelayed @delayed def tarea(x): return x ** 2 resultados = [tarea(i) for i in range(10)] suma = sum(resultados) print(suma.compute())
Herramientas en Python para programación distribuida. 4. Pyro4: Facilita la comunicación entre objetos distribuidos. import Pyro4 @Pyro4.expose class Saludo: defdecir_hola(self, nombre): returnf"Hola, {nombre}!" daemon = Pyro4.Daemon() uri = daemon.register(Saludo) print(f"URI del objeto: {uri}") daemon.requestLoop()
Ventajas de usar Python para programación distribuida • Simplicidad: Su sintaxis clara facilita el desarrollo. • Bibliotecas maduras: Herramientas como Celery, Dask y Pyro4 simplifican la implementación. • Portabilidad: Compatible con múltiples plataformas. Nota: se recomienda explorar primero multiprocessing para entender los conceptos básicos y luego avanzar hacia herramientas más avanzadas como Dask o Celery.
¿Qué es un Servidor de Aplicaciones Web? Un Servidor de Aplicaciones Web (o Application Server) es un entorno de software que ejecuta aplicaciones web y proporciona servicios y recursos para que estas funcionen correctamente.
FUNCIONES • Ejecución de Lógica de Negocio Procesa peticiones del cliente y ejecuta código que implementa reglas de negocio (por ejemplo, validar un pago, calcular precios, etc.). • Gestión de Sesiones Mantiene el estado de la sesión del usuario entre múltiples solicitudes (por ejemplo, mantener el carrito de compras). • Conexión a Bases de Datos Permite a la aplicación conectarse y comunicarse con bases de datos (MySQL, PostgreSQL, Oracle, etc.). • Gestión de Transacciones Asegura que múltiples operaciones (como actualizaciones en una base de datos) se completen correctamente o se reviertan en caso de error (ACID).
FUNCIONES • Seguridad Autenticación, autorización, cifrado (SSL/TLS), protección contra ataques (como XSS, CSRF). Escalabilidad y Alta Disponibilidad Soporta balanceo de carga, clústeres, y replicación para manejar altos volúmenes de tráfico. • Soporte para Protocolos HTTP, HTTPS, WebSocket, JMS (mensajería), SOAP, REST, etc. • Gestión de Recursos Pool de conexiones a bases de datos, gestión de hilos (threads), caché, etc.
EMPAQUETAMIENTO DE APLICACIONES RIVELINO MANUEL CHOQUE CAMALA
Qué es Empaquetamiento de aplicaciones? Es el proceso de agrupar el código de una aplicación, sus dependencias, recursos y configuraciones en un formato estandarizado que permita su distribución, instalación y ejecución de forma consistente y automatizada.
Objetivos principales: • Garantizar que la aplicación funcione de forma idéntica en cualquier entorno. • Facilitar la instalación y actualización. • Automatizar despliegues. • Mejorar la portabilidad y reproducibilidad. • Aislar dependencias.
Tipos de empaquetamiento según el entorno 1. Aplicaciones de escritorio Formatos comunes: • .exe (Windows) • .msi (Windows Installer) • .dmg / .pkg (macOS) • .deb / .rpm / .snap / .flatpak (Linux)
Herramientas: • InnoSetup, NSIS (Windows) • pkgbuild (macOS) • dpkg, rpm, Snapcraft, Flatpak(Linux)
2. Aplicaciones web • Aunque no se "instalan" como software tradicional, se empaquetan para su despliegue. • Proceso: • Minificación de código (JS, CSS) • Bundling (Webpack, Vite, Rollup) • Generación de archivos estáticos • Empaquetado en contenedores o como artefactos para CI/CD
3. Aplicaciones móviles • Formatos: • .apk (Android) • .aab (Android App Bundle) • .ipa (iOS) • Herramientas: • Android Studio (Gradle) • Xcode • Capacitor, ReactNative CLI, Flutter
4. Aplicaciones en contenedores (Docker) • El contenedor es una forma moderna de empaquetamiento. • Dockerfile define cómo se construye la imagen. • La imagen contiene: • Sistema base (Linux, etc.) • Dependencias • Código de la app • Comandos de inicio
5. Aplicaciones en la nube / Serverless • Empaquetadas como funciones (AWS Lambda, AzureFunctions, etc.) • Formato: ZIP con código y dependencias • Metadatos en archivos de configuración (YAML, JSON, etc.)
6. Aplicaciones empresariales (Enterprise ApplicationPackaging) • Usado en entornos corporativos para despliegue masivo. • Herramientas: SCCM (Microsoft), Intune, Jamf (macOS), Ansible, Chef. • Paquetes .msi, .intunewin, scripts de instalación.