headline. News update. Welcome folks. We have the Dow industrials right now trading up 206. The Nasdaq's down 134. S&P's off one and a half. Gold. Gold contract up $10 trading at $19.47 an ounce. We have silver up 18 cents, $24.91 an ounce. Light suede crude up 212. $98.14 a barrel, notes and bonds. The 10 year down 14 ticks trading 123 the 30 year down 1.6 ticks at $140.32 and $king dollar. $king dollar just gave it up on price folks. This is pretty amazing. It's amazing you know that the golds were going up earlier when $king dollar was up. This might be another failure up here at $king dollar. It's pretty amazing. It's up 47 ticks right now trading 99, 799. Bottom line had broken through to the 100 mark. Couldn't handle it. Euro. Euro is trading out here at 108. You get the yen at 121.37 and the British pound is out here at 130 to 1 US dollar. You know when we take a look at the spy bottom line you got a sideways move, get light volume. This is building bottom line. The B to C of an ABC structure down. That's how we're shaking out right now. You got you're off 17 cents. No big deal. You got a high volume low that's laying out here since Wednesday at high volume low at 106 million shares. Yesterday you go higher with the 78 million shares and guess what today you're going to do. I don't know maybe about 65 million shares. You can't even get to the high of yesterday. So bottom line this is building costs of lower price and the X100 which is the weakest and weaker indices. No doubt about that. Bottom line this can't hit hold price period. Pretty interesting actually and so here check this out folks. This is really cool. So yesterday Wednesday you know you came down there with 90 million right. Yesterday we came down there with let's see try to get to higher price. Yeah try to get to higher price.  We're probably going to do about 65 again. You know so that that's how you can almost tell it. OK. You're building cars and with supports coming in the supports coming in on the what's that the 18th where it had 85 million shares. That that's what's happening here. So it's coming right into it. I suspect you're going to be there a few more days and then guess what. There's those lows again. We're going to take a look at the gold contract. Gold contract finally got some juice underneath it. Price wise we still need more volume. You got a hundred and thirty three thousand contracts. That's not enough contract volume. You're up eight and a half bucks starting to pick its nose up and then good old King dollar. We take a look at King dollar. This one's really intriguing man because the bottom line is that we made it to one hundred point one eight nine and then just gave it up in space. Stay right there folks come right back.


Okay, please introduce yourself and where you're from oh, my name is Brian and I'm from Pasco originally Well share with us your testimony What how your life was before Christ will lead you here and how it is now? Well, my life before Christ was a pretty much like the prodigal son. I grew up, you know My my dad he gave his life to Christ when I was eight It was a big change and he felt a calling and we saw their house We saw a lot of possessions and went to Mexico and started a mission when I saw that every other mission was only supported But whatever my dad made I decided that oh, I got to come back to Washington I got to go to school. I got to finish and I got to support him in any way That's when my life changed. I came back. I started straight away from the right path. I started feeling just the criticism just hate from my peers just randomly I started sheltering myself in drugs and gangs and That's I would talk to my parents every day and I would tell them everything's fine. Everything's okay Because knowing that the monster I became if I went back to that mission I would destroy everything that God has started. So I just masked my emotions.  I met this girl kind of got my life straight and We had a beautiful son. I know you guys probably seen him around little meanie me and It's he's a wonderful boy and it was it was a blessing from God But I never put God first in my life and you got to put God first in your life And it for in order for anything to work. That's what I never did. We were together for six years. Everything was passing We became bitter. We became angry with each other. We just started Hating each other and thinking we're holding each other back from being happy So one point that was just one point the same just got in the way too much and we split and After that, you know, I lost focus. I lost hope that I was gonna see my kid and grow my kid and teach him the right ways till just April 22nd of just a little bit ago.  I realized I still have something to fight for My son is something gonna grow up and he's gonna need somebody to lead him in the right way He's gonna leave some someone to teach him the right way not just hearing stories of what happened this and that He needs to know that the power of God Can change anything? So I ran to my room. I locked it and Locked myself in there and for the first time in years. I cried out to God. I cried out to God from the death of my soul and after so many years that I'd let God Out of my life and just completely out of the picture He looked down on me with mercy and he pulled me from that hole And I knew that moment from that moment on I was a different person. I got up from my knees I walked out to the living room Knowing God had changed my life that moment then on every addiction every feeling of guilt every Everything you name it was gone instantly nothing and the power of God is amazing I'll put your hands together for Jesus Christ So now how'd you come out about this church and we'll let you hear we see you coming a lot Bring a lot of people coming to morning prayers. What led you here? It's a funny story. Well, my friend Marvin and we grew up in high school. I know you guys know Marvin He's really positive person when high school. He used to purchase drugs from yeah He invited me a few times and after seeing them after years and seeing the change and seeing who he was I'm like wow, you know, he's happy. He's just a different person now. I came once But I still wasn't ready until after that commitment. I came back and I was ready.  You were committed. What do you want to do now? Well, not pretty much. I just want to use my story use my past my background just to Reach out to the people that need it reach out to the youth before it's too late Before they go through what I went before they start going to jail and juvie and whatnot I want to reach out to them and show them that there's there's a way out. There's a way out in god Come on put your hands together for Jesus christ. Thank you so much, Brian for your wonderful testimony


Hello friends and welcome back to another episode of our Pokemon VGC 2020 Battle Series. That sounds a little bit better. My name is Lee, also known as Osiris and we are going to continue on with this dual primal team today. We started with it yesterday. If you haven't caught up with that episode and you'd like to see it before coming into today's episode, I'll leave a card up there for you. You can check it out and then come into today's episode and we'll continue with the team. If you want to just stick around and then maybe go back and watch it afterwards. That is fine. Check out yesterday's episode. It was a really nice introduction to dual primals and we had some really nice matches there. The team is always down in the description below. There is a roll paste and a poker paste. If you'd like to just check out the details or even try the team out for yourself, be my guest. And if you do, please make sure to let me know what your thoughts are on the team and how you found it in battle in those matches and things like that. But just to recap, we've got the primal ground on, we've got Tapacoco, it has got the Electrium there. We've got the Kyogre, Stakataka is going to be our primary trick room setter. Why God support? We've got Skill Swap on there, a little bit different. Then the Mega Salamence is our Mega of the team and Incineral there. So we've got dual Z moves at the moment and they're a little bit conflicting. Whether or not a Soulfest would be better on the Incineral, that was something I did think about. But like I said, we will tweak things come the end of the week and make sure that it's really concise and a really nice finished article. So the minute we're just trying ideas out and there's nothing wrong with that when you're starting out with a build, you might look at it, what you've put together and think, it doesn't really make that much sense right now. But you're testing ideas out in the team to see what works. And then you make that collective decision come the end of the week. And that's what we're going to do. We're going to make a collective decision. And obviously remember that your input is so valuable. And I love hearing everyone's opinion. So we might interpret your ideas into the team come the end of the week. So don't be shy about sharing them or just some thoughts about the team in general. But without further ado, we will get into it today as always. If you do enjoy this sort of content, please remember to leave a like on the video. Do subscribe to the channel for more Pokemon content and do some leave your comments down below. Let's hop over to our right screen. Because we're sitting on a 16, 22, not too bad, I guess, into our second week. We'll kick off with Ultra Recon Squad and hopefully it doesn't take too long to find our first opponent of the episode. And like I mentioned in yesterday's episode, I had a little bit of time this evening to record some videos. I've not really been feeling my best today. I've been feeling pretty ill all day. And I'm kind of going into a little bit of a lull now where I'm feeling a little dizzy and a bit, a bit queasy. So bear with me. I will try and get through this. I'll try not to jabber as much as I did in yesterday's episode. Because I'm pretty sure the outcome of that will probably be quite remarkable. I hope it's not. And I hope it's just all in my head though. Oh my God, what am I saying? Why am I saying this? Why am I carrying on talking? But yeah, I do apologize. I'm not really felt great today.  And I'll be all right. So hopefully it'll be good. And it's going to take a little bit longer to find our first opponent than I would have liked. But we'll just keep rolling and we'll see what happens. But Sword and Shield, come on, cutting us off like that. How rude. But we do have a first opponent. We'll come back to Sword and Shield another time. But we'll get into Team Preview. So first opponent today is running another call that we played in yesterday's episode that we haven't seen too much of in the Ultra Series, but it seems to be picking up a little bit of usage, especially on the channel here. So we've got Zernius and Lunala as a restricted call, a supporting cast of Incineroar and Kangascon and then the Amungus and Tabin Finney. Now, the Amungus does throw a bit of a spanner in the works for us for sure. Just because if we set a trick room up, it's going to be awkward to kind of play around it. I do want Incineroar. The fake out is going to be very useful for the Kangascon opposing Incineroar. And obviously does a nice job against the Lunala and the Amungus as long as our sun's up on the field. So I think I will bring Incineroar. I'm going to actually leave Groudon. I'm going to bring Coco and Stacker in the back. I'm going to bring the same four I brought against this similar call yesterday. But the reason I'm bringing Coco in the back is because, well, no, I'm not actually. I'm going to bring Coco up top with Stacks. No, I'm not. I'm going to bring Coco, Incineroar, Groudon and Stacks. That's what we're going with. I was going to say, I don't want to leave Coco because then a terrain I'm going to get overwritten by Tapa Finis, but either terrain is fine because the Amungus can't spores in either respect. And you've got to think the Amungus and this sort of team supports the Zernius more in a redirection sort of mode. That's why if we can get a trick room up and get a stack attacker going with Groudon on the field, then the Amungus kind of becomes a little bit of relevant. We are going to see Kangus Con and Zernius come up for my opponent. We can trade fake outs or we can go for a Z move. We could go for the Z move again. I think I prefer to sit on the Z move right now. We could just go for a ball switch and a fake out into the Zernius. That might be a better idea to do, to be honest. We could Z move it and switch into Groudon. It might not be a bad idea, but we're putting all our eggs in one basket there if we do that and then if the Coco gets faked out and we're in a lot of trouble. I think just ball switching, faking out here isn't the worst decision in the world. And we could see the Kangus Con switch out again for the Incineroar might happen. We're not going to see that though. We're going to see the Kangus Con mega evolve. What does it do? Where do you go? Fake out into Coco. OK, that's fine. Wow, man. Nasty crit. So we'll just trade fake outs here, which is fine. Now, the next turn is where I think we'll probably see the Zernius protect. I would imagine. Which makes me want to ball switch out on the Kangus Con and you turn out on that slot as well. Because I think you either withdraw it or you can only withdraw it. You can't pivot out. Kangus Con doesn't pivot. It's not that good. I'm only messing around, but there's the protect. So we are going to be able to adjust our ball position, which is the thing that we want to do, especially now the Kangus Con has gone off the field. Stack Attacker is a little bit of a better time when it's not threatened by those fighting type attacks. But it's so easy for my opponent just to switch the Incineroar out to Kangus Con again. You've got to that's something you've got to consider. But the whole time when we're doing this, we're putting a lot of pressure on that Zernius, making it not want to go for the GM ANSI as much. So I think that's the one thing that I will do this next turn, even though there is an active fake out on my opponent's side of the field, is probably just go for a trick room and a sword stance with Groudon. Because we'll get one of them off and if we get whichever one we get off is fine because we've got our own fake out support on the back with Incineroar to bring in. You can still have supporters and as long as Groudon's got that sword stance up, it becomes such a huge threat. So we will go for trick room and sword stance. See the fake out there? It's into stacks. So that's fine like I really don't mind that because what my opponent's got to do this next turn is they've got to switch out the Incineroar into Kangus Con and by doing that you're kind of, especially after the sword stance, we're not really giving my opponent much room to get that Kangus Con in, protect his earliest, have that fake out and attack pressure the next turn without the trick room going up. And even if the Kangus Con does switch for the Incineroar, a plus 2 Presbyter's blade should take it down. And if you do make that play as well, you've got to think the trick room is going up. So you're in a horrible position. And with a moongus, yeah, you can bring it in right now, but it's not really causing too much of an issue for me, but with the electric train up, we're not really worried about Spore, which would be the main problem here. We're not even going to see that. We're just going to see a moon blast into stacks. We take it like a true champ. There's the Presbyter's blades. Can we clear the field? Oh, we're going to get rid of the Incineroar and the Zernius. Wow. So Incineroar going down, down, down, down. And there's the trick room. Tasty. And what comes in for my opponent, Kangas Khan and Lunala? I mean, we could just switch out Stack Attacker, to be honest, into Incineroar. And then we pretty much just win, because even if the Lunala's got wide guard, it's not really going to help it too much. We obviously need to, I want to protect Groud on this next turn. And I will switch into Incineroar. I think it just makes a lot more sense. Then we've got the Z move on Incineroar, because we haven't burnt it on the Koko. So like I was saying earlier in the video, having some options on lots of different Pokemon, that doesn't make so much sense. Like the dual Z move on this team doesn't make so much sense. And I don't think we need dual Z move. I think it's conflicting. But this gives us the opportunity to look at the other Z move here, and not utilizing it on Koko. So maybe opens it up to put something else on Koko. Koko put a lot of work in the match already. So without the Z move. We are going to see the Z move from Lunala. Yeah, come out. But I think the next turn, probably all we really need to do is fake out Fire Punch Kang. So integrate on behind the protect. It's not going to be doing too much damage now. Really much at all. And like I say now, the Kangaskans not likely got protect. The Lunalas likely got wide guard. I would say it's probably quite obvious that it... Well, it's not obvious. It's an option that it does carry, and it does make it a lot easier to support against the primals in this format, especially when they rely so heavily on spread attacks. It makes a lot of sense. So I just want to get rid of the Kang, to be honest. That's the main thing right now. And I don't want to press the blades and give my opponent any room. That's why I'm just utilizing the fake out here. Fire Punch, we're not really in any threat of getting killed by anything from Lunala. So that's the reason why and we do see the forfeit there. So that's the second Lunala Zonius team that we've played and the second victory we've got. So it kind of comes across like we've got a decent-ish matchup against that team and we can play around it pretty well.  But it's always nice to get off to a good start again. So that's very good for us, and we'll move on to our next match. And hopefully we can continue on like this because it would be very... Right, so music. The first thing we need to think about, what are we going to go for here? Enter the Ultra Beasts. Let's go for that one. Never really pick it, or I probably do, but never really realize. So we'll pick it here today. And hopefully we can get up to 1700 by the end of the week and I've said it now and I should never say it, but we've said it. So that is the goal by the end of the week. That would be amazing, especially going into next week as well as if we change up the team. But I'm really enjoying this dual primals team so far. It's a lot of fun. We haven't really featured the Kyogre as much as I would have liked to. We did feature it a little bit in yesterday's episode, so hopefully we can maybe see a bit more of it. It feels a bit more like the Groudon Stack Attacker show at the minute. But kind of just proving that that particular portion of the team is just very strong in itself. So pairing it up with the other members can hopefully just improve that matchup. And it's quite nice having both of the Weathers available where most of the season, most players will only play one or the other, so you've only got one. But really having both of the options there, the dual primals, that's the beauty about it. It does give you the option there. One of the things I do think about is maybe, like if you look at the team, Groudon can be a bit of an issue. We've played well, I think, against this particular call. Salamence does all right. We've got wide guard. Kyogre helps, but like I say, if it's a well-played Groudon team, you're not really going to get the best out of the Kyogre at every point. And there's, I think, an argument for Life Orb on Koko with Empower Water in this call. And I'm only saying that because you go back to 2016 when you had Zapdos, and it kind of performed a similar role to what Tab Koko does in this team and it had Empower Water in that dual primal makeup, just for the Groudon. And obviously Zapdos is a little bit different. It is a flying type, so it's not hit by precipice blades. It's a nice switching. But you can get yourselves into those positions where Tab Koko could be there. You've got something out next to it and all you need to do is switch in the Kyogre and then you kind of nuke the Groudon. The other option is go Farium with the Koko within Empower Water. Then you can deal with things like Salamence in Rayquaza and Ultranocrosm as well. And you're not relying then so heavily on the trick room mode of the team. But lots of options there to think about. Like I say, what music did we go for? Enter the Ultra Beast, wasn't it? Which I can't find. There we go. Right, it's going to take probably a little bit longer to find our first opponent. Now I'm just jabbering on, making no sense here. So I'm going to cut it now. We'll come back when we find our first opponent of the episode. First, oh well, second opponent of the episode. And sorry, I'm just texting Tash. She just texted me. So I have to text her back. Otherwise she'll call and then she'd be wondering why I haven't picked up. Anyway, let's get in the team preview. It is the QR code team and it looks like, it looks like Pado's team, doesn't it? From the very first Ultra Series International Championships team made up of Zernius, Rayquaza, Incinero, Amungus, Teppofini and Nilego. Probably looking at Assault Fest, Rayquaza, Z-Move, Nilego, and then the rest of the Pokémon are kind of your standards. Geomancy, Palhub, Zernius, and the Berry on Incinero. Maybe Focus Ash on Amungus, I'm not too sure, and then Berry on Teppofini. Right, what are we going to do here? I mean, Salamence is pretty good for us here, apart from the Nilego. The Nilego causes us lots of issues, honestly. With our speed control, we really want to get trickering up with stacks.  Not massively. Like, I'm kind of tempted to lead. I let the Finny does cause us a lot of issues, especially with Groudon. I'm going to bring Groudon stacks. Let's go Coco and Kyogre. Let's just do that. I have no idea what I'm doing. If it's not obvious already, I'm only joking. I'm not joking, but I don't think I really give myself enough time. This matchup feels hard. I've not really thought it through very well. So, you know when you say that and you're recording, you're like, really, this is like, you've just not, not yourself. Go to bed. Go to bed. But we're going to battle through. We'll get a win. It'll be all right. So we're going to see Incineroar and Rayquaza. Rayquaza does threaten. Pretty much everything we've got out on the field now, because if it is that soft, that's buried, it will have a par. It could have waterfall. It's more likely to have a par. But we need to preserve stacks. Stacks is the big thing we need to preserve. And you know what? I think if we see the Rayquaza Mega Evolve here, that's fine. What do you fake out? I think you fake out the Stack Attacker. Like honestly, you probably fake out stacks. Because I'm kind of tempted, although if you've got Nile League on the back, you probably want to focus down a bit more on Groudon. I'm going to protect Groudon. I'm not really wanting to take any risks here. And just switching Kyoga. Kyoga puts a nice bunch of pressure on the Rayquaza for sure. And I don't think you see a dragon ascend from the Rayquaza into Stack Attacker. Like the attack that you go for here into Stack Attacker is definitely going to be Earth Par. If you go for anything. But I feel like you probably focus down more on the Groudon. And fake out Stack Attacker to stop the potential trick room. There's an argument for both though. You know, doubling into the Stack Attacker makes a lot of sense as well. Because on the next turn you can't get it. There's a fake out into Groudon and Earth Par into Kyoga. So that's fine. Did we just go Precious Blades? Get some damage onto the Incineroar. And got Ice Beam. It's just a bit awkward because the Stack Attacker... Like, I mean you probably Earth Par the Groudon right now. It makes more sense to do that. And you've not really got the switching for it here. So probably Precious Blading and going for an Ice Beam into the Ray is the best thing to do. Yeah Incineroar is going to switch out. I'm going to get a type of Finny coming in. We really need this Delta String to go... Oh it's going Dragon Ascent. Into Kyoga. Huh. We should take this. Especially if it's a saltburst variant yet. I mean it's defense laws then. And it makes it a lot easier for us. I'm not really... I don't really agree with that play too much. I mean weakening the Kyogas like obviously going to be good. But that damage for us is so valuable. The problem is we're probably going to see Skald from the type of Finny now. The one thing we probably want to do is pull a double switch. Get Koko onto the field with Stacks. And I'm going to get Stack Attacker in for Kyoga. I imagine we'll probably see Skald from the Finny into the Groudon slot. And we'll see another Dragon Ascent or an Extreme Speed into the Kyoga. Because you can't afford to leave the Kyoga alone here. I don't think. And if you lose Koko here it's not ideal. But we do get our Groudon back onto the field. And the Finny is not really a threat with that water type attack any longer. Just going to see the Dragon Ascent. Either Togatier will be able to take this pretty comfortably. There it is. Yep. Stacks taking that pretty comfortably there. And the beauty is if Koko survives this it can take down the Ray the next turn. With a Dazzle Gleam. And we can Trick Room as well. So either way to win. It's a win so we'll go for the Dazzle. I think because... How do we Zee move it? Could Zee move just to make sure the Ray goes down? What do we want to Zee move the Finny? What am I going to be worried about? I'm going to Zee move the Rayquaza. And I'm going to Trick Room. Oh the Ray goes out. It won't come in. It won't come in though. That is a question. That's just it all. I don't mind that. Really don't at all. I mean we could have all switched there. It would have given us a bit more momentum going into the next turn. But I mean the fact that... The Ray is out. Kind of supports our ourselves a little bit better. Because when we get Guard on... At least we've got the Switch out. How do we get the Incineroar? We don't actually get it. No. I'm not even making sense here. It would have been better to go for the Finny. Hopefully we don't get burned. That is a trick for you. Okay. And we've got Skill Swap as well. So it makes our matchup like the switching for the Ray a little bit easier I guess. What I'm going to do is switch into Guard on here. And I'm going to go for a Jerobo into Finny. Hopefully we don't see the U-turn on the Incineroar just yet. And we see a fake out rather than anything else. There's a fake out into... Yeah, Guard on. That's perfect for us now. We're in a great position. Yeah. This Gold doesn't happen. So what my opponent is probably going to try and do now. I think is switch the Incineroar out. The worst possible thing to happen here would be a U-turn. But you can't U-turn because we should be slower than the Incineroar. So we should be able to take it down. It's just a case of how fast that Incineroar is. I'm going to Skill Swap the Guard on. And I'm going to go for a Pessimist Blade. They're going for the Hard Switch. So this works out perfectly for us. So the Delta Stream will get set up. And they're trying to catch us with this Gold. But it's not going to happen. Because yeah, the Skill Swap will happen now. We'll give Guard on the Beast Boost. We'll take the Desolate Land. Activate it. Overwrite the Delta Stream. Stop this Gold from happening. Hit the Pessimist Blades. We'll probably proc a Berry on the Finney. Or take it down even better. Get a Beast Boost as well. And here we go. Beast Boosting Guard on. Beautiful. It's going to be a bit tricky the next turn. Because we really want Stacker to... I mean it's not too bad to be honest. Because the Incineroar comes in and it goes for the Fake Out. It probably fakes out Stacker. I would imagine. If you fake out Stacker, you've got to double Stacker with an Earth Power. Because Guard on will take an Earth Power from Rayquaza. And then we've got Kyogre to come in. Or we've got Tabakoko to come in and deal with this Ray anyway. Whatever the problem is. So we'll go for a Pessimist Blades. We'll go for a Gyro Ball into the Ray. Hopefully a Gyro Ball will be enough to take the Ray down. From this range. I'm not so sure. But like I said, I don't mind too much. Because we do have Kyogre to come in. And we've got rid of the big threat to Groudon. The Tabafini. Fake out into Groudon. I'm going to get the Gyro Ball. This takes down the Ray. Where you got? Where'd you go? Okay. It's not too bad. I mean this is the thing. Now we get Kyogre onto the field. And we're not really relying on that. Do we get Kyogre out? I think we get Kyogre out for sure. Yeah. And we kind of bait. Well I'm probably going to protect. Because I don't want to take an extreme speed from the Rayquaza. That's the thing. Because we could. The thing is I should really fire punch the Ray. Switch out Kyogre into Tabakoko. Because I think you have to extreme speed the Kyogre here. If you're a Rayquaza. And I do think Kyogre probably will go. Without an Intimidate it probably will go down from this range. This is a chance it might survive. Instead I'm going to switch out. I'm going to say yeah Zern come in now. So my opponent is trying to set up that end board position. With the Incineroar, Fakeout and then the Zernius. But whatever happens. As long as we can get a soul stance off with Groudon. I think we'll be okay. There's the extreme speed here by punching. That probably would have taken Kyogre down. So we're probably better off doing what we've just done. And having a bit more flexibility. We do get the Beast boost. It's going to be negated by the Intimidate coming in from this Incineroar. But we're still neutral at the minute. Which is fine. And do we have that? Do we have a Z? I don't think we do. Do we? No, because we used it into Incineroar. But I'm going to try and soul stance here. Do I fall switch? I'm going to fall switch out into the Zernius. Just to get some damage off onto it. I think you fake out the Groudon. Yeah. Great.  Yeah, we'll get. We'll see the Geomancy here for sure. But it's whether or not Groudon can take two... It can take two dozen gleams. I don't think it will take two moonblasts. That's the problem. But if we... Yeah, if we scald... Yeah, I think we just scald the Incineroar now. Because if we get the Presbyts Blades on a single target Zernius, that could be enough for us. And I think you really have to go for the moonblast into Groudon. If you go Dazzle... I'm not sure Dazzle and a moonblast will take us down from this range. I'm not too sure. It's probably better for my opponent to go Dazzle. Yeah. But our Presbyts Blades should hit. Ah, we probably do go down to a moonblast to be honest. We do hit. We should take down the Incineroar. We should do enough to the Zernius. Yeah. It's going to be really close. I don't think you can Dazzle Groudon next turn. I think you have to moonblast it. And we could use that. How do we thunder? I don't know. I don't... I think you... Like I... Personally, I think you have to Dazzle... You have to moonblast Groudon here to get it.  Which makes me want to go protect Groudon and go Thunder. But if we do this, we could easily miss. And my opponent could just Dazzle here anyway. And then Groudon go down to moonblast the next turn. Yeah. So they're going to do that. So I mean that's fair enough. Now they just moonblast. So we would have been better there going for the Presbyts Blades. But like the logical thing to do I think... I don't regret what we did. Because I think the smarter move there for my opponent would have been to moonblast Groudon. You're not threatened by the Corkwood anyway. And I don't think you'd go down to a Thunder... Or a Thunderbolt. But if you Dazzle... Yeah you moonblast now. Do we take it? I doubt it. Now we would have been better going for a Fire Punch. So close! But so far. Very good game to my opponent. And we were so close there. There was logic behind why I did it. Hopefully you guys can see that. But 50-50 at the end there. And I think we did alright other than that. So we're going to end it there. It's been a lot of fun again. And we'll come back tomorrow with more dual-primal action guys. So thank you so much for tuning in. As always if you do enjoy the content. Do remember to drop a like on the video. And have a great day whatever you're up to. And I'll catch up with you all very soon. Hopefully not too ill in the next couple of days. So until then guys. Take care and bye-bye!


The signal oil program The whistler that whistle is your signal for the signal oil program The whistler and the whistler and I know many things for I walk by night I know many strange tales hidden in the hearts of men and women who have stepped into the shadows Yes, I know the nameless terrors of which they dare not speak Yes friends, it's time for the signal oil program the whistler Rated tops in popularity for a longer period of time than any other West Coast program in radio history and Signal gasoline is tops to tops in quality It takes extra quality, you know to give you extra mileage and signal is the famous go farther gasoline So look for the signal circle sign in yellow and black that identifies friendly dealer-owned signal stations from Canada to Mexico and Now the whistler strange story Stranger in the house Helen decided she might as well be honest with herself the suspense was getting her down But if she didn't find out one way or the other pretty soon something was going to snap It had been over six years since her foster brother Ted had left for the Orient on that government mission And he was still out there somewhere between Manila and Shanghai a live or dead It was a terrible thing to admit even to herself But she was even wishing now for any kind of message even one stating Ted was dead at least it would end the waiting at least it would be better than not knowing at all George, please I don't want to talk about it anymore Ted's been on my mind for so long now that I wish I could forget about him for a while I'm rather surprised to hear you say that I know it sounds terrible, but George, it's been six almost seven years of waiting and not knowing yes I know I can't stand it much longer George after all. He's my foster brother. Don't you understand all these years of silence? They'd only tell us something you must realize there are a lot of women like you dear It's just one of the terrible things about the aftermath of war that's all that's just wait then Let's not talk about him anymore I'm your lawyer Helen. There are some things we've got to talk about Go on George Well, it's been almost seven years now if we haven't heard from Ted in another four months He'll be declared legally dead. What does that mean? There's a clause in your foster father's will Helen When Ted dies the entire estate goes over to you why must you always throw that will in my face George Why must it always come around the money money money every time we talk about Ted. It's the same thing I don't care about the money all I care about is having him back alive and well Now please go George. It doesn't have to be settled till September. Let's not talk about it till then All right Helen George Yeah, I'm sorry. I blew up. I I Guess I'm just not myself. Sure Helen. I understand Yes, Helen the suspense is beginning to tell on you isn't it almost seven years of it Just a few letters from Ted early in 1941 telling you of his arrival in Manila then silence No way you could get in touch with him. Nothing you could do but wait and you're still waiting Rushing out to meet the postman hoping each day will be the big one George is more tactful now about the will. He doesn't mention it anymore and you're very grateful And then at long last the suspense has ended. It's not the postman. It's Rhoda. You're made walking into your bedroom one morning with a cable grab When did it come Rhoda? Just this minute a messenger brought to the door arriving June 4th Seattle steamer president Jefferson love Ted Oh Oh miss Helen mr. Ted coming home at last. Yes Yes At last Oh, I beg your pardon sure. Oh sure. Yes miss. I'm looking for mr. Ted Van Norton. Where is his cabin? Please just a minute, please? Van Norton state room 3c third-deck. Thank you Oh Sorry, I must have the wrong state room. I'm looking for my brother Ted Van Norton. Oh, what's the matter Helen? Don't you recognize me? What? Who are you? Well, this isn't much of a homecoming after six years Maybe I better introduce myself. The name is Theodore Van Norton. Oh, there there must be some mistake Helen darling, you're joking Who are you? I've already told you I'm your foster brother Ted Van Norton. You're not Ted you're You're an imposter With the prologue of stranger in the house the signal oil company is bringing you another strange story by the Whistler But now important news for drivers the amazing new type tire by Lee of conch oh, Hocken Which is being announced this month in the Saturday evening post is already at your signal dealers I'm referring to the new eight-rib super deluxe Lee tire not just a new model mind you but a completely new tire You can see that the handsome eight-rib tread is wider and flatter and there's more rubber in it But not until you drive on these new type tires Can you appreciate their easier turning and steering and the way they absorb road shocks sparing you fatigue and Sparing your car unnecessary wear in addition quicker stopping and greater protection against skidding are assured by the 16 cleaning edges on Lee's broad flat tread and when it comes to wear these new Lee super deluxe tires are setting records so amazing They're almost unbelievable Yet all this extra quality is yours at no extra cost In fact right now as their summer driving special signal dealers are offering extra generous Cradians on old tires plus liberal credit terms So before you buy any tire see your signal dealer Find out how little it will cost you to enjoy real safety and comfort this summer with new eight-rib Lee super deluxe tires And now back to the Whistler Well Helen all you can do is stand there in the stateroom and stare at them The effrontery of this stranger trying to pass himself off as your foster brother leaves you at a loss for something to say True he does resemble Ted. He's tall the same bill the same athletic poise the same general features But the expression it's not quite Ted's is it? That's funny isn't it Helen?  If this is some crude attempted humor, I don't all I'm quite serious Where's Ted? Oh dear have to be that way. I explained one don't lie to me. Where is he? Excuse me a moment. Oh Stuart yes, mr. Van Orton, would you take care of my hand baggage, please? Yes, sir right away. Thanks Come on Helen. Let's get down to the dock. I'll call the person wait a minute now look See passport with fingerprints and photograph birth certificates state department credentials letters from your forgery. I'm sorry. They're genuine You you're not going home with me. I won't stand for it Very well, darling I'll check in at a hotel for the time being But after all you can't keep a guy out of his own home. Can you? George, I've never been so stunned in my life. He just stood there smiling at me saying over and over that he was ten Oh, wait a minute. You say he had identification everything even letters from me I wrote them when Ted first arrived in Manila. Were they genuine? Oh, I think so You're my lawyer do something. He'd know better than try to get by with forgery Helen you're you're sure you're right George. You don't think I know my own brother, but it's been close to seven years He's probably been in prison camp That can make a lot of difference in a man's appearance, but it's not entirely a matter of appearance It's the way he walks his voice his mannerisms besides Ted's dead. What something terrible happened I'm sure of it. This man might have killed him. Yes, that's it So he could get his hands on Ted's money. That's a pretty serious charge Helen You've got to be sure of yourself You're the only one in Seattle who can recognize him. Remember, he's been gone for seven years Do you have any pictures? No, I thought of that. No No, there weren't any not since he was a little boy spent most of his time in the east with Aunt Ida. Where is she?  Yes You know, of course that if he can prove his identity he has a legal right to live here in this house I tell you he's a flagulent imposter. He's not coming here if I have to hire somebody to throw him out It's Rhoda miss. Oh, what time is it? After eight.  I'm sleepy. I must see you miss All right Rhoda come in Now what is it? It's it's that man. Mr. Van Alton. What? Where is he? He's in the guest bathroom miss. Shaving Well good morning. What do you think you're doing? Shaving morning ablutions Can't say I'm used to having ladies barge into the bathroom. Get out of here! How did you get in? Well, I couldn't get a room at a hotel. I took a taxi up last night Walked in the back door. It was open. You see you can leave the same way you came in No, I'm I'm here to stay sister dear I've got the proof in my pocket and if you want to get me out You can trot right down to the Hall of Justice and get yourself a court order Have some more coffee Helen. No, thanks.  Hmm. Should I be aren't you afraid they'll fail to recognize you? Don't be silly none of them were here when I left Edward the butler was last to go I think oh by the way Helen whatever became of old Edward There are other people in town of course What about your teachers at Washington Heights school? Why Helen I Believe you're trying to trick me. You know father sent me to Fox Hall Academy when I was 14 I never went to Washington Heights. Oh, where you going? You seem to know everything. Why don't you tell me that Helen? We have some talking to do darling about the will Father's estate left all of it to me, you know Seems to me the executor owes me close to a million dollars You knew it was coming didn't you Helen? That's the purpose behind this whole crazy business It's still inconceivable to you that the man can actually expect to get away with it George was right. There are a thousand ways you can check up on him and the imposter himself just gave you an excellent one You make a long-distance call to the Fox Hall Academy and talk to mr. Rigby the headmaster. Why yes, of course Miss Van Norton, I'd be delighted to come down tomorrow afternoon Ted was always one of my favorite, you know any special time. What about two o'clock fine fine It'll be quite a reunion, won't it? Yes indeed. Mr. Rigby quite a reunion Mr. Rigby, this is George Chadwick my lawyer. How do you do? Would you like to wait in the living room mr. Rigby? I think Ted's out on the tennis court. We'll call him. Thanks. Come on George. Excuse us mr. Rigby. Of course You still think I don't know my brother now. I never said that Helen I only said seven years can make a lot of difference you yourself said his general features I'm afraid mr. What's his name going to suffer a little embarrassment. You think Rigby will recognize him? He'll recognize him as an imposter if that's what you mean. He knows Ted as well as I do What's the matter? I don't know. I had those documents checked the hospital records in Manila He was a patient there for a while.  What's up? I was sorry to interrupt your tennis game Ted.   Wouldn't I? Come on dear where to just to the living room. You can go back to your tennis in a moment Oh, there you are George. Hello Ted. Hello George. What's going on around here? We're going into the living room George. Perhaps you'd like to join us. Yes, of course Well open the door George. Oh Say what's this all about I did Rigby Ted Teddy old boy. How have you been?  What is this? Hell in a surprise? Why don't they tip a guy off on his old headmaster comes to see you? You're looking fine, Teddy? Yeah, good Lord. It's been a long time last time. I saw you was after the Washburn game remember watch Yeah, I spoke. I think he was there too. Say do you remember the bus broke down that night outside of Wenatchee you and I You stand there stunned Speechless just staring at them as they slap each other in the back forgetting all about you and George avoids looking at you. He's on their side now. You're sure of it and Worst of all, it's beginning to get you to He's not Ted your foster brother. You know what your positive It's ridiculous to go through all this rigmarole, but it seems to be your word against his proof But there are still other ways aren't there? Like another long-distance call this time to the State Department in Washington, DC After being transferred to four or five different offices. You'll finally get through to the right man It's most important that you check this matter thoroughly. I'm positive that the man representing himself as my foster brother is an imposter Here in 1938. Yes, I saw him attaches photograph and fix his fingerprints I simply want to see that application Quite satisfactory, thank you I see You say the fire was forwarded here from Washington. That's right. I simply want to examine it particularly the photograph Excuse me a moment miss Van Norton. I'll have to look it up Well George well, what I can't say that I'm pleased with your lack of faith in me No, who said anything about that it's clear enough look I'm a lawyer. I'll believe black as white if they throw enough evidence at me Mr. Rigby was a very convincing witness.  He'd forgotten what Ted looks like I don't know you might be arguing against yourself. What do you mean? You haven't seen Ted in almost seven years Here we are Theodore H. Van Norton and now what did you wish to see here? Let me see it Medical examination education record application. Where's the picture on the other side? Oh here Satisfied Helen it it can't be I Saw Ted paste the picture on himself. There's something wrong. Of course. There's something wrong. This isn't Ted's picture. It's It's that man Helen get hold of yourself here. Let me see Yes, here they are fingerprints now listen listen look I want this whole record sent to the office of the Federal Bureau of Investigation Helen you've got to have a rest this thing is getting That's one thing can't be forged. Don't you see they can't forge his fingerprints. I'm sorry miss Van Norton But I have no thought you got to I tell you there's a stranger in my house. He's posing as my foster brother There's a million dollars involved just a minute Helen, please It's a it's most important mr. Robbins not only because of the money involved miss Van Norton is Extremely upset of course mr. Chadwick, but you see I can't simply turn over material like this I'll make the necessary arrangements with the FBI mr. Robbins and get your authority from Washington Will that be satisfactory quite mr. Chadwick quite Ted well Helen I began to wonder where you were all afternoon. Oh Downtown shopping stores are frightful these days indeed.  Oh Haven't checked him today. It's funny.  I Guess a guy gets a little serious after all those years overseas Prison camp hospital. Yes, I Suppose so You're looking calmer today Finally decided on the real thing. I I want you to forgive me Ted. It's So unbelievable that I I don't quite trust my senses anymore sure you're a good kid Helen I don't blame you will you drink on it? Why not? Well, it be bourbon and soda.  I thought you'd be a tough enough to crack. Oh You expected me to be suspicious left of that episode on the boat. I expected anything. Oh Here you are thanks when we drink to to us, of course all right To us. Yes, ma'am. You're in charge of the fingerprinting department here. Yes I'm Helen Van Northen. I brought in a highball glass yesterday afternoon with some fingerprints. Oh, yes Yes, that's the one you wanted us to check against the prints on the State Department application file. That's right Where did you get that glass a man is posing as my brother staying At my house they're his fingerprints. You're sure of the prints on the application What do you mean? Are you sure they're the bona fide prints of your brother? Of course, I was with him in Washington when he completed the application in 1938 I saw him put the prints on it. I see Well, that ought to settle it once and for all. What do you mean?  Hi Well It can't be It can't we wouldn't commit ourselves if we weren't positive. Hi I see of course Thank you Well Helen that settles it doesn't it you're beaten and you know it and worst of all you're not at all sure of yourself anymore Yes, that's the unbearable part not knowing in your mind whether you're right or wrong But you still have one more out just one It's a long chance, but you've decided you have to take it to decide once and for all Whether or not this man Ted is your foster brother Whether you can trust your own mind It's very late that night when you get quietly out of bed and walk downstairs to the telephone The house is as quiet as a tomb Everyone's asleep. I want to call Shanghai operator. Mr. C Julian to eight perlang drive Shanghai Yes Yes, always this mr. Julian. I last talked to you in April 1941 the name I gave you was Grayson. Do you remember that? Do you remember me? Do you know what became of him? Your your positive. Thank you, Mr. Julian. Thank you very much The whistler will return in just a moment with a strange ending to tonight's story Meantime a word of wisdom to mr. Average driver you spend well over a hundred dollars a year for gasoline. That's a lot of money You'd like to be sure it's buying the gasoline that stops in quality the gasoline that gives you top performance from your car Well, you can be sure if you'll just keep two points in mind when you buy gasoline One it takes extra quality to go farther and to signal is the famous go farther gasoline After all the only way any gasoline can put more thrilling performance into your car is by helping your motor run more efficiently and When your motor runs more efficiently naturally you get better mileage So there you have it in a nutshell the reason why signals good mileage is so important to you and The reason signal says to be sure of the tops in gasoline quality. There are just two things to remember one it takes extra quality to go farther and to Signal is the famous go farther gasoline And now back to the whistler It was a relief to know wasn't it Helen you can trust your own senses now Ted is dead Mr. Julian just told you so and the stranger in the house is an imposter Somehow some way you can prove it But right now you don't want to think about it anymore. It's been too bewildering All you want now is your bed and the first good night sleep in a week You put down the phone and start toward the stairs sit down Helen How long have you been here long enough? I said sit down. I'm going up sit down before you fall down That's it You just hung yourself, baby There's a record of that phone conversation down at FBI headquarters. What are you talking about? You didn't have Shanghai in case you're wondering you were talking to the boys down at the office not mr. Julian We had everything you see except the link you just gave us We knew mr. Julian paid $10,000 part of the money you sent him one of his boys in Manila The boy who killed your foster brother Ted, but I was the only one who knew I Was detained over there in a prison camp like I said It was a long wait I knew Ted had a foster sister and I knew there was close to a million bucks in it somewhere But all I had was a suspicion What about Julian the authorities in Shanghai have him? Well, I guess there's nothing much I can do Tough isn't it? It could have been a nice kid You weren't a killer at heart. You shouldn't have picked out someone in the state department No, it took us a long time to work it out a lot of names a lot of people We even drew on the services of mr. Rigby When we got going we knew you'd crack sooner or later Who are you? This time baby. I'm telling you the truth. I Was your brother's best friend? My name is McKay Well, incidentally, I'm with the FBI Let that whistle be your signal for the signal oil program the whistler Each Wednesday night at this same time brought to you by the signal oil company marketers of signal gasoline and motor oil and fine quality automotive accessories Signal has asked me to remind you to get the most driving pleasure drive its sensible speeds be courteous and obey traffic regulations It may save a life Possibly your own Featured in tonight's story where Virginia Greg and Gerald Moore The whistler was produced and directed by George W. Allen with story by Harold Swanton and Mark Smith and Music by Wilbur hatch and was transmitted to our troops overseas by the armed forces radio service Next Wednesday for a full hour of mystery over most of these stations tune in a half hour earlier Enjoy the same as well as the whistler Marvin Miller speaking This is CBS where 99 million people gather every week the Columbia broadcasting system


Hi everybody, welcome to the SIG multi-cluster intro and deep dive. My name is Laura Lorenz. I am a software engineer at Google working on GKE. I'm Paul Maury. I'm a software engineer at Apple. And I'm Jeremy, I'm Sid Thompson, and I also work on GKE at Google. Welcome everybody. Today we're going to cover what the SIG is about. We're going to look at current activity like the deprecation of QVED, cluster set and namespace sameness, the about API, multi-cluster services, and staple set slices. We're also going to see a deep dive and demo on the about API and multi-cluster services API in action using the AWS cloud map implementation. And finally we're going to talk about how to contribute and get involved. Let's talk about what the SIG is about. There are a number of problems for which there's a question of what should the Kubernetes native solution be for them, like exposing workloads in different clusters to one another, sharing cluster metadata, and a cluster's place within a fleet with its users. And how do we generally break down the walls between clusters? This work touches a number of different functional areas and we're still working to identify the best, most durable primitives. And that is a good opportunity for you in the sense that we need your input. Your real user stories and use cases are extremely valuable for us to know about. Please tell us what you're working on. We're going to talk about how you can get involved later in this presentation. Let's talk about the approach that we want to take as a SIG. We really want to avoid premature standardization. We want to focus on APIs and leave room for multiple implementations of the same APIs. We also want to avoid solving any optional problems and be laser focused on keeping multi-cluster consistent with the single cluster experience within Kubernetes. And we want to work backwards from very specific problems into bigger things where that is applicable rather than starting with big ideas that don't have a specific focus. With that in mind, let's talk about the current activity within the SIG. First, we wanted to communicate to you all today that we've arrived at a decision to archive the CubeFed project, which you've probably heard about from previous intro and deep dive sessions. There are a lot of great learnings that came out of this project, but it's no longer under active development. Fortunately, archival does not mean deletion. You will still be able to access the CubeFed code. You'll be able to fork it and change it as you please, similar to how you can change and fork and work with any code in the Kubernetes project. And finally, we wanted to say thank you to everyone who contributed to the CubeFed and Federation projects. Thank you. All right. I want to talk a little bit about cluster set, which is a word that we use a lot in SIG multi-cluster and has been talked about some in our previous intros and deep dives, but to reiterate this very core concept. This represents a pattern of use that we've seen from the field where folks who are using multi-cluster deployments have a group of clusters that are governed by a single authority, have a high degree of trust within the set. And importantly to note for this concept of cluster set is that they abide by this concept of namespace sameness. So there's a link here for some more details on namespace sameness, but in short, it's that permissions and characteristics are consistent across clusters for a given namespace. So it's not that the namespace has to exist in every cluster that's in the cluster set, but it's that they should behave the same across those in which they do. And this concept of a cluster sets membership is something that is stored in this cluster property called cluster set.kates.io, which I'm going to talk about on the next slide actually. So for this cluster set membership concept and other cluster metadata that is important to multi-cluster problems and also just generally across the Kubernetes ecosystem. So one of the projects of SIG multi-cluster is the about API. So there's a cap 2149 linked here. You can also go to SIGs.kates.io slash about API for the code. But in general, this is a cluster scoped cluster property CRD. So it's a CRD called cluster property that stores a name and a value. It's very simple in terms of schema, but the point is to make a dedicated place for folks to store about the cluster. So as described in a lot of detail in that cap, this is used to uniquely identify clusters using this yellow background format on the right. Also to identify their membership in a cluster set using this form that you see in the blue bubble on the right for the lifetime of their membership in that cluster set. And overall, this is a reference point for multi-cluster tooling to build on within a cluster set. So for valid DNS labels or to help with logging and tracing. And then in general, this is now a well known place to store these and also any other cluster properties that you might need that might otherwise have been implemented as ad hoc annotations on semantically adjacent objects. So we have an example over here of this green bubble where there's plenty of room in this about API for your cool implementation of anything to reserve a name and be able to store some value that is cluster metadata that you need. Let's talk about multi-cluster services or MCS. So we've developed an API, you can find it at sigs.kates.io slash MCS API to help spread services across clusters. When I think about multi-cluster, the first thing that comes to mind is services. They are core building block. I think about how can I consume services from another cluster? How can I move services between cluster? How can I separate my producers and my consumers so that they don't necessarily have to care about where my service lives? And MCS is our solution here. MCS allows a single service to span and or be consumed by multiple clusters easily without having to think about where the service actually is without producers having to think necessarily about who and where the consumers are and vice versa. We focused only on the API and common behavior. Our approach, as we talked about earlier, is to focus only on the problems that really need to be solved and to leave room for implementations. That's what we've done with the MCS API. We define the service export, which is a resource that lets you export a service. And that leads to the creation via your various implementation to import a service via a service import that is created in receiving clusters. And that's it. We left all the room for implementations that we could. And this has been really great. So far, we've seen a few pop up. We've got Submariner, GKE has one, the SEO service mesh has one as well. And there's a new implementation for AWS. Consumers only ever have to rely on local data, just like when you consume a traditional in cluster service. And this means that, you know, implementations are free to have distributed control planes, centralized control planes, whatever is needed. You know, we recognize that in various different platforms, if it's on-prem, if it's in the cloud, if it's whatever it may be, you know, you have different needs. And the best way to get endpoints between clusters and exposure service might be different. So we wanted to leave as much room as possible for implementations to decide what's best. And the most important thing with MCS is that your cluster IP and headland services just work across clusters like they do in a single cluster. It's the same experience you're used to. It uses the same, you know, cube proxy networking components. It's exactly like consuming a service within your cluster, except the endpoints can be somewhere else and you just don't have to care. The next project we want to talk about is stateful set slices. This is brand new, but really, really exciting. And what this aims to solve is spreading a stateful set across clusters, specifically in the service of migrating stateful sets. So, you know, MCS has solved some problems in this space. You know, you can spread a service across clusters. But when you get to stateful, things get a lot more difficult. And that's the problem that we're solving here. So with stateful set slices, you'll be able to have an implementation that moves one by one your replicas from, you know, cluster A to cluster B without downtime. Again, kind of following the patterns that you're used to in a single cluster. This is this is really exciting fresh work. And we recommend that you check out the talk from our friends, Peter and Matt, which was a couple days ago. So hopefully the recording has been posted now. Please check it out. This is exciting new work. And we're very happy to see where it goes. We have a lot more going on. We are still working on adding more sophistication to multi cluster networking in partnership with say networking they were looking at network policy multi network support. How do these things fit in the multi cluster world. We're investigating what it means to build a multi cluster controller potentially distributed around the world with things like multi cluster leader election. So we're trying to figure out what what the reference implementation should look like or what APIs are really needed to support a, you know, scalable, basic standard multi cluster controller experience. That's something we progress now. And we've got the work API, a newer project that's focused on figuring out how to get groups of resources into different clusters. So if you're coming up with new ideas, if you have new ideas, please come talk to us if you have problems, you know, we want to hear about them. This is the direction that the city is heading right now. All right, now I want to take us into a demo. I want to showcase those that about API and MCS API that was just talked about in action and I'm going to use the AWS implementation of the MCS controller. It's built on top of AWS cloud map. And I want to do a shout out to Akash and Dustin, GitHub handles run Akash and a static void for all of their work on this and also helping me out with this demo. So I'm just the messenger they did all the great work. So I'm going to show you right now a demo using the AWS cloud map MCS controller for Kubernetes. So this is available on GitHub here. And there's read me here with a lot of directions. There's also a blog on the AWS site about how to go through the installation as well. But I'm going to show you everything kind of after everything is set up and how it interacts with both the about API and of course the MCS API. So coming over here, I have these two terminals to kind of showcase that I have two EKS clusters running right now, I guess my red and my blue cluster or my dev one and my dev two cluster. And what I want to highlight first is that both of these clusters have the about API CRD installed. So let me actually show you the CRD that are installed. You'll see that it has this cluster properties at about kates.io. This is the about API. And it also has the MCS API in the form of the service exports and the service imports and same thing on my other cluster. So the first thing I did to set up here was actually to set in both my dev one cluster and my dev two cluster, their cluster names using the about API so I named my dev one cluster mega cool cluster. And I named my dev two cluster unbelievably cool cluster. This is going to show up later when I show you headless services. So overall, just as an example, this is what those CRDs look like. So again, using the about API, they're of type cluster property. And we have one that has this well known name cluster cluster set dot kates.io. This is the name of the cluster for my dev one cluster is called mega cool cluster. And then about kates.io for sorry, cluster set dot kates.io is the name of the cluster set and I've set that to make a cool cluster set in actually both cases if you are interested. So we've got unbelievably cool cluster over here but still mega cool cluster set. So get out of both of these real quick. All right, so I've already preset up my dev one cluster to have some services running. So I have two examples here one is the one from the AWS cloud map blogs example so this is a cluster IP type service. That's backed by three engine x pods. And then here I have another service called where am I this is a headless service that is backed by three pods running this where am I deployment. So right now I don't have any service exports running in here so I'm going to actually create them. So first off, no service exports right now in my example space, but I can go ahead and create them. Applying from this exports.yml file that I have. So this is creating a service export where for the where am I service and a service export for the my service service. Let me just show you this really quick here. So this is what service exports look like for those who are unfamiliar, very simple. They're just the namespace and the name of the service that should be exported from this cluster. So it basically acts as a flag to say yes, the service should be exported into other clusters of the cluster set. So we can actually go head over to cluster to here and take a look at the service imports as they're being created. So right now I'm grabbing the service import specifically for the my service named service, which again is the cluster set IP service. So here's what this looks like on this side. Importantly here you can see it knows its name and its namespace. It also has some other properties of the underlying service forwarded over here to my dev2 cluster such as the cluster set IP, the port, the protocol, and again what type it is. And it also has some metadata about the cluster that this service is backed by. So the actual pods are in mega cool cluster, right? That was the name of my red cluster whereas my blue cluster was unbelievably cool cluster. So that's also included here in the service export and we can fully experience it all by I'm going to drop myself into a busy box that I've already got running here on my dev2 cluster. And I can go dig for the A records for this cluster set.local DNS, right? MyServiceExample.svc, this ending zone here cluster set.local means that I want to query for the multi cluster service and you'll see that it responds with this IP. And actually we can scroll up a little bit and see this IP and the service import for the cluster set IP service 10, 100, 112, 152, 10, 100, 112, 152. So that's the case for the cluster set IP type service. So I want to showcase something over here about the headless services. So if I start actually inside a busy box I have running in my dev1 cluster. I just want to showcase to you that this is a cluster local service here of course. So it has these three replicas behind the headless service. And if for example I curl this you'll see that I get this output here that indicates a couple things. But one nice cute thing is this pod name emoji so I can recognize it as different from for example this IP responding, this pod IP responding. So I want to showcase that that's what's going on over here again with the cluster.local DNS zone just regularly in my dev1 cluster. Now if I go over to my dev2 cluster I can take a look at the service imports again this time for my where am I service. And again it has the name, the namespace and it has some metadata about this service including that it is of type cluster.  And this is all important because if I again exec into my busy box I have running over here. If I do a dig for the A records for again the cluster set.local zone you'll see that I get all of these endpoints back again. These are the backends that are running in this red cluster up here in my mega cool cluster up here. So I can also grab the serve records and this is going to showcase that each of these also has a pod DNS that is disambiguating based on the cluster ID. So this cluster ID again got pulled from the about API that was set against the cluster dev1 I called it mega cool cluster. The service was exported from here imported into my second cluster here. And then now it has these DNS names that target the pod DNS individually for each of these backends back in the mega cool cluster by their IP and their clusters name. So we can again use this if we want to do a little curl in here and we can get our you know our cowboy back or we can do this one and we can get our flag back. So we can target each of these pods individually with our pod DNS. So all of this again is back here again it's AWS cloud map MCS controller for Kate's and the thing that it's built on top of is this AWS cloud map product in AWS. So we can actually kind of see in here the actual cloud map services that are created for the namespace my service and where am I for example for where am I have these three service instances in here. For my my service I have a entry in here as well. Thanks again to everybody who has been working on the AWS cloud map MCS controller for Kubernetes really excited to be able to demo the hot new 0.3.0 version for everyone today. As we said earlier we really need your input to know what the right things to be spending time on are. You can check out our homepage slack channel and mailing list that are linked below. Please join us for our bio weekly meetings which are on Tuesdays 1230 Eastern 930 Pacific. Time those are US time zones. If you'd like to bring something to the SIG please feel free to throw it on to the agenda it's world writable so you can just go in there and make some edits and we'll see you I hope at one of those meetings. All right thank you so much for joining us for the SIG multi cluster intro and deep dive we're going to see you at the Q&A now but hopefully you had a great time at cube con and we look forward to seeing you at the SIG. Thank you everybody have a great cube con. Thank you very much and hopefully we see you at the bi weekly meetings.


Okay. I think we can start. Hi, everyone. My name is Sonny, and today I'll be talking about web sockets and scalability challenges related to them. Let me start with an image from an incident we had some time ago. Yeah. It was a long Friday. We had to stay until 2 a.m., but we eventually fixed the issue. The alternative would have been to quit our jobs and move to another city. We didn't do that, fortunately. And we had a lot of learnings in this incident, but most importantly, it was a wake-up call for us that we need to improve the scalability of our system and the reliability. You might be wondering what's happening here, but before I go into more details, let me say a couple of words about myself. So I'm Sadi. I'm a software engineer and consultant at Netlite. Netlite is a tech consulting company based in Europe. I focus mostly on cloud engineering, cloud architecture, site reliability engineering, and more recently, I've also gotten interested in developer experience topics. In my free time, I enjoy basketball, photography, and usually Fridays without page duty calls. In this talk, I'll be talking about electric vehicle charging. Just to set some context, some basics. Then I will jump into web sockets and scalability challenges and actual concrete problems that we faced in our platform. And finally, our approach and how we addressed these challenges. So let's start with the first one, some context about EV charging. Let's do a quick show of hands. How many of you have driven an electric car already? That's quite a lot, more than half. That's nice. Then maybe you are already familiar with some of the frustrations with charging electric cars. Let's take a look at what that looks like. The EV driver would plug in their car into a charging station. The charging station is connected to the electrical grid, but also it has an internet connection via mobile carrier. It uses this internet connection to communicate to a system which is called a charging point operator. It communicates via OCP messages. It's just a protocol that standardizes how the messages should look like and the flow should look like. It's an open standard and it makes it possible to operate stations from different vendors. The charging point operator is a system that companies that are interested in offering EV charging solutions would build. In the last couple of years, I've been leading a platform team in one of our largest EV charging clients. In this team, the goal is to provide an easy to use, reliable interface to the charging stations. We don't have any user-facing products ourselves, but we rather offer this platform and the other teams build actual business products. We offer features like station management, session handling, authorization, remote start and stop for controlling your charging experience via a mobile phone for example, firmware updates and management, and so on. This is what the baseline architecture looks like. On the left-hand side, we have the platform services. Here we have a component we just called the WebSocket Gateway. It's the entry point for stations to connect to our system. It's limited in scope. It just basically maintains this WebSocket connection, does some parsing, some rate limiting, but that's about it. Then we have the station management service where most of the business logic is implemented, the OCPP stuff, session handling and most of the business logic of our platform. Then on the right, we have a few more services which are isolated in scope like the firmware service, history for time series data and analytics, diagnostics and so on. All of this is exposed by an API to the product teams, either B2C or B2B. They can use that to build stuff like home charging for people who buy a charging station and install it in their homes. Dealer charging for companies that provide charging at their facilities and a lot of other products as well. Now let me do a quick primer about WebSocket so even if you haven't used them before, you can still follow the rest of the talk. WebSocket is basically a protocol that enables low latency bi-directional communication between a client and a server. In our case, the clients are the charging stations and the servers, the WebSocket component that we saw earlier. Basically it provides a persistent connection over a single TCP, a persistent channel over a single TCP connection. Comparing it to HTTP, the benefit here is that the client doesn't have to re-establish a new TCP connection every time that they want to send a message. This connection can be reused and you can get rid of a lot of the overheads. Of course, it has a price. This price is that the server now has to maintain this state of the connection. The connection is long-lived and it's stateful in nature. You can read more about it. I left a link there. But basically that's more or less. It has use cases in a lot of applications that need some real-time communication, like for example, multiplayer games, collaborative editing, chats, stock tickers, and so on. That brings us to the trouble with scaling out WebSockets. We'll explore a little bit why is it different comparing it to an HTTP web server, what's exactly the challenge. First off, let's start with load balancing and horizontal auto-scaling. Consider here the situation on the left. We have a network load balancer with a standard brown-robin strategy. Let's say that WebSocket Gateway has four pods. It's a horizontally-scaled application. This would be an equilibrium state. Each of the pods is maintaining 8,000 stations basically, and everything is in equilibrium. But if there is a restart in one of the pods for whatever reason, or even if the HPA decides to scale up or down, this can change that situation pretty easily. Here, for example, pod number four was restarted. Those stations disconnect, and then they reconnect again. But the load balancer will simply redistribute those, and it will end up with a situation like the one in the right, where now we have some pods with more connections, some with fewer connections. Of course, with time, stations reconnect, and this will go to an equilibrium, but an indefinite amount of time is needed for this to happen. During this time, there can be instabilities. Some pods are serving more connections. Maybe they can run out of memory, crash, and maybe the clients will experience high tail latencies at those pods, so the system can end up in this state out of equilibrium, which can be problematic. The second problem has to do with something called a reconnection storm. I mentioned earlier that stations are connected to the internet via mobile carriers. Let's consider a situation where some stations on the left here are connected via carrier number one. Some stations or 10,000 stations are connected via carrier number two. And if this carrier number one has an issue, an outage, maybe a regional outage, all of those stations will lose the connection all at once. And then they will try to connect all at once as well, as soon as this issue with the network carrier is resolved. And basically what this causes is large, unpredictable load spikes, and it's a little bit like an accidental denial of service act. What would usually help here is retry with an exponential back off. However, we don't really have control over this because it's the vendors that implement the station firmware, and ideally they should do that. They should implement that retry with exponential back off. But in practice, we rarely see them doing it. And usually just the stations reconnect immediately after they are disconnected. And this is problematic. Triggers can be network carrier outages, as we saw as I described earlier. It can be even much more benign things like a release in the WebSocket gateway or a pod being rescheduled. This can start up, create a load spike, which might later lead to positive feedback loops. Let's look at the implications a little bit. The system is always at a risk of entering an unstable state. There is always a risk of these positive feedback loops. So let's say a large number of stations try to reconnect at once. Maybe some pods will crash, causing more stations to lose their connections. And then those stations will immediately try to connect again. And this can lead to the cycle, positive feedback loop, which then the system cannot recover from by itself. Another one is load spike propagation. So even in the case that the platform can handle the load itself, the downstream services might not be able to handle that kind of load, these spikes. So this is also an issue that plagued our system a little bit. And also another smaller thing, less serious, it's that during releases of the WebSocket gateway component, we know that there is user impact. So there is connection disruption. It doesn't make the station completely unusable, but still it makes the user experience worse. So since we know this, we introduce the maintenance window rule. And every time we need to make a release there, we have to announce this is quite an annoying thing to do. And also it goes against our continuous delivery practices. And back to our incident that we saw earlier. So this was also caused by one of these spikes in reconnections. And it was a combination of factors really that ended up in this incident. It was the size of the database, the target utilization of memory and CPU in the pods, the load at that time. But the root cause was something else. It was in the logger, some misconfiguration, we were logging to the logging API, and it wasn't able to accept all requests, cause some back pressure, which eventually led to pods being killed because they were running out of memory. So it was batching all of these log items for longer than it should, and it was causing this. However, this wasn't introduced in a release or something. The logger had been like that for a long period of time. What really triggered this is this combination of factors and the nature of the station reconnections and this reconnection store behavior. So we knew that something had to be done, and we needed to improve the reliability and scalability of our system. I really like this quote from Google's SRE book, reliability is the most important feature of any system, and it's certainly true in our case. So reliability is really the core value proposition that we offer to the platform teams. So we set out to tackle these challenges, and let's see how we did that. So how did we address these challenges? Let's start by looking at the connection flow again. I listed the steps here, but I won't go through them. It's more for completeness, really. But what's the takeaway here is that in the WebSocket Gateway component, which is horizontally scaled, as is the station management service, there we do the termination of TLS, we do some parsing, we do some rate limiting, and then the authentication process for the station happens in the station management service. And during this process, we save a couple of things regarding that connection in the Postgres database. And during times of high load, what happens is that this database can become a bottleneck. So this is the main takeaway from this connection flow that I wanted to show. So there are a couple of writes, a couple of reads that happen to the database, and during peak times of load, this can be a bottleneck. Some quick remedies that we could apply right away are basically over provision the database. Just throw some money at the problem, hope that it goes away. It's wasteful and costly, of course, but still, as a temporary solution, it's pretty helpful. Another thing, which is a little bit more subtle, it's to adjust the horizontal pod autoscaler stabilization window. So we have a couple of metric costs that we use for scaling up and down, and we don't want to react to every single fluctuation there. So because of this reconnection behavior, we want to avoid that as much as possible. So basically making this larger helps you smoothen out the reactions of the HPA and helps avoid these fluctuations in the replica count. Yeah, that's good enough for some quick remedies, but we also set some goals that we wanted for our long-term solutions. And primarily, we wanted a more lightweight connection flow that we could scale easier, and that would also help us alleviate database related bottlenecks. So as we saw earlier, we had to over provision the database by quite a lot. We also wanted to decouple the downstream services to stop this propagation of load spikes that I described earlier. And also, we wanted to reduce the disruption during releases. So find a way that hopefully we can remove this maintenance window rule and also have as little as impact in the user experience when we are doing a release in the WebSocket Gateway component. So these are some goals that we set out for ourselves. And now we go into a little bit more concrete approaches how we try to achieve this. First I'll discuss about optimizing the WebSocket connection flow. So some observations. We saw this earlier. This is not new. The key observation is that the connectivity data that we stored in the Postgres database was ephemeral in nature. That means that we don't really need the durability guarantees of Postgres to store that. And if we could avoid storing in the Postgres database, that would be great because then in times of high load, we don't really need to reach out to the database and we can avoid that bottleneck. So what we did here is basically introduce this service that we call the connectivity service. This encapsulates the connection logic and the connectivity domain. And it modifies the connection in such the flow a little bit so that we no longer need to store that data in the Postgres database, but we can do it in memory database. It boils down to memory being faster than disk. And for our case, this is great fit because even if let's say something goes wrong with the in-memory database, the server crashes, we can easily recreate that data by having the stations reconnect. Sorry. Without going into the backup mechanisms for Redis and so on. So even if it crashes, we can easily recreate it and have the data back in the Redis database. So fmrl data is a great fit for the in-memory database. And what we saw is that we were able to reduce the connection establishing time by one order of magnitude. And we reduce the load on the Postgres database, which means we can also now scale down to a much more reasonable size. We no longer need the database to be able to take in the peak of these traffic spikes, right? Which is orders of magnitude or at least one order of magnitude larger compared to normal traffic or normal load in the database. And we also were able to decouple the connection flow from other functionalities. We used this chance since we're revising the flow a little bit, we used this chance to also factor quite a few things. It was intertwined with some other flows like the certificate renewal flow and we used this chance to also do some decoupling there. So all in all, we were pretty happy with this. It was a long migration process and it took some effort, had a lot of subtleties, but it was really worth it in the end. Yes, but still another problem that we had remaining is that during a release, we still had a lot of disruptions and a lot of user impact when we were doing a release. So let's see how we tackle that. So one second. The root of the problem was in rolling updates in Kubernetes. So the idea with rolling updates is to incrementally replace current pods with newer pods, right? And Mac search and Mac's unavailable let you control this, how fast this happens. And there are some other configurations as well, but these are the main ones. Rolling updates are great. Again, they are great in most cases, right? They give you zero downtime deployments without basically having to change anything. And they are a perfect fit for most applications. However, there are a bad fit for applications sensitive to disruptions like WebSocket Gateway, where we have these long lift connections that we don't want to disrupt. Let's see why. So take a look at this scenario. So we have the station connected, let's say we have three replicas, three replicas of version one, and we want to do an update. And we'll start by basically killing one pod from version one, scaling up version two pod. And at that point, the station would lose connection, but it will then try to connect to another pod and establish it again, right? And then we repeat this process a couple of times until we have all of the pods in version two. You see, even in this trivial example with just three pods and one station, the station lost its connection three times. It had to reconnect. And this causes a bad experience basically on the user side. It causes quite some considerable impact. So ideally we would need to avoid this. And you can imagine what happens when there are multiple stations and many more pods, right? These traffic spikes, this is also a reason why the traffic spikes are amplified a bit because stations are connected or are trying to reconnect multiple times during release with rolling updates. And a way to tackle this is basically to switch to blue-green deployments. Let's do a quick overview of how that works. So we would have a replica set of three in version one. And then the idea is to switch the traffic all at once. So first we would bring up version two, the same replica set. We can run some checks, right, before promoting it, look at some metrics. And then we would switch the traffic of the stations all at once. And ideally here the stations would disconnect only once. So there is only one reconnection in total when this update happens. Eventually we can remove the version one pods. And then the release is finished. We used Argle rollouts. I left the link there to do this, to do blue-green deployments. It has a lot more features than we use and it definitely recommended if you are looking to use blue-green deployments. The plot here on the left-hand side also shows a little bit what I was describing. So on the y-axis we have the number of total connections. And on the x-axis we have time. And you can see that it really takes a while to recover to that normal load or to the point where all stations are reconnected. And comparing that to the blue-green approach, this window, this time window of disruptions is really reduced by a lot. And by some measurements that we did was around 80% on average reduction by simply switching to blue-green deployment. So this is really an example where it's quite a low effort investment, but it really pays off. The return of investment for this was quite large for us. And it really helped us improve the reliability of the system and also reduce the disruptions during a release. So that's the second thing that we did. But now let's take a look at the load spike propagation topic that I discussed earlier. If you remember I was talking about these load spikes that propagate to the downstream services and that's problematic even if the platform can handle the traffic, that's still problematic for the downstream services if they have to handle this traffic as well. So what we did is consider switching or switch to an event-driven architecture. How many of you are familiar with event-driven architecture? Have you used it before? That's nice, quite a lot. I think everybody has a little bit different. Everybody means something different with event-driven architecture. But a definition that I think a lot of people would agree is that it's basically an architectural pattern to build services which communicate with each other asynchronously. It uses events. An event is both a fact and a trigger and it's expressed as a notification. And usually by the name you can already tell it's always in past tense like station connected or station disconnected or charging session started, whatever. And then you'd have producers which are publishing these events when something happens in that part of the domain and they would put it in a queue where then consumers can consume it and trigger some logic on their own or simply ignore it. It would need a talk of its own to do it justice to this topic. There is a nice article from AWS and from Martin Fowler that I've linked there. The URL is not visible but the slides are in SCAD so you can look it up from there. And in our case the reasoning goes a bit like this. So it really helps event-driven architecture and an asynchronous communication way really helps with circuit breaking between the platform and the downstream services. And we could put a stop basically to the propagation of load spikes. In our case we use GCP pops up and for example the push subscriptions have a mechanism similar to the TCP congestion control mechanism so that it avoids overwhelming the subscriber if the subscriber has a tough time processing the request. So it doesn't overwhelm or it doesn't run into these bottlenecks that a subscriber might have typically the database.  So basically this is the circuit breaking aspect that the event queues provide us. Another thing, another benefit of event-driven architecture is that it helps decoupling services and teams. And the goal is to have more independent teams and better split or clear better boundaries between the services. And event-driven architecture isn't necessarily the only way to achieve it but it helps and it usually makes it easier to achieve this decoupling. And also the asynchronous communication way fits well to the underlying business processes that we have. So we can model the business processes well and therefore it was a good fit for us and it helps us address a lot of the problems.  So even though event-driven architecture is pretty cool it gets you a lot of street cred. It's right up there with rewriting your system in Rust. It doesn't mean that we apply it mindlessly everywhere. So we really have to pick and make a good choice, a deliberate choice about the trade-offs that we are making. For example one of the trade-offs is eventual consistency. Not all systems can tolerate eventual consistency in their business flow. Yes, and I've listed a little bit of our approach here but I won't go through all of it. The main takeaway is basically that to be successful with a transition to event-driven it's very critical to lower the barrier of entry for the teams, especially for teams that are coming from a synchronous approach of building things. And not only help in the conceptual level but also in the technical level by providing good abstractions and good tooling around them to lower this barrier of entry as much as possible and make the transition smooth. And we had a lot of effort that we invested into that to make this transition successful. So that would be the takeaway there. And with that we come to a summary. So there is no panacea in addressing these challenges and analysis of the load patterns and analysis of the bottlenecks is crucial to inform your system design decisions. In our case we went a little bit through the challenges and now I'll mention again the core ideas here. So we made the WebSocket connection flow more lightweight by introducing an in-memory database which we can scale independently and scale more easily and avoid the bottlenecks that we had with the Postgres database. We reduced the disruptions during deployments by introducing blue-green deployments. We discussed a little bit how the strategy, the deployment strategy might affect the reliability of your WebSocket applications. And also we talked a little bit about circuit breaking and what you can do to stop these propagation of load spikes and even queues. And that's about it. I've listed some links you can find me online or best of all, simply grab me for a chat after the talk. And let's now go into the questions and answers session. Hi. Hello. You were talking about PubSub as a way to decouple the downstream server, but you're using the Google, so you basically have infinite scaling on your PubSub. If you're on an on-prem, for example, wouldn't you just move the blow-up of the overscaling from the downstream server to your PubSub system? That's a good point. It's always so often with cloud, this is a little bit of a misconception that, oh, I shifted to the cloud and now it's their problem, right? So one needs to be aware of the limits and the quotas and what happens when you get close to those limits. It's a good question. I think there is no straightforward answer to this, but I can say that in our case we did some back-of-the-envelope calculations and we are very much inside the limits that PubSub has. And when we get closer to them, we can revisit some decisions and think about it again. But it's a very good point. It's a very good thing to consider when using this. And it would be a misconception to approach it, hey, it can scale infinitely and I don't have to care about it. And it's probably even more concrete when you are operating this event broker, right? And you're not relying on some cloud. Thank you for the talk. When you talked about switching to red-green deployment, did you think about somehow making it gradual, like creating V2 all at once, but then connecting killing the V1 ports one by one so not all stations reconnect all at the same time because you also get this problem that all stations will try to reconnect at the same time.  That would be something to consider. We didn't do it. So when we were considering using Argo rollouts or some other solutions that were available, we also considered implementing it in our own so that we don't add a dependency basically to the cluster. We did some evaluation of the options and basically the total cost of ownership leaned towards just using Argo. I'm not aware that Argo has something like that.  Usually, it just starts killing them as soon as the timeout runs out. I mean, just you have WebSocket long-lived connections. So it's a bit unusual use case. So when the red-green deployment happens, if you have standard request response up, it doesn't matter. But as you described, you have problem of all stations reconnecting at the same time and you kind of get it with red-green deployment. Okay. So you've mentioned eventual consistency and you're shifted through using an in-memory database in between the postgres to reduce the latency that's being caused through the database connectivity. What do you think about, I mean, couldn't you have used the database that provides eventual consistency instead? I'm not sure if I understand the question correctly. So maybe could you repeat it or rephrase it a bit? Yes. Instead of using the in-memory database in between, for eventual consistency, wouldn't it have been better to use a database that provides eventual consistency instead? So I would say the goal of switching or using introducing an in-memory database, the connection flow, was not achieving eventual consistency. It was rather making the flow more manageable to scale and make it independent of the other flows. So if there is a high load, we don't put high pressure into the postgres database, which a lot of the other business flows are dependent on. So we would decouple it from the rest of the flows and make it more lightweight. And we could scale it independently by just dealing with the Redis or in our case Redis, but it can be any in-memory database. We could scale it independently by just dealing with that. Yeah, so eventually consistency, I think it came up later when we introduced event queues, mentioned it as a trade-off that comes with asynchronous communication, but it wasn't a goal in itself to achieve by introducing Redis, right? So yeah, I hope that answers the questions, or if you have a follow-up, let me know. All right, it looks like no more questions. Thank you for joining.