Build your Microservices with ZeroMQ
Formal Metadata
Title |
Build your Microservices with ZeroMQ
|
Title of Series | |
Part Number |
81
|
Number of Parts |
169
|
Author |
|
License |
CC Attribution - NonCommercial - ShareAlike 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this license. |
Identifiers |
|
Publisher |
|
Release Date |
2016
|
Language |
English
|
Content Metadata
Subject Area | |
Abstract |
Floris Bruynooghe - Build your Microservices with ZeroMQ While microservices are rather commonly implemented using JSON over HTTP this is merely an implementation choice. This talk will cover the reasons why you might want to choose ZeroMQ as communication transport between your microservices instead. It will show how ZeroMQ is used from within Python and the common patterns which can simplify the overal architecture while at the same time providing reliable and low-latency communications between your services. ----- Microservices is the popular term for the trend to build backend architectures as a number of smaller independent processes. As an evolution from the Service Oriented Architecture the core aims are to create independent services which are easy to operate and even replace while all of them together compose into providing the business logic required for your application. While it is rather common for microservices to choose JSON over HTTP to communicate with each other, this is purely an implementation choice. HTTP is a protocol using a strict request-response format, this can become a little burdensome when needing to deal with asynchronous requests and forces some architectural descisions to be not as ideal as they could be. ZeroMQ has more flexible communication patterns allowing for easier mapping of real-life interactions between services. Coupled with an easy to use asynchronous user-level API and very fast underlying communication on persistent TCP connections ZeroMQ is a rather attractive transport to build your microservices based applications in. This talk will show how to use ZeroMQ within Python to build your microservices. It will show the benefits of ZeroMQ's asynchronous API, common usage patterns and how to handle backpressure. Furthermore different communication patterns will be explored and the impact this has on how to simplify the overall architecture using these patterns.
|

00:00
Dataflow
Service (economics)
Computer animation
Term (mathematics)
Forest
Computing platform
00:55
Goodness of fit
Service (economics)
01:29
Socket-Schnittstelle
Service (economics)
Building
Service (economics)
Bit
Cartesian coordinate system
Medical imaging
Message passing
Pointer (computer programming)
Computer animation
Web service
Time evolution
Telecommunication
Pattern language
Quicksort
Communications protocol
Message passing
Condition number
02:36
State of matter
Code
Multiplication sign
Solid geometry
Flow separation
Message passing
Centralizer and normalizer
Lecture/Conference
Network socket
Armstrong, Joe
Energy level
Quicksort
Service-oriented architecture
Message passing
Library (computing)
03:27
State observer
Thread (computing)
Connectivity (graph theory)
Shared memory
Multilateration
Mereology
Computer programming
Message passing
Process (computing)
Meeting/Interview
Different (Kate Ryan album)
Normal (geometry)
Quicksort
Endliche Modelltheorie
Physical system
Task (computing)
04:40
Software
Armstrong, Joe
Computer program
Rule of inference
Social class
Formal language
05:13
Slide rule
Implementation
Graph (mathematics)
Scaling (geometry)
Connectivity (graph theory)
Real number
Combinational logic
Electronic mailing list
Sheaf (mathematics)
Set (mathematics)
Cartesian coordinate system
Formal language
Data management
Message passing
Software
Term (mathematics)
Network topology
Telecommunication
Data structure
Quicksort
Endliche Modelltheorie
Physical system
Task (computing)
07:23
Mainframe computer
Web service
Service (economics)
Computer animation
Building
Architecture
Projective plane
Cartesian coordinate system
Sinc function
07:59
Group action
Distribution (mathematics)
Service (economics)
Mapping
Virtual machine
Bit
Cartesian coordinate system
Number
Formal language
Category of being
Voting
Process (computing)
Network socket
Network topology
Point cloud
Right angle
Quicksort
Error message
Library (computing)
Physical system
10:32
Point (geometry)
Building
Group action
Service (economics)
Overhead (computing)
Observational study
Direction (geometry)
Multiplication sign
2 (number)
Sound effect
Programmer (hardware)
Web service
Meeting/Interview
Network socket
Endliche Modelltheorie
Computing platform
Service (economics)
Graph (mathematics)
Bit
System call
Connected space
Category of being
Message passing
Software
Personal digital assistant
Architecture
Telecommunication
Order (biology)
Pattern language
Library (computing)
13:01
Message passing
Constraint (mathematics)
Atomic number
Building
Buffer solution
Device driver
Energy level
Bit
13:39
Slide rule
Theory of relativity
Divisor
File format
Bit
Frame problem
Connected space
Particle system
Frequency
Message passing
Telecommunication
Divergence
Energy level
Video game
Pattern language
Communications protocol
Computer worm
15:07
Slide rule
Socket-Schnittstelle
Block (periodic table)
Keyboard shortcut
Cartesian coordinate system
Connected space
Type theory
Particle system
Data management
Message passing
Pointer (computer programming)
Meeting/Interview
Semiconductor memory
Network socket
Self-organization
Quicksort
Procedural programming
Pressure
Exception handling
17:13
State of matter
Pattern language
17:33
Service (economics)
Group action
1 (number)
System call
Connected space
Web service
Message passing
Computer animation
Personal digital assistant
Different (Kate Ryan album)
Single-precision floating-point format
Queue (abstract data type)
Block (periodic table)
Message passing
Address space
Router (computing)
Address space
18:16
Information
Multiplication sign
Counting
Drop (liquid)
Client (computing)
Uniform boundedness principle
Message passing
Web service
Root
Lecture/Conference
Natural number
Web service
Single-precision floating-point format
Network socket
Telecommunication
Pattern language
Queue (abstract data type)
Quicksort
Uniform boundedness principle
19:29
Proof theory
Particle system
State diagram
Message passing
Group action
Data management
State of matter
Energy level
Quicksort
Connected space
21:12
Web service
Mereology
Reading (process)
21:33
Peer-to-peer
Axiom of choice
Uniform boundedness principle
Distribution (mathematics)
Service (economics)
Architecture
Quicksort
Mereology
Connected space
22:30
Frame problem
Touchscreen
State of matter
Ferry Corsten
Boilerplate (text)
Streaming media
Streaming media
Mass
Term (mathematics)
Mereology
Cartesian coordinate system
Radical (chemistry)
Web service
Message passing
Process (computing)
Loop (music)
Computer animation
Bit rate
Single-precision floating-point format
Game theory
Message passing
Abstraction
Lambda calculus
24:04
Frame problem
Context awareness
Socket-Schnittstelle
Code
Boilerplate (text)
Streaming media
Bit
Streaming media
Message passing
Data management
Computer animation
Lecture/Conference
Term (mathematics)
Core dump
Right angle
Quicksort
Message passing
Set theory
Abstraction
Lambda calculus
24:58
Frame problem
Building
Message passing
Computer animation
Different (Kate Ryan album)
Architecture
Cuboid
Streaming media
Term (mathematics)
Message passing
Lambda calculus
25:40
Lecture/Conference
Meeting/Interview
Multiplication sign
1 (number)
26:16
Point (geometry)
Lecture/Conference
Telecommunication
Computer programming
26:58
Demon
Red Hat
Computer animation
00:00
is flow is below was going to be speaking about the builder micro-services with 0 do few
00:13
the and so yeah I'm forests and have been been writing for quite a while
00:20
and and currently I'm working on because value and and so on and this is a a term monitoring platform and we kind of design that can be microservices and in using 0 q well to communicated to try and In this talk is delivered based on on that experience and that we the that we have from that end I think it's a it's a very good way of of of making resilient back and I think and obviously we
00:59
when when we started this about year ago and you know we we've learned along the way we didn't have the perfect I know of that kind of as a living in in that kind of good and so on yeah but then I think it is it's a nice way and often often in
01:18
uh Mike services nowadays use the and jason it's nice to to think about what it is doing this so just kind of an overview of what I
01:30
will be covering talking about is a all all talk kind of have into half so the first one is sort of all talk about a bit about message passing and and how we how we kind of came from a building monolithic applications to sort of uh coming toward towards microservices and and why that actually to me at least make sense and and then in the 2nd column going to discuss a little bit more about as 0 and you why it is a very and any kind of ties in bits and what why it's it's a very nice way all of course using for communication of then and give
02:11
a very quick way will want to offer some not really of off of the image details about this 0 you with them just Justin pointers in and and tips of what what to look out for and also the Oxford discussed some some patterns that we use that I think are useful for designing using your mark services when and police conditions
02:36
and this not and that much time so I don't really going in in an awful lot of background so I assume you have sort of a higher level of you and knowledge of flights to the end of the rest of the solids and you sort of have a vague idea what you don't use that least to you sort of socket library that sense special announced and that doesn't have a central message broker and so it's presses directly talk to each other and so I think message passing is
03:09
actually quite an interesting and I think this is an essential kind and when you when you right like large and when we arrived last code things usually and being in in separates states instead of compulsory licensing you
03:27
models that use of and so sometimes like in quality of efficiency and the program and threading of something normal processing and that sort of thing and putting things usually fall into the into and smaller smaller tasks and common common way especially like when when when going to threaten models that tries Mr. the in the because because later prices systems kind of started implementing this some of the writing big monolithic applications and that those with the tools we have available so that a lot of shared memory of what happened and this observation from from Johnson's like well you know that is not how how we work in the real world it's not really an
04:12
effective I want to use if you want to communicate that we we talk to each other we don't like the Beatles brain and programmed in that directly assets of message passing is kind of very in a very natural way of connecting different tasks and different components that work together and it's also and it results if you future employed in and resilience and the employed and more than you actually on the part of the linguist systems so especially a sort of
04:40
an as so and yeah so so uh Johnson together with these old people kind of realized
04:51
and back in the late eighties I think they thereafter uh to to write some software as a service fruitful for their work and 1 of them and you know as a as any could substantiate went well yeah that the rule that your edits after the end of kind of writing a language class instead of actually yeah this software and but what will they
05:14
did this because they they they designed language at around the the smaller components and they actually embraced dislike let's let's make lots of little cost doesn't make you communicate with each other to everything is an evident in
05:29
terms of the the structure set of was an if you can decompose you programs in into all the smaller tasks and they can also talk to each other the task itself actually from quite small and then a lot simpler to work on them and they didn't have the communication data if I message passing in in this the created the and then made an actor implementation essentially and that they just became a little little list of like wait for a message that if you get a message do something and then maybe some some modern messages and then when you don't just wait wait for the next lectures and person message and if this resulted in a in a very robust kind of rubber language that was that was really good for for but building begins scale systems and the other important thing they did actually in that in and written language this you have having all these these hundreds and thousands of little task section that they have and if you you have to sort of managers because if you have an area that that then they may die and they took so that's that's 2 of them that it by sort of 1 of the models that have and to to to work around that is they basically they they have the special supervisor kind of a the supervision of tasks that look off the graph to the other ones and if it if 1 of the last slides that they they just we started in the legislature and they to to build like a massive big applications that they and the building the supervision trees like with supervises supplies other supervisors and maybe combination of actual real cost was that has proven to be active very good way of of of writing software especially trying decompose it as far and you can and communicate to each other so in a way I I kind of think of Ireland's
07:24
fine original kind of none of services it went way way of writing programs but in the meantime like since since the eighties the infrastructure around this has been improving as well so at what while you know on on a big mainframe was easier to deploy 1 with the application of things and you know it became easier to kind of have your service for
07:48
for for project and we kind went through service oriented architectures a little bit in between you know is already smaller still quite big to deployed within the infrastructure and this kept improving as well with an we we started getting
08:01
uh Clouds cloud services for for and spinning of new voter machines it's the transition from a guy called again you machines so 2 things get scaling down and and and is basically of all because the infrastructure around to manages things kind of be came into play so so packaging and distributing applications to to to your institutions became easier and and allowed you to show is the loudest shrink our our individual components and and and basically like with the containers speed we're actually we're going to be read and managed to go from sort of the whole here's a single process but that contain a kind of mapping and and then the and that means basically you can you can now yeah just have in your own application you just because of that work is being offloaded to tooling around and around your
08:59
application can just becomes smaller and smaller that's really nice so and I'm a I'm a bit writing communities is very the like you crustaceous systems that we don't like them communities is realized that kind of takes that further because it takes that uh that that property of supervision trees that are aligned has and and it means that our micro-services don't really have to to worry about book anymore about logging all about that if if they if they have an error just let it die and communities will sort of and show that it gets we started to get the right number of of fuel few contains keep running and and that that allows us to shrink sort of our our process and we ended it ended up being easier to write our obligations as a whole of processes for containers and and and then you get the benefit of that is what while inside of this this none of services and science maybe this thing up and could think of it as like the ultimate goal but the other benefit is that contains the we completely isolated so we don't all have to write the same programming language we can now right in in in in in Python you know a language that gives us and looping syntax rather than something like these are from the ages doesn't look syntax and as so so that's kind of where where with this that allows us to getting so 0 and you don't uh 0 q is is a very that's it it's a it's a kind of socket library and so
10:33
so it's very well supported on many platforms is really stable and well tested and and and a bit but it's it's essentially a socket library but it gives a nice properties we can send messages to each other and you don't have a sense broken which is realized build a kind of distributed architectures and kind of 1 of the main benefits kind of an compared to like hedged the repressed In and this case you get out of the problem with this and if you do this it should be addressed using you actually have very strict patterns you request to get a response and if you end up the building looks like service that you need to do and what you calling all of my activism and you have to go and wait for the response and if the market and and if you call services that people to try you still have this very direct call graph of of tendencies that all need to be there and and if you if you don't have you actually have like the same thing as the model because it's essentially function calls but instead of doing it impresses you now have an excellent network layer that can go unfairness well and so on and just like you can try and prove things with running time at the travel and it doesn't you still have have quiet restricted what work way of organizing things so that's why I think like CMQ brings kind of new possibilities and 0 OK so it's like it's a have freaky kind of and or I think is a good point of 2 accused of it great
12:01
keeps persistent connections so we can do really low overhead communication at it's very good at like group grouping packages if it if it needs to but still keeping the latency very low I at it and and gives you reliable so delivers whole messages and give them all always in order to to transparently reconnects as well so you don't have to worry about those studies and then going to back off a little bit and try recollect in 3 seconds and that may part 2nd and also things so I kind of like to think of it as like like Python that is like that 1 of the things and like of the week so we aspire to programmers don't have to sit there and do that and then 0 case that I don't you know they they did it is horrible nasty network stuff talking because of and all of those things that most of it in the wrong what when and we just get this nice messaging syntax on top um and the will eventually signed language-agnostic so you can just community you don't have of you marks services written the listing of same in the the last thing is kind of it's got very nice user-level
13:02
user-level syntax so it's kind of distinct asynchronously to you just say I want to deliver this I want to send this message and just to 10 straight away he takes it away and then he goes and has to deal with all the kernel drivers and the buffering and then the constraint you don't have to you don't have to worry about that you just to receive and send the atomic messages and everything else happens sort of in the background and it's it's much easier to write out saying
13:28
that there is a there is some you know not everything is so great that it is a bit lower levels so H because transport waste to be is
13:40
a little bit lower level you have to actually design neuron and particle with which you don't have to do with its relation the you only have to worry about that the payload so you know Jason uh it is is a common format you can still transfers around in there so you can use something else we tend to use them as practice and but but
14:00
the fact that you you communication pattern of when do I send a message when you're receive message as the this is now you your problem so you have a little bit more work to do and and the other thing is that and and in this communication in the amended Protocol want 1 of the the tricks is kind of to always uh the z and you messages are kind of divide frames and to always kind of stop divergent friend you can easily change a protocol and just by by selecting the 1st on the convergence and frame and the other kind of a little bit difficult things sometimes in Xi'an is that you have no knowledge about connections to you don't know if period actually connected and on the previous slide said you know it hand was this automatically reconnection for use in the background and it also means you don't know the other side you know if you period actually life just sending things and that can be sometimes a little bit difficult so but it depends on the particle if you if you design your critical band private and and you don't agree after about it sometimes you end up having to do how beating to actually appears in and that is not very nice at all and
15:08
so it's not try and and so now I'm going to try and gonna go really quickly through slides that and and as defined to them during this means
15:18
that like but and just just some pointers about you know things to look out for for 1 management use using and Q is a
15:28
win-win there's always cues associated so if you have if you have to to to be is talk to each other you great sockets on each side as nodes and broken but you do get used and they're just in memory on either side so they're associated and they don't tend to really explain in uh in in our in my school that consolidates where where and when those cues that creative mind when they get destroyed and that sort of important because of that message and cues when they get destroyed so in general this sort of get created when you when you receiving connections they get creative and pay at 1st the next year when you're making outgoing connections this sort of get created so when you're uh when you make that connection even if there is no connection here and that is the it's something to watch out for when cues that get great and get the story and the other thing about users that it gives you some sort of back pressure so it it useful depending on the socket type you that he and using 0 and you want to get to in a 2nd he amended useful ideas it will block or it will just suddenly drop him you must and that's OK you particles can just take into account and that sort of give you back pressure so if you if you got too many messages you can you can decide to stop and the dual appears in my consuming a fast enough you can you can it's kind of block uh in in items bindings to kind of you probably want to reconfigure attitudinal actually really block your application and sometimes it doesn't really matter but even if it doesn't really matter if actually really block then you have no idea procedures stuck somewhere in Annecy stock in this year and this is called an organ pardon so it's much I asked you to study raise an exception then you can also a MacUser for them and then just oversight to block or whatever but in the during what the other thing to look out for a few
17:14
starting it's like every single tutorial pretty much starts
17:17
with his Request-Reply patterns and it's not a good pattern uh not not just because it's not what I said about also because as we internal states I'm not going to go into that much but a finally that they realized as well and that should be present as well and but by
17:34
some client-server servicing but that's not yet have a basically you can skip past the repressed by and dealing with so all the ones that that do
17:41
it there were calls for the imputed that what you want to use and very quickly so uh the main difference between the learned and readers seeking connection to to many pair so you can talk to many once the main difference is that there is you can actually address the single orbit space the downside of that the the flip side of that is that it needs to wait to receive a message because only months received much has and the address of all of the page and send a message to the dealer is often used as the other side and in that case and uh the only thing I would like to save the Lewis like if you only connect to 1 pair then
18:16
you know you gonna sentence to so that's sort of kind used to connect the dealer to a single root socket and this kind of a common way of doing that and pub sub is the although
18:27
pattern that you probably want to use a lot and then it's basically just one-way communication so essentially and
18:33
you you you broadcast information to lots of subscribers but it is a firehose so if if if the the the sending side will never kind of be be all the by clients not being able to keep up and but it does mean and kinds of news compliance can't keep up at that they want because the nature of simply want we know that the client was detected has missed information that it has so when you design protocols for that you want to you can usually want to put in count to just put in accounts that increments every time you have a message sent and then the final which can detect that they have missed something and and and what they can try and decide what to do about having missed something and so and yet so this is a colorless observes patterns kind of work when it is a common kind of like the kind like a service
19:30
industry and we same artist and and this sort of went whenever it when you have like so that wants to manage resources from which the proofs of so I find it really nice to meet you kind of think about trying think of it as status senior and actually write states that this little can be and then draw Draw draw connections you know the state transitions that can make once you have that that that state diagram you know you can you can think of it you can it simplifies and so and then you can start thinking about what how you know what messages to I want to use sentences to to change from the states and when you're when you're designing your urine when you design and that the particle the the nice thing is that the thing you want to look at 1st you don't really want to send you don't want to design a particle so that you send messages saying hey can i can you take this action for me please because
20:24
then you go back to this sort of Request-Reply kind of style of things can you take this action from the no sorry I was in the wrong state or or we actually use it was successful and it's much nicer to to kind of make your message you message that you know and you particle at you might have to make it kind of level based so is that if you just say like hey can you get this resource for me in this state and depending on hormone always management you you may not even be thought about waiting for the reply you can just go go and send that message and and and walk away from and obviously to get to get this the current state of of the of the resource you will have to wait for reply and so you still have some sometimes you have to provide and this kind of a and a nice way of
21:13
making making making use of this kind of more more resilient against them thank and against all the readings you can get in the and the other 1 that I was uh
21:26
elected like to point out this as a basically use parts of that service great and and that's kind of you know comes at end consumers
21:36
did read a couple slides if if you can try and think of the of the problem is that there's 2 services want to talk if he can somehow even if you only have like 1 1 1 consumer for full for distribution if you can think of it as a as a pub sub problem becomes it becomes a lot more the couple and and and it and it will become more resilient there are many
21:57
also it also simplifies the architecture with if you make everything like peer-to-peer connection reaction have to know about your the science and you're wonderful thing that is so that that's the architecture of flight all dependencies relying on each other and and like this making using parts of the really really simplifies that that sort of that situation so so that's if you if you can at all get away with it using up it's usually a much nicer to have a very good choice the
22:31
and and and lastly and look to mention this the sort of because but when I went and going back to beginning where I said well and you the games such a kind of takes place so the state takes over and that's why we can write small more applications at every now and then when I was talking about acts as well have every kind of service and so do doing the same thing it just waiting for messages and then when gets the message is started something so this is something that we we kind of started uh because that the main group of every application was kind of same so it's always the same boilerplate so we started obstructing this away and we came this and stream abstraction and let me where you get uh we we can basically just use a for loop and for is the interesting part here that you want to look at the against you just process masses of the for loop and then you do something with them and if there's no before the rate for the for loop will just look and termination and then you know becomes becomes very simple you just have this them stream not sent you know about 2 to 2 this
23:40
experiment something and well when when when you want to terminate your your application sense and single that and it just comes basically in his message but it's kind of hidden from you and fully just exits and and and and X clearly the the only other thing that exodus and that this past screen kind of this is it uses them the it here is mystery
24:05
with a context manager and the only reason for that is very often it's context managers that you also have if you get an exception in in your Message Handling code something that it it it allows the the the stream to sort of cleanup itself because it has some CMQ
24:23
sockets open itself in terms of this kind of it's a very nice abstraction of the kind of hand movement and especially the core of the pretty much every marks of is that we have and it's and it's publicly available currently is a city of that gets the package which is a little bit of a city's kind of just this is how our own personal kind of boilerplate removal tactile it might not be applicable to set theory would like to move the 2nd acts outside of it because that's that's more of a generic and and uh but yeah it's it's a very it's a very nice way of of of right of of
25:00
removing the boilerplate in in in in the service of and that's kind of the the this kind of repeated like my mind my the maintain really you don't have to like you and you feel like it and but if you if you think of your URI architecture of if you
25:16
think that as passing messages rather than as request like and you read you start to think of a few architecture different and then you end of building and mapping them more easily architectures and yet there is you look outside of the box of age to be that there you don't have to like but that there are other options and other major so you can determine those
25:42
theft
25:54
I think we have time for 1 question what kind of good thank you but there was also on the those I just have a question regarding ones like we said like kind of don't use issues piece so what's your take on something like you know of rest sleep you you know WebSockets that is so
26:18
Grant rest usually very request-response placed so that comes with it but what I think he's 1 of them was how to make these it is useful sometimes and WebSockets going to work well and that to work around this because you get you get extreme and then you have to to implement the your program from the point of this 3 threats of are nice way of all of communications
26:43
maybe we can do in 1 more what did he began to lose some of the
