Ricardo Devis – S3lab http://s3lab.deusto.es S3lab Security Blog Wed, 06 May 2020 12:51:35 +0000 es hourly 1 https://wordpress.org/?v=5.1.5 Bloom Filter, un algoritmo como un juego de Hasbro http://s3lab.deusto.es/bloom-filter-algoritmo-juego-hasbro/ Tue, 24 Feb 2015 11:00:57 +0000 http://s3lab.deusto.es/?p=3352 Si habéis utilizado Cassandra, sabréis que se caracteriza por ser tremendamente rápida en las escrituras y lecturas, y esto se debe en parte a una estructura de datos denominada Bloom Filter. Bloom Filter es una manera extremadamente eficiente de preguntar

The post Bloom Filter, un algoritmo como un juego de Hasbro appeared first on S3lab.

]]>
Si habéis utilizado Cassandra, sabréis que se caracteriza por ser tremendamente rápida en las escrituras y lecturas, y esto se debe en parte a una estructura de datos denominada Bloom Filter.

Bloom Filter es una manera extremadamente eficiente de preguntar si un dato existe en un conjunto o no (lo cual utiliza Cassandra para evitar accesos a disco en vano, que es la parte más lenta del tinglado). ¿La pega? Es un algoritmo probabilista y puede haber falsos positivos (aunque nunca falsos negativos).

Funciona con dos elementos:

  • Un array de m bits, inicializado a a cero.
  • Un conjunto de k funciones hash que, dado un dato, generarán números entre 0 y m-1.

Cuando insertemos un dato lo pasaremos por las funciones hash, las cuales nos devolverán posiciones del array donde cambiaremos sus valores a 1. Así, cuando lleguen nuevas cadenas, para saber que seguro el elemento no existe en el conjunto, solamente debemos comprobar que alguna de las posiciones en el array generada por alguna de las funciones hash nos devuelve 0.

Para intentar enteder esto mejor vamos a hacerlo con un pequeño juego.

Imaginemos una partida de «¿Quién es quién?», pero con multiples sospechosos. El jugador A añade sospechosos, y el jugador B pregunta al jugador A en base a los atributos de los sospechosos. En este caso los sospechosos serán los datos, sus atributos serán las funciones hash, y la lista total de atributos que guarde el jugador A será el array de bits. Éstos serán nuestros sospechosos.

 

Hasbro-S3lab-es

Pongamos que el jugador A añade como sospechoso a Bill Gates. Eso significa que ahora el jugador A tiene como características «Rico», «Filántropo» y «Gafas». Por lo tanto, cuando el Jugador B pregunte por Steve Jobs, pese a que las propiedades de «Gafas» y «Rico» si que están, la de «Americano» no, así que puede estar seguro de que Steve Jobs no es uno de los sospechosos.

Pero, ¿qué pasa si ahora añadimos a Mark Zuckerberg? Al hacerlo, añadimos dos propiedades nuevas, por lo tanto ahora nuestra lista de características será la siguiente:

«Rico», «Filántropo», «Gafas», «Americano» y «Joven».

Así que, ahora, ¿qué pasa si preguntamos por Steve Jobs otra vez? Como todos sus atributos están en la lista, podríamos pensar que es uno de los sospechosos, pero no es el caso. Es decir, podemos estar seguros de cuándo alguien no es sospechoso, pero nunca de si lo es. Si insertamos a Steve Jobs nuestra lista no se alterará. ¿Qué pasa entonces si preguntamos por Stephen Hawking? Incluso con tres sospechosos ya metidos, como Stephen Hawking tiene dos atributos que aún no han sido insertados, podemos afirmar categóricamente que no está en la lista de sospechosos.

Y así funciona (muy por encima). Si queréis información en mayor profunidad, sobre cómo por ejemplo hacer para reducir el porcentaje de falsos positivos, o cómo lidiar con con borrados aquí tenéis una página interesante.

Why Bloom filters work the way they do

Y si os apetece jugar un poco con él, en esta web podréis encontrar diversas implementaciones en python, que os pueden ser útiles cuando queráis manejar grandes datos, como por ejemplo… datos del Titanic

Fast Non-Standard Data Structures for Python

The post Bloom Filter, un algoritmo como un juego de Hasbro appeared first on S3lab.

]]>
Instalar y configurar Apache Cassandra 2 en Ubuntu http://s3lab.deusto.es/instalacion-y-configuracion-apache-cassandra-2-ubuntu/ Tue, 23 Sep 2014 11:01:07 +0000 http://s3lab.deusto.es/?p=2426 Apache Cassandra es una base de datos NoSQL distribuida, enfocada principalmente a la escalabilidad y la disponibilidad. Su modelo de distribución se basa, grosso modo, en tener réplicas de la misma base de datos en distintas máquinas (llamadas nodos) a

The post Instalar y configurar Apache Cassandra 2 en Ubuntu appeared first on S3lab.

]]>
Apache CassandraCassandra es una base de datos NoSQL distribuida, enfocada principalmente a la escalabilidad y la disponibilidad. Su modelo de distribución se basa, grosso modo, en tener réplicas de la misma base de datos en distintas máquinas (llamadas nodos) a través de un cluster, las cuales a su vez pueden estar divididas en distintos anillos (o datacenters).

Para efectos prácticos, esta configuración va a basarse en una configuración sencilla de sólamente dos máquinas (un único datacenter).

Para una información más extensa, puede utilizarse la guía oficial de DataStax.

Instalar Oracle Java 7 o superior

Pese a que OpenJDK está soportado, no está recomendado su uso, y aunque puede que no dé problemas, puede que  🙂

  1. Descargar el JRE de Oracle Java SE Downloads.
  2. Crear un directorio para el JRE:$ sudo mkdir -p /usr/lib/jvm
  3. Descomprimir el tarball e instalar el JRE.$ sudo tar zxvf jre-version-linux-x64.tar.gz -C /usr/lib/jvm
  4. Decirle al sistema que hay una nueva versión de Java disponible.$ sudo update-alternatives –install «/usr/bin/java» «java» «/usr/lib/jvm/jre_version/bin/java» 1
  5. Establecer el nuevo JRE por defecto:$ sudo update-alternatives –set java /usr/lib/jvm/jre_version/bin/java
  6. También es recomendable instalar JNA.$ sudo apt-get install libjna-java

Instalar Cassandra

  1. Añadir el repositorio de DataStax a /etc/apt/sources.list.d/cassandra.sources.list$ echo «deb http://debian.datastax.com/community stable main» | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
  2. Añadir la clave del repositorio a aptitude.$ curl -L http://debian.datastax.com/debian/repo_key | sudo apt-key add –
  3. Instalar el paquete.$ sudo apt-get update
    $ sudo apt-get install dsc20
  4. Como el servicio se inicia automaticamente, hay que parar el servicio y borrar los datos.$ sudo service cassandra stop
    $ sudo rm -rf /var/lib/cassandra/data/system/*

Recomendaciones de configuración

  • Configurar límites de recursos en /etc/security/limits.confroot – memlock unlimited
    root – nofile 100000
    root – nproc 32768
    root – as unlimited
  • Añadir la siguiente línea a /etc/sysctl.conf:vm.max_map_count = 131072
  • Para que haga efecto ejectar el siguiente comando:$ sudo sysctl -p
  • Desactivar el swap.$ sudo swapoff –all
  • Utilizar NTP (con más de un nodo el timestamp se utiliza para sobreescribir columnas, así que es importante que las máquinas estén sincronizadas).$ sudo apt-get install ntp

Inicializar un cluster (data center único)

Vamos a suponer un caso básico de sólo dos nodos; uno semilla y el otro no.

nodo0 | 1.1.1.1 (semilla)
nodo1 | 1.1.1.2

Ajustar el fichero de configuración en etc/cassandra/cassandra.yaml

Las propiedades importantes a tocar son las siguientes:

  1. num_tokens: 256Es el valor recomendado para todos los nodos. Si, por ejemplo, se pretendiera ofrecer sólo la mitad de carga al nodo1, entonces al nodo0 le daríamos 256 y al nodo1 128.
  2. seeds: 1.1.1.1Aquí irán las ip’s de las distintas semillas, separadas por comas.
  3. listen_address: ip.de.la.maquinaEs recomendable cambiar localhost por la ip local de cada máquina en cada nodo.
  4. rpc_address: ip.de.la.maquinaEs recomendable cambiar localhost por la ip local de cada máquina en cada nodo.

El resto de opciones, para un cluster de desarrollo con un único datacenter no hacen falta tocarlos.

Ponerlo en marcha

  1. Lanzaremos el servicio, empezando por la semilla (nodo0), y cuando termine, entonces arrancaremos el otro nodo.$ sudo service cassandra start
  2. Podremos comprobar que están funcionando correctamente con la siguiente herramienta.$ nodetool status

Debería listar ambos nodos con un estado de UN (Up normal).

Advertencia

A la hora de crear el keyspace, recordar que el número del replication_factor no debería ser mayor que el número total de nodos del cluster (en este caso, 2).

The post Instalar y configurar Apache Cassandra 2 en Ubuntu appeared first on S3lab.

]]>