Mejores prácticas que rigen las arquitecturas de aplicaciones.
Abrir todo Cerrar todo
Descripción general
Los lenguajes y marcos de programación que adoptes para crear tu aplicación desempeñan un papel clave en la entrega y el mantenimiento satisfactorios de la aplicación a largo plazo. Las opciones de idioma y marco tienen consecuencias a largo plazo en cómo puedes escalar tu negocio, utilizar tus aplicación y ofrecer funciones de alta calidad a tus clientes. Los cambios de lenguaje o marco suelen ser costosos. El apoyo a ecosistemas paralelos de múltiples lenguajes y marcos añade complejidad y reduce la agilidad.
La elección de un idioma y un marco, se repercuten en una serie de factores, como la velocidad de entrega, la estabilidad y la solidez del ecosistema existente, la preparación operativa y el rendimiento de la producción. Utiliza plataformas con poco código siempre que sea posible para poder centrarte en resolver los problemas de tu negocio en lugar de hacer frente a las complicaciones del desarrollo tradicional. Si los requisitos de tu aplicación son más complejos, elige lenguajes maduros y marcos ligeros.
Detalles del principio
Las plataformas con poco código permiten crear, probar y desplegar aplicaciones empresariales más rápido que la codificación manual tradicional. Estas plataformas son adecuadas para crear aplicaciones oportunistas en colaboración con las partes interesadas de la empresa, así como aplicaciones de informes y análisis de datos. Las plataformas con poco código también permiten ampliar las aplicaciones SaaS y modernizar las aplicaciones heredadas. Este enfoque ayuda a evitar complicaciones cuando se desea añadir nuevas capacidades, como visualización, recopilación y análisis de datos, así como en lo referente a seguridad, accesibilidad, desempeño y globalización. Una plataforma con poco código reduce significativamente estas complicaciones y reduce drásticamente la cantidad de código que mantienes.
Sin embargo, si tu aplicación tiene requisitos más sofisticados, elige un lenguaje de programación maduro junto con un marco ligero. A la hora de elegir un lenguaje de programación, selecciona uno que te proporcione ventajas clave, como:
Los lenguajes más nuevos tienden a tener una mayor tasa de cambio en su diseño lingüístico y en el ecosistema y las bibliotecas correspondientes. Una mayor tasa de cambio significa que es más difícil evaluar los riesgos y más costoso realizar cambios posteriormente.
Al seleccionar un marco, selecciona uno que sea de código abierto. Los marcos de código abierto están constantemente revisados por pares, lo que significa que sus características están cerca de lo que la mayoría de los desarrolladores quieren porque contribuyen a la creación y el mantenimiento de los marcos. Los errores se encuentran y solucionan rápidamente. También debes seleccionar una estructura ligera que consuma pocos recursos, como CPU, memoria, ancho de banda de red o manejadores de archivos.
Utiliza un marco de aplicación que equilibre la mejora del enfoque de las tareas (la lógica empresarial bajo la que subyacen los elementos fijos y el andamiaje) y la flexibilidad (lo que le permite satisfacer las necesidades de funciones actuales y futuras). Adopta un marco que proporcione valores por defecto fáciles de usar, razonables y sin controversias para funciones comunes, como el registro, la telemetría, la seguridad, la configuración, así como para patrones comunes, como la creación de API de REST.
Recomendaciones de Oracle
Oracle APEX es una plataforma con poco código que proporciona componentes de alto nivel, como formularios, gráficos y widgets de interfaz de usuario. APEX también proporciona patrones de diseño comunes a través de un entorno de desarrollo gráfico intuitivo. Las aplicaciones desarrolladas mediante APEX pueden acceder a los datos locales a través de SQL e integrarse con servicios externos mediante las API de REST. Además, puedes publicar la funcionalidad que desarrolles en APEX como API de REST para el consumo externo.
Si una plataforma con poco código es inadecuada para tu aplicación, adopta Java como lenguaje de programación. Java proporciona un conjunto estable y amplio de funcionalidades para la mayoría de los casos de uso de aplicaciones comunes y cuenta con un ecosistema sano de bibliotecas y marcos fiables y estables para desarrollar aplicaciones modernas. El enfoque de Java en la sencillez y la legibilidad, junto con su excelente soporte para herramientas de desarrollador, incluidas herramientas de análisis estáticos y marcos de prueba, reducen los costos de mantenimiento del software y el riesgo de errores en las aplicaciones de producción.
Utiliza GraalVM para desarrollar y ejecutar tu aplicación. GraalVM es una distribución JDK que combina la estabilidad de Java con el mejor desempeño gracias a la optimización dinámica del tiempo de ejecución, la aplicación frecuente y proactiva de parches a las vulnerabilidades de seguridad, herramientas de diagnóstico y análisis del desempeño de bajo costo, como Java Flight Recorder.
Crea aplicaciones con un enfoque de API como elemento principal mediante el marco Graal Development Kit for Micronaut o Helidon. Ambos enfoques proporcionan un andamiaje que reduce considerablemente el tiempo de entrega de tu aplicación y patrones fáciles de usar para casos de uso comunes, como las API REST, basadas en un conjunto de opciones de marco sencillas e incontrovertibles para actividades comunes, como el registro, la telemetría y el almacenamiento. Además, ambos enfoques admiten servicios de alto desempeño, mediante el soporte de E/S no bloqueantes con API reactivas idiomáticas, y baja latencia, a través del soporte de bibliotecas de red de alto desempeño.
Tanto Helidon como GDK son compatibles con la imagen nativa de GraalVM, lo que permite crear aplicaciones compactas y con un uso eficiente de la memoria.
Descripción general
Divide las funciones o tareas de la aplicación en servicios independientes y acoplados que funcionan conjuntamente. Diseña cada servicio con un ámbito funcional limitado centrado en una función o funcionalidad. En comparación con una arquitectura monolítica tradicional, este enfoque mejora el mantenimiento de aplicaciones, el desarrollo de funciones, las pruebas, el despliegue y la escalabilidad.
Adopta un enfoque de diseño de API de REST basado en contratos, con el fin de proporcionar interfaces claras y comprensibles para la comunicación entre servicios y con ellos. Un contrato de API proporciona los mecanismos necesarios para que los equipos colaboren y consuman la funcionalidad sin depender de los detalles internos de la implantación de un servicio. Por ejemplo, un servicio puede ser propiedad exclusiva de un equipo de desarrollo que puede mejorar libremente su implementación sin tener que coordinar las dependencias de código con otros equipos de desarrollo.
Descripción del contexto
Inicia un método basado en el contrato especificando la API de REST de un servicio. A continuación, crea un prototipo de implantación de la API para que puedan probarla las partes interesadas que la utilizarán (como los equipos). Cuando todos coinciden en los detalles de la API, cada equipo puede trabajar en paralelo para implementar tanto el servicio como otros servicios que lo consuman.
Define las aplicaciones de políticas para los acuerdos de nivel de servicio y seguridad (SLA) en una fase temprana del ciclo de vida de tu producto para garantizar que los aspectos del contrato de servicio estén claros para todos.
Trata la especificación de la API como código y gestiónala en un sistema de control de versiones junto con el código fuente y las configuraciones de políticas.
Recomendaciones de Oracle
especifica la API con el formato independiente de la implantación OpenAPI y almacénala en un repositorio proporcionado por Oracle Cloud Infrastructure (OCI) DevOps.
Implementa tus servicios con un enfoque ligero de código abierto, como Graal Development Kit for Micronaut o Helidon.
Implementa tus servicios en plataformas sin servidor, como Oracle Container Engine for Kubernetes u Oracle Functions, para facilitar el despliegue, las posibilidades de escalado y la rentabilidad.
Utiliza Oracle Cloud Infrastructure API Gateway para crear puntos finales públicos o privados protegidos y controlados a partir de la especificación de la API.
Utiliza Oracle Cloud Infrastructure Service Mesh para simplificar y proteger la comunicación entre los servicios alojados en el cluster de Oracle Container Engine for Kubernetes. OCI Service Mesh también te permite observar todo el tráfico de red entre tus servicios mediante las métricas y los logs emitidos por su componente de proxy que se ejecuta como un sidecar en los pods de las aplicaciones.
Descripción general
Un contenedor empaqueta código y sus dependencias como una unidad, para que las aplicaciones se ejecuten de forma rápida y confiable en varios entornos informáticos. Una imagen de contenedor es un archivo que, cuando se ejecuta, crea e inicia un contenedor en un entorno informático.
En comparación con las máquinas virtuales tradicionales, los contenedores son más pequeños, requieren menos recursos y tienen tiempos de inicio más rápidos. También son independientes de la plataforma y pueden ejecutar aplicaciones en cualquier lugar. Para aprovechar estas ventajas, descompón la aplicación en servicios que realizan funciones de negocio discretas y empaqueta cada servicio como contenedor. En las aplicaciones heredadas, sustituye gradualmente cada función existente de tu aplicación por un servicio en contenedores hasta que se refactorice toda la aplicación.
Detalles principales
Al empaquetarse el código y las dependencias de las aplicaciones en una sola unidad ejecutable (una imagen de contenedor), los contenedores son extremadamente portables. Combinando esta portabilidad con la abstracción de infraestructura, los contenedores aportan consistencia operativa a tu aplicación. Tanto si tu aplicación se ejecuta on-premises en un servidor físico como en la nube en una máquina virtual, produce los mismos resultados cada vez.
Gracias a esta reproducibilidad y previsibilidad consistentes, los contenedores simplifican los procesos DevOps y permiten a tus equipos de desarrollo desplegar tus aplicaciones más rápidamente. Al proporcionar aislamiento a nivel de proceso y, dado que frecuentemente se sustituyen, los contenedores simplifican y agilizan los procesos asociados a la solución de vulnerabilidades de software. El desglose de aplicaciones en servicios modulares en contenedores también los hace muy robustos. Un error o falla en un servicio individual no produce el cierre de toda tu aplicación y puede actualizar o aplicar parches a cada servicio independientemente del resto de la aplicación.
A diferencia de una máquina virtual, un contenedor no incluye un sistema operativo propio; en su lugar, comparte el sistema operativo de su host. Como resultado, los contenedores tienen un tamaño menor y un inicio más rápido que las máquinas virtuales. La mayoría de las imágenes de contenedor tienen decenas de megabytes de tamaño en comparación con las máquinas virtuales que pueden tener varios gigabytes y sus tiempos de inicio están en segundos en lugar de los minutos que tarda en iniciar las máquinas virtuales.
La mejor forma de ejecutar y ampliar tu aplicación con servicios modularizados en contenedores es desplegar un servicio por contenedor. Este enfoque aísla los servicios unos de otros, lo que elimina el tiempo de inactividad y permite una ampliación independiente para cada servicio.
Aunque puedes desplegar contenedores manualmente, es mejor utilizar un software de gestión de contenedores que se integre con la integración continua y las herramientas de despliegue continuo.
Recomendaciones de Oracle
Utiliza Oracle Cloud Infrastructure Registry (Container Registry) para almacenar las imágenes de contenedor y Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) para ejecutar y gestionar tus contenedores. Estos servicios totalmente gestionados están totalmente integrados con las capacidades de la plataforma OCI, disponibles en todas las regiones de Oracle Cloud y cumplen estándares normativos como PCI, ISO, SOC, HIPAA y FedRAMP.
Además de almacenar imágenes de contenedor en Container Registry, puedes almacenar listas de manifiestos (a veces denominadas imágenes de arquitectura múltiple) para admitir varias arquitecturas, como ARM y AMD64. Para identificar y mitigar posibles vulnerabilidades de seguridad, activa la exploración de imágenes en todas las imágenes cargadas en Container Registry. También debes firmar tus imágenes de contenedor para garantizar que solo las imágenes autorizadas y de confianza se despliegan en OKE.
Descripción general
La integración continua (CI) y la implementación continua (CD) son un juego de herramientas y procedimientos que los equipos de desarrollo utilizan para ofrecer cambios de código de forma frecuente y confiable. Las mejores prácticas de integración e implementación continuas incluyen revisiones de código y orientación para pruebas de unidades, pruebas de integración, registros de entrada de código, archivado de tickets e implementación de aplicaciones en entornos de desarrollo y prueba.
La integración continua describe una práctica en la que los desarrolladores suelen integrar sus cambios de código en la rama principal de un repositorio compartido. Los cambios de los desarrolladores se validan mediante la creación de una compilación y, a continuación, la ejecución de pruebas automatizadas en la compilación. Las pruebas garantizan que tu aplicación no se pierda cuando se integren nuevos cambios en la rama principal.
Las ventajas de la integración continua incluyen:
La entrega continua es un paso más allá de la integración continua: después de pasar las pruebas adecuadas, una creación se entrega automáticamente a un entorno de prueba y/o producción. El objetivo de la entrega continua es disponer siempre de una base de código lista para su despliegue en un entorno de producción del cliente.
Entre las ventajas adicionales de la entrega continua se incluyen:
La implementación continua va un paso más allá de la entrega continua: cada cambio que pase todas las pruebas se implementa automáticamente en el entorno de producción del cliente. No hay intervención humana: solo una prueba con fallas puede impedir que se implemente un nuevo cambio en producción. Sin intervención humana, la implementación continua depende en gran medida de una automatización de pruebas bien diseñada.
Entre las ventajas adicionales de la implementación continua se incluyen:
La integración y la entrega continuas ofrecen las mejores prácticas para almacenar, integrar, implementar y mantener código para automatizar la creación de aplicaciones. Estas mejores prácticas incluyen las siguientes:
Recomendaciones de Oracle
Utiliza el servicio DevOps para automatizar la implementación de las aplicaciones nativas en la nube. En primer lugar, almacena el código en un repositorio de código DevOps y crea una rama de versión. Trabaja en incrementos pequeños para realizar cambios en la rama de liberación y concilia los problemas en la rama diariamente para garantizar su estabilidad. A continuación, utiliza la funcionalidad de disparadores en el repositorio de código para iniciar automáticamente un pipeline de creación de DevOps.
Utiliza un único pipeline de creación de DevOps para crear todos los artefactos asociados al repositorio de código. Si la creación falla, configura el pipeline de creación para que espere una aprobación antes de finalizar. La solicitud de aprobación debe ir al confirmador que ha activado la creación, y debe resolver la incidencia con una nueva confirmación de código y, a continuación, aprobar la finalización de la creación. Para compilar correctamente, configura el pipeline de creación para entregar automáticamente los artefactos al servicio de registro de artefactos de Oracle Cloud Infrastructure y para disparar automáticamente un pipeline de implementación DevOps.
Añade Application Dependency Management para detectar vulnerabilidades de seguridad (CVE) en dependencias de aplicaciones durante las fases de desarrollo en un pipeline de creación de OCI DevOps. De esta forma, podrás detectar y corregir posibles vulnerabilidades de seguridad tan pronto como se identifiquen.
Utiliza Resource Manager para crear todos tus entornos de infraestructura en una zona de máxima seguridad y disfrutar automáticamente de seguridad en tus implementaciones. Mediante el gestor de recursos, puedes utilizar la infraestructura como código para automatizar la creación de la infraestructura en todas las regiones de forma coherente. A continuación, puedes configurar el pipeline de implementación DevOps para que se despliegue siempre en los recursos que has creado en la zona de seguridad.
Crea un único pipeline de implementación DevOps que despliegue todos los artefactos creados a partir de un único pipeline de creación. Organiza los entornos de implementación, como la región de OCI, el dominio de disponibilidad y el dominio de errores. Configura el pipeline con una estrategia de implementación canaria, dinámica o azul/verde. Configúralo también para disparar pruebas automáticamente. Activa OCI Monitoring y Application Performance Monitoring en tu aplicación e infraestructura para detectar problemas.
Si no se detectan problemas y las pruebas se completan correctamente, configura el pipeline de implementación para desplegar automáticamente los artefactos en el siguiente entorno de la estrategia de implementación hasta que los artefactos se desplieguen por completo en todos los entornos de producción. Al realizar la implementación en el entorno de producción, configura el pipeline para que se despliegue en todos los dominios de errores de un dominio de disponibilidad de uno en uno. Implementa cada dominio de disponibilidad dentro de una región de uno en uno y, a continuación, en cada región de uno en uno. Continúa utilizando OCI Monitoring y Application Performance Monitoring en la aplicación y la infraestructura para detectar problemas rápidamente. Configurar alertas y, si alguna métrica clave se reduce de forma repentina durante la implementación, fallará automáticamente y disparará una reversión a la versión anterior.
Visión general
Un servicio gestionado proporciona una funcionalidad específica sin que necesites realizar tareas de mantenimiento relacionadas con la optimización del rendimiento, la disponibilidad, el escalado, la seguridad o la actualización. Con un servicio gestionado, puedes centrarte en brindar funciones a tus clientes, en lugar de preocuparte por la complejidad de las operaciones.
Un servicio gestionado de Oracle Cloud Infrastructure (OCI) proporciona un componente ampliable y seguro para el desarrollo nativo en la nube. Utiliza servicios gestionados para desarrollar y ejecutar tu aplicación y almacenar tus datos. Obtén las mejores soluciones de su clase sin necesidad de conocimientos en cada área para crear y utilizar tu aplicación.
Detalles del principio
Los servicios gestionados permiten crear aplicaciones de alta disponibilidad, escalables, ágiles y de gran rendimiento con seguridad, conformidad y resiliencia.
Los servicios gestionados se hacen cargo de los aspectos más complejos de los componentes subyacentes de tu aplicación, lo que facilita el almacenamiento y la recuperación de datos, así como la creación y ejecución de tu aplicación. Se integran con conjuntos de herramientas que automatizan la creación, las pruebas y la implementación de tu aplicación. Mejoran la productividad y reducen el tiempo de comercialización.
Centralizan y automatizan varias tareas de gestión de infraestructura, eliminando los errores humanos y la necesidad de habilidades especializadas. La infraestructura subyacente se mantiene actualizada y segura, y los servicios te permiten supervisar y realizar un seguimiento de las modificaciones o el acceso, lo que garantiza la confidencialidad e integridad de tu aplicación y tus datos.
Tienen alta disponibilidad y posibilidad de ampliación, satisfacen las necesidades de tu aplicación y solo tendrás que pagar por lo que utilizas. Puedes empezar a pequeña escala sin experimentar ninguna merma del rendimiento o la confiabilidad.
Recomendaciones de Oracle
Recomendamos los siguientes servicios en la nube:
Estos servicios son altamente disponibles, de alto rendimiento y flexibles. Su infraestructura subyacente se gestiona y recibe los parches más recientes para garantizar que tu aplicación siga siendo segura.
Descripción general
El estado de una aplicación puede constar de muchos elementos, como cachés de datos, preferencias de un usuario, personalización, mensajes intercambiados entre servicios, la posición en un flujo de trabajo de varios pasos, el despliegue de aplicaciones, la configuración del tiempo de ejecución y una sesión de usuario (por ejemplo, la página que visitó un usuario por última vez o el tamaño y los elementos del carrito de compras de un usuario). Si se pierde el estado de tu aplicación, puede provocar una pérdida de datos, un mal funcionamiento en tu aplicación, una experiencia de usuario inadecuada y, a veces, una falla completa de la aplicación.
Si almacenas el estado de tu aplicación en sistemas de archivos locales o en la memoria de un único host, puede que se pierda si tu aplicación experimenta interrupciones, como reinicios o fallas de disco localizados. En su lugar, guarda el estado en almacenes de persistencia externos. Utiliza el menor número de almacenes de persistencia posible; idealmente, solo uno para proporcionar consistencia de datos.
Detalles del principio
Los elementos del estado de una aplicación se almacenan habitualmente en varios artefactos con distintos formatos, como objetos serializados, documentos JSON o XML o archivos de texto. Si estos elementos se almacenan en varios almacenes de persistencia, como sistemas de archivos externos, almacenes de mensajes, almacenes de objetos, varias bases de datos o almacenamiento de bloques elásticos, es posible que los diferentes almacenes de datos no se sincronicen y generen inconsistencias de estado. Las aplicaciones también deben implementar transacciones, uniones e idempotencia para garantizar la consistencia de los datos cuando el estado se debe actualizar como una unidad.
Al dispersar los elementos del estado de una aplicación en varias ubicaciones, aumentan las posibilidades de vulneración de la seguridad. Las operaciones del ciclo de vida, como la adición y eliminación de nodos, la aplicación de parches, la copia de seguridad y la recuperación, y la replicación para desastres y recuperación, se vuelven extremadamente complejas y requieren especial consideración para mantener la consistencia del estado en las distintas ubicaciones.
Como resultado, un mejor enfoque consiste en almacenar todos los datos de estado y de aplicación en una única base de datos si es posible. Los datos permanecen consistentes en un único almacén y son más fáciles de gestionar. Con este enfoque, se pueden sustituir las instancias de aplicación. Esto ayuda especialmente a arquitecturas de aplicaciones modernas, como microservicios elásticos o instancias efímeras donde existe una instancia solo para servir una o varias solicitudes. La agregación de un nodo se simplifica porque un nuevo nodo puede obtener la última copia del estado y la eliminación de un nodo no provoca la pérdida total del estado. Los parches se pueden aplicar de forma dinámica simplemente sustituyendo los ejecutables. Un nodo se puede restaurar a partir de copias de seguridad y adquirir el estado de la base de datos. El estado se puede replicar sistemáticamente como una unidad en diferentes regiones para la recuperación ante desastres. Tener un estado consistente en distintas regiones permite garantizar que no haya problemas funcionales en tu aplicación después de un failover o switchover.
Recomendaciones de Oracle
Si tu aplicación utiliza una base de datos, utiliza la misma base de datos para almacenar su estado. Una base de datos proporciona una mejor disponibilidad, integridad y seguridad que las alternativas, como archivos o representaciones en memoria. Lo ideal es utilizar una base de datos multimodelo (que pueda almacenar diferentes formatos) para almacenar todos los elementos del estado de la aplicación. El uso de una base de datos mulimodelo en lugar de varios almacenes de datos de un solo uso también permite lograr y mantener la coherencia en todos los elementos del estado de tu aplicación. (Nota: Aunque está permitido almacenar el estado almacenado en caché en la aplicación, la aplicación debe estar diseñada para utilizar la base de datos como fuente de datos y poder recrear su estado de la base de datos.) Oracle Database es una solución ideal para este fin. Almacena diferentes formatos y proporciona un rendimiento predecible, por lo que guardar el estado de tu aplicación en ella no disminuye el rendimiento de tu aplicación.
Si tu aplicación no utiliza una base de datos, utiliza otros almacenes de persistencia duradera, como Oracle Cloud Infrastructure Object Storage, para almacenar el estado. Si el estado de la aplicación no se puede mantener en un solo almacén de datos, diseña tu aplicación para almacenar su estado en varios almacenes de datos que se pueden mantener sincronizados y recuperar como una unidad consistente después del fallo.
A continuación, te ofrecemos algunas recomendaciones para almacenar el estado en Oracle Database.
Descripción general
Tu aplicación puede utilizar datos en diversos formatos, como tabulares (relacionales), no estructurados, XML, JSON, espaciales o grafos. Habitualmente, esta variedad requería un tipo de base de datos diferente para cada formato de datos. Por ejemplo: una base de datos relacional para datos relacionales, un almacén de documentos para datos no estructurados o una base de datos de grafos para datos vinculados jerárquicamente. Sin embargo, el uso de varias bases de datos a menudo conlleva una complejidad operativa adicional e incoherencias de datos. En su lugar, utiliza una única base de datos de varios modelos para almacenar, indexar y buscar varios tipos y formatos de datos.
Aprovecha la funcionalidad de la base de datos para simplificar la lógica de tus aplicaciones. Por ejemplo, utiliza SQL para consultas, uniones y análisis; utilice transacciones para garantizar la consistencia y el aislamiento; y utiliza funcionalidades de análisis y algoritmos de aprendizaje automático integrados para evitar transferencias de datos innecesarias. Para proteger los datos confidenciales, utiliza las funciones de seguridad y el control de acceso de la base de datos y usa la replicación para mejorar la disponibilidad, la escalabilidad y la resiliencia de las aplicaciones.
Detalles del principio
Utiliza una base de datos multimodelo para almacenar diferentes tipos de datos, como documentos JSON, gráficos de propiedades y datos relacionales. Las bases de datos multimodelo avanzadas ofrecen soporte completo para cualquier tipo de datos almacenados en la base de datos. Puedes almacenar un nuevo documento JSON, insertar filas relacionales y actualizar un gráfico de propiedades todo dentro de la misma transacción ACID. Puedes utilizar sentencias SQL para unir, filtrar y agregar estos diferentes tipos de datos, lo que proporciona las sólidas garantías de coherencia y simultaneidad a las que estás acostumbrado en las bases de datos relacionales. Además de ofrecer este amplio conjunto de funciones, una base multimodelo también se puede utilizar como almacén de datos de un solo uso, al que se accede mediante API distintas de SQL, como API de REST, API de almacén de documentos y API de grafos.
Una ventaja clave del uso de una base de datos multimodelo es su capacidad de reutilización. Aunque los datos pueden ser de diferentes tipos y unidades, la tecnología subyacente para gestionar esos datos no cambia. Esto significa que no necesitas aprender distintas tecnologías de base de datos y entender cómo usarlas y ajustarlas para cada tipo de datos. Y como la tecnología permanece constante, no tienes que reescribir tu código de aplicación. Además, una base de datos multimodelo mejora la resiliencia de tu aplicación mediante la reducción de la fragmentación de datos, lo que facilita la copia de seguridad y la recuperación.
Recomendaciones de Oracle
Utiliza Oracle Autonomous Database, una base de datos convergente multimodelo, para almacenar, gestionar y analizar todos sus datos. Facilita el mantenimiento de la aplicación mediante vistas para exponer los datos en tablas, de modo que el esquema subyacente se pueda cambiar sin afectar a tus aplicaciones existentes. Utiliza la redefinición basada en edición para actualizar tu aplicación sin tiempo de inactividad. Utiliza Oracle Data Safe para implementar y evaluar controles de seguridad, enmascarar datos confidenciales y accesos a datos de auditoría. Utiliza Oracle Data Guard como caché de lectura altamente escalable para tus datos, y con el fin de mantener una copia de seguridad consistente para la recuperación ante desastres.
Oracle Autonomous Database realiza tareas operativas sin que la carga de trabajo se vea afectada o interrumpida. Esto significa que no es necesario agregar lógica de compensación compleja a la aplicación para manejar escenarios de escalado o failover. La base de datos gestiona los recursos, como la CPU y el almacenamiento, de forma independiente y proporciona una escalabilidad bidireccional flexible.
Descripción general
Una única solicitud de usuario puede seguir una ruta compleja a través de los múltiples servicios o microservicios que conforman las aplicaciones modernas. El rastreo de punta a punta sigue el recorrido de cada solicitud desde su origen hasta las profundidades de tu infraestructura y te ayuda a depurar la causa raíz de los problemas. La supervisión se suele utilizar como una herramienta de diagnóstico, alertando a los desarrolladores cuando tu aplicación no funciona según lo esperado.
Los desarrolladores, administradores y responsables de seguridad deben mantener una comprensión oportuna y autorizada del estado, el rendimiento, el estado operativo y los posibles incidentes de seguridad de tu aplicación. Esta comprensión garantiza que el funcionamiento y el rendimiento de tu aplicación cumplan las expectativas durante su ciclo de vida. Además, permite optimizar el diagnóstico de incidentes y la recuperación de aplicaciones. El seguimiento y la supervisión integrales deben ser sencillos de implementar y gestionar sin añadir complejidad a tu aplicación.
Descripción del contexto
Es posible que tu aplicación no se comporte como se espera de varias formas. Por ejemplo, puede funcionar mal o sencillamente fallar. A diferencia de las aplicaciones monolíticas tradicionales, las aplicaciones creadas a partir de microservicios presentan desafíos de diagnóstico adicionales debido a las múltiples interacciones entre sus componentes.
El rastreo es la mejor forma de entender rápidamente lo que ocurre con una solicitud de usuario cuando recorre los microservicios y otros componentes, como la infraestructura, que componen la aplicación. Utiliza el rastreo de extremo a extremo para recopilar datos sobre cada solicitud de usuario y, a continuación, revisa los datos para ver dónde puede estar experimentando cuellos de botella y latencias tu aplicación. Por ejemplo, una solicitud puede transmitirse y progresar a través de varios microservicios antes de ser satisfecha. Sin una forma de rastrear toda la ruta de una solicitud, no hay forma de determinar la causa raíz de su fallo.
Por lo general, la supervisión está mucho más enfocada: mejora tu comprensión de cómo se comporta tu aplicación mediante su instrumentación para posteriormente recopilar, agregar y analizar métricas. La supervisión de extremo a extremo también permite una integración inteligente y automatizada con herramientas que ajustan dinámicamente la capacidad de los recursos y coordinan las respuestas a eventos inesperados.
Disponer de una comprensión clara, precisa y oportuna del estado operativo y del historial de una aplicación no consiste solo en medir la experiencia de un usuario final. Es posible que también necesites mantener el cumplimiento con jurisdicciones regionales o nacionales, lo que puede requerir la capacidad de generar informes de actividad detallados a petición o acreditaciones sobre el manejo de elementos de datos confidenciales específicos.
En general, las soluciones de supervisión deben ser compatibles con herramientas de terceros y alinearse con las herramientas administrativas de tu entorno en particular. Es importante mantener la flexibilidad del diseño y evitar la dependencia de proveedores.
Recomendaciones de Oracle
Crea funcionalidades de seguimiento y supervisión integrales en tu aplicación desde el principio y garantiza su coherencia a lo largo de todo su ciclo de vida. Las capacidades no deben agregar ninguna complejidad al desarrollo, las pruebas y la implementación, sino ser fáciles de implementar y gestionar. Cuando sea posible, adopta soluciones que se amplíen para adaptarse a la diversidad de plataformas que utilizas actualmente y que podrías implementar en el futuro.
Los servicios de OCI, como Monitoring, ofrecen soporte listo para usar en materia de monitoreo. Además, puedes ampliar muchos servicios de OCI a tus componentes de aplicación mediante una experiencia de gestión e implementación consistente a través de las API y los SDK compatibles. Por ejemplo, puedes agregar recopilación de métricas de supervisión automatizada o captura de logs con almacenamiento centralizado para todas las máquinas virtuales y aplicaciones.
Durante el desarrollo y las pruebas, puedes configurar servicios para recopilar solo información básica de depuración o pruebas de rendimiento. A medida que tu aplicación se acerca a la implementación de producción, aumenta el alcance, la frecuencia y la trazabilidad de la información recopilada realizando actualizaciones simples de los parámetros de configuración existentes.
Oracle Cloud Infrastructure Service Mesh capta automáticamente una serie de métricas y logs de comunicación para los servicios que se ejecutan en Oracle Container Engine for Kubernetes. Puedes utilizar estos datos para realizar un seguimiento del estado de tus servicios en la malla y mejorar el desempeño de las aplicaciones.
Utiliza una recopilación de datos sólida y centralizada para todo el entorno de arrendamiento en la nube, con el fin de proporcionar una única ubicación para el análisis, la investigación coordinada y la generación de alertas. Service Connector Hub ofrece respuestas flexibles, coherentes y personalizables a los eventos. Logging Analytics permite realizar análisis e investigaciones eficientes de todos tus sistemas de registro de eventos en la nube (y externos). También puedes utilizar OCI Service Connector Hub, Functions, and Notifications para transformar las métricas y registros procesados en alertas procesables. Además, puedes aprovechar nuestras integraciones con productos y servicios de terceros, como Splunk o Grafana.
Los siguientes servicios de OCI te ayudan a consolidar tus funciones de registro, supervisión y seguimiento en los entornos que alojan tu aplicación: Logging, Monitoring, Logging Analytics, Application Performance Monitoring, OS Management, Database Management y Java Management Service. Estos servicios totalmente gestionados se integran con recursos de infraestructura de OCI comunes y proporcionan mecanismos compatibles para integrar tus recursos de aplicaciones personalizadas.
Descripción general
Un punto único de falla es un componente de una aplicación que, al sufrir una falla, provoca que la aplicación en su conjunto no esté disponible o no sea confiable. Al desarrollar una aplicación para que sea de alta disponibilidad y confiable, utiliza la replicación de datos automatizada para garantizar que la falla de un solo componente no conlleve la pérdida de datos.
La replicación de datos entre máquinas y el uso de redes redundantes te protege frente a fallas rutinarias de máquinas y redes. La replicación de datos en centros de datos (o "dominios de disponibilidad") en varias regiones geográficas te protege contra desastres localizados, como incendios, terremotos, inundaciones o huracanes.
Detalles del principio
Para que tu aplicación logre una alta disponibilidad, debes asegurarte de que los datos de los que depende permanezcan disponibles cuando se producen fallas. La clave de la alta disponibilidad de los datos es la redundancia mediante la replicación de datos automatizada.
La replicación es el proceso de copiar y mantener los objetos de base de datos, como las tablas, en varias bases de datos que componen un sistema de base de datos distribuida. Los cambios aplicados en una ubicación se capturan y se almacenan localmente antes de ser reenviados y aplicados en cada una de las réplicas situadas en locales remotos.
Las bases de datos replicadas pueden funcionar en dos modos distintos: activo-pasivo y activo-activo. En el modo activo-pasivo, hay una sola réplica principal y una o más réplicas secundarias, y solo la réplica principal participa en el procesamiento de los datos de la aplicación. En el modo activo-activo, todas las réplicas participan en el procesamiento de datos. El modo activo-activo permite lograr un mejor uso de los recursos y una mayor disponibilidad porque no es necesario un failover primario-secundario.
La redundancia garantiza que las réplicas de datos fallen de forma independiente. Las fallas de máquinas o discos suelen ser independientes, pero una falla de red o de energía puede provocar que un grupo de máquinas falle simultáneamente. Para protegerte contra estos incidentes, la red y la infraestructura de energía deben ser también redundantes, y las réplicas de datos se deben colocar cuidadosamente en diferentes máquinas y ubicaciones que no pueden fallar juntas.
Recomendaciones de Oracle
Los centros de datos de OCI están cuidadosamente diseñados para eliminar los puntos únicos de falla catastrófica. Un centro de datos o dominio de disponibilidad típico contiene varias unidades de fallo independientes conocidas como dominios de errores. Dos dominios de errores independientes no pueden fallar juntos. De manera similar, una sola región puede contar con varios dominios de disponibilidad separados geográficamente para garantizar que dos de ellos no puedan fallar al mismo tiempo.
Utiliza servicios de almacenamiento OCI, como Block Volumes, Object Storage y File Storage, para replicar datos en los dominios de errores y disponibilidad, con el fin de que ningún punto de falla pueda afectar la disponibilidad de los datos de la aplicación. Aprovecha el aislamiento de fallas resiliente integrado en OCI usando Container Engine for Kubernetes para desplegar tu aplicación en varios dominios de errores y disponibilidad. Oracle Autonomous Database, Data Guard y GoldenGate proporcionan replicación de hardware y software activa-activa para una alta disponibilidad, así como actualizaciones y aplicación de parches sin tiempo de inactividad. Utiliza estos servicios gestionados para garantizar una alta disponibilidad de tus datos sin necesidad de crear y mantener tu propia infraestructura de almacenamiento.
Descripción general
La defensa en profundidad es un enfoque en el que varios controles de seguridad redundantes e independientes actúan como capas de defensa para una aplicación. Las capas están diseñadas para proporcionar seguridad incluso si una de ellas falla, por ejemplo, un cortafuegos combinado con detección de intrusiones.
Sin embargo, la gestión y configuración manual de los controles de seguridad puede ser compleja, opaca y propensa a errores, tanto individuales como colectivos. En su lugar, protege tu aplicación y sus datos mediante controles de seguridad automatizados.
Descripción del contexto
La defensa en profundidad gestiona los riesgos mediante el uso de diversos controles que abarcan los elementos físicos, técnicos, administrativos, operativos, de personal y de procedimiento de la seguridad. La independencia de estos controles significa que proporcionan una defensa profunda que da respuesta a las fallas, exploits u otras vulnerabilidades de seguridad. Estos controles están diseñados para abordar los riesgos de diferentes maneras y proporcionar funciones de registro, auditoría y más para garantizar que los intentos de violación de la seguridad se detecten y se informe a las partes interesadas pertinentes.
En lugar de tener que configurar manualmente un conjunto complejo de controles de seguridad, utiliza controles automatizados sencillos y prescriptivos para proteger tu aplicación. Los controles de seguridad automatizados eliminan los errores humanos (una causa raíz de muchos incidentes de seguridad) y te ayudan a proteger tu aplicación y sus datos necesidad de convertirte en un experto en seguridad.
Recomendaciones de Oracle
Implanta controles de seguridad automatizados y de fácil uso en todas las etapas del ciclo de vida de tu aplicación, incluidos el desarrollo, la creación, las pruebas, la implementación y el tiempo de ejecución. Verifica los usuarios, los permisos y las políticas de acceso en cada paso del ciclo de vida y asegúrate de que el acceso se otorga solo cuando sea necesario. Detecta problemas de seguridad que se introducen al principio del ciclo de vida de desarrollo del software. La detección temprana garantiza que tu aplicación se implemente en producción con mejores prácticas de arquitectura de seguridad y que los problemas de seguridad operativa causados por configuraciones incorrectas o vulnerabilidades reveladas se detecten y mitiguen.
OCI ofrece diversos servicios de seguridad automatizados para proteger tu aplicación y tus datos. A continuación te ofrecemos algunas recomendaciones para utilizar los servicios de OCI: