9 anys des de que vaig tornar a neixer
Avui es compleixen 9 anys del meu accident que em podria haver costat la vida, sempre m’agrada escriure un article recordant el moment i mostrant una foto de com va quedar el cotxe.
Aquest any el fet és més emotiu que mai ja que després del punt d’inflexió que va suposar per mi aquest segona oportunitat me n’adono que he canviat molt les meves preferencies vitals i això em fa sentir molt bé. De fet, amb l’última re-organització del blog es pot veure que a més del meu interés per la tecnologia es diferencia clarament un apartat dedicat al creixement personal i un altre per tractar temes personals, com aquest mateix article.
Però no només el blog és un gran exemple del meu canvi interior, el passat 29 d’abril vaig contraure matrimoni amb l’Estefania una persona que m’ha ajudat a tenir un punt de vista molt diferent a la vida; on els aspectes més competitius de la nostre societat han obert un espai a altres parts més emocionals que m’ajuden a mantenir l’equilibri en el meu dia a dia. Quan després de tots aquests anys de treball personal arribes en un punt d’equilibri entre la part mental, emocional, espiritual i física tot plegat té un efecte revitalitzant que t’ajuda a afrontar el dia a dia amb un somriure als llavis.
L’última prova me l’ha posat la vida aquest darrer dia 1, dia en el que un dels meus servidors personals m’ha donat un ensurt que paliar els efectes em costarà encara moltes setmanes de feina i esforç, tan energètic com econòmic. Però el difícil, o l’interessant, és saber afrontar aquesta situació professional sense que m’afecti el moment tan dolç que estic vivint en la meva vida personal. Dit d’altre forma, el interessant és aconseguir que aquest contra-temps tècnic no tingui efectes sobre el viatge de noces que comença aquest proper dijous. Això és el que em fa estar més content de la meva evolució d’aquests 9 anys.
No penseu pas que estic dient que he arribat al final del meu camí, al contrari, he descobert que l’èxit no el trobaré al final del camí sinó disfrutant del dia a dia pel fet de poder viure el camí que he escollit. Per no allargar-me massa acabaré l’article amb una cita:
La vida és un joc, no et prenguis res seriosament.
TED: Jill Bolte Taylor – El derrame de iluminación
Hoy he disfrutado de este video de TED; es la primera vez que referencio este servicio pero seguro que no será la última.
Quiero recomendaros este video porqué hace una reflexión sobre cómo nos hace percibir nuestro interior y exterior los dos emisferios del cerebro. Creo que son 20min de iluminación que no puedo dejar de recomendaros.
Deseo que os guste y os llene tanto como lo ha hecho conmigo.
Deep inside AMQP
In the next lines I’ll describe with more details the properties and features of AMQP elements. It won’t be an exhaustive description but in my opinion more than enough to start playing with AMQP queues.
Channels
When producers and consumers connects to the broker using a TCP socket after authenticating the connection they establish a channel where AMQP commands are sent. The channel is a virtual path inside a TCP connection between this is very useful because there can be multiple channels inside the TCP connection each channels is identified using an unique ID.
An interesting parameter of a channel is confirmation mode if this is set to true when messages delivered to a exchange finally gets their queues the producer receives an acknowledge message with an UID of the message. This kind of messages are asynchronous and permits to a producer send the next message when it is still waiting the ACK message. Of course if the message cannot be stored and it is lost the producer receives a NACK (not acknowledged) message.
Producers
Maybe this is the most simple part of the system. Producers only need to negotiate the authentication across a TCP connection create a channel and then publish all messages that want with its corresponding routing key. Of course, producers can create exchanges, queues and then bind them. But usually this is not a good idea is much more secure do this from consumers. Because when a producers try to send a message to a broker and doesn’t have the needed exchange then message will be lost. Usually consumers are connected all time and subscribed to queues and producers only connect to brokers when they need to send messages.
Consumers
When a consumer connects to a queue usually uses a command called basic.consume to subscribe the channel to a queue, then every time subscribed queue has a new message it is sent to consumer after last message is consumed, or rejected.
If consumer only want to receive one message without a subscription it can use the command basic.get.This is like a poll method. In fact, the consumer only gets a message each time it sends the command.
You can get the best throughput using basic.consume command because is more efficient than poll every time the consumer wants another message.
When more than one consumer was connected to a queue, messages are distributed in a round-robin. After the message is delivered to a consumer this send an acknowledge message and then queue send another message to next consumer. If the consumer sends a reject message the same message is sent to next consumer.
There are two types of acknowledgements:
- basic.ack: this is the message that sends consumer to queue to acknowledge the reception of a message
- auto_ack: this is a parameter we can set when consumer subscribes to a queue. The setting assumes ACK message from consumer and then queue sends next message without waiting the ACK message.
The message basic.reject is sent when the consumer wants to reject a received message. This message discards the message and it is lost. If we want to requeue the message we can set the parameter requeue=true when sent a reject message.
When the queue is created there can be a parameter called dead letter set to true, then consumer rejects a message with the parameter requeue=false the message is queued to a new queue called dead letter. This is very useful because after all we can go tho that queue an inspect the message rejection reason.
Queues
Both consumers and producers can create a queue using queue.declare command. The most natural way is create queues from consumers and then bind it to an exchange. The consumers needs a free channel to create a queue, if a channel is subscribed to a queue, the channel is busy and cannot create new queues. When a queue is created usually we use a name to identify the queue, if the name is not specified it’s randomly generated. This is useful when create temporary and anonymous queues for RPC-over-AMQP.
Parameters we can set when create a new queue:
- exclusive – this setting makes a queue private and is only accessible from your application. Only one consumer can connect to a queue.
- auto-delete – when last consumer unsubscribes from queue the queue is removed.
- passive – when create a queue that exists the server returns successfully or returns fail if parameters don’t match. If passive parameter is set and we create a queue that exists always returns success but if the queue doesn’t exist it is not created.
- durable – the queue can persist when the services reboots.
Exchange and binding
In the first post of the serie we talked about different exchange types as you can remember these types are: direct, fanout and topic. And the most important parameter to set when producer sends a message is the routing key this is used to route the message to a queue.
Once we have declared an exchange this can be related with a queue using a binding command: queue_bind. The relation between them is made using the routing key or a pattern based in routing key. When exchange has type fanout the routing key or patterns are not needed.
Some pattern examples can be: log.*, message.* and #.
The most important exchange parameters are:
- type: direct, fanout and topic.
- durable: makes an exchange persistent to reboots.
Broker and virtual hosts
A broker is a container where exhanges, bindings and queues are created. Usually we can define more than one virtual brokers in the same server. Virtual brokers are also called virtual hosts. The users, permissions and something else related to a Broker cannot be used from another one. This is very useful because we can create multiple brokers in the same physical server like multi-domain web server and when some of this virtual hosts is too big it can be migrated to another physical server and it can be clustered if it is required.
Messages
An AMQP message is a binary without a fixed size and format. Each application can set it’s own messages. The AMQP broker only will add small headers to be routed among different queues as fast as possible.
Messages are not persistent inside a broker unless the producer sets the parameter persistent=true. In the other way the messages needs to be stored in durable exchanges and durable queues to persist in the broker when it is restarted. Of course when the messages are persistent these must be wrote to disk and the throughput will fall down. Then maybe sometimes create persistent messages is not a good idea.
El mejor año de tu vida
Este mes de enero leí el libro “El mejor año de tu vida” de Mónica Fusté. Un libro que ya estube recomendando a través de twitter. Después de leer el libro y a modo de notas personales hice un mapa mental que hoy me he decidido a traducir al castellano y a compartir con todos vosotros.
Añadir que este mapa mental no sustituye para nada la lectura del libro. Pero si que después de leerlo a mi me ha sido muy útil tenerlo a mano para recordar conceptos fundamentales del viaje interior que estoy haciendo.
Classificació
He dedicat gairebé tot el dia a acabar el nou format del blog. És possible que hi acabi afegint algo. Però ara per ara la idea que porto al cap la dono per tancada. És a dir, que la re-estructuració en la forma d’accedir i visualitzar els continguts queda totalment separada en les tres seccions que ja he estat comentat.
Ara només entrar al blog com podeu veure en el menú principal es pot escollir de forma senzilla el poder veure tots els contiguts, només els de tecnologia, creixement personal o els personals. Així quan algú entri amb una idea concreta desitjo que li sigui més senzill trobar el que busca.
Finalment a la part superior podeu trobar els menús que hi havia abans a la barra principal.
Apa doncs, a disfrutar-ho.
What is AMQP? and the architecture
What is AMQP? (Advanced Message Queuing Protocol)
When two applications need to communicate there are a lot of solutions like IPC, if these applications are remote we can use RPC. When two or more applications communicate with each other we can use ESB. And there are many more solutions. But when more than two applications communicate and the systems need to be scalable the problem is a bit more complicated. In fact, when we need to send a call to a remote process or distribute object processing among different servers we start to think about queues.
Typical examples are rendering farms, massive mail sending, publish/subscriptions solutions like news systems. At that time we start to consider a queue-based solution. In my case the first approach to these types of solutions was Gearman; that is a very simple queue system where workers connect to a central service where producers have to call the methods published by workers; the messages are queued and delivered to workers in a simple queue.
Another interesting solution can be use Redis like a queue service using their features like publish/subscribe. Anyway always you can develop your own queue system. Maybe there a lot of solutions like that but when you are interested in develop in standard way and want a long-run solution with scalability and high availability then you need to think in use AMQP-based solutions.
The most simple definition of AMQP is: “message-oriented middleware”. Behind this simple definition there are a lot of features available. Before AMQP there was some message-oriented middlewares, for example, JMS. But AMQP is the standard protocol to keep when you choice a queue-based solution.
AMQP have features like queuing, routing, reliability and security. And most of the implementations of AMQP have a really scalable architectures and high availability solutions.
The architecture
The basic architecture is simple, there are a client applications called producers that create messages and deliver it to a AMQP server also called broker. Inside the broker the messages are routed and filtered until arrive to queues where another applications called consumers are connected and get the messages to be processed.
When we have understood this maybe is the time to deep inside the broker where there are AMQP magic. The broker has three parts:
- Exchange: where the producer applications delivers the messages, messages have a routing key and exchange uses it to route messages.
- Queues: where messages are stored and then consumers get the messages from queues.
- Bindings: makes relations between exchanges and queues.
When exchange have a message uses their routing key and three different exchange methods to choose where the message goes:
- Direct Exchange: routing key matches the queue name.
- Fanout Exchange: the message is cloned and sent to all queues connected to this exchange.
- Topic Exchange: using wildcards the message can be routed to some of connected queues.
This is the internal schema of a broker: