Managing Data in Microservices

  Переглядів 141,622

InfoQ

InfoQ

День тому

Want to attend #QCon or #DevSummit for free? Here's your chance!
Write an article for #InfoQ and you could win a ticket! Show off your expertise and contribute to the tech community.
Join the contest now: www.infoq.com/articles/infoq-...
💪 Knowledge is power!
#ArticleContest #TechArticles #WinATicket
--------------------------------------------------------------------------------------------------------------------------------------
Download the slides & audio at InfoQ: bit.ly/2wVAkdN
Randy Shoup shares proven patterns that have been successful at Google, eBay, and Stitch Fix. Shoup covers managing data, the need to isolate a microservice's data store behind the service interface, using events as a first-class tool in the architectural toolbox, techniques for service extraction from a monolithic database and much more.
This presentation was recorded at QCon New York 2017.

КОМЕНТАРІ: 108
@ClimbAClassic
@ClimbAClassic 6 років тому
Rewind to 28 minutes to get to the topic
@wartem
@wartem 6 років тому
ClimbAClassic thanks
@neuemage
@neuemage 6 років тому
*forward
@tansudasli
@tansudasli 5 років тому
is that make sense :)
@sn20
@sn20 4 роки тому
@@tansudasli the talk was good. minus the does it make sense. ofcourse I saw it from 28+ climbclassic thanks.
@user-ud8hw4gp6t
@user-ud8hw4gp6t 9 днів тому
@@tansudasli does it
@lironlevi
@lironlevi 2 роки тому
The problem with "do it right the first time" approach is that its an all or nothing mindset. You sometimes dont have the time or knowledge to do it right the first time so you do a far from perfect solution that is still enough to drive the business forward and thats all that matters. The second problem i have with his database approach is that resolving data inconsistencies via compensating actions can quickly become a major source of data inconsistency bugs. Its a lot harder to maintain data consistency without the help a relational database provides in terms of transaction support.
@darkopz
@darkopz 5 років тому
The sad reality is to the initially question is that sometimes we DO have time to do it twice. Why? Because projects set unrealistic expectations for code freezes and release but build in obscene “testing” cycles in which you can essentially rewrite the entire Feature as long as you’ve said you finished the first time. I’ve come across quite a few of these types of companies. As much as one pushes to do it right the first time, it’s not always possible given the project dynamics.
@GiovanniSosa
@GiovanniSosa 5 років тому
Great advice on TDD and why it's important "Do it right the first time"
@matimon
@matimon 4 роки тому
I really REALLY like this talk and keep coming back to watch it again every few months
@wepranaga
@wepranaga 3 роки тому
I'm really rooting for the quote. don't have time to do it right. but have time to do it twice
@lifedesignguru
@lifedesignguru 3 роки тому
Fantastic talk! Thank you so much.
@vimalneha
@vimalneha 5 років тому
Excellent talk
@l_karuhanga
@l_karuhanga 3 роки тому
'I'm gonna talk about joins'- finally!
@zpengh
@zpengh 3 роки тому
That’s the question I have when I see he separated tables
@umaradilov1489
@umaradilov1489 Рік тому
Great speech !
@osamaa.h.altameemi5592
@osamaa.h.altameemi5592 3 роки тому
That was awesome talk. Thank you.
@koredeaderele1666
@koredeaderele1666 3 роки тому
good talk, clearly presented
@chrisstakutis6574
@chrisstakutis6574 5 років тому
Fantastic and so well-done. Especially loved how to think of ACID transactions as a series of events (and backwards to unroll)
@solmonr
@solmonr 2 роки тому
Great talk, but one has to have a great ROI to choose Micro Services.. Sometimes or most of the time it is a showoff from the point of architect, trying to force
@kaushikvelidandla7010
@kaushikvelidandla7010 2 роки тому
Around 38:41, for materializing the view , he says bunch of items and feedback about each item is a many to many relationship. How ? 1 item can have N feedbacks. Can 1 feedback to associated with M items ? ( Understandable if it's order feedback and each order feedback consists of multiple item feedbacks)
@mdanetzky
@mdanetzky 5 років тому
What should we do when the transaction rollback fails?
@CronosTsHastaroth
@CronosTsHastaroth 5 років тому
Cry in a fetal position ?
@SiddharthKulkarniN
@SiddharthKulkarniN 4 роки тому
Waiting for a serious answer.
@VishalGupta9
@VishalGupta9 4 роки тому
What you could do is say the transaction rollback is happening from service D -> C -> B -> A. For example if there was a failure when D sent the event to C. You could have a journal of events. D would send the event once and maybe receive a confirmation whether the event was consumed or not. If D didn't receive a confirmation, it could retry sending the event again. On service C side, let's say it received the event, it could store it in its local journal and try to consume it. If for any reason the event consumption failed, it could retry consuming failed events later or maybe a patch fix could be sent to service C after identifying the bug. Since the failed event is still present in its local journal. It would again try consuming it and maybe succeed now. After succeeding it would pass the event down to event B and so forth.
@zpengh
@zpengh 3 роки тому
Vishal Gupta the rollback could fail too . I think this is a serious problem when it involves money transactions.
@Dth091
@Dth091 3 роки тому
@@zpengh What if the action you take when the rollback fails also fails? What if the code that handles that failure also fails? There's no real guarantee on consistency if you accept the fact that any part of your system can fail, but having good testing and resilience of your systems combined with a good set of tools for your operations teams is a solid way of keeping on top of things. Good alerting, tracing, and logging will be essential to this, along with making sure that your systems/services are written defensively to notice malformed or inconsistent data and fail gracefully.
@rdean150
@rdean150 5 років тому
Wait, back up, that last part didn't make sense. Seriously though, great talk. This is a topic that is much harder in practice than the theoretical ideals make it sound, and the speaker clearly understands that and highlights the key aspects that teams must keep in mind throughout their design and implementations. At times it can make you question the ultimate benefits of such an architecture vs the new challenges it creates. And I think that the key is the understanding the problem domain, resources, and true requirements.
@kejiaosui791
@kejiaosui791 4 роки тому
really awesome talk and solved our problems!
@hanifa205
@hanifa205 4 роки тому
Can I Know what problem you have and what solutions you got in this video and worked for you
@alvaromoe
@alvaromoe 3 роки тому
You must work at stitch fix
@sandipshrestha7170
@sandipshrestha7170 2 роки тому
what does it mean to have read-only, non authoritative cache? The fulfilment service doesn't store customer's data in it's database right? where is it stored?
@joepage3065
@joepage3065 6 років тому
Great presentation, thanks.
@tansudasli
@tansudasli 5 років тому
is that make sense
@danielschmider5069
@danielschmider5069 3 роки тому
what he says on 30:00 is basically "get rid of all your joins"? decouple your databases, then cache all the data that you WOULD have available?
@f135ta
@f135ta 2 роки тому
Thats what I did! Life without joins - its bliss
@JimmyZ0
@JimmyZ0 Рік тому
Yep,that is also what I am doing. Use cache instead, your life will be much easier!
@ziadirida
@ziadirida 2 роки тому
I wonder if the “private database” for a service in postgresql is also a separate cluster! Is it a separate schema, database or cluster?
@basilio100
@basilio100 5 років тому
Not clear abt sagas - how you do "rollback" (compensating) if process broke somewhere in between ? who initializes rollback process? Will that compensation event go to both direction - to A and to D services?....
@robfielding8566
@robfielding8566 5 років тому
Create[A][t0]
@tmustafad
@tmustafad 5 років тому
Does it make sense? ahaha . ı really liked the way he expresses the topic and himself. so cool and mind catching session.recommend everyone!
@singarajusreedhar
@singarajusreedhar 2 роки тому
How is the SAGA handle failures?
@zpengh
@zpengh 3 роки тому
The part for shared data is in 31:10
@AndrewBerezovskiy
@AndrewBerezovskiy 5 років тому
For those thinking to replace transactions with Sagas: don't! ACID was mentioned in the talk but Sagas are NOT ACID! en.wikipedia.org/wiki/ACID_(computer_science). Sagas don't deal with isolation, the I in ACID! Atomicity would also be hard to guarantee because systems can fail on rollback.
@robfielding8566
@robfielding8566 5 років тому
transactions have existed before computers and RDBs. you can get transactions by having data structures that are amenable to everybody converging on the same state. (ie: compensating transactions). when you are mutating existing records in a DB (which you dont have to do), you are creating a problem that requires the transactions in the first place; namely, undoing updates made to records. more abstractly: if you use a sharpie marker to draw out immutable functional data structures, you have not lost information when you add more structures (ie: extending a linked list where new nodes backpoint to old nodes). if you number new nodes with the current transaction, you can see that if you can't complete the transaction by adding the final node, then you just delete (or ignore) the new objects you were adding. if you use immutable append-only structs, "rollback" is trivial. of course if you have an actual side-effect (ie: launch the missles), then you can't roll back. but an RDB won't solve that problem either. if you want a consistent and mutable database, then you are saying that it's ok for all updates to stop once two halves of the network become isolated, and a vote on what the next state change is cannot pass.
@dattannguyen4093
@dattannguyen4093 4 роки тому
The way he talked is super attractive
@MrGYPSYSPADE
@MrGYPSYSPADE 5 років тому
where is the link to this new open source tech which can check the architectural efficiency of the microservices based systems...this DTMS he mentions? DTMS(Does This Make Sense) Jokes apart...great insight. thanks.
@NikhilDhiman
@NikhilDhiman 6 років тому
hi, i just want to know how to handle real time data that requires join. If we use a some event to propagate data from services to maintain cache in some other service. How we maintain consistency
@nagyzoli
@nagyzoli 5 років тому
You have to change the way you think. Leave SQL behind when you go distributed. You have to reuse the old architecture of hierarchy that was the norm before SQL (Think foxPRO, dBase). So basically key value pairs, mongoDB and friends. The "re-creating" of the join mechanism seems stupid a bit.
@tdrake59
@tdrake59 6 років тому
How many times can you ask "does this make sense?"
@elektrixmk
@elektrixmk 6 років тому
I wish other speakers did the same instead of just "reading from the prompter".
@lztverygood
@lztverygood 5 років тому
i kinda like he keep asking this
@Carl-yu6uw
@Carl-yu6uw 5 років тому
Is a bit condescending I say..does that make sense?
@sn20
@sn20 4 роки тому
I can't believe people like this -"Ask me does it make sense" every 3 sentences. I am surprised and I cannot have sex for 6 months.
@really6717
@really6717 3 роки тому
@@sn20 lol! wth?!
@felipealvarez1982
@felipealvarez1982 5 років тому
Feel free to give your own talk on the subject.
@JeffChentingwei628
@JeffChentingwei628 3 роки тому
40:38 saga
@danielschmider5069
@danielschmider5069 4 роки тому
the audience must be looking absolutely clueless for him to verify if it makes sense every 3 minutes
@AI7KTD
@AI7KTD 4 роки тому
Something tells me he's not sure if what he says makes any sense!
@bsuperbrain
@bsuperbrain 4 роки тому
Is eBay still on board? 16K methods in a single class?! Applause...
@-Jason-L
@-Jason-L 2 роки тому
if you don't start with microservices, you are in reality falling prey to "you don't have time to do it right ? Do you have time to do it twice?". Migrating to microservices is far more complex and time consuming than just doing it right to first time. This is totally avoidable tech debt.
@yuchen52
@yuchen52 3 роки тому
It is good talk over all. But why saying "dose this make sense" so many times?
@deepalisuhag
@deepalisuhag 3 роки тому
To gain your confidence 😁
@erenxbjk
@erenxbjk 4 роки тому
i doesn't make sense at all. since i am waiting for him to say this makes sense instead of understanding what he's saying?
@manderskutz
@manderskutz 2 роки тому
Three sentences worth of valuable information stretched across an hour :(
@kaveee971
@kaveee971 6 років тому
So basically you are sacrificing all the built in features of relational databases such as transactions and implementing your own version of transactions - to me seems like lots of extra work and architectural burden to maintain.
@dovh49
@dovh49 6 років тому
Muhammad Kamran, if you listen to the speaker he is saying that you do this when you need to scale. It doesn't make sense if you don't need to scale. So, this isn't a problem for most companies and shouldn't be implemented at most companies.
@FellshardYT
@FellshardYT 5 років тому
I think Muhammad has a point here, though, because what seems silly here as that the primary recommendation is to split core tables to 'service-per-table', which is likely to end up being pretty naive for most monolithic databases. Considering bounded contexts and domains may be more effective _and_ more efficient.
@clray123
@clray123 5 років тому
dovh49 seems like there are other ways to scale without throwing out decades of database technology and research (clustering? sharding?), but maybe that's just me
@ArchimedesTrajano
@ArchimedesTrajano 5 років тому
Unfortunately those scaling technologies cost a lot of money and effort to run. Thankfully we have Amazon RDS that does quite a bit for us and even if it is costly, at least they provide that service that can scale up much better than an in-house database team for the most part.
@clray123
@clray123 5 років тому
Archimedes Trajano reinventing the wheel is surely going to be more costly in the long run than leasing someone else's working wheel. When you are in APPLICATION development, you should be caring about business application logic, not about conundrums of distributed systems design.
@godblessCL
@godblessCL 4 роки тому
I am not quite sure that every microservice project must used its own database and did all that problematic corrections to have consistence data. If you project is big and you want to scale or you need performance out of db, then you can do that.
@f135ta
@f135ta 2 роки тому
The point is that microservices should be individually scalable. If you have a shared database, thats a single point of failure and also a shared dependency. You can't scale the database without affecting all the connected services. That breaks the rules of microservices being independent. Take this example: You use STRIPE for your payments processing. You share the database with Stripe because "it makes everything easier", then STRIPE decides it needs to take their database offline to update it or scale it or even change it to another technology. That now affects YOU. That is the fundamental point of microservices - you bring all those dependencies into a single place that relates to one service and you communicate with the other services in your application by decoupled methods
@markemerson98
@markemerson98 2 роки тому
Nope: 4 months to deliver a perfect system; How to do that right? Software is never complete, it’s just a version... in reality we do not have time to do it right in all cases...
@nareshgb1
@nareshgb1 5 років тому
So instead of managing one database (availability, backup and recovery, administration [capacity,performance,deployment,upgrades]) you manage "N" databases. "Makes sense". Makes even more sense with sharded databases - then you multiply "N" by "M" (number of shards)
@clray123
@clray123 5 років тому
When I watched some early presentations about this shit, I thought they were contriving examples to make them more approachable, but they actually seem serious about it. One database per table?!...
@yahorsinkevich4451
@yahorsinkevich4451 5 років тому
That's the way to make things scalable. You can't scale single database (well, when it is traditional relational database, not cassandra or so)
@yahorsinkevich4451
@yahorsinkevich4451 5 років тому
@@clray123 Nobody have mention one single database per table, that is insane. One database per service might have tens ot tables.
@clray123
@clray123 5 років тому
@Yahor Sinkevich For the great majority of applications scalability of this kind is not an issue at all. The pain in the ass caused by implementing caching and consistency management not to mention simple joins with distributed data without ACID properties is, on the other hand, quite certain. And what is a "service", how do you defined which data belongs to one service and which to another - when it's most likely that you will need to join it at one time or another (else you would have two different applications).
@f135ta
@f135ta 2 роки тому
What are you expecting when you ask "Is this making sense"? A bunch of people to start yelling "No"? - Mildly irritating.
@kungfu71186
@kungfu71186 5 років тому
This is how you don't do microservices.
@alexeystaroverov4804
@alexeystaroverov4804 5 років тому
Cut bragging off, please
@KenGormanGuitar
@KenGormanGuitar 4 роки тому
By the time this company completes moving all of their entities from the monolithic shared database he references into separate databases, microservices will no longer be in style.
@TheNikavashnika
@TheNikavashnika 2 роки тому
I don't usually comment on tech talks but I'm a bit upset I wasted an hour or so. Long exposition, contrived examples, zero useful information. The only way this whole talk really makes sense (pun intended) is if you consider it to be a show-off for potential investors.
@abdullahkauchali3896
@abdullahkauchali3896 4 роки тому
"Don't use 2PC for managing ACID transactions - bad for scalability" and then proceeds to re-invent a distributed transaction management system with what he calls "SAGA" and events and state machines! What if the compensating "rollbacks" themselves fail??
@hotplugin
@hotplugin 5 років тому
Lame conference.
@berndeckenfels
@berndeckenfels 4 роки тому
The rhetoric question if you make sense is super annoying to me.
@MrMikomi
@MrMikomi 4 роки тому
Stitch Fix has a pretty meh rating of 2.5 stars out of 5 on consumer affairs. 100 data scientists and 100 software engineers can't do anything but polish a turd. Typical wall of greedy VC money in desperate (failed) search for an idea that will make a ton of cash.
@DeepakPandey-ij3bz
@DeepakPandey-ij3bz 4 роки тому
Worst
Design Microservice Architectures the Right Way
48:30
InfoQ
Переглядів 704 тис.
🐩🐕
00:25
Янчик
Переглядів 1,6 млн
I Trapped Myself in a Box with Colored Smoke!
00:50
A4
Переглядів 15 млн
Scaling Instagram Infrastructure
51:12
InfoQ
Переглядів 274 тис.
Principles Of Microservices by Sam Newman
56:13
Devoxx
Переглядів 315 тис.
Authentication as a Microservice
50:26
Oracle Developers
Переглядів 213 тис.
Mastering Chaos - A Netflix Guide to Microservices
53:14
InfoQ
Переглядів 2,2 млн
How Netflix Really Uses Java
50:31
InfoQ
Переглядів 7 тис.
How Slack Works
49:54
InfoQ
Переглядів 150 тис.
The Problem With Microservices
17:47
Continuous Delivery
Переглядів 426 тис.
Какой MacBook выбрать в 2024 - М1, М2 или М3?
24:56
Интел подвинься, ARM уже в ПК!
14:06
PRO Hi-Tech
Переглядів 127 тис.
#smartphone #screenprotection #tech #shorts #magicjohn
1:01
MagicJohn
Переглядів 6 млн
Как должен стоять ПК?
1:00
CompShop Shorts
Переглядів 355 тис.
Робот зарядка на 65W🤖
0:36
serg1us
Переглядів 1,6 млн