Buscar

El Blog del Maldo

Si, es poco lo que escribo

El teorema CAP, Sistemas Distribuidos.

He estado trabajando desde hace un rato en la arquitectura del nuevo sistema de Becual.com (excelente emprendimiento, les recomiendo pasar a mirar el modelo de negocio, les conviene…) y últimamente he estado tirando líneas para hacerlo más escalable horizontalmente (pensando en cuando seamos una empresa multimillonaria sin rostro y yo nade en dinero como rico mac pato), es por eso que he estado revisando apuntes de sistemas distribuidos y leyendo para retomar la forma de pensar en los mismos, y como hace tiempo que no escribo nada dije, ya que estamos en esto mejor le damos.

Bueno, rescatando la definición de wikipedia, un sistema distribuido es una colección de computadores conectados entre sí por una red de comunicación y por simplicidad en el post, para nosotros estos computadores son nodos de la red. Como este post no tiene por propósito hablar de la definición de un sistema distribuido ni mucho menos, pasamos de inmediato a lo interesante, ¿Qué es esto del teorema CAP? y ¿Qué tiene que ver con sistemas distribuidos?, han escuchado la expresión “Bueno, Bonito, Barato… elija sólo dos”, esta expresión caracteriza muy bien al teorema CAP (por sus siglas en ingles) o Teorema de Brewer (por Erick Brewer, el primero en enunciarlo), básicamente lo que el teorema indica es que un sistema distribuido tiene 3 característica fundamentales para cumplir, estas son:

  • Consistencia (Consistency): Todos los nodos que participan en un proceso distribuido, tienen acceso a la misma información, por lo que si actualizo la información en un nodo y consulto otro, el sistema debe asegurarme que la información que me entrega sea la mas nueva, en este caso, la información que acabo de actualizar.
  • Disponibilidad (Availability): Esto quiere decir, que se garantiza que toda petición aun nodo, como por ejemplo una lectura, responda en un tiempo acotado y sin responder un error, en simple, que siempre te responda no te deje esperando para siempre y jamás te tire un time out.
  • Tolerancia al particionado (Partition Tolerance): Que dice que el sistema debe seguir funcionando pese a que entre ellos los nodos no se puedan comunicar.

Y como partimos postulando, no se puede tener todo en la vida, por lo que estamos restringidos a asegurar dos de ellas, el teorema tiene una muy buena y fundada explicación teórica que no explicaré para no quedar en vergüenza… pero les tengo aún más malas noticias, las restricciones que tenemos son aún mayores, pero eso lo revisaremos en otra ocasión, cuando analicemos las ocho falacias de la computación distribuida… estamos aún más atados de manos de lo que creemos.

Me reí mucho con este canal

La verdad, no todos comparten mi sentido del humor, pero este canal de youtube, creo que le va a gustar a todo el mundo, no puede no gustarle.

Toma canciones iconicas y les pone la letra de personas en redes sociales, es muy chistoso, mis favoritos son, Social Media Rapsody

Anarchy in the FB

en el canal hay algunas más, es muy divertido mírenlo.

Premio Turing 2014

Aunque debo admitir que es un poco tarde para hablar de este tema, me gustaría hacer mención al premio turing de este año (que es en realidad el del año pasado, se entrega el año siguiente), Michael Stonebraker, quien fue el primero en implementar una base de datos relacional completamente funcional, Ingres, bueno, para ser justo es en realidad contemporánea de System R de IBM, pero si es la primera de código libre.

El es mi idolo personal, no solo porque trabaja en el campo de manejo de datos (si, soy un data nerd), si no porque es un emprendedor serial, ha formado muchas empresas entre ellas, Postgresql, que es la evolución de Ingres (el proyecto estaba bautizado post-ingresa en primera instancia) incorporando elementos de orientación a objetos. Vertical, donde realiza una implementación de su propuesta de bases de datos columnares para el almacenaje de información y acceso rápido (tecnología ahora usada por tableau para su análisis de datos).

En todos los sentidos Michael Stonebraker es un ejemplo a seguir, ya que nos muestra que el mundo académico no es el único camino donde se puede hacer una real diferencia en el mundo de la tecnología.

Pueden ver una estupenda reseña de su trabajo hecha por la ACM para resumir su carrera, abajo.

Además les recomiendo el libro Architecture of a Database System (Foundations and Trends(r) in Databases), en el cual Michael Stonebraker junto con Joseph M. Hellerstein y James Hamilton, explican la arquitectura con la que esta construidas las bases de datos modernas y muestran a un alto nivel sus componentes y como interactuar, es un libro muy interesante, altamente ilustrativo y técnico, sin ser extenuante.

Instalar los betas de ios9 y OS X el Capitán

De la versión anterior, Apple a cambiado en sus políticas de beta y de privacidad del beta, antes tenían un NDA que tenía las penas del infierno para aquel que osara pensar en una versión beta sin tener cuenta de desarrollador. Afortunadamente ya están más abiertos, esto ayuda a la rápida implementación de las nuevas tecnologías y les ayuda en el marqueting ya que genera eso expectativas y momentum para las aplicaciones. Además de este cambio, están implementando betas públicos, que te permitirán probar las versiones antes de la estable del sistema en tu dispositivo y en tu computador, ya que se puede hacer tanto para iOS como OS X. Pese a lo bueno que me parece este cambio, lo recomiendo que nadie instale en su dispositivo principal ningún beta, ya que no solo no son estables, si no que los de iOS 8 estaban particularmente malos y volver atrás es tedioso y confuso.

Dados los descargos, ¿cómo instalamos el beta?. Tienes que ir a la página del beta público donde debes lograrte con la misma clave del AppStore ahí tendrás que enrollar tu dispositivo y te darán instrucciones de como proceder por cada tipo de dispositivo, me gustaría dejar una guía más detallada, pero mi dispositivo de desarrollo ya tiene puesto el beta de desarrollo y me gusta que mi teléfono siempre funcione así que gracias pero no gracias.

Eso si hay algún valiente que me diga como le fue, porque a mi me da una cobardía terrible.

Restaurar una base mongodb

Últimamente he estado trabajando con mongodb como base de datos, la verdad es que me ha sorprendido lo sencillo y potente de la herramienta, ha sido toda una experiencia que me ha parecido principalmente grata, aunque si, he tenido que cambiar el paradigma con el cual estaba acostumbrado a interactuar con las bases de datos, ha sido un desafío pero con más beneficios que problemas.

Dentro de las tareas que periódicamente he tenido que hacer, es restaurar la base de datos de desarrollo, principalmente cuando quiero alguna información, o un QA de alguna nueva funcionalidad con todo como corresponde. Como no es siempre, se me olvida el comando que tengo que escribir, me voy a hacer un ayuda memoria, y como no tengo entrada para hoy, lo voy a escribir acá.

Dos comandos son los que principalmente se utilizan, mongodump, para el backup de la base de datos, y mongorestore, para cargar un respaldo realizado de una base de datos.

Para la restauración de una base de datos, se utiliza el siguiente comando

$ mongorestore --drop -d <nombre-base-datos> <dirección-donde-está-el-respaldo>

Uno a uno los comandos

mongorestore es el comando de respaldo.
--drop le indica que elimine las colecciones de la base de datos, para ser restaurados con los nuevos, es importante incorporarlo si no se pueden producir inconsistencias ya que por defecto no elimina para reemplazar, hace algo raro que no entiendo mucho.
-d <nombre-base-datos> indica en qué base de datos debe ser restaurado
<dirección-donde-está-el-respaldo> indica la carpeta donde están los respaldos.

Hay que tomar en cuenta que los respaldos deben hacerse con mongodump para que queden el formato compatible, que es BSON con un archivo por cada una de las colecciones del sistema.

Sobre la arquitectura de software, qué se necesita

¿Que es la arquitectura de software? y ¿que se necesita para ser arquitecto?, primero, se confunde generalmente la arquitectura de software con la ingeniería de software, yo creo que la arquitectura de software forma parte de uno de los procesos de la ingeniería de software, mientras la ingeniería de software se preocupa del proceso de creación software completo, con una visión sistemática y completa, la arquitectura de software se enfoca sólo al proceso de diseño de un producto o sistema, donde no solo se tiene que preocupar del diseño de los algoritmos involucrados en el desarrollo, sino tener una visión general mucho más amplia teniendo clara las interacciones del software y enfocándose en los diferentes puntos que implican calidad del mismo, Philippe Kruchten lo explica mucho mejor que yo, dice:

”La arquitectura de software, tiene que ver con el diseño y la implementación de estructuras de software de alto nivel. Es el resultado de ensamblar un cierto número de elementos arquitectónicos de forma adecuada para satisfacer la mayor funcionalidad y requerimientos de desempeño de un sistema, así como requerimientos no funcionales, como la confiabilidad, escalabilidad, portabilidad, y disponibilidad.”

Pese a no estar de acuerdo con Philippe Kruchten en aspectos metodológicos, que tienen que ver con la ingeniería del software más que con la arquitectura, creo que su definición es bastante acertada y me quedo con ella.

Y ahora ¿que se necesita para ser arquitecto?, me parece que es una lista de características que puede llegara ser infinita, por lo que sólo resumiré algunas de las que encuentro más importantes.

  • Conocimiento: Claramente una característica de un arquitecto de software es el conocimiento, de la plataforma, de la forma de trabajar, del negocio, de la tecnología y del equipo, no es necesario que lo sepa todo a la perfección, ya que para eso son los especialistas, pero sí debe tener el conocimiento suficiente para poder tomar decisiones que ayuden a mejorar la sinergia de todos los aspectos mencionados, ya que todas esas son las aristas de conocimiento que se deben tomar en cuenta, que se saca con impulsar una iniciativa de tecnología si nadie puede trabajar en ella, o hace que el negocio responda lento y sea inviable, o que no se tengan los medios económicos necesarios para soportarla.
  • Experiencia: No solo el conocimiento teórico es necesario, entre las funciones del arquitecto está lidiar con personas y problemas de la tecnología, y problemas que en teoría no ocurren y problemas que en la teoría ocurren y están bien documentados, pero en la práctica no son importantes o que el modelo de negocio está construido de tal forma que tales condiciones no se dan, para esos casos la experiencia es necesaria y absolutamente importante.
  • Liderazgo y negociación: No vivimos en un mundo ideal donde todo el mundo nos espera y podemos escribir un código muchas veces hasta que estemos orgullosos de ellos, estamos supeditados a tiempos, plazos, expectativa y factores humanos, es por eso que un buen arquitecto debe saber qué hacer, cómo lidiar con las circunstancias y que sacrificios hacer para poder cumplir con las expectativas y plazos, sin dejar de lado la motivación al equipo, la capacitación constante al mismo y trabajar como facilitador para eliminar problemas y prácticas que entorpecen el desempeño normal y correcto del equipo.
  • Visión del negocio: Una de las cosas más importantes bajo mi punto de vista, la informática es una ciencia de apoyo, y, amenos que sea en un contexto de investigación, no se hace arquitectura de software por arquitectura de software, si no para resolver problemas en función del negocio, no hay que perder de vista el negocio, el arquitecto es la pieza clave que debe tener la capacidad de alinear los proyectos con la realidad tecnológica y hacerlos coexistir en función del negocio y las metas de negocio.

Uno de los mejor libros que he leído sobre arquitectura de software es Software Architecture: Foundations, Theory, and Practice, tiene una visión moderna de la arquitectura de software, es muy detallado y se mezcla con los conceptos de Ingeniería de Software, muestra como se involucra la arquitectura en cada una de las etapas de la ingeniería de Software, y sobretodo mantiene la visión que muestra la arquitectura no como una etapa de la construcción del software, si no como parte integral del proceso de desarrollo, no importando en que etapa se encuentra. Si tienen oportunidad de leer este libro, se los recomiendo, es un libro que parece ser de carácter universitario, con ejercicios y todo al final del capítulo, muy bueno para reforzar el conocimiento, para el resto de los puntos, solo la experiencia es lo que mejor puede ayudar.

Programación aproximada

Acabo de leer un artículo en la revista de la ACM que habla de la computación aproximada, no de algoritmos de aproximación, si no de computación aproximada. La idea básica del artículo indica que nos enfrentamos a una creciente necesidad de computo, y que si bien es cierto, podemos enfrentarnos a ella poniendo más procesadores, el hacer eso consumimos más energía, y como estamos en una crisis global de generación energética, no podemos darnos el lujo de desperdiciar esta clase de recursos.

Por esto lo que hay una rama de investigación que se está dedicando al ahorro de energía en los procesadores, esta rama de investigación quiere disminuir el tiempo de procesamiento utilizado para descubrir y corregir errores en el cómputo, y por ende disminuir la energía total utilizada, pero claro no se puede solo tolerar una cierta cantidad de errores, hay que buscar en balance correcto, así podemos tener procesadores especializados que pueden tener uno u otro error sin que este sea notado en su uso regular, por ejemplo viendo un video no es necesario que todos los pixeles estén correctos para que sea una experiencia placentera y completa, pueden existir errores en el procesamiento sin que sea el fin del mundo, abajo hay un video donde explican el propósito de al investigacion mucho mejor que yo.

Drunk Tech Review

Señores, paren las prensas, creo que encontré el sitio de review tecnológico mas importante de la historia, Drunk Tech Review, hacen exactamente lo que dice el título, hacen comentarios sobre tecnología, mientras están tomando, es lo máximo, los comentarios van subiendo de tono, todo empieza a tener menos sentido cada vez, la censura empieza a bajar con cada trago que se toman, son irreverentes, tienen una visión clara de la tecnología y parece un asado con tus amigos geeks donde hablan de tecnología y se ríen de cosas irrelevantes.

Definitivamente lo mejor, intoxicante, no se puede dejar de ver y muy divertido, sobretodo si les sigues el paso en lo que toman.

Apple y Samsung se unen para eliminar al chip SIM

Gaceta Tecnologica

Las tarjetas SIM, conocidas como el famoso chip que permite poder cambiar de smartphone sin perder la línea, tiene sus días contados ante una iniciativa de Apple y Samsung, que busca transformar este sistema en una nueva tecnología virtual que facilite el cambio entre operadoras de telefonía celular.

Según el reporte del Financial Times, las dos compañías, acérrimos rivales en el segmento de los dispositivos móviles, están desarrollando un nuevo estándard denominado e-SIM, que permite definir el número de línea sin tener la necesidad de utilizar una tarjeta física. Se espera que esta modalidad llegue al mercado en algún momento del próximo año, aunque Apple ya está experimentando algunos cambios similares mediante la Apple SIM, que permite elegir la operadora para la iPad Air 2 desde un único chip físico.

Virtualizar las prestaciones de la tarjeta SIM permitiría que los fabricantes puedan ganar un espacio pequeño pero vital para reducir…

Ver la entrada original 69 palabras más

Blog de WordPress.com.

Subir ↑

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 1.014 seguidores