<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bosque Viejo &#187; apache</title>
	<atom:link href="http://bosqueviejo.net/tag/apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://bosqueviejo.net</link>
	<description>Sitio web sobre programación, software libre, redes, servidores, ofimática... y todo lo relacionado con la informática que nos rodea</description>
	<lastBuildDate>Tue, 08 May 2012 14:40:56 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Cassandra: la NoSQL de facebook</title>
		<link>http://bosqueviejo.net/2012/04/25/cassandra-la-nosql-de-facebook/</link>
		<comments>http://bosqueviejo.net/2012/04/25/cassandra-la-nosql-de-facebook/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 05:00:42 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Base de Datos]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cassandra]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=1328</guid>
		<description><![CDATA[ Tras haber visto Riak un poco más de cerca, ahora le toca el turno a Cassandra. Esta base de datos NoSQL fue desarrollada en el seno de Facebook, como una de sus 7 tecnologías clave. En 2008 fue donada a Apache y desde entonces su popularidad ha ido creciendo cada vez más.
La ventaja de Cassandra es su capacidad de escalar a través de una configuración de anillo en un cluster. La información de la base de datos se distribuye entre todos los nodos configurados y puede ser accedida desde cualquiera de ellos. En este caso, la distribución es muy parecida a Riak, incluso emplean el mismo protocolo para intercomunicación entre nodos: Gossip; además, se requiere de generar un token especial balanceado para la configuración de cada nodo de Cassandra. En esta página hay un código escrito en Python para poder hacer esta tarea.
El acceso a la base de datos se realiza mediante RPC y usando Thrift, que representa otra de las 7 tecnologías clave de Facebook, y también liberada como software libre. Como Thrift es multi-lenguaje, está implementado en muchos de los lenguajes existentes, no hay problemas de implementación, ya sea en Python, Perl, PHP, Java, Erlang, etc.
¿Es NoSQL?
En [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://bosqueviejo.net/wp-content/uploads/cassandra-150x150.jpg" alt="" title="cassandra" width="150" height="150" class="alignleft size-thumbnail wp-image-1329" /> Tras haber visto <a href="/2012/04/24/riak-revisando-y-practicando/">Riak</a> un poco más de cerca, ahora le toca el turno a Cassandra. Esta base de datos NoSQL fue desarrollada en el seno de Facebook, como una de sus <a href="http://alt1040.com/2011/02/7-tecnologias-de-software-que-sostienen-a-facebook">7 tecnologías clave</a>. En 2008 fue donada a Apache y desde entonces su popularidad ha ido creciendo cada vez más.</p>
<p>La ventaja de Cassandra es su capacidad de escalar a través de una configuración de anillo en un cluster. La información de la base de datos se distribuye entre todos los nodos configurados y puede ser accedida desde cualquiera de ellos. En este caso, la distribución es muy parecida a Riak, incluso emplean el mismo protocolo para intercomunicación entre nodos: Gossip; además, se requiere de generar un token especial balanceado para la configuración de cada nodo de Cassandra. En <a href="http://wiki.apache.org/cassandra/GettingStarted">esta página</a> hay un código escrito en Python para poder hacer esta tarea.</p>
<p>El acceso a la base de datos se realiza mediante RPC y usando Thrift, que representa otra de las <a href="http://alt1040.com/2011/02/7-tecnologias-de-software-que-sostienen-a-facebook">7 tecnologías clave</a> de Facebook, y también liberada como software libre. Como Thrift es multi-lenguaje, está implementado en muchos de los lenguajes existentes, no hay problemas de implementación, ya sea en Python, Perl, PHP, Java, Erlang, etc.</p>
<h3>¿Es NoSQL?</h3>
<p>En un principio, usando la base de Thirft y las funciones estándar que podemos ver en cualquier documentación, podríamos decir que sí es <a href="/2010/05/04/nosql/">NoSQL</a>. Nos proveen de funciones para realizar un CRUD básico a través de la inserción, actualización, eliminación y obtención de datos desde la base de datos. No obstante, la búsqueda queda un poco en el aire, ya que para poder buscar por cualquiera de las columnas creadas, hay que prefijar un índice.</p>
<p>Vamos al principio para entenderlo mejor. Haciendo una similitud con el modelo relacional, podemos ver que Cassandra dispone de los siguientes elementos:</p>
<ul>
<li><strong>Keyspace</strong>: debe de crearse un <em>keyspace</em> para almacenar la información y, a la hora de conectar, hay que indicar que <em>keyspace</em> se quiere utilizar. Esto es similar a lo que en las bases de datos tradicionales es la <em>base de datos</em> en sí.</li>
<li><strong>Column Family</strong>: la información se guarda en columnas dentro de la <em>keyspace</em>, pero se agrupan en familias para identificar la separación entre un conjunto de datos y otro. Por lo tanto, dentro de las <em>keyspace</em> debemos de crear <em>column families</em>, lo que en las bases de datos tradicionales serían las <em>tablas</em>.</li>
<li><strong>Columnas</strong>: son cada una de las columnas que se agrupan bajo una familia, que se declaran con un tipo (para validación del dato) y con un nombre. Si se establece un índice sobre la misma, entonces se da la posibilidad de poder buscar utilizándola.</li>
</ul>
<p>Llegados a este punto, vemos diferencias con otras NoSQL, como por ejemplo Riak. Riak tiene <em>buckets</em> donde Cassandra tiene <em>keyspaces</em>. En Riak cada <em>bucket</em> almacena claves a las que se les asigna un valor&#8230; en Cassandra esto no existe, ya que la clave de Cassandra está un nivel más abajo, cuando ya se han definido las familias de columnas. Esto deja a Cassandra entre <em>dos mundos</em>.</p>
<h3>Entre SQL y NoSQL&#8230; CQL</h3>
<p>Para confirmarlo, Cassandra dispone de un lenguaje de consulta que hace posible el empleo del mismo para realizar búsquedas entre sus familias de columnas, sobre las columnas que se hayan definido (con índice, claro). Este lenguaje provee de las órdenes básicas para realizar inserciones, actualizaciones, eliminaciones y obtención de datos.</p>
<p>Es más, el lenguaje en sí es llamado CQL y, viendo su sintaxis se sabe el porqué de la similitud con SQL. Por ejemplo, si tenemos creada la familia de columnas <strong>contactos</strong>, con una columna llamada <strong>nombre</strong>, y otra <strong>telefono</strong>, podemos realizar la siguiente consulta:</p>

<div class="wp_syntax"><div class="code"><pre class="cql" style="font-family:monospace;">SELECT nombre, telefono FROM contactos</pre></div></div>

<p>En las nuevas versiones de Cassandra, además, se puede emplear, en lugar de <tt>cassandra-cli</tt> el nuevo <tt>cqlsh</tt>, que permite emplear los comandos en formato CQL para manejar el cluster y hacer consultas al mismo. Esto hace pensar que Cassandra se comienza a desplazar cada vez más hacia el modelo relacional, dejando el paradigma de clave-valor muy atrás.</p>
<p>No obstante, facilita el acceso a este tipo de base de datos, a sistemas tan potentes, como para mantener un conjunto de máquinas en activo, en un anillo balanceando peticiones y en modo maestro-maestro con cada nodo.</p>
<h3>Conclusiones</h3>
<p>Después de darle bastantes vueltas y emplearlo para un par de desarrollos, he encontrado Cassandra bastante potente para el desarrollo de aplicaciones en las que la información se mantiene estática y se puede capturar de forma fácil a través de sus claves. Es muy rápido dando la información y él mismo balancea entre los nodos que tenga configurado.</p>
<p>Una nota negativa puede ser el hecho de que la búsqueda de información se hace bastante dificultosa debido a que, los datos de las columnas tienen que estar prefijados y muchos datos, en el enlace con Thrift, no funcionan bien. Así mismo, el filtrado por cualquier campo obliga a crear un índice sobre ese campo, lo que conlleva más ocupación de espacio y ralentizar un poco las inserciones, modificaciones y eliminaciones.</p>
<p>En definitiva, es una base de datos con capacidad fácil para montarse en forma de cluster, que permite una rápida ingesta de datos (siempre que tengan un formato prefijado), y una consulta también rápida de los mismos. No es indicado para sistemas en los que las consultas se puedan complicar, ya que requiere en ese caso de la creación de muchos índices e incluso muchas tablas intermedias para no perder la pista de la información. Al final, la mayoría de código hay que ejecutarlo del lado del cliente, por lo que cuanto más difícil sea el esquema de datos, más lento se volverá.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2012/04/25/cassandra-la-nosql-de-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pretty URLs</title>
		<link>http://bosqueviejo.net/2010/04/27/pretty-urls/</link>
		<comments>http://bosqueviejo.net/2010/04/27/pretty-urls/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 12:17:18 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[redes]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=430</guid>
		<description><![CDATA[Muchas veces hemos visto las URL de algunos sitios que tienen, tras una interrogación de cierre (?) una hilera de valores con iguales (=) separados por ampersand (&#038;). No obstante, hay otros muchos sitios que sus URLs, más específicamente sus URIs, son palabras en minúscula, con algunos guiones y números escasos, separados por barras inclinadas (/). Este último método es conocido con pretty urls.
Tener este tipo de URLs, o URIs en nuestro dominio, se puede hacer mediante la creación de directorios y especificando los ficheros dentro de los mismos que tengan los nombres (sin extensión) que queremos que se visualicen en la barra del navegador&#8230; pero no es nada útil y es complejo, sobre todo cuando se usan entornos como WordPress o similares, donde el contenido de la base de datos dicta lo que aparece en la página, y es totalmente dinámico.
La solución que se puede emplear: rewrite. En Apache, a través del módulo mod_rewrite, se pueden crear reglas de redireccionado de modo que una URL que es:
http://midominio.com/?p=129&#038;a=crea-usuario
Se puede convertir en:
http://midominio.com/crea-usuario/129
En el caso concreto, tan solo bastaría con agregar un bloque de configuración como el siguiente:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.+)/([0-9]+)$    /index.php?p=$2&#038;a=$1

Para más información vea la [...]]]></description>
			<content:encoded><![CDATA[<p>Muchas veces hemos visto las URL de algunos sitios que tienen, tras una interrogación de cierre (?) una hilera de valores con iguales (=) separados por ampersand (&#038;). No obstante, hay otros muchos sitios que sus URLs, más específicamente sus URIs, son palabras en minúscula, con algunos guiones y números escasos, separados por barras inclinadas (/). Este último método es conocido con <em>pretty urls</em>.</p>
<p>Tener este tipo de URLs, o URIs en nuestro dominio, se puede hacer mediante la creación de directorios y especificando los ficheros dentro de los mismos que tengan los nombres (sin extensión) que queremos que se visualicen en la barra del navegador&#8230; pero no es nada útil y es complejo, sobre todo cuando se usan entornos como WordPress o similares, donde el contenido de la base de datos dicta lo que aparece en la página, y es totalmente dinámico.</p>
<p>La solución que se puede emplear: rewrite. En Apache, a través del módulo <em>mod_rewrite</em>, se pueden crear reglas de redireccionado de modo que una URL que es:</p>
<pre>http://midominio.com/?p=129&#038;a=crea-usuario</pre>
<p>Se puede convertir en:</p>
<pre>http://midominio.com/crea-usuario/129</pre>
<p>En el caso concreto, tan solo bastaría con agregar un bloque de configuración como el siguiente:</p>
<pre>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.+)/([0-9]+)$    /index.php?p=$2&#038;a=$1
</pre>
<p>Para más información vea <a href="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html">la documentación oficial de Apache</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/04/27/pretty-urls/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress y los ataques DoS</title>
		<link>http://bosqueviejo.net/2010/02/05/wordpress-y-los-ataques-dos/</link>
		<comments>http://bosqueviejo.net/2010/02/05/wordpress-y-los-ataques-dos/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 08:25:51 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[seguridad]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=236</guid>
		<description><![CDATA[De aquí a un tiempo he visto algunos scripts bastante simples que, sorprendentemente, hacen bastante daño a malas configuraciones de sitios con wordpress. El sistema de DoS (Denial of Service, Denegación de Servicio) que se usa para el ataque es de tipo flood (inundación) enviando un número muy alto de peticiones. Por ejemplo: Under Security.
Normalmente, estos scripts se realizan buscando las peticiones más lentas de los sistemas web. Una vez detectadas, se procede a lanzar muchas de estas peticiones en muy poco tiempo. Los servidores web, ante una avalancha de peticiones, normalmente, comienzan a crear forks o workers (según el servidor y modo de funcionamiento) hasta llegar al límite máximo configurado&#8230; o a que se sature el sistema y termine no respondiendo.
Los sistemas GNU/Linux, al igual que la mayoría, tienen un uso de memoria limitada por el tamaño de la misma que haya instalada. Estos sistemas manejan una caché bastante grande y por ello, aunque se tenga 1GB o más instalado en el sistema, siempre se anda con una ocupación bastante alta de la memoria del sistema. Cuando esta se agota, se recurre a la memoria de intercambio (swap), que es mucho más lenta que la memoria convencional, por lo [...]]]></description>
			<content:encoded><![CDATA[<p>De aquí a un tiempo he visto algunos scripts bastante simples que, sorprendentemente, hacen bastante daño a malas configuraciones de sitios con wordpress. El sistema de DoS (Denial of Service, Denegación de Servicio) que se usa para el ataque es de tipo flood (inundación) enviando un número muy alto de peticiones. Por ejemplo: <a href="http://foro.undersecurity.net/read.php?16,6134,6138">Under Security</a>.</p>
<p>Normalmente, estos scripts se realizan buscando las peticiones más lentas de los sistemas web. Una vez detectadas, se procede a lanzar muchas de estas peticiones en muy poco tiempo. Los servidores web, ante una avalancha de peticiones, normalmente, comienzan a crear forks o workers (según el servidor y modo de funcionamiento) hasta llegar al límite máximo configurado&#8230; o a que se sature el sistema y termine no respondiendo.</p>
<p>Los sistemas GNU/Linux, al igual que la mayoría, tienen un uso de memoria limitada por el tamaño de la misma que haya instalada. Estos sistemas manejan una caché bastante grande y por ello, aunque se tenga 1GB o más instalado en el sistema, siempre se anda con una ocupación bastante alta de la memoria del sistema. Cuando esta se agota, se recurre a la memoria de intercambio (swap), que es mucho más lenta que la memoria convencional, por lo que el sistema comienza a ralentizarse.</p>
<p>Para evitar estos problemas, lo ideal es configurar de forma adecuada el servidor web, acorde a la memoria disponible, el número máximo de hilos que se puedan crear y el número máximo de forks o workers que se puedan lanzar para atender peticiones. Con esto evitamos que la memoria se use en exceso y, aunque las peticiones se atiendan más lentas, se asegure que el sistema permanecerá estable.</p>
<p>También habría que revisar la pila de entrada TCP para el puerto 80 (se puede ver a través de netstat en cualquier sistema GNU/Linux), por si acaso se saturase mucho, comenzar a cortar, vía cortafuegos (iptables), las direcciones IP que estén haciendo flood.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/02/05/wordpress-y-los-ataques-dos/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

