Integrates: Andrés Felipe Cortes Amaya
Carlos Alberto Hernandez
GNUnify - 2013 1
Las aplicaciones Distribuidas requieren diferentes formas de
coordinación:
 Configuración
 Pertenecía a un grupo
 Elección del Líder
GNUnify - 2013 2
GNUnify - 2013 3
Un sistema distribuido consiste en múltiples
computadoras que se comunican a través de
una red informática e interactúan entre sí
para lograr un objetivo común.
La red es confiable.
La latencia es cero.
El ancho de banda es infinito.
La red es segura.
La topología no cambia.
Hay un administrador.
El costo de transporte es cero.
La red es homogénea.
GNUnify - 2013 4
Coordinación: Un acto que los nodos múltiples
deben realizar juntos.
Ejemplos:
Membresías de grupos
Cierre
Publicador/subscritor
Elección de lider
Sincronización
Conseguir la coordinación del nodo correcta es
muy difícil!
GNUnify - 2013 5
GNUnify - 2013 6
ZooKeeper permite que los procesos distribuidos
se coordinen entre sí a través de un espacio de
nombres jerárquico compartido de los registros
de datos.
- ZooKeeper Wiki
ZooKeeper es mucho más que un
servidor de bloqueo distribuido!
GNUnify - 2013 7
Un servicio de coordinación de alto rendimiento
y código abierto para aplicaciones distribuidas.
Expone servicios comunes en una interfaz
sencilla:
Nombre
Gestión de la configuración
Bloqueos y sincronización
Grupo de servicios
… los desarrolladores no tiene que escribir desde cero
Construir sus propias necesidades.
GNUnify - 2013 8
Administración de Configuración
Los nodos del miembro del clúster arrancan la configuración
desde una fuente centralizada de forma desatendida
Implementación / aprovisionamiento más sencillo
Gestión de clústeres distribuidos
Entradas de nodos / salidas
Estados de los nodos en tiempo real
Servicio de nomenclatura - p. DNS
Sincronización distribuida - bloqueos, barreras, colas
Elección de líder en un sistema distribuido.
Registro de datos centralizado y altamente confiable
(simple)
GNUnify - 2013 9
GNUnify - 2013 10
El servicio ZooKeeper se repite en un conjunto de máquinas
Todas las máquinas almacenan una copia de los datos (en memoria)
Se elige un líder en el inicio del servicio
Los clientes sólo se conectan a un único servidor de ZooKeeper y mantienen una
conexión TCP.
El cliente puede leer desde cualquier servidor ZooKeeper, escribe a través del líder y
necesita un consenso mayoritario.
ZooKeeper tiene un espacio de nombre jerárquico.
Cada nodo en el espacio de nombres se llama como un
ZNode.
Cada ZNode tiene datos (dado como byte []) y
opcionalmente puede tener hijos.
Padre: "foo"
| | | |
| | | |
`- child3:" huevos "
`- nieto1:" 42 "
Rutas de ZNode:
Canónicos, absolutos, separados por slash
Sin referencias relativas.
Los nombres pueden tener caracteres Unicode
GNUnify - 2013 11
Mantenga una estructura de
estadísticas con números de versión
para cambios de datos, cambios de
ACL y marcas de tiempo.
El número de versiones aumenta
con los cambios Los datos se leen y
escriben en su totalidad
GNUnify - 2013 12
Image: http://helix.incubator.apache.org/Architecture.html
Nodos persistentes
Existe hasta que se borre explícitamente
Nodos Efímeros
Existe mientras la sesión esté activa
No puede tener hijos
Nodos de Secuencia (Nombres Únicos)
Añadir un monótonamente creciente contra el final
de la ruta
Se aplica tanto a los nodos persistentes y efímeros
GNUnify - 2013 13
GNUnify - 2013 14
Operation Type
create Write
delete Write
exists Read
getChildren Read
getData Read
setData Write
getACL Read
setACL Write
sync Read
ZNodes are the main entity that a programmer access.
[zk: localhost:2181(CONNECTED) 0] help [zk: localhost:2181(CONNECTED) 1] ls /
ZooKeeper -server host:port cmd args [hbase, zookeeper]
connect host:port
get path [watch] [zk: localhost:2181(CONNECTED) 2] ls2 /zookeeper
ls path [watch] [quota]
set path data [version] cZxid = 0x0
rmr path ctime = Tue Jan 01 05:30:00 IST 2013
delquota [-n|-b] path mZxid = 0x0
quit mtime = Tue Jan 01 05:30:00 IST 2013
printwatches on|off pZxid = 0x0
create [-s] [-e] path data acl cversion = -1
stat path [watch] dataVersion = 0
close aclVersion = 0
ls2 path [watch] ephemeralOwner = 0x0
history dataLength = 0
listquota path numChildren = 1
setAcl path acl
getAcl path [zk: localhost:2181(CONNECTED) 3] create /test-znode HelloWorld
sync path Created /test-znode
redo cmdno [zk: localhost:2181(CONNECTED) 4] ls /
addauth scheme auth [test-znode, hbase, zookeeper]
delete path [version] [zk: localhost:2181(CONNECTED) 5] get /test-znode
setquota -n|-b val path HelloWorld
GNUnify - 2013 15
Los clientes pueden configurar relojes en znodes:
NodeChildrenChanged
NodeCreated
NodeDataChanged
NodeDeleted
Los cambios en un znode activan el reloj y ZooKeeper
envía al cliente una notificación.
Los relojes son disparadores de una vez.
Los relojes son siempre ordenados.
El cliente ve el evento visto antes de los nuevos datos
de znode.
El cliente debe manejar casos de latencia entre
obtener el evento y enviar una nueva solicitud para
obtener un reloj.GNUnify - 2013
16
Los métodos API son sincronizados, así como no
sincronizados
Sincronizar:
exists(“/test-cluster/CONFIGS", null);
No sincronizados:
exists("/test-cluster/CONFIGS", null, new StatCallback() {
@Override
public processResult(int rc, String path, Object ctx, Stat stat)
{
//process result when called back later
}
}, null);
GNUnify - 2013 17
GNUnify - 2013 18
Las solicitudes de lectura se procesan localmente en el servidor
ZooKeeper al que el cliente está conectado actualmente
Las peticiones de escritura se envían al líder y pasan por el
consenso mayoritario antes de que se genere una respuesta.
Consistencia secuencial: Las actualizaciones se aplican en
orden
Atomicidad: las actualizaciones tienen éxito o fallan
Imagen de sistema único: Un cliente ve la misma vista del
servicio independientemente del servidor ZK con el que se
conecta.
Confiabilidad: las actualizaciones persisten una vez
aplicadas, hasta que sobrescriben algunos clientes.
Oportunidad: Se garantiza que la visión de los clientes
sobre el sistema esté actualizada dentro de un plazo
determinado. (Eventual Consistencia)
GNUnify - 2013 19
Cada host de cliente i, i: = 1 .. N
1. Ver en / miembros
2. Crear / Miembros / host - $ {i} como
nodos efímeros
3. Entradas de Nodos o salidas genera
alerta
4 Mantener la actualización / miembros
/ host - $ {i} periódicamente para los
cambios de estado del nodo
(Carga, memoria, CPU, etc.)
host-N
Cluster
host-2
host-1
/members
GNUnify - 2013 20
1. Un znode, dice "/ svc / election-path"
2. Todos los participantes en el proceso
electoral crean un nodo efímero-
secuencial en el mismo camino
electoral.
3. El nodo con el número de secuencia
más pequeño es el líder.
4. Cada nodo "seguidor" escucha el nodo
de la siguiente secuencia inferior.
5. Al retirar el líder, vaya a Elección-
camino y encontrar un nuevo líder, o
convertirse en el líder si tiene el
número de secuencia más bajo.
6. Al vencimiento de la sesión verifique el
estado de elección y vaya a elección si
es necesario
GNUnify - 2013 21
Suponiendo que hay N clientes tratando
de adquirir un bloqueo.
Los clientes crean un znode efímero y
secuencial bajo la ruta / Cluster /
_locknode_
Clientes solicita una lista de hijos para el
znode de bloqueo (es decir, _locknode_)
El cliente con la menor ID de acuerdo con
el orden natural mantendrá la cerradura.
Otros clientes establecen relojes en el
znode con id inmediatamente anterior a su
propio id
Revisa periódicamente la cerradura en
caso de notificación.
El cliente que desea liberar un bloqueo
elimina el nodo, lo que desencadena el
siguiente cliente en línea para adquirir el
bloqueo.
ZK
|---Cluster
+---config
+---memberships
+---_locknode_
+---host1-3278451
+---host2-3278452
+---host3-3278453
+--- …
---hostN-3278XXX
GNUnify - 2013 22
ZooKeeper envía bibliotecas a los cliente en:
Java
C
Perl
Python
La comunidad aportó enlaces de clientes disponibles
para Scala, C #, Node.js, Ruby, Erlang, Go, Haskell
https://cwiki.apache.org/ZOOKEEPER/zkclientbindings.html
GNUnify - 2013 23
Los relojes son disparadores de una vez
La observación continua de znodes requiere el restablecimiento
de los relojes después de cada evento / disparador
Demasiados relojes en un solo znode crea el "efecto de manada" -
causando ráfagas de tráfico y limitando la escalabilidad
¡Si un znode cambia varias veces entre conseguir el acontecimiento y
fijar el reloj otra vez, manejarlo cuidadosamente!
Mantenga los tiempos de espera de sesión lo suficientemente largos
para manejar largas pausas de recolección de basura en las
aplicaciones.
Establezca el tamaño de montón Java máximo correctamente para
evitar intercambios.
Disco dedicado para el registro de transacciones de ZooKeeper
GNUnify - 2013 24
Compañías:
• Yahoo!
• Zynga
• Rackspace
• LinkedIn
• Netflix
• and many more…
Proyectos en FOSS:
• Apache Map/Reduce (Yarn)
• Apache HBase
• Apache Solr
• Neo4j
• Katta
• and many more…
GNUnify - 2013 25
Reference: https://cwiki.apache.org/confluence/display/ZOOKEEPER/PoweredBy
Es utilizado en Twitter para el descubrimiento del
servicio
¿Cómo?
Los servicios se registran en ZooKeeper
Los clientes consultan el clúster de producción para el
servicio "A" en el centro de datos "XYZ"
Se mantiene una lista de host actualizada para cada servicio
Siempre que se agregue nueva capacidad, el cliente
automáticamente será consciente
Además, habilita el equilibrio de carga en todos los
servidores.
GNUnify - 2013 26
Reference: http://engineering.twitter.com/
The Chubby lock service for loosely-coupled distributed systems
Google Research (7th USENIX Symposium on Operating Systems Design and
Implementation (OSDI), {USENIX} (2006) )
ZooKeeper: Wait-free coordination for Internet-scale systems
Yahoo Research (USENIX Annual Technology Conference 2010)
Apache ZooKeeper Home: http://zookeeper.apache.org/
Presentations:
http://www.slideshare.net/mumrah/introduction-to-zookeeper-trihug-
may-22-2012
http://www.slideshare.net/scottleber/apache-zookeeper
https://cwiki.apache.org/confluence/display/ZOOKEEPER/ZooKeeperPre
sentations
GNUnify - 2013 27
El sistema de archivos de Google
El Sistema de Archivos Distribuidos Hadoop
MapReduce: Procesamiento simplificado de datos en grandes clusters
Bigtable: un sistema de almacenamiento distribuido para datos
estructurados
PNUTS: Plataforma de servicios de datos alojados de Yahoo!
Dynamo: el almacén de valores clave altamente disponible de Amazon
Spanner: Base de datos distribuida mundialmente de Google
Centrífuga: Gestión Integrada de Arrendamiento y Particionamiento de
Servicios en Nube (Microsoft)
ZAB: Un simple protocolo de transmisión totalmente ordenado (Yahoo!)
Paxos Made Simple de Leslie Lamport.
Eventualmente coherente por Werner Vogel (CTO, Amazon)
Http://www.highscalability.com/
GNUnify - 2013 28
GNUnify - 2013 29
Preguntas?
GNUnify - 2013 30
Gracias!

Zookeeper

  • 1.
    Integrates: Andrés FelipeCortes Amaya Carlos Alberto Hernandez GNUnify - 2013 1
  • 2.
    Las aplicaciones Distribuidasrequieren diferentes formas de coordinación:  Configuración  Pertenecía a un grupo  Elección del Líder GNUnify - 2013 2
  • 3.
    GNUnify - 20133 Un sistema distribuido consiste en múltiples computadoras que se comunican a través de una red informática e interactúan entre sí para lograr un objetivo común.
  • 4.
    La red esconfiable. La latencia es cero. El ancho de banda es infinito. La red es segura. La topología no cambia. Hay un administrador. El costo de transporte es cero. La red es homogénea. GNUnify - 2013 4
  • 5.
    Coordinación: Un actoque los nodos múltiples deben realizar juntos. Ejemplos: Membresías de grupos Cierre Publicador/subscritor Elección de lider Sincronización Conseguir la coordinación del nodo correcta es muy difícil! GNUnify - 2013 5
  • 6.
  • 7.
    ZooKeeper permite quelos procesos distribuidos se coordinen entre sí a través de un espacio de nombres jerárquico compartido de los registros de datos. - ZooKeeper Wiki ZooKeeper es mucho más que un servidor de bloqueo distribuido! GNUnify - 2013 7
  • 8.
    Un servicio decoordinación de alto rendimiento y código abierto para aplicaciones distribuidas. Expone servicios comunes en una interfaz sencilla: Nombre Gestión de la configuración Bloqueos y sincronización Grupo de servicios … los desarrolladores no tiene que escribir desde cero Construir sus propias necesidades. GNUnify - 2013 8
  • 9.
    Administración de Configuración Losnodos del miembro del clúster arrancan la configuración desde una fuente centralizada de forma desatendida Implementación / aprovisionamiento más sencillo Gestión de clústeres distribuidos Entradas de nodos / salidas Estados de los nodos en tiempo real Servicio de nomenclatura - p. DNS Sincronización distribuida - bloqueos, barreras, colas Elección de líder en un sistema distribuido. Registro de datos centralizado y altamente confiable (simple) GNUnify - 2013 9
  • 10.
    GNUnify - 201310 El servicio ZooKeeper se repite en un conjunto de máquinas Todas las máquinas almacenan una copia de los datos (en memoria) Se elige un líder en el inicio del servicio Los clientes sólo se conectan a un único servidor de ZooKeeper y mantienen una conexión TCP. El cliente puede leer desde cualquier servidor ZooKeeper, escribe a través del líder y necesita un consenso mayoritario.
  • 11.
    ZooKeeper tiene unespacio de nombre jerárquico. Cada nodo en el espacio de nombres se llama como un ZNode. Cada ZNode tiene datos (dado como byte []) y opcionalmente puede tener hijos. Padre: "foo" | | | | | | | | `- child3:" huevos " `- nieto1:" 42 " Rutas de ZNode: Canónicos, absolutos, separados por slash Sin referencias relativas. Los nombres pueden tener caracteres Unicode GNUnify - 2013 11
  • 12.
    Mantenga una estructurade estadísticas con números de versión para cambios de datos, cambios de ACL y marcas de tiempo. El número de versiones aumenta con los cambios Los datos se leen y escriben en su totalidad GNUnify - 2013 12 Image: http://helix.incubator.apache.org/Architecture.html
  • 13.
    Nodos persistentes Existe hastaque se borre explícitamente Nodos Efímeros Existe mientras la sesión esté activa No puede tener hijos Nodos de Secuencia (Nombres Únicos) Añadir un monótonamente creciente contra el final de la ruta Se aplica tanto a los nodos persistentes y efímeros GNUnify - 2013 13
  • 14.
    GNUnify - 201314 Operation Type create Write delete Write exists Read getChildren Read getData Read setData Write getACL Read setACL Write sync Read ZNodes are the main entity that a programmer access.
  • 15.
    [zk: localhost:2181(CONNECTED) 0]help [zk: localhost:2181(CONNECTED) 1] ls / ZooKeeper -server host:port cmd args [hbase, zookeeper] connect host:port get path [watch] [zk: localhost:2181(CONNECTED) 2] ls2 /zookeeper ls path [watch] [quota] set path data [version] cZxid = 0x0 rmr path ctime = Tue Jan 01 05:30:00 IST 2013 delquota [-n|-b] path mZxid = 0x0 quit mtime = Tue Jan 01 05:30:00 IST 2013 printwatches on|off pZxid = 0x0 create [-s] [-e] path data acl cversion = -1 stat path [watch] dataVersion = 0 close aclVersion = 0 ls2 path [watch] ephemeralOwner = 0x0 history dataLength = 0 listquota path numChildren = 1 setAcl path acl getAcl path [zk: localhost:2181(CONNECTED) 3] create /test-znode HelloWorld sync path Created /test-znode redo cmdno [zk: localhost:2181(CONNECTED) 4] ls / addauth scheme auth [test-znode, hbase, zookeeper] delete path [version] [zk: localhost:2181(CONNECTED) 5] get /test-znode setquota -n|-b val path HelloWorld GNUnify - 2013 15
  • 16.
    Los clientes puedenconfigurar relojes en znodes: NodeChildrenChanged NodeCreated NodeDataChanged NodeDeleted Los cambios en un znode activan el reloj y ZooKeeper envía al cliente una notificación. Los relojes son disparadores de una vez. Los relojes son siempre ordenados. El cliente ve el evento visto antes de los nuevos datos de znode. El cliente debe manejar casos de latencia entre obtener el evento y enviar una nueva solicitud para obtener un reloj.GNUnify - 2013 16
  • 17.
    Los métodos APIson sincronizados, así como no sincronizados Sincronizar: exists(“/test-cluster/CONFIGS", null); No sincronizados: exists("/test-cluster/CONFIGS", null, new StatCallback() { @Override public processResult(int rc, String path, Object ctx, Stat stat) { //process result when called back later } }, null); GNUnify - 2013 17
  • 18.
    GNUnify - 201318 Las solicitudes de lectura se procesan localmente en el servidor ZooKeeper al que el cliente está conectado actualmente Las peticiones de escritura se envían al líder y pasan por el consenso mayoritario antes de que se genere una respuesta.
  • 19.
    Consistencia secuencial: Lasactualizaciones se aplican en orden Atomicidad: las actualizaciones tienen éxito o fallan Imagen de sistema único: Un cliente ve la misma vista del servicio independientemente del servidor ZK con el que se conecta. Confiabilidad: las actualizaciones persisten una vez aplicadas, hasta que sobrescriben algunos clientes. Oportunidad: Se garantiza que la visión de los clientes sobre el sistema esté actualizada dentro de un plazo determinado. (Eventual Consistencia) GNUnify - 2013 19
  • 20.
    Cada host decliente i, i: = 1 .. N 1. Ver en / miembros 2. Crear / Miembros / host - $ {i} como nodos efímeros 3. Entradas de Nodos o salidas genera alerta 4 Mantener la actualización / miembros / host - $ {i} periódicamente para los cambios de estado del nodo (Carga, memoria, CPU, etc.) host-N Cluster host-2 host-1 /members GNUnify - 2013 20
  • 21.
    1. Un znode,dice "/ svc / election-path" 2. Todos los participantes en el proceso electoral crean un nodo efímero- secuencial en el mismo camino electoral. 3. El nodo con el número de secuencia más pequeño es el líder. 4. Cada nodo "seguidor" escucha el nodo de la siguiente secuencia inferior. 5. Al retirar el líder, vaya a Elección- camino y encontrar un nuevo líder, o convertirse en el líder si tiene el número de secuencia más bajo. 6. Al vencimiento de la sesión verifique el estado de elección y vaya a elección si es necesario GNUnify - 2013 21
  • 22.
    Suponiendo que hayN clientes tratando de adquirir un bloqueo. Los clientes crean un znode efímero y secuencial bajo la ruta / Cluster / _locknode_ Clientes solicita una lista de hijos para el znode de bloqueo (es decir, _locknode_) El cliente con la menor ID de acuerdo con el orden natural mantendrá la cerradura. Otros clientes establecen relojes en el znode con id inmediatamente anterior a su propio id Revisa periódicamente la cerradura en caso de notificación. El cliente que desea liberar un bloqueo elimina el nodo, lo que desencadena el siguiente cliente en línea para adquirir el bloqueo. ZK |---Cluster +---config +---memberships +---_locknode_ +---host1-3278451 +---host2-3278452 +---host3-3278453 +--- … ---hostN-3278XXX GNUnify - 2013 22
  • 23.
    ZooKeeper envía bibliotecasa los cliente en: Java C Perl Python La comunidad aportó enlaces de clientes disponibles para Scala, C #, Node.js, Ruby, Erlang, Go, Haskell https://cwiki.apache.org/ZOOKEEPER/zkclientbindings.html GNUnify - 2013 23
  • 24.
    Los relojes sondisparadores de una vez La observación continua de znodes requiere el restablecimiento de los relojes después de cada evento / disparador Demasiados relojes en un solo znode crea el "efecto de manada" - causando ráfagas de tráfico y limitando la escalabilidad ¡Si un znode cambia varias veces entre conseguir el acontecimiento y fijar el reloj otra vez, manejarlo cuidadosamente! Mantenga los tiempos de espera de sesión lo suficientemente largos para manejar largas pausas de recolección de basura en las aplicaciones. Establezca el tamaño de montón Java máximo correctamente para evitar intercambios. Disco dedicado para el registro de transacciones de ZooKeeper GNUnify - 2013 24
  • 25.
    Compañías: • Yahoo! • Zynga •Rackspace • LinkedIn • Netflix • and many more… Proyectos en FOSS: • Apache Map/Reduce (Yarn) • Apache HBase • Apache Solr • Neo4j • Katta • and many more… GNUnify - 2013 25 Reference: https://cwiki.apache.org/confluence/display/ZOOKEEPER/PoweredBy
  • 26.
    Es utilizado enTwitter para el descubrimiento del servicio ¿Cómo? Los servicios se registran en ZooKeeper Los clientes consultan el clúster de producción para el servicio "A" en el centro de datos "XYZ" Se mantiene una lista de host actualizada para cada servicio Siempre que se agregue nueva capacidad, el cliente automáticamente será consciente Además, habilita el equilibrio de carga en todos los servidores. GNUnify - 2013 26 Reference: http://engineering.twitter.com/
  • 27.
    The Chubby lockservice for loosely-coupled distributed systems Google Research (7th USENIX Symposium on Operating Systems Design and Implementation (OSDI), {USENIX} (2006) ) ZooKeeper: Wait-free coordination for Internet-scale systems Yahoo Research (USENIX Annual Technology Conference 2010) Apache ZooKeeper Home: http://zookeeper.apache.org/ Presentations: http://www.slideshare.net/mumrah/introduction-to-zookeeper-trihug- may-22-2012 http://www.slideshare.net/scottleber/apache-zookeeper https://cwiki.apache.org/confluence/display/ZOOKEEPER/ZooKeeperPre sentations GNUnify - 2013 27
  • 28.
    El sistema dearchivos de Google El Sistema de Archivos Distribuidos Hadoop MapReduce: Procesamiento simplificado de datos en grandes clusters Bigtable: un sistema de almacenamiento distribuido para datos estructurados PNUTS: Plataforma de servicios de datos alojados de Yahoo! Dynamo: el almacén de valores clave altamente disponible de Amazon Spanner: Base de datos distribuida mundialmente de Google Centrífuga: Gestión Integrada de Arrendamiento y Particionamiento de Servicios en Nube (Microsoft) ZAB: Un simple protocolo de transmisión totalmente ordenado (Yahoo!) Paxos Made Simple de Leslie Lamport. Eventualmente coherente por Werner Vogel (CTO, Amazon) Http://www.highscalability.com/ GNUnify - 2013 28
  • 29.
    GNUnify - 201329 Preguntas?
  • 30.
    GNUnify - 201330 Gracias!