Navigated to Dapr: The Future of Microservices - Transcript

Dapr: The Future of Microservices

Episode Transcript

1 00:00:00,000 --> 00:00:00,779 Welcome everyone. 2 00:00:00,960 --> 00:00:04,170 Unfortunately, Laura could not join us today. 3 00:00:04,560 --> 00:00:06,810 Again, what does she even do? 4 00:00:07,680 --> 00:00:09,060 Geez, sorry. 5 00:00:09,560 --> 00:00:14,909 In today's episode, I'm joined by Mark, the co-founder and CEO of Dapr. 6 00:00:15,170 --> 00:00:19,470 A CNCF project that helps make microservice development almost possible. 7 00:00:19,920 --> 00:00:21,510 Let's go dig in without me. 8 00:00:22,010 --> 00:00:22,970 Enjoy the episode. 9 00:00:23,490 --> 00:00:24,030 hi Mark. 10 00:00:24,060 --> 00:00:25,530 Welcome to Cloud Native Compass. 11 00:00:25,530 --> 00:00:28,770 Could you please take a few moments to introduce yourself to our audience? 12 00:00:29,415 --> 00:00:30,015 Thank you, David. 13 00:00:30,015 --> 00:00:31,185 It's fantastic to be here. 14 00:00:31,185 --> 00:00:31,515 Yeah. 15 00:00:31,515 --> 00:00:32,605 My name's Mark Fussell. 16 00:00:32,955 --> 00:00:34,125 I'm the CEO of Diagrid. 17 00:00:34,208 --> 00:00:38,393 Diagrid is a company where we build on open source technologies, particularly 18 00:00:38,393 --> 00:00:42,038 on Dapr, what we'll talk about a lot today, and excited to be here today. 19 00:00:42,112 --> 00:00:42,602 Awesome. 20 00:00:42,602 --> 00:00:43,717 Thank you so much for joining us. 21 00:00:43,976 --> 00:00:48,776 I'm really excited for this episode because I have built distributed systems, 22 00:00:48,776 --> 00:00:54,026 with microservices and workflows, and pubsub event queues and, I love the 23 00:00:54,026 --> 00:00:56,876 polarity, I don't know if that's even the right word, but when we adopt 24 00:00:56,876 --> 00:01:00,296 microservices, I often tell people it's to make their lives simpler, and then 25 00:01:00,356 --> 00:01:04,916 bam, they've now got this horrible, crazy architecture with all of these things. 26 00:01:04,916 --> 00:01:06,941 So maybe we can talk about. 27 00:01:07,356 --> 00:01:09,876 The adoption of microservices, are we going in the right direction? 28 00:01:09,876 --> 00:01:12,456 And how Dapr is hopefully gonna make that easier for people. 29 00:01:13,176 --> 00:01:16,026 Yeah, microservices is not new now in any way. 30 00:01:16,146 --> 00:01:20,526 If you look at a lot of the publications, and we, there's a great thing from 31 00:01:20,526 --> 00:01:24,036 InfoQ where they published, they're crossing the chasm technologies from 32 00:01:24,036 --> 00:01:25,146 the architectural point of view. 33 00:01:25,146 --> 00:01:27,316 And microservices is way over on the. 34 00:01:27,611 --> 00:01:31,904 The right now, and it's crossed the chasm from a technology perspective, and have 35 00:01:31,904 --> 00:01:35,204 been around for, I mean, people been talking around for good 15 years now. 36 00:01:35,234 --> 00:01:36,714 And you have to look back. 37 00:01:36,714 --> 00:01:37,854 what does it actually mean? 38 00:01:37,884 --> 00:01:41,364 You know, it was a driving factor from the businesses because the business 39 00:01:41,364 --> 00:01:47,444 wanted to move faster when you built this large compiled piece of code that wasn't. 40 00:01:48,054 --> 00:01:49,454 distributed in some manner. 41 00:01:49,804 --> 00:01:53,009 It meant that, its rate fast and ship features fast. 42 00:01:53,039 --> 00:01:54,239 And there's this requirement. 43 00:01:54,239 --> 00:01:58,829 Actually the two driving requirements was one was as we moved more services to 44 00:01:58,829 --> 00:02:02,549 the cloud and ran things on the cloud and kinda distributed them around, so they 45 00:02:02,549 --> 00:02:07,079 ran on more machines, coping with the fact that the business wanted to ship features 46 00:02:07,079 --> 00:02:08,849 faster, because I wanted to be able to. 47 00:02:09,409 --> 00:02:13,969 Update my inventory application faster than sort of my payment application. 48 00:02:14,039 --> 00:02:15,179 that split things apart. 49 00:02:15,719 --> 00:02:18,509 And so there's just a big debate, which I think is a big, kind 50 00:02:18,509 --> 00:02:22,139 of strange in myself, which is, what's the size of a microservice? 51 00:02:22,149 --> 00:02:26,406 you know, the size of a, The answear is it could be anything. 52 00:02:26,406 --> 00:02:29,016 It could be a giant piece of compiled code, or it could be, 53 00:02:29,356 --> 00:02:30,796 millions of little small things. 54 00:02:31,276 --> 00:02:32,896 And often it lies somewhere in between. 55 00:02:33,266 --> 00:02:36,506 usually around, you know, domain driven, data driven design where, you 56 00:02:36,506 --> 00:02:40,296 buy, draw, and, domain and context is where you sort draw boundaries 57 00:02:40,296 --> 00:02:42,396 around your business itself. 58 00:02:42,476 --> 00:02:45,626 where's my payment application sit, and where does my kind 59 00:02:45,626 --> 00:02:47,246 of other business process sit? 60 00:02:47,246 --> 00:02:49,196 And you sort of draw boundaries around those. 61 00:02:49,556 --> 00:02:51,466 And then of course, as developers do. 62 00:02:51,466 --> 00:02:56,086 You know know you sort of have to choose a choice of implementations. 63 00:02:56,206 --> 00:02:59,471 so that's kind of really kind of the brief reason for microservices and, 64 00:02:59,531 --> 00:03:02,386 and you know, the history around them of, you know, why they've developed. 65 00:03:02,386 --> 00:03:06,436 Because, you know, we're often now in this sort of Cloud Native world 66 00:03:06,436 --> 00:03:09,046 where everyone runs things on top of Kubernetes is the platform. 67 00:03:09,046 --> 00:03:13,576 And what we just saw time and time again is that people were reinventing 68 00:03:13,996 --> 00:03:19,186 the same pieces of code themselves, the same software patterns in order to 69 00:03:19,186 --> 00:03:22,756 build these distributed architectures, which run on multiple machines. 70 00:03:22,756 --> 00:03:24,346 And so that's where, you know, Dapr comes in. 71 00:03:24,452 --> 00:03:24,754 Awesome. 72 00:03:25,289 --> 00:03:25,648 yeah, 73 00:03:25,648 --> 00:03:30,868 So with microservices, I often say to people, and it's, I don't know if it's 74 00:03:30,868 --> 00:03:33,833 like the best analogy I've ever had in my life, or the worst, it's if we 75 00:03:33,833 --> 00:03:35,363 think about a carrot on a stick, right? 76 00:03:35,363 --> 00:03:37,703 And we're leading, or a horse, we're leading the horse to water. 77 00:03:38,243 --> 00:03:40,433 We're like, microservices are gonna make your life better. 78 00:03:40,433 --> 00:03:41,123 They're simpler. 79 00:03:41,123 --> 00:03:42,503 You can rewrite them in a day. 80 00:03:42,503 --> 00:03:46,193 And all, we've all heard these terms before, but unfortunately we take all 81 00:03:46,193 --> 00:03:49,523 these developers, we guide them to the water, and actually it's a notion and now 82 00:03:49,523 --> 00:03:51,314 they've got to boil it in some degree. 83 00:03:51,314 --> 00:03:54,404 It is a notion of complexity with the regards to the tools that they need. 84 00:03:54,764 --> 00:03:59,204 Because when we simplify the code itself, the application, the 85 00:03:59,204 --> 00:04:01,094 microservice, that is really easy. 86 00:04:01,094 --> 00:04:03,644 It could be 12 lines of code, it could be a hundred lines of codes. 87 00:04:03,694 --> 00:04:04,474 it's not important. 88 00:04:04,954 --> 00:04:07,474 But that complexity doesn't really get removed. 89 00:04:07,474 --> 00:04:10,054 It gets pushed to the platform or to the infrastructure. 90 00:04:10,444 --> 00:04:15,034 And I think from, my knowledge of Dapr, you're solving that, that big ball 91 00:04:15,034 --> 00:04:17,075 of complexity of the platform bit. 92 00:04:17,539 --> 00:04:18,109 Exactly. 93 00:04:18,109 --> 00:04:21,229 I mean, that's what it does is that, you, everyone approaches this and you 94 00:04:21,229 --> 00:04:24,649 jump in, you go, yeah, I can create, you know, process A, process B, or 95 00:04:24,649 --> 00:04:28,259 container A, container B, and I'm just gonna talk between this front end 96 00:04:28,259 --> 00:04:32,039 application, talk through usually some typically gateway service that's deployed. 97 00:04:32,039 --> 00:04:35,069 And then I have, you know, say we built a fictitious application, had 98 00:04:35,069 --> 00:04:38,729 a shopping cart service, a checkout service, and maybe an inventory service. 99 00:04:38,984 --> 00:04:41,189 And you deploy all these things, but all of a sudden. 100 00:04:41,207 --> 00:04:44,361 There's all these difficult problems that emerge and I think they usually 101 00:04:44,361 --> 00:04:48,781 stem down to things like communication between them, coordination across them 102 00:04:49,021 --> 00:04:50,701 and sort of state around them all. 103 00:04:51,181 --> 00:04:53,551 And so the first thing that you often run into is that you want to 104 00:04:53,551 --> 00:04:57,001 be able to do communication between some services because everything 105 00:04:57,001 --> 00:04:59,826 is not running in isolation in a giant compiled ball anymore. 106 00:04:59,851 --> 00:05:03,001 And so you've really distributed the problem to a networking problem 107 00:05:03,001 --> 00:05:04,501 now, which means communication. 108 00:05:05,161 --> 00:05:08,611 And so all of a sudden, you know, you've gotta have service A talk to service 109 00:05:08,611 --> 00:05:12,431 B. and so the first thing you run into is it's gotta be discoverability. 110 00:05:12,761 --> 00:05:16,151 And so, you know, one of the key tenets that Dapr brings to 111 00:05:16,481 --> 00:05:19,841 a distributed substance platform is this concept of identity. 112 00:05:20,211 --> 00:05:23,841 where every piece of code, actually, every piece of process or running code. 113 00:05:24,126 --> 00:05:25,566 Has a name associated with it. 114 00:05:25,791 --> 00:05:29,616 And it turns out that this is incredibly important because, if you're in the 115 00:05:29,616 --> 00:05:32,616 infrastructure land, you don't really care about name pieces of code. 116 00:05:32,616 --> 00:05:36,736 You deploy these processes, but you wanna say, I want to call my inventory 117 00:05:36,736 --> 00:05:41,446 service and I want to call, the payment, method on the inventory, or sort of 118 00:05:41,596 --> 00:05:45,046 the stock service, I should say, on inventory service to see if it's there. 119 00:05:45,046 --> 00:05:46,576 do I have stock inside of man inventory? 120 00:05:47,056 --> 00:05:49,636 And so you have these named identities the first problem 121 00:05:49,636 --> 00:05:53,346 you've run into is discoverability and then calling, securely. 122 00:05:53,526 --> 00:05:57,216 and then also then you fall into the concept of retries because you've done 123 00:05:57,216 --> 00:05:59,976 a call and it's failed and you have to retry 'cause there's network failures. 124 00:06:00,621 --> 00:06:00,841 Yep. 125 00:06:00,906 --> 00:06:03,036 top of this, of course, you want to have observability. 126 00:06:03,086 --> 00:06:05,786 did my call succeed and do I have observability data? 127 00:06:06,296 --> 00:06:11,496 So, this whole thing turns out to be a you get a big challenge in the end, and 128 00:06:11,496 --> 00:06:14,886 before you know it, people jump in and they think, oh, I'll do a, a simple rest 129 00:06:14,886 --> 00:06:19,176 call between these and they, I gotta make it secure and then I go do retries. 130 00:06:19,616 --> 00:06:22,196 and then this whole discovery mechanism where you bring in something 131 00:06:22,196 --> 00:06:26,746 like zookeeper or, what's it, uh, the, the one from HashiCorp the. 132 00:06:27,616 --> 00:06:28,066 Console. 133 00:06:28,501 --> 00:06:28,921 console. 134 00:06:28,921 --> 00:06:29,341 Yes. 135 00:06:29,531 --> 00:06:32,261 in order to do name resolution around those things, and you're sort of 136 00:06:32,261 --> 00:06:35,531 building the whole platform up yourself just to kind of talk between two 137 00:06:35,531 --> 00:06:36,911 services and call a method on them. 138 00:06:38,181 --> 00:06:40,431 and run this on some distributed systems platform. 139 00:06:40,431 --> 00:06:42,201 So that's exactly what Dapr does. 140 00:06:42,231 --> 00:06:46,821 Dapr says, well, why are you reinventing the wheel or reinventing the pattern? 141 00:06:46,821 --> 00:06:51,351 We say, let's take advantage of building a platform and a set of 142 00:06:51,741 --> 00:06:53,811 consistent APIs that allow you to do. 143 00:06:53,811 --> 00:06:58,946 This communication coordination and sort of state management, and also things 144 00:06:58,946 --> 00:07:01,396 like secrets management, between things. 145 00:07:01,816 --> 00:07:06,776 And so, you know, to take that into concrete example, Dapr has this concept 146 00:07:06,776 --> 00:07:11,306 of a service invocation, API, which says, you create two services, service 147 00:07:11,306 --> 00:07:14,516 A and service B. they both have names. 148 00:07:14,816 --> 00:07:20,036 And then I kind of get, those are registered into a resolution service that 149 00:07:20,036 --> 00:07:21,836 can discover where those services are. 150 00:07:22,136 --> 00:07:27,896 And now as a developer, I can simply call onto the invoke API that says invoke. 151 00:07:28,231 --> 00:07:32,826 the method near the stock service on the inventory, service wherever 152 00:07:32,826 --> 00:07:36,216 it's running or, and call that method for me, and that's all I have to do. 153 00:07:36,486 --> 00:07:38,226 And up is all heavy lifting for you. 154 00:07:38,226 --> 00:07:42,456 Does the discoverability, the secure calls, the retries, the 155 00:07:42,456 --> 00:07:43,716 observability around all that. 156 00:07:44,106 --> 00:07:46,061 And basically what this is all about is. 157 00:07:46,801 --> 00:07:49,581 developers have to write business code in the end, that's 158 00:07:49,581 --> 00:07:50,391 what you're trying to get to. 159 00:07:50,761 --> 00:07:52,981 not build platforms the whole time. 160 00:07:53,401 --> 00:07:55,471 And so, although it's fun for developers to build those 161 00:07:55,471 --> 00:07:59,041 platforms, you keep reinventing this just for every application. 162 00:07:59,731 --> 00:08:03,841 So, Dapr solves these hard distributed systems problems and 163 00:08:03,841 --> 00:08:06,181 we can go into each one of those APIs and talk about it a bit more. 164 00:08:06,181 --> 00:08:08,281 'cause each one of them is fairly significant. 165 00:08:09,271 --> 00:08:13,591 but that's what its underlying concept is to accelerate this. 166 00:08:14,566 --> 00:08:18,136 we've shown, actually we do a every, in fact, we are just about to release, 167 00:08:18,166 --> 00:08:23,326 now a thing called a state of Dapr, a state of Dapr report to 2025, where we 168 00:08:23,716 --> 00:08:28,566 interviewed, 200 plus, developers, who are using Dapr and asked them, what was the 169 00:08:28,566 --> 00:08:30,496 number one thing that, you got from Dapr. 170 00:08:30,516 --> 00:08:33,306 And, you know, the categor thing that came back was that 171 00:08:33,576 --> 00:08:37,116 it accelerated the development of my microservices application. 172 00:08:37,821 --> 00:08:41,921 Anywhere between, 30 and 50% productivity around all of them. 173 00:08:42,943 --> 00:08:44,953 you kinda asked for a better response than that, right? 174 00:08:44,953 --> 00:08:46,183 that's exactly what you want be here. 175 00:08:46,183 --> 00:08:49,653 I'm assuming not to put words in your mouth, but yeah, that's really cool. 176 00:08:49,713 --> 00:08:54,163 So there's one thing I want to touch on a little bit there is, you talked about 177 00:08:54,373 --> 00:08:58,813 where Dapr fits into the stack with Sandlin retries to a certain degree, it 178 00:08:58,813 --> 00:09:04,103 makes, communication or request to other services, a function call rather than a 179 00:09:04,458 --> 00:09:07,878 generic HDP call where you do the plumbing and the retries and all that, 180 00:09:08,328 --> 00:09:11,628 and people always say, Kubernetes, it gives you service discovery for free. 181 00:09:11,808 --> 00:09:14,898 And it's like, you know, well, yeah, kinda good luck with that, right? 182 00:09:15,383 --> 00:09:18,113 there's a whole market here of service measures that said, no, it 183 00:09:18,113 --> 00:09:21,113 doesn't because you've gotta hook in again, all of this more stuff. 184 00:09:21,533 --> 00:09:25,733 And what I like about where Dapr sits in the stack versus the service mesh is that 185 00:09:25,953 --> 00:09:29,483 Dapr is service and application aware. 186 00:09:29,753 --> 00:09:32,213 It actually understands my code to a certain degree. 187 00:09:32,213 --> 00:09:36,443 Where service mesh is more of this generic fiddle, bit of pipe or 188 00:09:36,443 --> 00:09:41,303 plumbing that does give me value, but Dapr slightly higher up the stack. 189 00:09:41,303 --> 00:09:42,712 I'm assuming that was intentional. 190 00:09:42,712 --> 00:09:43,972 So maybe we can talk about why. 191 00:09:44,002 --> 00:09:47,932 Why is this important for developers as they want to increase their velocity 192 00:09:48,007 --> 00:09:49,247 building in microservice architecture? 193 00:09:49,685 --> 00:09:53,165 that's a question that we often get on the project is, is Dapr service mesh? 194 00:09:53,165 --> 00:09:55,205 And the answer is, is kind of yes and no. 195 00:09:55,645 --> 00:09:58,795 the answer is yes, it does the same sort of functionality, but 196 00:09:58,795 --> 00:10:02,065 service Meshs work purely at the networking layer and only at the 197 00:10:02,065 --> 00:10:02,315 networking layer 198 00:10:02,315 --> 00:10:02,375 Yeah. 199 00:10:02,545 --> 00:10:02,725 layer. 200 00:10:02,995 --> 00:10:05,035 There's no understanding or concept of. 201 00:10:05,210 --> 00:10:07,550 Yeah, of an application, as it were. 202 00:10:08,030 --> 00:10:11,880 And this goes back to, that application identity thing I just referred to, 203 00:10:11,880 --> 00:10:15,900 service meshes are, coordinating network packets and changing things on the 204 00:10:15,900 --> 00:10:20,800 network layer and doing, and, you know, if you want to enforce that consistently 205 00:10:20,800 --> 00:10:24,250 across every single thing that happens inside your company, then great. 206 00:10:24,250 --> 00:10:26,959 you can implement service, a service mesh to do that. 207 00:10:27,009 --> 00:10:29,409 but this idea of application identity. 208 00:10:29,563 --> 00:10:34,363 You know that a piece of code, a process, a container actually has identity 209 00:10:34,633 --> 00:10:39,493 that I can reason about and discover and call is the big difference in the 210 00:10:39,493 --> 00:10:42,943 end between Dapr and service meshes. 211 00:10:43,133 --> 00:10:47,813 and that kind of gets to the point where what happens is that, Dapr really is. 212 00:10:48,053 --> 00:10:50,783 in its comparison with service meshes, there's only just one 213 00:10:50,783 --> 00:10:52,313 API that aligns with on that. 214 00:10:52,313 --> 00:10:53,483 That's a service invocation. 215 00:10:54,083 --> 00:10:57,363 You the other very important API that uses all the time with Dapr is 216 00:10:57,603 --> 00:10:59,583 publish and subscribe, or pubs up, or 217 00:10:59,823 --> 00:11:00,043 Yep. 218 00:11:00,123 --> 00:11:04,663 messaging, where you publish a message and you can sub subscribe to it on a topic. 219 00:11:05,383 --> 00:11:08,623 And you can then sort of broadcast or send it to everyone's listening. 220 00:11:08,623 --> 00:11:12,563 And asynchronous messaging and the concept of, message brokers in between 221 00:11:12,563 --> 00:11:14,363 is sort of key to a distributed system. 222 00:11:14,363 --> 00:11:19,203 In fact, that's probably the most common API that gets used inside Dapr. 223 00:11:19,223 --> 00:11:22,823 and so, you know, at that point as well, you're also sending messages between. 224 00:11:23,178 --> 00:11:25,638 two services or two applications that are running. 225 00:11:26,028 --> 00:11:29,808 And that's the big difference when Dapr does its concepts of end-to-end 226 00:11:29,808 --> 00:11:34,033 security and, it does observability and it does resiliency across these, 227 00:11:34,463 --> 00:11:36,023 you get it across all those APIs. 228 00:11:36,773 --> 00:11:40,973 So in a case of, if you decide to do a service invocation call between 229 00:11:40,973 --> 00:11:44,783 two services and then you do a pub sub message, you get to end-to-end 230 00:11:44,783 --> 00:11:48,203 observability of going through all these APIs and you see that whole call train. 231 00:11:48,593 --> 00:11:52,268 Well with something like with a service mesh, you just see the call that happens 232 00:11:52,268 --> 00:11:55,328 on a network and you don't know, it went over this message broker all of a sudden 233 00:11:55,748 --> 00:11:59,408 and then came back because it doesn't know this at the application level. 234 00:11:59,938 --> 00:12:02,578 So one of the big, differences is that whole concept. 235 00:12:02,578 --> 00:12:06,608 And I think, this often comes down to people who think about the 236 00:12:06,608 --> 00:12:10,298 infrastructure layer of things and in that space, and then people are 237 00:12:10,298 --> 00:12:11,798 looking at the application layer. 238 00:12:12,488 --> 00:12:16,688 And what's very unique about the Dapr Project is, we solely talked about what 239 00:12:16,688 --> 00:12:18,878 are the needs of an application developer. 240 00:12:18,928 --> 00:12:23,338 how is it they need service invocation, a asynchronous calls 241 00:12:23,338 --> 00:12:27,028 with pub sub and then I think one of the most important ones is workflow. 242 00:12:27,718 --> 00:12:27,868 Where 243 00:12:27,998 --> 00:12:28,468 do coordination 244 00:12:28,488 --> 00:12:28,588 Yep. 245 00:12:28,903 --> 00:12:29,713 between services. 246 00:12:29,983 --> 00:12:30,133 Yeah. 247 00:12:30,133 --> 00:12:33,493 Service A has gotta call service B and call service C, and if it 248 00:12:33,493 --> 00:12:35,473 fails, how do I recover and do that? 249 00:12:35,473 --> 00:12:36,673 Retry mechanisms. 250 00:12:36,943 --> 00:12:39,643 And often what's referred to now is durable execution. 251 00:12:40,063 --> 00:12:43,513 The fact that I can keep a long running workflow running like a piece 252 00:12:43,513 --> 00:12:47,833 of business logic, inventive failure recover to where I was start to. 253 00:12:48,908 --> 00:12:52,988 from where I left off before and keep going, and do this in a coordinated 254 00:12:52,988 --> 00:12:56,378 fashion, just like, you know, any sort of classic workflow process. 255 00:12:57,083 --> 00:13:01,963 but the unique thing that Dapr has, it's a code based workflow, and so you write 256 00:13:01,963 --> 00:13:05,673 your code, as a developer would write in your favorite language, be Python 257 00:13:05,673 --> 00:13:10,278 or C Sharp or Java, and you can do this coordination or, saga type patterns. 258 00:13:11,053 --> 00:13:14,383 As well as combined with orchestration patterns as well for pub sub. 259 00:13:14,653 --> 00:13:18,883 And this is sort of the, the powerful concept of Dapr, has pub 260 00:13:18,883 --> 00:13:21,733 sub messaging for communication, has workflow for coordination. 261 00:13:21,867 --> 00:13:26,032 so, you know, going back to your question about, I. Service meshes and Dapr. 262 00:13:26,052 --> 00:13:27,702 Yeah, service invocation. 263 00:13:27,702 --> 00:13:31,372 and that aligns with some of the service meshes with Dapr, but 264 00:13:31,372 --> 00:13:32,832 Dapr is much, much more than that. 265 00:13:33,232 --> 00:13:38,212 and actually we see Dapr used side by side with service meshes as well. 266 00:13:38,212 --> 00:13:40,282 if people do want to use it with a service mesh, that's good. 267 00:13:40,627 --> 00:13:41,107 All right. 268 00:13:41,437 --> 00:13:43,177 There's a lot we could talk about from there. 269 00:13:43,177 --> 00:13:44,792 I love that you go onto the kinda. 270 00:13:45,487 --> 00:13:48,777 The, I dunno the term, the different actors of Dapr, the different, feature 271 00:13:48,777 --> 00:13:50,487 sets the APIs that are being provided. 272 00:13:50,817 --> 00:13:54,117 Because you're right, durable execution as it's known like 273 00:13:54,327 --> 00:13:55,857 today seems to be everywhere. 274 00:13:55,917 --> 00:13:58,567 Right now everyone is talking about how do we do this? 275 00:13:58,567 --> 00:14:01,567 What are the tools that we're doing and what are the language supports, et cetera. 276 00:14:01,867 --> 00:14:03,367 And I think they solve an important problem. 277 00:14:04,297 --> 00:14:07,987 And This was possible before to a certain degree where you publish something 278 00:14:07,987 --> 00:14:12,367 to Kafka, you have consumers, they do the job and the sagas have been around 279 00:14:12,367 --> 00:14:15,907 much longer than durable execution, but it was completely event driven and 280 00:14:15,907 --> 00:14:19,217 the challenge there, at least from, back in the days when I was doing this 281 00:14:19,217 --> 00:14:23,687 stuff is the visibility across the whole system was really difficult. 282 00:14:24,047 --> 00:14:24,647 Yes. 283 00:14:24,917 --> 00:14:25,487 this event? 284 00:14:25,547 --> 00:14:26,567 What is consuming it? 285 00:14:26,567 --> 00:14:26,837 Then? 286 00:14:26,927 --> 00:14:30,407 How does this chain work through to the point where you have like 287 00:14:30,407 --> 00:14:34,097 whole tracer based test systems that feed end to end workloads work. 288 00:14:34,817 --> 00:14:38,417 This new durable execution pattern of just writing the workflows and code 289 00:14:38,417 --> 00:14:41,687 and making sure that the responses are memorized and continued and all that. 290 00:14:42,227 --> 00:14:43,337 I think it's so cool. 291 00:14:43,337 --> 00:14:46,277 I can remember the first time I've seen it, I was like, wow, like this is amazing. 292 00:14:46,607 --> 00:14:51,107 And I had no idea that Dapr even offered this today until I was kind looking 293 00:14:51,107 --> 00:14:52,667 around on the website to see what was new. 294 00:14:53,267 --> 00:14:57,857 And I, it kind got me thinking is that, you offered Kiwi, I think 295 00:14:57,857 --> 00:14:59,827 there's, the Pub/Sub stuff with Kafka. 296 00:14:59,827 --> 00:15:01,837 I don't know if it's supposed alternative backends. 297 00:15:02,152 --> 00:15:03,352 There's no workflows. 298 00:15:03,682 --> 00:15:06,952 Like you're essentially taking all of the problems of distributed 299 00:15:06,952 --> 00:15:10,582 system or microservice system and bringing out new APIs, climbing up 300 00:15:10,582 --> 00:15:12,022 the stack, whatever you wanna call it. 301 00:15:12,082 --> 00:15:15,902 And I think that is so important and it brings me back, people always ask 302 00:15:15,902 --> 00:15:17,572 when should I start with microservices? 303 00:15:17,572 --> 00:15:19,192 When do we adopt microservices? 304 00:15:19,222 --> 00:15:22,372 And the answer has always typically been, oh, make it work. 305 00:15:22,372 --> 00:15:25,672 And beg, monolith, try not to make it too much of a ball of mud and then refactor 306 00:15:25,672 --> 00:15:27,382 to microservices with all these patterns. 307 00:15:28,267 --> 00:15:30,727 And that's been the status quo for decades. 308 00:15:30,727 --> 00:15:31,057 Right. 309 00:15:31,657 --> 00:15:35,107 And I feel like now with Dapr people are buy into it. 310 00:15:35,227 --> 00:15:39,157 You could be a team of two and ship hundreds of microservices and be really 311 00:15:39,157 --> 00:15:42,667 successful because of all the plumbing and hard work that you're removing from. 312 00:15:43,342 --> 00:15:44,032 Yeah, exactly. 313 00:15:44,032 --> 00:15:44,392 That's it. 314 00:15:44,392 --> 00:15:48,232 I don't think, I think that you can go straight into that design 315 00:15:48,502 --> 00:15:52,062 now and start to use, Dapr is very designed to be incrementally used. 316 00:15:52,392 --> 00:15:53,592 You can just use one API. 317 00:15:54,462 --> 00:15:57,102 And you can just do service implication between two services 318 00:15:57,252 --> 00:15:58,242 and do a call like that. 319 00:15:58,242 --> 00:15:58,812 And that's it. 320 00:15:59,292 --> 00:16:02,482 And then you can add, the pub sub messaging API, and then you can 321 00:16:02,482 --> 00:16:05,752 sort of adopt the long run durable execution workflows to do this. 322 00:16:05,752 --> 00:16:07,192 And it's very incrementally adopted. 323 00:16:07,642 --> 00:16:10,132 It's also very much designed for when you do modernization. 324 00:16:10,132 --> 00:16:12,562 you might have that big bundle piece of code already. 325 00:16:12,742 --> 00:16:14,032 In fact, we see this very frequently. 326 00:16:14,032 --> 00:16:17,722 people have developed that sort of monolith and then they just wanna 327 00:16:17,962 --> 00:16:21,472 split out an individual piece of code and break this thing out. 328 00:16:21,722 --> 00:16:25,982 And just communicate with this first, because they do it, typically, a pub, a 329 00:16:26,012 --> 00:16:29,417 pub sub messaging with that and and do sort of asynchronous communication or 330 00:16:29,417 --> 00:16:30,737 they want to make it part of a workflow. 331 00:16:30,767 --> 00:16:34,397 So it's very incrementally adoptable and, you know, that's 332 00:16:34,397 --> 00:16:36,077 what it's, yeah, it's key element. 333 00:16:36,267 --> 00:16:39,052 it's also about, how you, we see this a lot now. 334 00:16:39,937 --> 00:16:44,137 In fact, AWS talks a lot about this, about the evolution of architecture 335 00:16:44,197 --> 00:16:48,097 where you make decisions at the beginning and then things evolve over time. 336 00:16:48,097 --> 00:16:50,407 And you could have an adaptable system around all this. 337 00:16:50,767 --> 00:16:55,087 And I think this is where Dapr plays a key role because not only those APIs, I think 338 00:16:55,087 --> 00:16:59,767 another thing that's really important to draw out is the abstraction between 339 00:16:59,917 --> 00:17:03,667 the APIs and underlying infrastructure and Dapr does this thing through 340 00:17:03,667 --> 00:17:05,077 what's called its component model. 341 00:17:05,467 --> 00:17:09,757 So you have the pubs of API, and you know what we see a lot of the time 342 00:17:09,877 --> 00:17:12,007 when people go up and they start building their first microservice, 343 00:17:12,007 --> 00:17:13,417 they go, yeah, I'm gonna use Kafka. 344 00:17:13,467 --> 00:17:15,957 Kafka's the best Pub Sub thing in the world. 345 00:17:15,957 --> 00:17:19,102 And they pull in the Kafka SDK, and they embed it in their 346 00:17:19,102 --> 00:17:22,132 application and they start using the kaf and then they realize that. 347 00:17:22,327 --> 00:17:25,237 It's not quite Pub Sub, it's actually got a bunch of things that they've 348 00:17:25,237 --> 00:17:28,627 got to do around it all because it really is a, you know, streaming. 349 00:17:28,627 --> 00:17:31,387 And so they have to build sort of a pub sub API around this. 350 00:17:31,477 --> 00:17:34,267 And then they wanna add some other additional features around all this. 351 00:17:34,267 --> 00:17:38,067 And before you know it, they put the Kafka SDK bed into application and they sort of 352 00:17:38,067 --> 00:17:42,102 do this across lots of them all and then further down the line, someone goes, 353 00:17:42,102 --> 00:17:46,172 well, you know, I like Kafka, but I really always wish I was using MQTT as well and 354 00:17:46,962 --> 00:17:52,082 all of a sudden you got, this SDK embedded in your code and you're trying to satisfy 355 00:17:52,082 --> 00:17:53,882 the requirements of sort of two teams. 356 00:17:53,972 --> 00:17:58,062 So you in a, I mean as code evolution world of things, Dapr actually 357 00:17:58,082 --> 00:18:01,022 abstracts all of that because there's this concept of component model where. 358 00:18:01,587 --> 00:18:06,237 You may use the Pubsub API, but you can plug in Kafka or Rapid 359 00:18:06,237 --> 00:18:09,357 MQ or MQTT or Azure Service Bus. 360 00:18:09,877 --> 00:18:13,592 AWS SNS or Google Pub Sub as your underlying message 361 00:18:13,592 --> 00:18:14,972 broker and abstract that away. 362 00:18:15,332 --> 00:18:18,122 So your code adapts and changes with time. 363 00:18:18,122 --> 00:18:20,782 And if you decide that, Kafka wasn't the best one. 364 00:18:20,782 --> 00:18:24,132 In fact, we've worked with one client, a customer that, they had 365 00:18:24,132 --> 00:18:28,632 2000 microservices and they had Kafka built into every single one of them. 366 00:18:28,632 --> 00:18:32,292 And they decided they didn't like Kafka, and it literally took them. 367 00:18:32,632 --> 00:18:36,572 A year to re-engineer this, because they wanted to change this. 368 00:18:36,572 --> 00:18:41,722 And, the component model allows you to, swap out that underlying one, but 369 00:18:41,722 --> 00:18:45,062 you still get all the benefits of that particular, piece of infrastructure. 370 00:18:45,212 --> 00:18:48,572 So you can still get, take the benefits of Kafka because of some 371 00:18:48,572 --> 00:18:49,532 of its features around this. 372 00:18:50,082 --> 00:18:53,622 going back to your question, that code evolution, the adoption of APIs. 373 00:18:54,397 --> 00:18:58,817 is key, to Dapr success that allows you to build these microservice 374 00:18:58,817 --> 00:19:00,077 architectures from the beginning. 375 00:19:00,317 --> 00:19:05,897 It allows you to evolve their design, improve and incrementally add other APIs. 376 00:19:06,247 --> 00:19:09,427 for example, we see a lot of people start with the pubs of messaging, API. 377 00:19:10,462 --> 00:19:15,442 And then they also start to, in time, typically bring in sort of the secrets 378 00:19:15,442 --> 00:19:17,032 API for managing their secrets. 379 00:19:17,032 --> 00:19:19,972 So they communicate with their underlying infrastructure. 380 00:19:20,572 --> 00:19:24,842 And we're always looking at what's needed in a distributed system architecture. 381 00:19:24,892 --> 00:19:27,592 right now one of the things that's emerged, of course, is a lot 382 00:19:27,592 --> 00:19:28,882 of people like to talk to LLMs. 383 00:19:29,662 --> 00:19:33,272 and before we jump into the AI thing too quickly, we've introduced a 384 00:19:33,272 --> 00:19:37,742 conversation, API that allows you to abstract a consistent way for you to 385 00:19:37,742 --> 00:19:39,902 talk to an underlying language model. 386 00:19:40,322 --> 00:19:47,367 So you may have a hugging face model or a thropic or a open AI AI model and they 387 00:19:47,367 --> 00:19:50,557 all have their own different, clients who wanna pull in things like this. 388 00:19:50,557 --> 00:19:54,847 in this last release, the Dapr one 15 release, It means just a 389 00:19:54,847 --> 00:19:59,467 conversation API that allows you to have a consistent way plug in the 390 00:19:59,467 --> 00:20:04,117 component to talk to that underlying peace of that service underlying piece 391 00:20:04,117 --> 00:20:07,867 of infrastructure, yet keep the a API same, and actually additionally 392 00:20:07,867 --> 00:20:09,727 lead layer features on top of that. 393 00:20:09,727 --> 00:20:12,157 So this API doesn't, isn't just a wraparound the 394 00:20:12,157 --> 00:20:13,807 client, but it actually does. 395 00:20:14,282 --> 00:20:18,962 PII obfuscation so that if data comes back, like social security numbers or 396 00:20:19,142 --> 00:20:24,802 addresses, you know It scrubs all those and also does prompt caching as well, 397 00:20:25,012 --> 00:20:28,602 so that if you retry a prompt and it's a prompt you've already done, it can 398 00:20:28,602 --> 00:20:30,372 cache up prompt for a period of time. 399 00:20:30,702 --> 00:20:32,172 So it basically saves you money. 400 00:20:32,442 --> 00:20:33,912 So that's the thing we're always looking at. 401 00:20:33,912 --> 00:20:37,572 How is it that there are APIs in the world of microservices 402 00:20:38,052 --> 00:20:39,252 and distributed development? 403 00:20:39,457 --> 00:20:43,907 Developers are starting to use a lot, workflow and durable execution is 404 00:20:43,907 --> 00:20:48,077 like a key one because practically every application out there has 405 00:20:48,077 --> 00:20:49,817 to do coordination between things. 406 00:20:50,472 --> 00:20:50,762 Yeah. 407 00:20:51,137 --> 00:20:54,177 you combine that and the joys of Dapr actually is 'cause 408 00:20:54,177 --> 00:20:55,407 it's a code-based workflow. 409 00:20:55,497 --> 00:20:57,772 I can't stress how great that is. 410 00:20:58,417 --> 00:21:02,527 there you are as a developer and you can actually debug and run your business 411 00:21:02,527 --> 00:21:08,102 logic code and set break points in it and see the calls and combine that 412 00:21:08,102 --> 00:21:11,802 workflow with, other, the other Dapr APIs. 413 00:21:11,802 --> 00:21:14,532 there's always been this big debate of what is the difference between 414 00:21:14,712 --> 00:21:17,302 orchestration, versus, coordination. 415 00:21:17,352 --> 00:21:21,072 it's, you know, s you know, the saga coordination as opposed to choreography, 416 00:21:21,072 --> 00:21:22,272 as opposed to orchestration. 417 00:21:22,672 --> 00:21:25,762 and I think, Dapr and the event driven world as opposed to the 418 00:21:25,762 --> 00:21:27,712 long, long running, workflow world. 419 00:21:27,892 --> 00:21:31,162 And I think, basically Dapr says you don't have to choose to can combine 420 00:21:31,162 --> 00:21:32,392 those two and make them work together. 421 00:21:33,272 --> 00:21:39,172 we see a lot of that, usage of Dapr, being very strong in terms of, how you design 422 00:21:39,172 --> 00:21:40,672 and build your Microsoft architecture. 423 00:21:40,812 --> 00:21:45,380 So first thing I'll say is the component model that you've mentioned, I think 424 00:21:45,380 --> 00:21:47,425 is a seriously understated feature. 425 00:21:48,020 --> 00:21:50,810 right off the top of my head I was like being able to not care 426 00:21:50,810 --> 00:21:54,620 about the implementation of that pub sub simplifies a whole lot. 427 00:21:54,620 --> 00:21:57,800 Like even just, oh, in my staging environment, am I really gonna 428 00:21:57,800 --> 00:21:59,900 run a big cafe, cluster, no. 429 00:21:59,900 --> 00:22:01,160 Can I publish something else? 430 00:22:01,160 --> 00:22:02,600 Of course, that's nice. 431 00:22:02,960 --> 00:22:05,840 And production, my constraints are completely different and not having to 432 00:22:05,840 --> 00:22:07,610 modify code is really important there. 433 00:22:08,120 --> 00:22:11,870 And I'd love to ask a kind hands on question now about. 434 00:22:12,075 --> 00:22:13,460 What that would look like. 435 00:22:13,580 --> 00:22:17,850 First, let's talk about a kinda classic dual write problem, and I think everyone 436 00:22:17,850 --> 00:22:22,380 who's ever tried to write a distributed or monolithic micro server, anyone who's 437 00:22:22,380 --> 00:22:25,140 ever tried to write distributed system or microservice architecture, fully aware. 438 00:22:25,290 --> 00:22:29,190 And that is the challenge of I need to write something to the local 439 00:22:29,190 --> 00:22:32,370 database for that service and then publish it to a queue, and it's 440 00:22:32,370 --> 00:22:35,490 something that has to happen or has to fail in an atomic fashion. 441 00:22:36,210 --> 00:22:37,770 How do we do that with Dapr today? 442 00:22:38,175 --> 00:22:39,435 actually that's a fantastic question. 443 00:22:39,485 --> 00:22:44,075 as Dapr looks across these distributed systems patterns and problems, one 444 00:22:44,075 --> 00:22:47,135 of the patterns we actually built was called the outbox pattern, which is 445 00:22:47,135 --> 00:22:50,795 what you described the where I want to transactionally write a piece of 446 00:22:50,795 --> 00:22:55,355 state into a database and then send a message under the same transaction 447 00:22:55,835 --> 00:22:58,425 to, cope with a over a message broker. 448 00:22:59,115 --> 00:23:03,805 you can actually take that, you can dapr has a pluggable components 449 00:23:03,835 --> 00:23:06,085 for 30 plus different state stores. 450 00:23:06,185 --> 00:23:13,525 anything from was Dynamo DB, Azure, Cosmos DB to Postgres to Redis, you name it. 451 00:23:13,525 --> 00:23:14,155 It has more. 452 00:23:14,635 --> 00:23:17,755 And many of those ones that are transactional because not 453 00:23:17,755 --> 00:23:18,925 all of those are transactional. 454 00:23:19,195 --> 00:23:24,075 You can combine with your favorite message broker, for example, you can combine, for 455 00:23:24,075 --> 00:23:31,355 example, AWS Dynamo DB and a and AWS SNS and transactions, save a piece of state, 456 00:23:31,725 --> 00:23:37,035 into that state store and then at the same time publish a message onto, you know, AWS 457 00:23:37,035 --> 00:23:39,165 s and s with inside the same transaction. 458 00:23:39,165 --> 00:23:43,015 And if, the state fails to save or it doesn't save in some way, the 459 00:23:43,015 --> 00:23:45,655 message doesn't get sent and if it does get saved, the message does 460 00:23:45,655 --> 00:23:46,825 get sent on the same transaction. 461 00:23:46,825 --> 00:23:48,715 So that's one of the things that we built in. 462 00:23:48,715 --> 00:23:49,465 And it's a very. 463 00:23:49,550 --> 00:23:50,990 Complex pattern to get right. 464 00:23:51,040 --> 00:23:51,490 you really 465 00:23:51,650 --> 00:23:51,940 Yeah. 466 00:23:52,210 --> 00:23:54,340 make sure there's a transactional guarantee around this. 467 00:23:54,760 --> 00:23:56,480 It's a very common pattern that happens. 468 00:23:56,990 --> 00:24:01,870 And so I'm glad you brought up this exact example because we see that used a lot. 469 00:24:02,030 --> 00:24:05,125 because it's very common for you to say, I just want to, I want to save 470 00:24:05,245 --> 00:24:10,085 the state of this order, and then publish a message to the email service 471 00:24:10,085 --> 00:24:12,965 that tells someone to send an email and make sure that they don't get an 472 00:24:12,965 --> 00:24:16,295 email saying, your order was successful if their order wasn't successful. 473 00:24:16,775 --> 00:24:18,065 so that's what you start to see. 474 00:24:18,065 --> 00:24:18,695 We start to. 475 00:24:19,380 --> 00:24:22,620 Actually combine these APIs together. 476 00:24:22,890 --> 00:24:25,170 That's a combination of state and Pub Sub. 477 00:24:25,800 --> 00:24:28,080 we actually sort of combine other APIs like that as well. 478 00:24:28,080 --> 00:24:31,080 I think one of my favorite ones is where we actually combine 479 00:24:31,080 --> 00:24:36,030 state and service invocation, Dapr actually has this concept of actors. 480 00:24:36,840 --> 00:24:39,930 and actor are long running durable stateful objects. 481 00:24:40,240 --> 00:24:41,860 I think that it was super cool. 482 00:24:41,860 --> 00:24:45,040 If you go back and look at the original paper from Carl Hewitt who 483 00:24:45,040 --> 00:24:48,400 published all about the actor model in the seventies, and he was a great, 484 00:24:48,730 --> 00:24:51,760 American computer scientist who came up with, talked about the actor model. 485 00:24:52,110 --> 00:24:55,350 he basically foresaw the whole world of distributed computing 486 00:24:55,350 --> 00:24:56,910 and things running into. 487 00:24:57,115 --> 00:24:59,215 millions and millions of little pieces of code. 488 00:25:00,625 --> 00:25:06,565 you know what Dapr has as another API is this actor API that brings 489 00:25:06,565 --> 00:25:09,175 together state and service invocation. 490 00:25:09,355 --> 00:25:13,585 So you can have lots and lots of running instances of durable state 491 00:25:13,585 --> 00:25:16,945 that you can call and it does it and provides you with lots of guarantees, 492 00:25:16,945 --> 00:25:21,210 like around concurrency and, prevents, multi-threaded calls inside all this. 493 00:25:21,630 --> 00:25:25,510 and what we see quite frequently is that people, for example, use 494 00:25:25,510 --> 00:25:27,220 these to represent iot devices. 495 00:25:27,580 --> 00:25:31,850 So we work with a great, customer of ours that does lighting systems. 496 00:25:32,490 --> 00:25:36,280 And they have, they do lighting systems for clients and every single 497 00:25:36,280 --> 00:25:38,080 one of those lights is a little actor. 498 00:25:38,560 --> 00:25:41,860 And if you imagine, the actor says, here's the luminosity of the light. 499 00:25:41,980 --> 00:25:44,710 Here's when it was turned on when it was turned off these are all the methods, 500 00:25:44,920 --> 00:25:48,620 and you have like literally millions of them and each one has an identity 501 00:25:48,990 --> 00:25:53,990 and basically Dapr then takes all of these say, wherever you're running it 502 00:25:53,990 --> 00:25:58,010 on your Kubernetes, Cluster distributes these millions of little light objects 503 00:25:58,010 --> 00:26:03,120 all around the cluster makes some more reliable, durable, safe, scales in between 504 00:26:03,120 --> 00:26:08,020 machines if a machine fails, it recovers them over here you as a developer just 505 00:26:08,020 --> 00:26:10,030 go, there's this durable object out there. 506 00:26:10,970 --> 00:26:12,390 it's, long running. 507 00:26:12,440 --> 00:26:16,530 it's secure I get all the telemetry from it all that I think is a great 508 00:26:16,530 --> 00:26:18,210 combination of the state invocation APIs. 509 00:26:18,210 --> 00:26:21,840 So I know I took you, you started on the outbox pattern and I took you to 510 00:26:21,840 --> 00:26:25,080 actors, but it's, it's just another of these distributed systems patterns. 511 00:26:25,510 --> 00:26:29,170 and actually what's emerging today is that these concepts of these 512 00:26:29,170 --> 00:26:32,860 actors and what they're about is really can of the same thing as 513 00:26:32,860 --> 00:26:35,320 this whole agentic framework thing. 514 00:26:35,620 --> 00:26:38,950 so yeah, and we'll get onto this topic because I think this is a super cool 515 00:26:38,950 --> 00:26:41,170 area to take the conversation, but these. 516 00:26:41,365 --> 00:26:43,315 these actors are like agents. 517 00:26:43,315 --> 00:26:46,555 they have memory, and now you've just gotta say, how do they 518 00:26:46,555 --> 00:26:48,085 work with these language models? 519 00:26:48,985 --> 00:26:51,505 What we've actually done inside the Dapr framework is we've combined all 520 00:26:51,505 --> 00:26:55,495 these actors and used them as part of the durable execution workflow engine. 521 00:26:55,495 --> 00:27:00,985 I. so the workflow engine that does its coordination of Task A, task B, task 522 00:27:00,985 --> 00:27:03,425 C, make sure we Recovery is itself. 523 00:27:03,425 --> 00:27:05,805 Each one of those tasks is a little actor under the covers. 524 00:27:06,295 --> 00:27:10,385 So if you think about workflow, it runs and it goes, I want to do, 525 00:27:10,985 --> 00:27:14,190 this . task or activity one and then activity two and activity three. 526 00:27:14,490 --> 00:27:15,930 And you could do all sorts of different patterns. 527 00:27:15,930 --> 00:27:18,970 You could do chaining, you can do parallel, you can 528 00:27:18,970 --> 00:27:20,380 do wait for external input. 529 00:27:20,950 --> 00:27:24,550 Um, but each one of those is laced, durable state and then the workflow 530 00:27:24,550 --> 00:27:26,410 engine does all of the smarts. 531 00:27:26,410 --> 00:27:32,050 So basically coordinating those and making sure that they run in your, nice friendly 532 00:27:32,050 --> 00:27:36,890 language preferred way, whether that's net or C#, and it, and storing all the 533 00:27:36,890 --> 00:27:42,710 state so that if your application fails and you wanna recover where your workflow 534 00:27:42,710 --> 00:27:47,870 was running, it loads up all the activity, state loads, all the actors, and back to 535 00:27:47,870 --> 00:27:50,750 where you were running before all of the state variables and off you go again. 536 00:27:51,380 --> 00:27:55,860 So I think, whole combination of APIs, bringing them together and 537 00:27:55,860 --> 00:28:00,340 we're always looking for how to do this, We taking this down the path 538 00:28:00,340 --> 00:28:05,840 of combining pub sub messaging with, state to create this outbox pattern. 539 00:28:06,050 --> 00:28:10,100 We're also taking pub sub messaging and combining it with a jobs API And 540 00:28:10,100 --> 00:28:14,300 the jobs API we introduced is a bit like, allows you to do CR jobs so you 541 00:28:14,300 --> 00:28:15,710 can actually do deferred messaging. 542 00:28:16,445 --> 00:28:20,405 So I could do a Cron job and say, when this Cron job or this job's API triggers 543 00:28:20,405 --> 00:28:25,775 off, at this event in, in five hours time, send us message to go with it 544 00:28:25,775 --> 00:28:30,405 or, so what's key about Dapr is it's all about distributed systems patterns. 545 00:28:30,405 --> 00:28:34,005 How is it you combine these concept APIs, put them together. 546 00:28:34,290 --> 00:28:39,100 For outbox for long running durable actor state for workflow, how you 547 00:28:39,100 --> 00:28:43,350 then put together pub sub with, jobs API for Cron jobs and just 548 00:28:43,350 --> 00:28:44,871 make the developer's life beautiful. 549 00:28:44,913 --> 00:28:46,173 Wow, that was amazing. 550 00:28:46,233 --> 00:28:49,143 you don't know this, and this isn't planned, but the actor 551 00:28:49,143 --> 00:28:50,673 model is my favorite distributor. 552 00:28:50,673 --> 00:28:51,093 Pardon? 553 00:28:51,213 --> 00:28:53,608 And so I even carried a book with me everywhere. 554 00:28:54,291 --> 00:28:54,511 Oh, 555 00:28:54,523 --> 00:28:54,883 and I've, 556 00:28:54,958 --> 00:28:54,959 yes. 557 00:28:54,988 --> 00:28:57,628 I have given more copies of this book away than I have 558 00:28:57,628 --> 00:28:58,888 anything else in my entire life. 559 00:28:58,888 --> 00:29:00,688 I always feel that everyone needs to learn about the actor. 560 00:29:00,688 --> 00:29:01,018 Pardon? 561 00:29:01,018 --> 00:29:05,538 Because the power, once you model your applications in that way, is phenomenal. 562 00:29:05,913 --> 00:29:10,053 And, yeah, and again, you just went and chatted about that for nearly, I 563 00:29:10,053 --> 00:29:12,273 don't even know how long I was just sitting, listening and smiling, but, 564 00:29:12,543 --> 00:29:14,523 I could spend a whole day talking about the act of patterns because 565 00:29:14,523 --> 00:29:16,953 it also is one of my favorite things about, because I think it's the most 566 00:29:17,313 --> 00:29:21,043 underrepresented and misunderstood, because if you look at the world of, you 567 00:29:21,043 --> 00:29:24,798 know serverless Serverless as it became, and functions and that sort of thing. 568 00:29:24,798 --> 00:29:26,838 Everyone got a very excited by this and, for all the 569 00:29:26,983 --> 00:29:27,133 yep. 570 00:29:27,378 --> 00:29:27,948 it's great. 571 00:29:28,368 --> 00:29:33,408 but those things are basically stateless, they, yes, they store their state, but 572 00:29:33,408 --> 00:29:37,668 they themselves are a stateless function and they run and you put 'em in the cloud. 573 00:29:38,448 --> 00:29:41,058 Just think of actors as just like a functioned runtime. 574 00:29:41,238 --> 00:29:43,128 It is a functioned runtime, but in the case of the 575 00:29:43,156 --> 00:29:43,376 that one 576 00:29:43,406 --> 00:29:43,466 Yeah. 577 00:29:43,578 --> 00:29:47,088 it's stateful, So in memory, it's a combination of. 578 00:29:47,898 --> 00:29:49,378 the state variables you have in it. 579 00:29:49,588 --> 00:29:53,338 So going back to the light, it'd have state variables for its luminosity 580 00:29:53,338 --> 00:29:57,198 and time it was switched on and maybe, the color of the light. 581 00:29:57,548 --> 00:30:00,833 and then it has methods of act on it, like turn light on, turn light 582 00:30:00,833 --> 00:30:04,963 off, tell me it's current temperature and things like this or luminosity. 583 00:30:05,443 --> 00:30:09,543 and an actor really is a stateful long running, function that you can put 584 00:30:09,543 --> 00:30:11,043 and that turns out to be very useful. 585 00:30:11,748 --> 00:30:12,078 and then 586 00:30:12,168 --> 00:30:12,458 Yeah. 587 00:30:12,523 --> 00:30:14,118 you just be able to do communication between 'em all. 588 00:30:14,488 --> 00:30:17,648 so one of the, you know, of, as we look towards our roadmap, the actor 589 00:30:17,648 --> 00:30:21,938 pattern inside Dapr gets heavily used, as I said, I mentioned in our workflow. 590 00:30:22,478 --> 00:30:25,028 and we're starting to introduce more features inside this 591 00:30:25,028 --> 00:30:28,138 particularly, improvements on sort of its messaging patterns. 592 00:30:28,348 --> 00:30:31,858 So it can do the, it can do a, the message box, like pattern in the 593 00:30:31,858 --> 00:30:36,078 original actor model, which allows you to send messages, asynchronous 594 00:30:36,078 --> 00:30:37,728 messages between named actors. 595 00:30:37,998 --> 00:30:39,948 That's sort of one of the things that we've had on roadmap it's 596 00:30:39,948 --> 00:30:41,298 been an ask for many years. 597 00:30:41,628 --> 00:30:43,038 We're finally getting round to it all. 598 00:30:43,428 --> 00:30:46,373 but yes, the actors, as steep for long running objects is super cool. 599 00:30:48,043 --> 00:30:51,058 Yeah, so I'll tell you some of my frustrations 'cause I'm curious 600 00:30:51,058 --> 00:30:52,618 now if Dapr fixes this, right? 601 00:30:52,708 --> 00:30:57,568 So I spent nearly 10 years in the elixir ecosystem or airline ecosystem, depending 602 00:30:57,568 --> 00:31:02,008 on how masochistic, I felt that day, because I wanted to write processes, 603 00:31:02,008 --> 00:31:06,658 actors, distributed, things like this and then ventured over to New Orleans 604 00:31:06,833 --> 00:31:09,523 the framework because they brought the whole idea of virtual actors, which 605 00:31:09,523 --> 00:31:11,203 to me I was like, this is really cool. 606 00:31:11,673 --> 00:31:14,073 But the challenge is with both of those approaches and other 607 00:31:14,073 --> 00:31:15,303 approaches and rust, et cetera. 608 00:31:15,918 --> 00:31:20,238 You then get really locked in to only that language or ecosystem because 609 00:31:20,238 --> 00:31:23,148 communicating with other actors that involves you bringing in a new layer 610 00:31:23,148 --> 00:31:27,948 of communication such as H-B-G-R-B-C generating types across multiple languages 611 00:31:28,158 --> 00:31:29,838 gets very painful and complicated. 612 00:31:30,318 --> 00:31:35,598 So with Dapr, if I want to go down actors in this approach, I can 613 00:31:35,598 --> 00:31:38,478 do that in any of Dapr supported languages, and it's just gonna work. 614 00:31:39,643 --> 00:31:41,433 Yeah, the answer is, yes. 615 00:31:41,493 --> 00:31:43,563 and there's a little caveat inside all that. 616 00:31:43,806 --> 00:31:44,046 Okay. 617 00:31:44,223 --> 00:31:50,261 Dapr has actors written in Python, in C# , in Java, in JavaScript, and in Go. 618 00:31:50,351 --> 00:31:52,661 So it is got five major supported languages. 619 00:31:53,061 --> 00:31:56,151 we see the actor model used heavily across all of those. 620 00:31:56,771 --> 00:32:00,261 Um, and people create active types and start to use them more. 621 00:32:01,011 --> 00:32:04,641 the one challenge that you do have to be aware of across these different 622 00:32:05,241 --> 00:32:08,601 languages though, and this really comes down to the languages themselves, is 623 00:32:08,601 --> 00:32:11,091 that they end ended up serializing. 624 00:32:11,391 --> 00:32:14,781 How they serialize their objects is slightly different between the languages. 625 00:32:15,361 --> 00:32:15,571 Yeah. 626 00:32:15,891 --> 00:32:19,521 and unfortunately, there's no agreement even on things like JSON serialization. 627 00:32:20,151 --> 00:32:23,901 and so the challenge you get is even though people are serializing adjacent 628 00:32:23,901 --> 00:32:28,371 format, that might be inside.net, that JSON format can't necessarily be 629 00:32:28,371 --> 00:32:30,861 reread back into your Python actor. 630 00:32:32,036 --> 00:32:36,086 so it is totally possible it's just that you've just gotta make sure that when you 631 00:32:36,086 --> 00:32:40,556 plug in the serialization mechanism that you've chosen between your actors, you've 632 00:32:40,556 --> 00:32:44,996 had to choose a serialization mechanism that's consistent across those that 633 00:32:44,996 --> 00:32:48,416 can be read between those two different actor types from different languages. 634 00:32:48,476 --> 00:32:49,466 And if you. 635 00:32:49,801 --> 00:32:54,571 careful to choose that and choose a adjacent serialization format or adjacent 636 00:32:54,901 --> 00:32:58,201 serialized it that will, for example, do that or you could use a binary format. 637 00:32:58,201 --> 00:33:01,701 it doesn't really matter then you can achieve that, out of the box. 638 00:33:01,701 --> 00:33:07,131 So because we've tended to write the SDK owners in those particular repos have 639 00:33:07,131 --> 00:33:10,611 tended to use the preferred serialization format for that language specific. 640 00:33:11,326 --> 00:33:14,946 It doesn't happen just naturally but it's not too hard a problem to 641 00:33:14,946 --> 00:33:17,321 solve if that's a key thing for you. 642 00:33:17,321 --> 00:33:20,081 And so it is totally possible as long as you're aware of 643 00:33:20,381 --> 00:33:21,401 the serialization that you do. 644 00:33:22,716 --> 00:33:26,376 So I have the choice to pick between using some from string base like JSON. 645 00:33:26,406 --> 00:33:30,456 But if I wanted to use Flatbuffers or Protobuffs, that's possible and 646 00:33:30,456 --> 00:33:33,246 I'm assuming that would give me some sort of level of guarantees. 647 00:33:33,276 --> 00:33:36,006 'cause I think those are almost ubiquitous across languages. 648 00:33:36,036 --> 00:33:37,491 Although always say JSON is, and it isn't, but. 649 00:33:38,396 --> 00:33:39,656 Exactly JSON ISN and isn't. 650 00:33:39,656 --> 00:33:43,456 you could have a serialization format, put a above that you write 651 00:33:43,456 --> 00:33:46,696 out and then read that back in and then achieve that sort of thing. 652 00:33:46,996 --> 00:33:50,626 And this is one of the other goals at Dapr would really wanted to do 653 00:33:50,626 --> 00:33:54,566 is we see now that when we go into, organizations that, there is a 654 00:33:54,566 --> 00:33:56,786 multitude of languages quite frequently. 655 00:33:56,786 --> 00:34:01,406 there's one major language like net or Java, and there's 656 00:34:01,406 --> 00:34:02,726 a lot of Python coming in now. 657 00:34:03,656 --> 00:34:07,256 And, this was another key tenant that we wanted to address in the whole, the 658 00:34:07,256 --> 00:34:11,276 Dapr ecosystem was that we saw lots of different microservices frameworks out 659 00:34:11,276 --> 00:34:14,806 there, but they were always very language specific and then I would, I'd pick, 660 00:34:15,086 --> 00:34:16,736 spring Boot is a great example of this. 661 00:34:16,736 --> 00:34:17,966 It's a fabulous framework. 662 00:34:18,216 --> 00:34:21,066 it, it does sort of allows you to build Microsoft's concept, but 663 00:34:21,066 --> 00:34:24,366 it's all in the Java world and you're bought into a Java world. 664 00:34:24,366 --> 00:34:27,846 And so, you know, if you start bringing the Python developers to work next 665 00:34:27,846 --> 00:34:31,896 to them, there's a harder challenge about, well, okay, how do I make my 666 00:34:31,896 --> 00:34:33,516 Python code work with your Java code? 667 00:34:33,576 --> 00:34:37,656 Dapr breaks down all of those language and barriers between developers because 668 00:34:38,621 --> 00:34:42,431 you can send pub sub messages, you can work across workflows, you can 669 00:34:42,431 --> 00:34:44,801 use a, common SDKs across them all. 670 00:34:45,151 --> 00:34:48,831 and, bring in and make, particularly, being able to call, 671 00:34:48,901 --> 00:34:51,126 a service that's written, say in a 672 00:34:51,356 --> 00:34:55,196 java and it calls a Python service over pub sub or service invocation. 673 00:34:55,296 --> 00:34:57,966 you can do that and then of course, as we talked about with 674 00:34:57,966 --> 00:35:00,696 actors, it's also, possible if you think about that serialization. 675 00:35:00,696 --> 00:35:04,716 So breaking down those barriers between different teams and 676 00:35:04,716 --> 00:35:07,776 different languages and different choices of tools was a core tenet. 677 00:35:07,776 --> 00:35:09,156 There's been very successful with that. 678 00:35:09,586 --> 00:35:12,016 particularly as you see more python code emerge inside. 679 00:35:12,436 --> 00:35:12,646 Yeah. 680 00:35:12,646 --> 00:35:13,786 Application development today. 681 00:35:15,571 --> 00:35:16,171 Nice. 682 00:35:16,221 --> 00:35:19,731 I'm gonna ask one more question and then we can move it back to the 683 00:35:19,731 --> 00:35:23,151 agent, LLM stuff and kind of get into maybe a practical workflow there. 684 00:35:23,181 --> 00:35:23,961 'cause I do think that. 685 00:35:24,491 --> 00:35:25,991 It's just so on topic these days. 686 00:35:25,991 --> 00:35:29,351 I don't know anyone who isn't trying to integrate AI into whatever they're 687 00:35:29,351 --> 00:35:33,681 working on, but I'm curious about this now, polyglot support with Dapr, 688 00:35:33,701 --> 00:35:35,561 because you're a company, right? 689 00:35:35,561 --> 00:35:38,891 You're the founder of Diagrid, you're supporting an open source project. 690 00:35:39,851 --> 00:35:44,531 It must be tough to work out, okay, do we go and support in new language and at what 691 00:35:44,531 --> 00:35:46,181 level of demand do we decide to do that? 692 00:35:46,181 --> 00:35:50,051 Versus are we building new value for existing developers there? 693 00:35:50,051 --> 00:35:50,951 I've seen this problem. 694 00:35:51,341 --> 00:35:54,581 I used to work at PMI and people were always asking for languages. 695 00:35:54,581 --> 00:35:55,361 They wanted rust. 696 00:35:55,361 --> 00:35:58,661 they wanted Java support, they wanted Blab, whatever new language is out this 697 00:35:58,661 --> 00:36:02,801 week and it is really difficult because the level of commitment and maintenance 698 00:36:02,801 --> 00:36:06,671 required for these SDK is not trivial, and we're seeing the same right now with 699 00:36:06,671 --> 00:36:09,161 Dagger who are trying to do CI/CD is code. 700 00:36:09,536 --> 00:36:13,386 And their ability to add languages is coming down to community it's support 701 00:36:13,386 --> 00:36:16,316 and whether people are willing to take on that challenge because they need 702 00:36:16,316 --> 00:36:20,126 to focus on their product, especially given how early they are at the moment. 703 00:36:20,186 --> 00:36:23,636 So from, from your perspective, are you gonna add 12 more 704 00:36:23,636 --> 00:36:24,926 languages in the next 12 months? 705 00:36:24,926 --> 00:36:27,716 What is, like, how is that, is it easy as all generated? 706 00:36:27,716 --> 00:36:28,856 Like I'd love to know more there. 707 00:36:29,711 --> 00:36:32,231 Yeah, we have five core SDKs. 708 00:36:32,231 --> 00:36:34,121 I think you could probably count there, there were, there 709 00:36:34,121 --> 00:36:35,531 are sort of seven in total. 710 00:36:35,751 --> 00:36:38,691 we have those five I talked about plus rust and C plus 711 00:36:38,691 --> 00:36:41,001 plus, on PHP on top of all that. 712 00:36:41,331 --> 00:36:45,796 But you're right, getting maintainers to look after all the SDKs is a 713 00:36:45,796 --> 00:36:47,386 little challenge around all of this. 714 00:36:47,386 --> 00:36:47,716 We do 715 00:36:47,793 --> 00:36:48,073 rely 716 00:36:48,103 --> 00:36:48,233 Yeah. 717 00:36:48,346 --> 00:36:49,636 on the community around those. 718 00:36:50,066 --> 00:36:54,416 but we've also taken a philosophical approach with Dapr that, its APIs that you 719 00:36:54,416 --> 00:36:57,506 can use are HTTP or GRPC under the covers. 720 00:36:58,996 --> 00:37:03,616 when you're working, for example, with JavaScript, the actual, SDK on top of that 721 00:37:03,616 --> 00:37:09,106 is very thin because, JavaScript naturally is born into an http world and so you can 722 00:37:09,106 --> 00:37:11,686 call the HTTP APIs for Dapr very easily. 723 00:37:12,296 --> 00:37:15,446 You just have to be able to kind of make sure that you think through http 724 00:37:15,446 --> 00:37:18,696 concepts as opposed to maybe your language concepts around these things. 725 00:37:19,356 --> 00:37:24,541 so generally, you know, our SDKs are a language shim layer, as it were on 726 00:37:24,541 --> 00:37:27,001 top of the http or an underlying GRPC. 727 00:37:27,481 --> 00:37:32,456 And you can interact them directly I mean, we showed multiple languages 728 00:37:32,456 --> 00:37:36,056 that we didn't have SDKs for just calling an HTTP call because they 729 00:37:36,056 --> 00:37:38,236 wanted a pub, send a pub sub message. 730 00:37:39,256 --> 00:37:42,336 but, we do, and you know, Dapr is driven by a large community. 731 00:37:42,661 --> 00:37:45,961 there's over 8,000 developers in the Discord community. 732 00:37:46,426 --> 00:37:46,846 Amazing. 733 00:37:47,078 --> 00:37:51,271 There are community maintainers and core maintainers for the T net, SDK, 734 00:37:51,661 --> 00:37:54,671 you know, inside, inside the Java, SDK. 735 00:37:54,821 --> 00:37:58,611 In fact, in all the SDKs there are, maintainers from the community and so we 736 00:37:58,611 --> 00:38:03,061 rely a lot on that, community effort and engagement and it's been built up over the 737 00:38:03,061 --> 00:38:05,701 years in order to make the SDK successful. 738 00:38:06,011 --> 00:38:09,971 typically, we start with a new API that we put into the runtime, In this 739 00:38:09,971 --> 00:38:15,381 last release, the conversation API, and then, we encourage the community 740 00:38:15,381 --> 00:38:17,571 to come along and add that in. 741 00:38:17,571 --> 00:38:22,501 In fact, just this last week, with a community member, contribute into the 742 00:38:22,501 --> 00:38:27,951 Java, SDK, the conversation, API that can be used there directly, rather than 743 00:38:27,951 --> 00:38:30,321 you having to do an http call from Java. 744 00:38:30,416 --> 00:38:34,256 It's a first class language concept inside that it was a contribution. 745 00:38:34,556 --> 00:38:37,436 It gets reviewed by the JavaScript SDK maintainer. 746 00:38:38,486 --> 00:38:40,856 So we're very community orientated. 747 00:38:40,916 --> 00:38:44,876 we strongly encourage the community to come along, add things into 748 00:38:44,876 --> 00:38:48,816 the SDKs, the runtime takes a little bit more to get used to. 749 00:38:48,876 --> 00:38:50,916 There's a lot, more, let's just say. 750 00:38:51,128 --> 00:38:55,428 it takes time to learn, core runtime features to be able to contribute to that. 751 00:38:56,148 --> 00:38:59,058 but we also get a lot of people who contribute to the components contribute 752 00:38:59,238 --> 00:39:00,558 API with all these components. 753 00:39:00,978 --> 00:39:03,348 in fact, to go along with the conversation, API this also in this 754 00:39:03,348 --> 00:39:09,533 last week, we've had contributions for you know, other language, other LLMs, 755 00:39:09,773 --> 00:39:14,663 particularly, that, I've got added into as components that you can communicate with. 756 00:39:14,663 --> 00:39:19,313 So, know, going back to your question, community support is important. 757 00:39:19,313 --> 00:39:23,383 We recognize that, our SDKs are critical to community. 758 00:39:23,663 --> 00:39:25,933 and, they do take time maintaining all of these things. 759 00:39:25,963 --> 00:39:30,443 Um, we just keep pushing out there and encouraging the community 760 00:39:31,373 --> 00:39:32,783 to be part of the Dapr project. 761 00:39:33,283 --> 00:39:36,628 I'm curious if when you were you know, putting together the 762 00:39:36,628 --> 00:39:39,898 idea of the conversation API and building out how it worked. 763 00:39:39,928 --> 00:39:44,228 Did you have like that, definitive use case that you can tell a story about 764 00:39:44,228 --> 00:39:47,828 where you're like, this is what we want to make work, and what would that be? 765 00:39:48,733 --> 00:39:51,283 Yeah, so what we've seen is increasingly, I mean, I'm gonna 766 00:39:51,283 --> 00:39:54,853 take this onto one other exciting advancement actually that's coming 767 00:39:54,853 --> 00:39:57,760 out tomorrow and I'm, from the CNCF. 768 00:39:58,413 --> 00:40:00,663 we're gonna be announcing what's called Dapr Agents. 769 00:40:01,113 --> 00:40:04,893 and it's actually right now as we do this podcast, you know, it's not 770 00:40:04,893 --> 00:40:08,763 known, but if this podcast goes out after the 12th of March, it'll be 771 00:40:08,763 --> 00:40:11,083 publicly known about, but Dapr agents. 772 00:40:12,043 --> 00:40:15,673 it's a framework that's been donated by the community that allows you to 773 00:40:15,673 --> 00:40:20,583 build on top of the actor and, the conversation and the workflow model 774 00:40:20,703 --> 00:40:24,933 in order to create the first class concept of an agentic agent that allows 775 00:40:24,933 --> 00:40:27,273 you to have long running durability. 776 00:40:27,583 --> 00:40:30,973 and the same time combine that with the conversation API, in order 777 00:40:30,973 --> 00:40:33,883 to talk to language models so you know what's happening in the world. 778 00:40:34,573 --> 00:40:36,728 All this excitement about agentic systems. 779 00:40:37,008 --> 00:40:40,823 We just see as just another way of talking about distributed systems again, 780 00:40:41,063 --> 00:40:45,353 and so lots of people have created new terms for saying your agents and 781 00:40:45,353 --> 00:40:49,433 how they communicate and how they have memory and how they're durable and 782 00:40:49,433 --> 00:40:51,233 recoverable and they need workflows. 783 00:40:51,233 --> 00:40:54,203 Well, actually it turns out that's all just a distributed systems 784 00:40:54,203 --> 00:40:55,973 problem with a new name around it all. 785 00:40:56,963 --> 00:40:59,183 The thing that makes it different of course, so of course is the 786 00:40:59,183 --> 00:41:02,483 integration with language models and what does that make, that makes it 787 00:41:02,483 --> 00:41:04,253 very much more dynamic in nature. 788 00:41:04,933 --> 00:41:08,598 So the way I look at it all is that, you want to be able to write your 789 00:41:08,598 --> 00:41:13,278 very traditional, structured, and consistent workflows that go step A 790 00:41:13,278 --> 00:41:14,958 state B just like a state machine. 791 00:41:15,128 --> 00:41:18,488 I know the states to go through and it does these things and it 792 00:41:18,488 --> 00:41:20,018 doesn an embrace systematic way. 793 00:41:20,828 --> 00:41:24,278 But also you wanna be able to write these hi agentic ones which allow you 794 00:41:24,278 --> 00:41:25,778 to take advantage of language models. 795 00:41:26,603 --> 00:41:30,173 With a language model, which is sort of non-deterministic in some way, can 796 00:41:30,173 --> 00:41:34,403 come back with different answers, can help you achieve human-like tasks. 797 00:41:34,403 --> 00:41:38,553 It were, I mean, of course the classic one is, I want to build agentic system 798 00:41:38,553 --> 00:41:42,693 that helps me book an airline ticket, book a hotel, and a favorite event that 799 00:41:42,693 --> 00:41:47,448 I'm going to when I visit City X. And in that world, you'd have an agent that knows 800 00:41:47,448 --> 00:41:49,968 how to talk to airline ticketing systems. 801 00:41:50,178 --> 00:41:54,828 You'd have an agent that knows how to talk to hotel booking things, and an 802 00:41:54,828 --> 00:41:56,448 agent that would figure out how to. 803 00:41:57,048 --> 00:41:59,688 go off into a particular city and defend your events and they would all 804 00:41:59,688 --> 00:42:01,818 be communicating with language models. 805 00:42:02,268 --> 00:42:05,928 But in the end, it's still a distributed systems problem you don't want halfway 806 00:42:05,928 --> 00:42:09,228 through this, that the whole thing fails and gives up and lost all your 807 00:42:09,228 --> 00:42:11,388 hotel bookings and forgot everything. 808 00:42:11,708 --> 00:42:15,138 and that has to be recoverable and so it has to be durable in memory and 809 00:42:15,198 --> 00:42:16,728 durable executions is all part of this. 810 00:42:17,418 --> 00:42:21,658 what we've gone and done, is that we've built this ag agentic framework 811 00:42:21,928 --> 00:42:27,838 first class into Dapr again, built on all of these core APIs around actors 812 00:42:27,838 --> 00:42:32,518 and workflows and conversation API, which is just a way of talking to 813 00:42:32,878 --> 00:42:36,868 any generic underlying language model to bring into the agentic system. 814 00:42:36,868 --> 00:42:41,103 So you have this concept of a workflow agent and a standalone agent. 815 00:42:41,873 --> 00:42:46,433 And by annotating these and saying, I want this to be a long 816 00:42:46,433 --> 00:42:48,153 run, durable, type of agent. 817 00:42:48,423 --> 00:42:50,703 And by the way, here's the tools it can use. 818 00:42:50,923 --> 00:42:55,693 this agent knows how to use the API to call onto the weather service 819 00:42:55,693 --> 00:42:57,363 or the airline booking system. 820 00:42:57,863 --> 00:42:58,003 You 821 00:42:58,003 --> 00:43:01,133 can then combine and build these, agent systems. 822 00:43:01,133 --> 00:43:01,613 So I think. 823 00:43:02,528 --> 00:43:06,308 What's exciting for us about this is that we see a lot of other frameworks 824 00:43:06,308 --> 00:43:11,168 out there, starting to build these agen distributed applications, but 825 00:43:11,168 --> 00:43:14,618 we're like, well, you know, Dapr was kind of pretty much designed 826 00:43:14,618 --> 00:43:16,028 from this, from the very beginning. 827 00:43:16,673 --> 00:43:20,273 Especially going back to the actor model, which is this durable state that keeps the 828 00:43:20,273 --> 00:43:22,643 memory of something and was recoverable. 829 00:43:23,123 --> 00:43:26,303 You've now just gotta combine this with a language model because, the 830 00:43:26,303 --> 00:43:29,598 language model, is coming back with some answers and you can keep asking 831 00:43:29,598 --> 00:43:33,858 it and refining it and that's why the conversation API with this language 832 00:43:33,858 --> 00:43:38,028 model combined with basically actors and workflows has been key for us to 833 00:43:38,403 --> 00:43:43,173 announce this Dapr agents model and one of my kiosks from this is like, please 834 00:43:43,173 --> 00:43:49,173 go out and try out this Dapr Agents, framework it's only in Python right now. 835 00:43:49,473 --> 00:43:52,833 we started there because Python was by far the most popular language. 836 00:43:53,253 --> 00:43:56,043 We are gonna bring it to Java and.net and go. 837 00:43:56,523 --> 00:43:58,833 and, And JavaScript in time. 838 00:43:59,083 --> 00:44:03,283 but we think it's a very exciting way of kind of bringing developers 839 00:44:03,283 --> 00:44:06,853 into the Gentech AI world, which is a distributed systems problem 840 00:44:06,853 --> 00:44:08,263 with language models in the end. 841 00:44:10,213 --> 00:44:13,773 Wow, that's really awesome and I can't believe it's happened tonight, tomorrow, 842 00:44:13,773 --> 00:44:15,153 whenever, as you're gonna release that. 843 00:44:15,213 --> 00:44:18,853 'cause I literally spent the last three weeks playing with every AG agentic, 844 00:44:18,873 --> 00:44:23,013 LLM framework there is trying to put together some real scenarios for the 845 00:44:23,013 --> 00:44:27,163 Rawkode Academy because when I have new videos that I put into an R two bucket, 846 00:44:27,343 --> 00:44:31,243 you know, I want an agent that converts 'em into the HLS format that I use for 847 00:44:31,243 --> 00:44:33,433 distribution and then want it transcribed. 848 00:44:33,433 --> 00:44:37,463 But I want an agent that can then go over the transcription from X API, 849 00:44:37,533 --> 00:44:40,713 and check it for comment errors and terms that I have in the system. 850 00:44:40,743 --> 00:44:44,343 Because, let's face it, no LLM so far has been able to transcribe Rawkode 851 00:44:44,643 --> 00:44:50,058 probably wouldn't get Dapr correct but if we give them context, yeah. 852 00:44:50,058 --> 00:44:52,968 They can look at text and say, we actually think, given that this is a 853 00:44:52,968 --> 00:44:56,598 Cloud Native podcast about a product called Dapr, we probably wanna 854 00:44:56,598 --> 00:44:57,708 make sure it's spelled correctly. 855 00:44:57,713 --> 00:45:01,698 And it, and even now to generating thumbnails where I post it to my slack 856 00:45:01,698 --> 00:45:03,138 and I can thumb up to approve it. 857 00:45:03,168 --> 00:45:05,813 And then it schedules the episode like, I believe I could do all 858 00:45:05,813 --> 00:45:08,443 this with agentic, LLL systems, 859 00:45:08,703 --> 00:45:09,123 Yes. 860 00:45:09,133 --> 00:45:11,323 hadn't really found the framework to make that happen yet. 861 00:45:11,383 --> 00:45:14,743 And it sounds like you've just solved my problem in a 50 minute podcast. 862 00:45:14,743 --> 00:45:15,388 I'm pretty happy. 863 00:45:15,483 --> 00:45:18,123 that you'll find, I, I would love to hear your opinions. 864 00:45:18,123 --> 00:45:22,593 In fact, we could do a whole podcast in itself of comparison between the 865 00:45:22,593 --> 00:45:25,023 different Lgentic frameworks out there. 866 00:45:25,263 --> 00:45:29,373 There's a few common of popular ones that emerged like Lang Chain and Crew AI 867 00:45:29,373 --> 00:45:34,343 and, auto gen around these things but I think the difference that we're expecting 868 00:45:34,343 --> 00:45:36,113 that the Dapr one brings is that, we've. 869 00:45:36,848 --> 00:45:40,193 You know, Dapr has been, Dapr is used by thousands of thousands, tens 870 00:45:40,193 --> 00:45:41,423 of thousands of companies today. 871 00:45:42,033 --> 00:45:45,723 we track, 40,000 different companies through the open source 872 00:45:45,723 --> 00:45:47,253 project that are using Dapr today. 873 00:45:47,523 --> 00:45:49,383 It's heavily used in production scenarios. 874 00:45:49,383 --> 00:45:51,873 It's used, we've shown it can be scalable. 875 00:45:52,173 --> 00:45:54,753 Going back to the active model, it's incredibly efficient. 876 00:45:55,023 --> 00:45:59,253 given that each one of these agents that will run will be an underlying actor, the 877 00:45:59,253 --> 00:46:02,293 actor can start up under 50 milliseconds. 878 00:46:02,293 --> 00:46:03,883 So it's super fast startup time. 879 00:46:04,223 --> 00:46:07,913 you can pack tens of thousands of these on a single core machine. 880 00:46:08,153 --> 00:46:09,563 So it's very cost effective. 881 00:46:09,713 --> 00:46:11,183 It's kind of production ready. 882 00:46:11,183 --> 00:46:12,353 It's very well tested. 883 00:46:13,223 --> 00:46:17,788 and it has all the needs because a lot of these other urgent systems haven't thought 884 00:46:17,788 --> 00:46:21,418 about the communication problem, about distributed messaging around these things. 885 00:46:21,658 --> 00:46:24,568 They haven't necessarily thought about and had a great workflow engine for doing 886 00:46:24,568 --> 00:46:25,918 all the coordination around them all. 887 00:46:26,278 --> 00:46:28,948 And they certainly haven't even thought about the component model, 888 00:46:29,128 --> 00:46:32,258 which is abstracting, your code from the underlying infrastructure. 889 00:46:32,588 --> 00:46:37,073 They all tightly, couple into some particular infrastructure around 890 00:46:37,073 --> 00:46:39,663 these things and thought about that because, that wasn't a core tenant. 891 00:46:40,103 --> 00:46:43,183 that's where, Dapr agents we believe is kind of has an 892 00:46:43,183 --> 00:46:44,263 edge around all these things. 893 00:46:44,353 --> 00:46:46,443 Of course, we've still gotta prove it over time. 894 00:46:46,753 --> 00:46:47,833 it's still new. 895 00:46:48,053 --> 00:46:51,183 it's playing, catch up probably in, in the agent framework world, but then. 896 00:46:51,983 --> 00:46:52,883 Hopefully it'll take off. 897 00:46:52,883 --> 00:46:54,923 So please, I'd love you to try it out. 898 00:46:55,343 --> 00:46:58,583 I would love to hear your feedback and I would love you to do an entire session 899 00:46:58,583 --> 00:46:59,993 of comparing all these frameworks. 900 00:47:00,413 --> 00:47:03,773 'cause I bet you the Dapr agents one will come out pretty close to the top 901 00:47:04,253 --> 00:47:09,123 in my mind in terms of ease of use and in terms of functionality, and 902 00:47:09,123 --> 00:47:10,413 particularly in terms of production. 903 00:47:10,413 --> 00:47:10,913 readiness. 904 00:47:11,558 --> 00:47:13,928 I definitely will, we'll definitely make that happen. 905 00:47:13,958 --> 00:47:16,333 But you did set yourself up for one more question, just 906 00:47:16,333 --> 00:47:17,928 with that, amazing talk there. 907 00:47:18,288 --> 00:47:22,878 You said thousands of agents on a single node and 50 milliseconds starting time. 908 00:47:22,878 --> 00:47:24,228 So right off the top of my head, I was like. 909 00:47:24,498 --> 00:47:28,158 Buying a container, how are you running and orchestrating them things. 910 00:47:28,813 --> 00:47:31,483 those are actually done as individual pieces of code. 911 00:47:31,483 --> 00:47:34,693 So I mean, what happens is that Dapr runs on sort of 912 00:47:34,783 --> 00:47:36,573 on, Kubernetes as a platform. 913 00:47:36,903 --> 00:47:40,593 But you know, the way, an actor actually works is it's 914 00:47:40,593 --> 00:47:42,723 just a it's a stateful object. 915 00:47:42,873 --> 00:47:46,653 So just as you write a class object inside, say a, an object orientated 916 00:47:46,653 --> 00:47:50,883 language like .Net or Java or one of these things, it's just a piece of 917 00:47:50,883 --> 00:47:52,683 code that runs inside your system. 918 00:47:52,683 --> 00:47:53,433 I mean, you 919 00:47:53,501 --> 00:47:56,278 you can give of it in some ways as like a process, but actually 920 00:47:56,278 --> 00:47:57,838 it is a lower level in a process. 921 00:47:58,138 --> 00:48:01,028 So if you imagine, you've got processing inside that you've got 922 00:48:01,028 --> 00:48:03,408 object types it's just an object type. 923 00:48:03,828 --> 00:48:06,618 And so, you know, that's why it starts up fast. 924 00:48:06,768 --> 00:48:09,708 it's just a piece of code and it's got, but it's got a piece of code 925 00:48:10,128 --> 00:48:11,778 with an identity associated with it. 926 00:48:11,778 --> 00:48:15,058 So it's actor 1, 2, 3, or, Mark's agent number one. 927 00:48:15,418 --> 00:48:20,688 And The cleverness of Dapr is that it routes messages through to an 928 00:48:20,688 --> 00:48:24,678 individual piece of code with a named identity, of which you have tens of 929 00:48:24,678 --> 00:48:28,518 thousands of them, or even millions of them running on your system and 930 00:48:28,668 --> 00:48:30,408 route, routes that message correctly. 931 00:48:30,678 --> 00:48:34,818 it's at that level of granularity and that's the thing that people, 932 00:48:34,948 --> 00:48:36,238 fail to understand sometimes. 933 00:48:36,238 --> 00:48:39,658 You know, like, you know, containers are large things and you know, 934 00:48:39,658 --> 00:48:42,808 even getting down to processes, you know, great a process, but this 935 00:48:42,808 --> 00:48:46,108 is sort of multiple actors within inside a process, as it were. 936 00:48:46,158 --> 00:48:46,998 does that answer your question? 937 00:48:47,823 --> 00:48:48,783 Yeah, it definitely does. 938 00:48:48,783 --> 00:48:52,953 I mean, in my head I thought, okay, an agent is a Dapr service that 939 00:48:52,953 --> 00:48:55,263 gets deployed to my ClusterAPI. 940 00:48:55,413 --> 00:48:57,483 so I need to take a look at the conversation API and actually 941 00:48:57,483 --> 00:48:58,923 see how this all pieces together. 942 00:48:59,253 --> 00:49:02,223 but it's definitely sounds very interesting, very exciting, 943 00:49:02,253 --> 00:49:04,503 and I've got so many things I want to throw out already. 944 00:49:04,603 --> 00:49:07,843 this might be a late night in the office room, me we'll see how things go, but. 945 00:49:08,103 --> 00:49:10,443 As we finish up here, I do want to just mention how does 946 00:49:10,443 --> 00:49:11,943 Diagrid come into all of this? 947 00:49:12,093 --> 00:49:14,733 because, you know, what, what would, what do we do at Diagrid, well, 948 00:49:14,828 --> 00:49:19,098 at Diagrid, you know, we actually, we're very, source orientated, 949 00:49:19,408 --> 00:49:21,268 particularly around the Dapr ecosystem. 950 00:49:21,973 --> 00:49:25,963 and you know, what we focus on particularly here is that, we want 951 00:49:25,963 --> 00:49:30,553 to make your solutions successful using Dapr, the open source project. 952 00:49:30,553 --> 00:49:34,593 So we focus on, we have, we have two services that we, have today. 953 00:49:34,903 --> 00:49:38,443 we have a service called Diagrid Conductor that allows you to manage 954 00:49:38,443 --> 00:49:40,123 and operate Dapr on top of Kubernetes. 955 00:49:40,513 --> 00:49:43,333 So you imagine that Kubernetes is kind of a key platform for 956 00:49:43,333 --> 00:49:44,263 people running Dapr on it. 957 00:49:44,818 --> 00:49:50,833 conductor allows you to do monitoring and upgrade and kind of visualization of 958 00:49:50,833 --> 00:49:56,243 your applications and all the ops inside that and then we have a very core service 959 00:49:56,243 --> 00:50:01,703 called Diagrid catalyst, which you think of it as a serverless offering of Dapr. 960 00:50:01,723 --> 00:50:06,533 It provides you just a, think of it as a take away this Dapr sidecar. 961 00:50:06,543 --> 00:50:10,053 we never actually mentioned that, but Dapr runs as a sidecar for your app application 962 00:50:10,323 --> 00:50:14,493 rather than you managing and operating it all we simply host all the Dapr APIs 963 00:50:14,493 --> 00:50:19,933 for you, like the workflow, API or the pubs, API, API on a service and you can 964 00:50:19,933 --> 00:50:21,343 then literally call 'em from anywhere. 965 00:50:22,038 --> 00:50:27,078 So you can basically build an application and deploy it onto a VM or a container 966 00:50:27,078 --> 00:50:31,608 service or even a function runtime, and then take advantage of say, the 967 00:50:31,608 --> 00:50:35,918 workflow Dapr, API, in order to do coordination across these things. 968 00:50:36,228 --> 00:50:41,128 as a random example, if you are an AWS developer and you're 969 00:50:41,128 --> 00:50:44,728 using step functions, and if step functions can only be used with. 970 00:50:45,613 --> 00:50:50,603 as AWS functions instead, and you wanna take advantage of Dapr workflow, you could 971 00:50:50,603 --> 00:50:56,073 use, Dapr workflow, for example, to work across, AWS Fargate service to coordinate 972 00:50:56,073 --> 00:51:00,103 a set of, containers if you wanted to, and do the coordination of, service A 973 00:51:00,103 --> 00:51:01,723 equivalent service B across containers. 974 00:51:01,723 --> 00:51:06,123 So Catalyst is allows you to have an easy way to, you consume the Dapr 975 00:51:06,143 --> 00:51:10,158 APIs from anywhere and actually very well fits in the concept of platform 976 00:51:10,158 --> 00:51:14,638 engineering as a team which also is a very key area that we've seen emerge 977 00:51:14,638 --> 00:51:18,988 recently where in platform engineering, what's the contract between the platform 978 00:51:18,988 --> 00:51:21,388 team and the application developer? 979 00:51:21,418 --> 00:51:24,118 Turns out that app, Dapr is an amazing. 980 00:51:24,808 --> 00:51:29,038 Contract between those two because it allows the platform team to 981 00:51:29,038 --> 00:51:30,778 provide a set of different services. 982 00:51:31,108 --> 00:51:33,028 and yet the developers don't have to change all their 983 00:51:33,028 --> 00:51:34,648 code around all these things. 984 00:51:34,898 --> 00:51:37,088 if they're using, for example, Pubs up API. 985 00:51:37,428 --> 00:51:42,198 but the underlying platform team wants to provide a new message broker, whether 986 00:51:42,198 --> 00:51:46,038 that's Kafka or RapidMQ , without going back to our previous conversation, 987 00:51:46,038 --> 00:51:47,748 ripping out the SDKs of everything. 988 00:51:48,078 --> 00:51:51,078 With the platform engineering trend that's happening in this world as well. 989 00:51:51,298 --> 00:51:55,318 particularly in sort of the Cloud Native ecosystem that contractual 990 00:51:55,318 --> 00:51:59,368 or interface understanding between those two is where Dapr shines 991 00:51:59,398 --> 00:52:00,718 beautifully around these things. 992 00:52:00,919 --> 00:52:01,249 Awesome. 993 00:52:01,339 --> 00:52:02,749 Thank you for sharing all that as well. 994 00:52:02,819 --> 00:52:05,049 will Diagrid have a booth at KubeCon? 995 00:52:05,674 --> 00:52:08,874 We will do, yes, we will be at KubeCon,  KubeCon Europe. 996 00:52:08,894 --> 00:52:13,094 That's coming up on the 1st of April, so please come along and meet us there. 997 00:52:13,364 --> 00:52:15,648 We would love to hear all your questions, hear you wanna hear about 998 00:52:15,648 --> 00:52:19,788 Dapr, talk about agentic systems, talk about platform engineering. 999 00:52:19,788 --> 00:52:22,083 Talk about, how you build applications. 1000 00:52:22,083 --> 00:52:23,433 Distributed runtimes. 1001 00:52:23,463 --> 00:52:24,633 we're a game for everything. 1002 00:52:24,903 --> 00:52:25,833 Yeah, please come find us. 1003 00:52:26,988 --> 00:52:31,258 Yeah, go to the booth, get a demo, and definitely enjoy the conversation. 1004 00:52:31,755 --> 00:52:32,955 Thank you so much for joining me. 1005 00:52:33,025 --> 00:52:35,265 that was a, I just loved everything we talked about there. 1006 00:52:35,265 --> 00:52:37,485 That's completely up my street and I hope that everyone listening 1007 00:52:37,485 --> 00:52:38,475 at home enjoyed that too. 1008 00:52:38,574 --> 00:52:39,594 thank you for having me today. 1009 00:52:39,654 --> 00:52:40,254 It has been great. 1010 00:52:40,340 --> 00:52:40,790 Awesome. 1011 00:52:40,790 --> 00:52:41,445 Thanks for joining us. 1012 00:52:42,155 --> 00:52:45,425 If you want to keep up with us, consider us subscribing to the podcast 1013 00:52:45,575 --> 00:52:49,945 on your favorite podcasting app, or even go to cloudnativecompass.fm. 1014 00:52:50,305 --> 00:52:55,135 And if you want us to talk with someone specific or cover a specific topic, reach 1015 00:52:55,135 --> 00:52:57,295 out to us on any social media platform 1016 00:52:57,805 --> 00:53:01,495 and tell next time when exploring the cloud native landscape on three 1017 00:53:01,945 --> 00:53:02,485 on three. 1018 00:53:02,955 --> 00:53:06,785 1, 2, 3. Don't forget your compass. 1019 00:53:06,785 --> 00:53:07,025 Don't forget 1020 00:53:07,025 --> 00:53:07,440 your compass.

Never lose your place, on any device

Create a free account to sync, back up, and get personal recommendations.