Professional Documents
Culture Documents
--------------------------------
DevOps
3rd IBM Limited Edition
by Sanjeev Sharma and Bernie Coyne
--------------------------------------------------------
https://www.redeszone.net/2017/12/31/diferencias-virtualbox-contenedor-docker/
La principal diferencia entre ambas tecnologías es que, por un lado, cuando
virtualizamos un sistema operativo
con VirtualBox instalamos y ejecutamos el 100% del sistema operativo, con su
kernel, su entorno, sus librerías, sus dependencias, etc.
Igual que instalamos Windows o Linux en un ordenador real se instala al completo en
VirtualBox.
Cuando utilizamos los contenedores de Docker, por ejemplo, la cosa cambia. En lugar
de virtualizar un sistema operativo completo,
solo creamos un pequeño kernel con las librerías y dependencias necesarias para
realizar nuestra tarea,
obviando todo lo demás. De esta manera, los contenedores no son un sistema
operativo virtual como tal,
sino más bien se entienden como “paquetes” que se ejecutan aislados sobre el
sistema operativo principal,
pero sin depender de un sistema virtual.
------------------------------------------------------
Characteristics of Microservices
Independent Technology Stacks.
Independent Scaling.
Independent Evolution of Features.
Stable Interfaces – Standardized Communication.
Componentization via Services.
Favors Cross-Functional Teams.
---------------------------------------------
Understanding the CAP theory Before we dig into the details we have to discuss what
CAP actually means.
CAP is an abbreviation for the following three features:
• Consistency: This feature indicates whether all the nodes in a cluster see the
same data at the same time or not.
• Availability: This feature indicates if it is certain that you will receive an
answer to every request.
Can a user consider all the nodes in a cluster to be available? Think of data
or state information split between two machines.
A request is made, and machine 1 has some of the data and machine 2 has the
rest of the data.
If either machine goes down, not all the requests can be fulfilled, because
not all of the data or state information is available entirely on either machine.
• Partition tolerance: This feature indicates if the system will continue to work
if arbitrary messages are lost on the way.
A Network Partition event occurs when a system is no longer accessible (think
of a network connection failing).
A different way of considering partition tolerance is to think of it as
message passing.
If an individual system can no longer send/receive messages to/ from other
systems, it has been effectively partitioned out of the network.
Propagating Updates
Asynchronous (Lazy / Store and Forward) - Post commit sends information to all
other systems involved in the distribution. – Trade Off: Data synchronization and
conflict resolution
Synchronous (Eager) – Pre commit sends information to all other systems in the
distribution and verifies a commit or roll back on each transaction for the entire
distribution. – Trade Off: Performance and scalability
----
CREATE TABLE empl (
NAME TEXT PRIMARY KEY,
boss TEXT NULL DEFAULT NULL
);
INSERT INTO empl VALUES ('Paul',NULL),('Luke','Paul'),('Kate','Paul'),
('Marge','Kate'),('Edith','Kate'),('Pam','Kate'),('Carol','Luke'),('John','Luke'),
('Jack','Carol'),('Alex','Carol');
WITH RECURSIVE t(LEVEL,path,boss,NAME) AS (
SELECT 0,NAME,boss,NAME FROM empl WHERE boss IS NULL
UNION
SELECT LEVEL + 1, path || ' > ' || empl.NAME, empl.boss, empl.NAME FROM empl JOIN
t ON empl.boss = t.NAME
) SELECT * FROM t ORDER BY path;
++++++++++++++++++++
CREATE TABLE empl (
NAMES TEXT PRIMARY KEY,
boss TEXT NULL DEFAULT NULL
);
INSERTS INTO empl VALUES ('Paul',NULL),('Luke','Paul'),('Kate','Paul'),
('Marge','Kate'),('Edith','Kate'),('Pam','Kate'),('Carol','Luke'),('John','Luke'),
('Jack','Carol'),('Alex','Carol');
WITH RECURSIVE t(LEVEL,path,boss,NAME) AS (
SELECT 0,NAME,boss,NAME FROM empl WHERE boss IS NULL
UNION
SELECT LEVEL + 1, path || ' > ' || empl.NAME, empl.boss, empl.NAME FROM empl JOIN
t ON empl.boss = t.NAME
) SELECT * FROM t ORDER BY path;
---------------
CREATE TABLE empl (
NAMES TEXT PRIMARY KEY,
boss TEXT NULL DEFAULT NULL
);
INSERTS INTO empl VALUES ('Paul',NULL),('Luke','Paul'),('Kate','Paul'),
('Marge','Kate'),('Edith','Kate'),('Pam','Kate'),('Carol','Luke'),('John','Luke'),
('Jack','Carol'),('Alex','Carol');
select empl.NAME || ' > ' || empl.NAME, empl.boss,
empl.NAME from empl where name = (select name from empl where name = null)
union
SELECT * FROM t ORDER BY NAME;
https://goalkicker.com/,
PostgreSQL Notes for Professionals, pag 31
--
Using VACUUM
The PostgreSQL SQL VACUUM command has two uses:
• Reclaiming database storage space
• Updating optimizer statistics
The VACUUM command has the following syntax:
---
Usando VACÍO
El comando PostgreSQL SQL VACUUM tiene dos usos:
Recuperar el espacio de almacenamiento de la base de datos
Actualización de las estadísticas del optimizador
El comando VACUUM tiene la siguiente sintaxis:
Using VACUUM
The PostgreSQL SQL VACUUM command has two uses:
• Reclaiming database storage space
• Updating optimizer statistics
The VACUUM command has the following syntax:
-----------------------------------------------------------------------------------
----------
-----------------------------------------------------------------------------------
------------
Características de GraphQL GraphQL tiene algunas ventajas claras sobre REST,
especialmente cuando se trata de algunas de las características mencionadas en
GraphQL de la siguiente manera:
Consultas jerárquicas: la estructura de las consultas se ve exactamente como los
datos de respuesta. Un cliente desafía la respuesta que desea y cómo debería verse,
y los datos de respuesta se parecerán automáticamente a los que el cliente
solicitó.
Introspectivo: GraphQL le permite al cliente consultar sobre los campos, tipos y
consultas compatibles. Esto es lo que permite a GraphQL realizar la
autocompletación de consultas y proporcionar documentación de esquemas. Con esta
característica, el cliente puede saber exactamente qué operaciones son compatibles
y los campos requeridos y qué tipo de resultados se pueden devolver. A partir de
esa información general, el cliente puede elegir cuidadosamente solo las partes
relevantes.
Fuertemente tipado: la presencia de un sistema de tipo permite la validación de
consultas sintácticas y el servidor responde con mensajes de error apropiados. Esto
implica que, si el esquema en el servidor desafía que está esperando que un
parámetro de consulta sea un entero, un tipo de datos diferente dará como resultado
un error de validación. La mayoría de los editores de consultas GraphQL han sido
equipados con la capacidad de detectar estos errores en función del esquema.
Consultas especificadas por el cliente: el cliente decide qué datos desean a través
de diferentes campos en las consultas. Esta es una gran ventaja sobre REST, donde
la función GET recupera todos los datos de la API.
--
Queries jerárquicos: La estructura de los queries se ve exactamente como la
información de respuesta.
Un cliente desafía qué respuesta ellos quieren y lo que debería verse y los datos
de respuesta automáticamente se parecerán a lo que el cliente pidió.
--
Cuales son las características de GraphQL
GraphQL tiene algunas ventajas claras sobre REST, especialmente cuando se trata de
algunas de las características mencionadas en GraphQL de la siguiente manera:
--
Consultas jerárquicas: La estructura de las consultas se ve exactamente como los
datos de respuesta.
Introspectivo: GraphQL le permite al cliente consultar sobre los campos, tipos y
consultas compatibles.
Esto es lo que permite a GraphQL realizar la
autocompletación de consultas y proporcionar documentación de esquemas.
Consultas especificadas por el cliente: El cliente decide qué datos desean a través
de diferentes campos en las consultas.
------
Mutation
Las queries nos permiten obtener datos, pero toda aplicación necesita una forma de
crear, modificar, eliminar o interactuar con estos datos.
Estas acciones son llamadas mutaciones. Una mutación es similar a una función:
recibe ciertos parámetros, realiza un cambio y devuelve una respuesta. Así:
Mientras que las consultas son sinónimos del método REST que obtiene datos: GET.
Las mutaciones son sinónimos de los métodos REST que crean y actualizan datos como,
POST, PUT, PATCH y DELETE.
Beginning GraphQL
Brian Kimokoti
-------------------------
synchronous_standby_names (string)
vacuum_defer_cleanup_age (integer)
hot_standby (boolean)
max_standby_archive_delay (integer)
max_standby_streaming_delay (integer)
wal_receiver_status_interval (integer)
hot_standby_feedback (boolean)
wal_receiver_timeout (integer)
wal_retrieve_retry_interval (integer)
-------------------------------
patrón de arquitectura de software
El patrón de componentes:
Se utiliza no solo en el desarrollo de software, sino también en la fabricación,
construcción y otros campos.
Consiste en combinar bloques de construcción más pequeños y discretos en productos
terminados más grandes.
En el desarrollo de software, los componentes son unidades lógicas que se pueden
combinar en aplicaciones más grandes.
Los componentes tienden a tener lógica interna y propiedades que están protegidas u
ocultas de la aplicación más grande.
Uso del patrón de componentes en aplicaciones web A medida que las aplicaciones web
continúan haciéndose más sofisticadas,
la necesidad de poder construirlas a partir de componentes más pequeños y discretos
se vuelve más convincente.
Los componentes permiten que las aplicaciones se construyan de una manera que evite
que se conviertan en un desorden del código spaghetti.
En su lugar, el diseño basado en componentes nos permite razonar sobre partes
específicas de la aplicación de forma aislada de las otras partes,
y luego podemos unir la aplicación en un punto de conexión completo y completo a
través de un acuerdo. Además,
los costos de mantenimiento son menores porque la lógica interna de cada componente
se puede administrar por separado sin afectar las otras partes de la aplicación.
Y poner las aplicaciones juntas utilizando componentes de autodescripción hace que
la aplicación sea más fácil de entender a un nivel más alto de abstracción.
--
Modelo-vista-controlador (MVC)
es un patrón de arquitectura de software, que separa los datos y la lógica de
negocio de una aplicación de su representación
y el módulo encargado de gestionar los eventos y las comunicaciones.
Para ello MVC propone la construcción de tres componentes distintos que son el
modelo, la vista y el controlador, es decir,
por un lado define componentes para la representación de la información,
y por otro lado para la interacción del usuario.12 Este patrón de arquitectura de
software se basa en
las ideas de reutilización de código y la separación de conceptos, características
que buscan facilitar
la tarea de desarrollo de aplicaciones y su posterior mantenimiento.34
---
El patrón Composite sirve para construir objetos complejos a partir de otros más
simples y similares entre sí,
gracias a la composición recursiva y a una estructura en forma de árbol.
Esto simplifica el tratamiento de los objetos creados, ya que al poseer todos ellos
una interfaz común, se tratan todos de la misma manera.
Dependiendo de la implementación, pueden aplicarse procedimientos al total o una de
las partes de la estructura compuesta como si de un nodo final se tratara,
aunque dicha parte esté compuesta a su vez de muchas otras. Un claro ejemplo de uso
extendido de este patrón se da en los entornos de programación 2D para aplicaciones
gráficas.
Un videojuego puede contener diferentes capas "layers" de sprites (como una capa de
enemigos)
pudiéndose invocar un método que actúe sobre toda esta capa de sprites a la vez
(por ejemplo, para ocultarlos, darles un filtro de color etc.).
--
El patrón modelo–vista–modelo de vista (en inglés, model–view–viewmodel, abreviado
MVVM) es un patrón de arquitectura de software.
Se caracteriza por tratar de desacoplar lo máximo posible la interfaz de usuario de
la lógica de la aplicación.
El modelo: Representa la capa de datos y/o la lógica de negocio, también denominado
como el objeto del dominio.
El modelo contiene la información, pero nunca las acciones o servicios que la
manipulan. En ningún caso tiene dependencia alguna con la vista.
La vista: La misión de la vista es representar la información a través de los
elementos visuales que la componen.
Las vistas en MVVM son activas, contienen comportamientos, eventos y enlaces a
datos que, en cierta manera, necesitan tener conocimiento del modelo subyacente.
Modelo de vista: El modelo de vista es un actor intermediario entre el modelo y la
vista, contiene toda la lógica de presentación y se comporta como una abstracción
de la interfaz.
La comunicación entre la vista y el viewmodel se realiza por medio los enlaces de
datos.
G14577