大话西游免费版法宝用经验升一级要多少

    1. <form id=TuUEamabd><nobr id=TuUEamabd></nobr></form>
      <address id=TuUEamabd><nobr id=TuUEamabd><nobr id=TuUEamabd></nobr></nobr></address>

      How We Built Nightwatch, with Jess Archer

      Matt Stauffer:
      Welcome back to Laravel podcast, season seven. I'm your host, Matt Stauffer, CEO of Tighten. And in this season, I'll be joined every episode by a member of the Laravel team. And today I'm talking to my old dear friend, Jess Archer, the Engineering Team Lead of the APAC team at Laravel. should have written that down, but I think I got it right. So Jess, whether or not I got that right, can you say hi and talk a little bit about what you do at Laravel day to day?

      Jess Archer:
      Yes. Hello. That was perfect by the way.

      Matt Stauffer:
      Yes!

      Jess Archer:
      So my name is Jess Archer and I'm from Brisbane, Australia, Engineering Team Lead on the Nightwatch slash APAC team, which is the Australia Pacific. And yeah, what do I do at Laravel at the moment building Nightwatch? I've kind of forgotten the rest of the question. So if you want to go ahead and...

      Matt Stauffer:
      That's totally fine. That's it. You build Nightwatch. I'll walk through the rest of it. It's so funny because when I say your name, it's hard for me not to say it in your accent because I just like it's Jess Archer, you know, like that's the way it should be. But I, you know, it's not respectful to, to mock somebody's accent. So, but in my head it is not Jess Archer. I do not hear it in English. I hear it or an American accent. I hear it in Australian accent. So there you go.

      Jess Archer:
      I love that.

      Matt Stauffer:
      Okay, so the first thing I wanted to check in with which I do with everybody else is what is the story of you joining Laravel? You know where were you beforehand? What were you doing kind of and what interesting things happened between you know? I don't work at Laravel, and I didn't even know that was a possibility to oh my god. I'm at my first day at Laravel.

      Jess Archer:
      Sure. So, I mean, I'd seen kind of Taylor put out, you know, tweets every now and then looking for people. And it was always that thing of like, there's no way, like he'd never pick me kind of thing. So I never even entertain the idea.

      Matt Stauffer:
      Yeah, right.

      Jess Archer:
      But I'd been working with Laravel, you know, like using the framework for, I don't know, maybe eight years, nine years at that point. and I'd been, you know, speaking at Laracon's kind of getting involved with the community, doing podcasts, all that sort of stuff. And I'd met Taylor at a Laracon once and kind of awkwardly said hi and chatted for a little bit and I'd done some PLs to the framework as well. So one time he did put out, you know, a, a job ad, on Twitter and I thought, you know, why not? Let's just give it a go.

      Matt Stauffer:
      Yeah.

      Jess Archer:
      So I was working, at a company writing, medical software for like the health industry. And I was working with my very good friend, Tim McDonald. And so we both kind of were like, wouldn't that be cool? What if we, what if we did like a joint job application? Because we kind of, I think we knew, I don't know whether Taylor had said it or whether we just had a kind of feeling that our time zone would be problematic. And so we kind of thought if we came as like a bundled, offer that there wouldn't be some of the, like the main time zone concerns of that person just being isolated on their own. So it was like, okay, if we, if we both apply and we both get it, then we won't have the time zone problem and we'll get to keep working together. Cause we adore working together. So.

      We, we hatched this, this kind of crazy plan where we, we wrote this script, right? That we were going to send to Taylor, but it was going to be like, he was part of just a chat between Tim and I. So it was a, it was a, like a conversation where it was like, Hey Tim, did you see that Laravel was hiring? And then he'd go, yeah. And then we kind of like basically were each other's references. So he was like, you know, you'd be great at doing this because you've got all these skills. And I'd like, yeah. And you'd be awesome working, you know, on Forge because of all these skills. And we kind of addressed the time zone thing, like, you know,

      Matt Stauffer:
      Uh-huh.

      Jess Archer:
      We'll be working together. So we won't be alone. All those sorts of things. So was this long conversation. We did it at the, the middle of the night, I think for Taylor, so that he wouldn't kind of wake up as it was happening. He'd just wake up with this like message of backwards and forwards between Tim and I. And yeah, one day we just, we just sit, enter, enter, send it all. And, I think Taylor, I think it was just like a grin emoji and what are your email, what are your email addresses was the, was the response to that. And then, we kind of.

      Yeah. Backwards and forwards with Taylor from that. So that's, that's the story of how Tim and I both did a joint job application and started working at Laravel.

      Matt Stauffer:
      I love that. That's wonderful. And I told Mohammed this and it's also true for the two of you. I talked to Taylor when he was, you know, like looking through your application and I was like, please, please dear God hire these people because I would love to have them work for me. There's and with Mohammed, I just told him, I was like, hey, if you don't hire Mohammed, I'm gonna hire Mohammed. With you guys, I was like, I wanted to hire both of them, but I just can't figure out the time zone. But if you have both of them, it's this brilliant blah, blah, blah, blah. And I was just like, please dear God. And it's amazing to me because the fact that the two of you are two of the independently most brilliant people I've ever met in my entire life and to the most creative and innovative and amazing and kind and wonderful people in the Laravel community. But the two of you together, the package, it feels unfair to drop on somebody's lap like that level of talent and ability. So anyway, thank you both for having that idea because the benefit we have all gotten from it is just immeasurable. So, okay.

      Jess Archer:
      Thank you. It's, yeah, definitely. I still have days I wake up and I'm like, I work at Laravel. Like it's still kind of not, not real, which is really weird.

      Matt Stauffer:
      Is this real? Yeah.

      I love that. Well, you absolutely belong. And one thing I want to ask everybody is, on day one, I don't think you were working on Nightwatch on day one. So what did you actually do when you got started?

      Jess Archer:
      Uh, so Taylor and I kind of talked about a few ideas, um, before I even started of what sort of stuff I'd be working on. He kind of, he liked the idea that I'd be kind of doing like R and D skunk works kind of stuff, um, in the open source area. So the very first thing was building the Vite, um, plugin for Laravel. So that was my, my first kind of official project wasn't even like a PHP project.

      Matt Stauffer:
      I mean, you went deep on that, yeah.

      Jess Archer:
      Super deep. mean, there is PHP components in the framework. That also kind of wired all up and make it work. But, yeah, that was to, you know, replace web pack, with Vite that was just showing so much promise of being like so much faster, all these good things, and just trying to figure out like how to create that really nice developer experience that, Laravel mix had, but with, with Vite and we kind of decided that we didn't want to do like a wrapper like mix was because it kind of makes it harder to like use other Vite stuff. So we kind of thought, let's just build it as a plugin.

      Matt Stauffer:
      Uh-huh. Yes.

      Jess Archer:
      so that you can just use, can consume Vite directly and then have this other thing fit in. So yeah.

      Matt Stauffer:
      Very cool. Did you go, I, and one of the questions, so for those who don't know, I asked on Twitter, blue sky, does anybody have any questions for Jess? And one of the questions was what was the process of working? And the person who asked, they actually said, what was it like going from prompts to Nightwatch? So I don't actually know what the story was, whether prompts was officially a part of your assignments there, but regardless, I know that you were doing kind of like open sourcey stuff and then you moved to a product.

      Was that a big kind of cultural, what am I doing day-to-day shift for you or did it feel like a really natural and easy movement?

      Jess Archer:
      It was definitely a big kind of, a big shift. I'd been doing a lot of, yeah, like all open source stuff, a lot of stuff I was doing in collaboration with Tim. So Tim helped me with vote plugin. We built Laravel Pulse together. prompts was kind of my, my like baby that I built kind of on my own. That was one of the few ideas that was actually my idea. Most of the great ideas are Taylor saying, Hey, can you explore this idea? But, prompts was, was something that I just desperately wanted to solve.

      Matt Stauffer:
      So grateful for prompts, by the way. I freaking love that tool.

      Jess Archer:
      It's yeah, I, I'm still very proud of, of prompts. I love it very much. So yeah, then switching to kind of more producty stuff. I mean, it's where I came from, like all my other kind of jobs had been more in that space. So it wasn't unusual. But it was definitely like a big shift.

      Matt Stauffer:
      Yeah. Okay.

      Jess Archer:
      A lot of the way we work is still the same, right? Like we're still kind of thinking of developer experience or building tools for developers. So it's the same sorts of, the same sorts of goals. We probably go put maybe a little bit more polish and effort in. I mean, we always do our best, but we have, I guess, more time to go even further, with, with polish and all those sorts of things. I guess we kind of have to come out of the gate with something that's like.

      Matt Stauffer:
      Yeah, okay.

      Jess Archer:
      really strong, whereas sometimes with the open store stuff, you can come out with like something that's like really good and then just wait for like the community to kind of get involved and help steer it, all those sorts of things. Whereas I feel like with a product, you kind of need to, yeah, just come out that little bit stronger, the little bit more opinionated. yeah.

      Matt Stauffer:
      You also don't have the ability to expect any contribution because since it's a paid product, people aren't gonna get access to the code there. If anybody's gonna make any fixes afterwards, it's you. But even the best intentioned person has a little bit more entitlement to expectation of excellence when I'm like, hey, if I'm paying you however much a month, it's just gonna feel different than you gave me this free thing and now I can help you make it better. So I can see that there's just like a different cost to get to launch there.

      Jess Archer:
      Yeah, it's a different dynamic.

      Matt Stauffer:
      Yeah, so we've talked, we've said Nightwatch a couple times and I hope anybody listening to the podcast is familiar with Nightwatch, but let's just off the bat, let's just say what is Nightwatch and what's it kind of like the timeline of launching and kind of where is it in its journey towards being live right now?

      Jess Archer:
      Sure. So I like to think of Nightwatch as almost like three services rolled into one. So it's exception tracking, it's performance monitoring and it's logging. So all of those three things combined, they're all very interrelated with each other. So it kind of is really nice to have them all linked together. So effectively it's something that you install in your Laravel project and it will send all these kind of telemetry data to the Nightwatch service.

      And then you can view that information in your dashboard. So you can see any errors you're getting, any performance issues, slow routes, slow queries, slow jobs, all the things. And then also any logs that you've kind of emit in any of those processes. It's all linked together. So if you start zoomed out at, you know, there's, you can see all of the requests that happen. You can kind of see on a graph, there was like a patch of errors there. You can zoom in on that graph, go see which routes were causing it, click on the route.

      Then click on an individual request. So you can get down to like the individual execution level. And then yeah, if there was a log, it kind of shows up straight on that page. You don't have to go and like map it up with any other systems. It's all right there. So yeah, that's, that's Nightwatch.

      Matt Stauffer:
      Yeah. And we, yeah, we've done a podcast episode, at Laracon Australia talking about kind of the basics and kind of what I'm excited about some of the aspects of how you all are surfacing errors and stuff. So for those who aren't, who have not listened to that and were curious about it, there's that podcast episode, I'l link in the show notes. also did a demo, recently, and I think you spoke it was at Laracon India. You spoke somewhere recently introducing this. So you've done a lot of Nightwatch content.

      Jess Archer:
      Laracon Europe. Yep.

      Matt Stauffer:
      You're up, okay. So we will link all those in the show notes. And so because we've already kind of covered that, I actually kind of focused a little bit more today on the developers asking you about the experience of working on Nightwatch versus, what is Nightwatch specifically? But before we get there, I just had one thing I wanted to talk about. Because this season is about like, hey, get to know the Laravel team, you mentioned that you are the lead of the APAC or Nightwatch team. And I wanted to see if you could kind of just give us a quick introduction to like...

      What is that team and who is it outside of you and Tim and you know, it is the Nightwatch team now. But do you think that there's you you'll be assigned to projects together in the future Just kind of give us the intro to the APAC team in general.

      Jess Archer:
      Sure. So there's currently seven of us on the, the Nightwash team. So yeah, we're getting to a decent size. I mean, when, like before we kind of started all this, there was like 10 people in the entire company and now we've got seven on this one team. So, there is our product manager, Phil Horton. There's our designer, Jeremy, there is our infrastructure, James Carpenter. Who else we've got? Luta, who's doing development and Tim. And then also Sabrina has recently joined us as well as a developer. I hope I remember everybody. I hope that was 7.

      Matt Stauffer:
      Okay. Is Philip on the team too?

      Jess Archer:
      Yeah, he was the first one I mentioned.

      Matt Stauffer:
      I somehow I missed him. Sorry, Phil. Cool. Yeah. And I mean, I realized when I asked you, was like, man, you you asked me to list every single person at Tighten and I'll probably give you half people who don't don't even work here anymore. I'm just like, that's a stressful thing to put people on. So sorry for putting you on the spot. But yes, it's very cool to me because when I originally think about that team, of course, I think of, you know, you and Tim. And then I think about, yeah, you know, a couple of other people have joined. But what you just named is not just like a couple rogue developers like doing their own little thing. It is a fully functional team with all the different components of, you know, the backend and the front end, the design and the project management and product and everything like that. So that's very cool to me that you all have been able to build it in that way. How much have you been involved in hiring versus how much are you just sort of like kind of throwing people Taylor's way and then if he brings them on the team, you say yay.

      Jess Archer:
      I think like when we kind of, when it was just Tim and I, I wasn't involved with, the kind of third person, was, Lyota Hamasaki. So I got to interview him. But I wasn't kind of involved in like the job description, that kind of stage or anything. It was just kind of like, I think Andre had already interviewed him at that point and kind of said, Hey, go interview this guy. And we adored him.

      After that, I was a lot more involved. I think that was kind of when I was promoted to team lead and was kind of around that same sort of time. So since then I've been a lot more involved kind of doing the first interviews, helping out with like the position descriptions. Funnily enough, like there's a lot of people we've hired of people that we've worked with before that we kind of already knew. So yeah, I mean, it's always nice when you can you know, when you have people that you work so well together with that you can kind of reach out and go like, Hey, are interested? Um, so yeah.

      Matt Stauffer:
      Yeah. How do you enjoy taking kind of the leadership role? I mean, we know you know how to code. What's it like being a people manager leader, not just a code leader?

      Jess Archer:
      It's pretty interesting. It's something I always resisted. I remember. Yeah. For, for a very long time, it was always something that people had kind of wanted me to go towards management sorts of things for whatever reason. And I always resisted it because I just wanted to code. But when it happened at Laravel, I was like, if I was going to kind of go into more of those senior sorts of roles, Laravel would be the place where I would probably actually quite enjoy it.

      Matt Stauffer:
      Yeah.

      Jess Archer:
      And because my team is all incredibly talented, they're all very kind of self-guided and self-directed. There's no, like, I'm kind of, you know, the lead in name, but in reality, we're all just still working very collaboratively. I just have that as like, as like an official thing, but it's yeah, we're all, I look at us as all, leading the team. So I still get to do a lot of code.

      Matt Stauffer:
      Great.

      Jess Archer:
      But I get to do like one-on-ones with folks, which is really nice. I love having chats with my team, kind of one-on-one. Yeah, it's, it's been good. I think it's probably different than most other companies, the way they would do it potentially. But I like that at Laravel, we're allowed to kind of operate our teams how we want to. So each team can kind of work how they want to work.

      So yeah, we kind of just kept doing what we were doing really, and just having fun collaborating, even like the design of the software, like because we're building tools for developers, we get to just ask ourselves, what do we think would be cool? Most other places I've worked, it's been building software, like, you know, it's working in health. I have to ask other people, like what, what's good here? Like I need to talk to doctors to say like, what should this do? Whereas when you're building tools for developers and you are a developer, you go, I know what's cool.

      Matt Stauffer:
      That's very cool. And at very worst, you can ask your friends, right? And they're like, hey, what do you think about this tool?

      Jess Archer:
      Exactly.

      Matt Stauffer:
      Yeah, that's awesome. Okay, so moving on to the questions that we got from folks on the internet. This is a no particular order. I ordered them a little bit, but basically no particular order. Maybe prioritized by the ones I'm curious about as well. How many, if any, PRs to the framework were required in order to make Nightwatch functional?

      Jess Archer:
      To make it functional, can fairly confidently say zero.

      Matt Stauffer:
      Okay. But...

      Jess Archer:
      We deliberately wanted to support at least Laravel 10. So that kind of meant working with what Laravel 10 had. That's not to say that we won't potentially push some improvements all the way back to 10. There are some, I mean...Nightwatch is listening for events. it's as long as there's an event that we can listen to it and it has information on it. We can capture it. And Laravel has had great events for such a long time. we built Laravel Pulse, which was all based on those events. So we kind of knew the events we already wanted. So we didn't have to add too much. There have been improvements to some of the events, some new events that, aren't in old versions. We may go and backport those. But they're not kind of deal breaking things if they're not there. We have other ways to kind of achieve things.

      Matt Stauffer:
      Got it. Okay, very cool. All right, the next one is what was the hardest problem you had to solve and what was your process like in solving it?

      Jess Archer:
      I mean, the hardest problem has got to be dealing with that amount of data. Just, you know, gigabytes, terabytes, petabytes, billions and billions of rows in databases. It's yeah, hands down the absolute biggest challenge. And the process. So, I mean, a lot of experimenting, a lot of research.
      Tim and I went deep reading like academic papers for a while because we were trying to find like, like different algorithms for aggregating and pre-aggregating data and doing like rolling aggregation where you kind of incorporate new data into an aggregate without having to like store the whole aggregate, which is easy for things like averages, an easy for like min and max, but really hard for, like quantiles like P95s or those sorts of things.

      Matt Stauffer:
      Wow. Oh yeah.

      Jess Archer:
      So we kind of used a lot of the knowledge we got from Pulse, but then, exposed ourselves to whatever other tools are out there. So that's when we learned about, like OLAP databases, which is online analytical processing, as opposed to OLTP database, which is online transactional processing. Those were terms I'd never heard before. And I kind of wish I knew them earlier, cause then I would have known what to like to search, right?

      But OLTP databases, that's the name for the databases that we all use, you know, MySQL, Postgres, those transactional databases, but there's this entire other class of databases that's designed for doing analytical stuff. And it's not that great at doing the transactional things, because it's like a trade-off thing, right? You've got to, if you go make one thing work really good, then there's sacrifices in the other. So learning about these other types of databases, playing with them, evaluating a bunch of them, trying to put as much data through them as we could.

      Just, yeah, a ton of proof of concepts.

      Matt Stauffer:
      Yeah. Yeah. And you did give a whole talk about some of the kind of aspects of the solutions you came up with. So we will make sure that is also linked in the show notes. And that was Laracon US last year, right? Okay.

      Jess Archer:
      That was kind of like a, almost a behind the scenes of Nightwatch before we'd even announced Nightwatch. Because I was just so excited about this database Clickhouse. It's all I was thinking about. It was just running through my head. So when it was, you know, when I was thinking of a talk, it was like, this is the only thing I care about right now. I want to talk, I want to tell the whole world about this database.

      Matt Stauffer:
      Yes. Yes, I love it. We'll link that in the show notes for anybody who has not heard it. It's a wonderful kind of journey into that key component of what solving it looked like. But you did just name something that references one of the other questions that we got, which was, how do you simulate load to validate elements of the design and the architecture?

      Jess Archer:
      That's a great question. So data goes through various kind of systems to make its way into the database. So we had to, I guess, like test some of those components in isolation first. Testing the database, I wrote some, you know, some scripts that would basically generate a ton of realistic looking random data. It was kind of important that like the data wasn't completely random.

      Matt Stauffer:
      Hmm, okay.

      Jess Archer:
      If you're generating requests and like they're storing the durations, if you just choose a random number between, you know, one and a thousand for all of them, then the distribution is not actually realistic. The majority of requests will kind of be more towards one end. So creating things that are as realistic as possible because different, algorithms will handle that stuff differently, right? Like a P95 algorithm, some of them work better when the data is more towards one side versus being like super distributed. So yeah.

      Matt Stauffer:
      Oh interesting.

      Jess Archer:
      putting tons and tons of data in databases was probably the biggest, the biggest thing we wanted to test. We were fairly confident we could get the data in like that just kind of comes in in this constant stream. We played with a few different technologies for that. We're using a lot of AWS stuff. So we played with, I think, Kinesis streams, but then we ended up going with Kafka. And then yeah, we've done a whole lot of load testing on Kafka in isolation, again, using as realistic as possible payloads to try and figure out how much a particular instance size can, can handle for our type of data. So yeah, just testing all those things. And then probably the biggest thing was actually real world testing, which was installing Nightwatch on Laravel Forge and Laravel Forge. I think we have about three and a half billion records in a single month of just database queries that Forge does. So Forge is very database heavy. yeah, millions and millions of requests. So that.

      Matt Stauffer:
      Yeah, okay. Yeah.

      Jess Archer:
      put a lot of data through the system and we were able to see that for what we'd kind of chosen, like that was just basically like a blip in terms of like the Kafka resources we chose. We did find that Forge had more data than we kind of had tested, because we kind of, we had some assumptions about Forge that were not a hundred percent correct. We actually learned a lot about Forge once we had Nightwatch on there and it's a lot, a, does a lot more than we thought it did in terms of queries and cache events and all these sorts of things.

      Matt Stauffer:
      Amazing.

      Jess Archer:
      So we ran into performance issues and we had to solve those, come up with new aggregation strategies. So yeah, that was kind of the process.

      Matt Stauffer:
      Okay. Well, and you touched on yet another of the questions. This was asked by several people, which is how are you using Kafka? I'm embarrassed to say I'm only mildly familiar. I know Kafka is an Apache thing that has to do with streaming, managing streaming data, but that's as far as I know. Could you give us like a real quick intro of what its role is in a tool like Nightwatch?

      Jess Archer:
      Absolutely. So, I mean, I didn't know anything about Kafka either before building Nightwatch. so you're not alone there. Don't worry.

      Matt Stauffer:
      I feel better. Thank you.

      Jess Archer:
      So it's yeah, it's like a data streaming, service. You basically put messages onto it, which are put on by things called producers, and then you have other things consuming from it called consumers. So it's really just kind of like a message bus, put things on, pull them off. People use it for different things. You can use it for like event broadcasting where you can have multiple consumers

      Matt Stauffer:
      Okay.

      Jess Archer:
      listening for events. So if you had like a microservice architecture and a thing that, you know, an event happens here, all these consumers can read it. In our case, it's basically just one producer and one consumer. It's just going through there and then into the database. But it does, it helps us in a lot of ways. So one really handy way is if we need to make any changes to the database schema, we can just pause the ingest and the data will build up in Kafka. We can do whatever we want in the database.

      Matt Stauffer:
      Very cool. Yeah. Wow.

      Jess Archer:
      And then just hit resume and it'll just slurp up everything that was kind of waiting there. So it acts as like this little queue that lets us like basically pull the pipe apart, do some work and then connect it back together again.

      Matt Stauffer:
      That's incredible.

      Jess Archer:
      So that's really handy. So Kafka has a concept of topics. So each message goes on different topics. So for each different type of metric we collect, they all go into different topics. Those topics go into different tables in the database. yeah. And it also helps us insert the data because the database that we're using, it works best when you insert like bulk data. So you don't just insert each row as like an individual insert. It wants to get like chunks of data at a time. So having it all go onto this stream means that it can just read out like

      Matt Stauffer:
      Well, okay.

      Jess Archer:
      you know, five seconds worth of data at a time and insert it. And, know, that's potentially millions of rows in a single insert. It much prefers that than, than one by one.

      Matt Stauffer:
      Wow, which is kind of the opposite of how you traditionally think with our databases. You're like, no, what we don't want to do is queue up massive amounts of work and then it's going to gum up all the works. It's like, no, this is actually how it likes to. So this is a lot of different stuff from your average Laravel application. That's very cool.

      Jess Archer:
      Definitely, yeah.

      Matt Stauffer:
      OK. Let's see. Next question. OK.
      I'm curious whether you think that the premise of this question is actually valid. It says, how do you design for a virtually unbounded scale? And so you were kind of saying like, you well, we thought Laravel or Forge are going to be the certain size. And, know, obviously you have not taken on the entirety of the clientele that you're going to eventually have, but that is a, know, how much was what you're building, you know, like we need something that can scale perfectly and how much what you're building is we're just going to throw something really powerful at it.

      And if we see it starting to hit its limits, we're going to make it more powerful. Like how much of this the auto magic auto scaling versus the, you know, just the heavily overpowered, you know, service.

      Jess Archer:
      It's, it's an interesting question. I mean, the scaling aspect is the thing that's kind of the most scary thing, right? Like we don't know how many people are going to sign up. We think it's going to be very popular. We don't know how big people's apps are going to be, which is kind of the bigger question as well. If everyone that signs up has, you know, a fairly small app, that's one thing, but if everyone that signs up has these apps that are bigger than we kind of anticipated, then that's something else. So.

      Matt Stauffer:
      Yeah.

      Jess Archer:
      We wanted to make sure that, like one big consideration with the database is to make sure that other customers data doesn't impact the performance of like another customer, like the noisy neighbor type thing, right? So the database structure is designed so that when you're querying your data, the other data that's in there doesn't, it doesn't have to like scan through any of that data to get to your data. So there's no kind of penalty.

      Matt Stauffer:
      Got it. Okay.

      Jess Archer:
      for a big customer being on there, the small customers don't pay performance penalties because of someone else on there that's putting a lot of, a lot of load there. We kind of know for Kafka, how we, how we can scale that, how we can add more, replicas and instances and all those sorts of things. We can add extra databases. One of the kind of great things with the way that it's architected is we can, if we wanted to create a dedicated instance for one customer and the dashboard application can say, okay, for this customer, I'm going to talk to that database over there, but these customers, I'll talk to this one. So it lets us kind of scale horizontally and vertically, right? Like that's kind of the terminology we can scale in both directions as needed. And yeah, we kind of have a strategy for that and we have all the monitoring tools in place so we can see when we need to make those decisions and get early warning when those things are going to happen. And going into early access, just getting more and more customers on there just lets us test some of our assumptions because so much of what we tested was kind of like, know, in laboratory conditions, right? Whereas when you deal with real things, like even just the spikes, Forge is really interesting because you can look at its graphs and on the hour, every hour, huge spike, because that's when all of the backup jobs kick off. So there's this massive, massive spike there. Even every 15 minutes, there's little, little blips that happen exactly on the 15 minute mark, which is...

      Matt Stauffer:
      Yeah, interesting. Yeah.

      Jess Archer:
      becomes predictable because of that application, but other applications will have their own interesting usage patterns. yeah.

      Matt Stauffer:
      Yeah. Interesting. Yeah. I bet you there's going to be some 2 a.m. spikes and other things where people say, okay, everyone's asleep. Let's start doing our crunching. Huh.

      Jess Archer:
      Yeah. And with different time zones, right? Like business hours for one customer is different than another.

      Matt Stauffer:
      Yep. No, that's fascinating. Do you have, this wasn't one of the questions, but I'm curious. Do you have different entirely separate applications for ingest versus dashboard, or is it all just one mega Laravel app right now?

      Jess Archer:
      there's basically just two main, so there's three code repositories really that kind of handle the whole thing. So there's the package that you install in your application. So that's open source. That's actually, public right now. Anyone can go look at that. Then there is our ingest infrastructure and then there's the dashboard app. So the ingest infrastructure is very AWS services heavy. It's mostly infrastructure code. and then yeah, that's the main, the main app that's kind of querying the data.

      Matt Stauffer:
      Okay, that's fun because I'm almost always the person counseling people like you don't need multiple apps, you don't need to put different databases for this, you know, there's all this architecture that you don't actually need and you're talking about this and I'm like, you need it. And you know, like, it's not that nobody needs it. It's just that people hear stories like this when it's needed and they say, therefore I'm going to put it on my app that's, you know, crud for dogs or something like that. Like, no, that app just doesn't need all that complexity. This one does though. So that's fun.

      Jess Archer:
      I a hundred percent agree with that. And I think that I feel like we've been pretty conservative with that. Like having those, you know, those two, two separate things. I imagine a lot of people could solve the problem with probably 10 different services. but we deliberately wanted to keep it as simple as possible. We have, we do have two databases. It's the only time I've ever felt the need to have two databases, but we did need, we still need a transactional database. So we still use, Postgres for doing all of the things that it's amazing at, but it's just not amazing at those like, you know, aggregations over billions and billions of rows. It's fine having billions of rows when you want to look up one row. Postgres will find that in a heartbeat, but yeah, not aggregating.

      Matt Stauffer:
      Yeah. Yeah. Not so much the aggregation. Okay. Okay. The next question, I feel like we already covered, but I'm going to ask it just in case you tell me there's something we didn't, which was what techniques are used to avoid slowing down the client application with monitoring code? Oh actually, maybe this is not, I was thinking this is about slowing down Nightwatch application, but I guess this is talking about my application. So.

      Jess Archer:
      Exactly, yes.

      Matt Stauffer:
      What does it look like? What's the process of ensuring that when I install Nightwatch, I'm not suddenly slowing down my app?

      Jess Archer:
      Yes. So, I mean, the first thing to, to state is that any, any observability tool will add some performance overhead. It's physically impossible to observe an instrument something without affecting it in some small way. But we've found through load testing that, the, it's basically not noticeable. Even when we put it on Forge, we didn't notice any, any, you know, spikes or anything like that. So we have done a lot of things very intentionally and deliberately.

      In the collection code, we basically don't get to use any of Laravel's kind of nicer features. Like we don't get to use collection pipelines, any of that sort of stuff.

      Matt Stauffer:
      Collections and everything else, Because they add just a little bit, right? Yeah.

      Jess Archer:
      Cause those like just little tiny bits, they, you know, they add a, extra object that's in memory. And sometimes, you know, they, they iterate over things in, you know, less efficient ways, but they create much more readable code. And for most applications, that's a hundred percent fine. And it's, that's a better trade-off is to have more readable, more maintainable code. But because we wanted to make sure we kept the impact as minimal as possible, we kind of had to go a lot more low level. One of the big things we do is there's a local agent that runs. And so all of the metrics that are happening in all the different web processes that are happening, they can just send those metrics to that local agent.

      Matt Stauffer:
      Oh okay.

      Jess Archer:
      So instead of it making an outgoing request to our server at the end of like the actual request life cycle, it kind of makes just as that locally, which makes it much faster. Cause even if you send that outgoing data, like in the terminating phase, so the response has already been delivered to the user, the user won't notice if we were doing that, but that process is still kind of tied up doing that task before it can go and answer the next one. So we wanted to make sure that that just happens as quickly as possible, sends it all locally. And then that agent can then batch that data up. And then I think every 10 seconds or six megabytes is when we send it to our ingest infrastructure.

      Matt Stauffer:
      Hmm. What's the agent running like in and on?

      Jess Archer:
      So the agent is just PHP. We, we were initially thinking like, we're probably going to have to write this in, you know, Rust or Go or one of these sorts of things.

      Matt Stauffer:
      Yeah, that's what I figured.

      Jess Archer:
      But we were like, well, we'll just, you know, play with it in PHP. Tim has built the majority of the agent and did some early proof of concepts. And we were pleasantly surprised that it was like absolutely fine. Like it was used very little memory.

      Matt Stauffer:
      Yes, fantastic.

      Jess Archer:
      It was easy to control. Like, yeah, we can monitor the memory usage and see that it clears itself fine. So we just haven't bothered to rewrite it in something that, you know, might get you extra milliseconds here or there. I don't know, but yeah.

      Matt Stauffer:
      Right.

      Jess Archer:
      And it's not to say that maybe we won't at some point, but the PHP has been excellent. use, react PHP. So it's got like a, asynchronous kind of event life cycle process. So we use that so that we can receive cause the agent almost acts like a mini web server. It receives data from all sorts of different processes. So it needs to be able to answer all of those quickly, batch them all up and then make outgoing requests to our ingest while still receiving new data from the web processes. And yeah, we can do all that in PHP. So why not?

      Matt Stauffer:
      That's amazing. Is that going to put any limitations of where these applications can be hosted or can most modern setups handle something like

      Jess Archer:
      Well, because it's PHP and Laravel's PHP, it runs anywhere Laravel runs, which is one of the other benefits of it, right? Is that, I mean, if, if we were monitoring something that wasn't PHP and we were writing it in PHP, then it'd be like, yeah, you'll have to install PHP on the server to use this thing. But with this, it's like, you've clearly already got PHP, so you're good.

      Matt Stauffer:
      Yeah.

      That's awesome. that's so cool. Okay Can we get through I think we can get the rest of these in time. The rest of these actually there was one last one before we go into the process and you mentioned this a little bit But you talked a little bit about the seeders that you built to test the project in your talk and also earlier in the episode here We just wrote a a big blog post about seeders at Tighten and I'm a really, really, really big fan of helping clients move from the only way we can accurately test our app is by having a full database dump of the production data. And I'm like, nope, we can move from that and we can help you make good seeders. And a lot of people have this idea that seeders are just lorem ipsum with completely random numbers. Are there any tips, tricks, tools, patterns or anything like that that you found allowed you to build these seeders easily to have much more realistic data or is it each time is just sort of like I'm going to hack on it, add it until it gives the distribution that I want. there, is there anything that made setting that up more easy?

      Jess Archer:
      I wouldn't say easy. There's a, like, our seeder code is, is pretty gross. Really. It has like, it's, it's got just a lot of very, you know, not very declarative code that's like doing all these kinds of things, but there's a lot of probability stuff built into there that you would have with a lot of seeders, but to, when it's like cycling through what request am I going to make? So we register a bunch of routes that the seeder can theoretically hit.

      And then we have some probability weightings for each route so that it goes, you know, there's this, this, this percent chance that I'm going to hit this route. And then it chooses which user is going to make the request. So it's got to simulate a user making the request to that. And we have logic in there so that all of the users in the system have like working hours kind of specified. So when it's randomly choosing which user is going to make the request, it only chooses users who are like.

      Matt Stauffer:
      Oh my gosh, that's so cool.

      Jess Archer:
      basically where it's like business hours for that seeded user, which is kind of important because when in Nightwatch you can click on a specific user profile and see a graph of their requests. And to make that realistic, the graph's not going to be there consistently hitting it 24 seven. They hit it during business hours and then they don't make any requests overnight, right? So just having some of those kinds of scenarios in there, having requests that sometimes fail and sometimes don't.

      Matt Stauffer:
      Yeah, yeah.

      Jess Archer:
      So there's a lot of, again, random number stuff where it says, you know, there's a 5 % chance that this outgoing request will not be a 200 response. It'll get, you know, a 500 gateway timeout from the, the upstream thing that it's kind of simulating. And yeah, just connecting all that sort of stuff together and even simulating like the durations of everything. Cause we capture in the timeline, you can zoom into an individual request and see down to the microsecond, how long each database query and everything else took. So those are kind of randomly generated between like a certain amount of time. So it's not just like, yeah, just choose a random number. It's like, this thing is going to take about a second, but give or take, you know, like a hundred milliseconds so that it's random, but still consistent. So that when you actually click on like the slow queries page, it's not like they all have like some slowness. It's like, no, there's some queries that are always fast and others that are always slow and some that are sporadically fast. So we have

      Matt Stauffer:
      Yeah, that's so cool.

      Jess Archer:
      certain times of day that the seeder will go during this time of day, we're pretending that this external API is down. So any request that goes to that will get an error. So that when we look at the graphs, there's like a red patch. That's not just evenly distributed across the whole graph. It's actually concentrated in one area. Cause that creates something that you can kind of zoom in on and then creating like the scenario so that when you do drill into them, cause we use the seeder for like all of the demos we do that they all demonstrate a scenario that's kind of easy to quickly understand.

      Matt Stauffer:
      Yeah.

      Jess Archer:
      So the domain we chose was a flight booking app. Flights are great because they've got a number of different relationships. You've got like tickets, flights, airlines, all those sorts of things. There's enough complexity, but it's also still like a domain that's easy to get into your head of how it should work. And just creating all these fun scenarios, like, you know, this flight was overbooked. So there's like an overbooked exception that can happen. And only on this particular endpoint. Yeah. We had a, had a scenario where there's a cache event.

      Matt Stauffer:
      Yeah, and we instantly understand that. Mm-hmm. Yeah, that's amazing.

      Jess Archer:
      That the cache happens for like, gets a, it caches data for 10 minutes. And then it has to run a slow query after that every 10 minutes. So the seeder knows when it has cached the data. And so every request for the next 10 minutes, we'll have a cache hit. But then after 10 minutes, it'll be get a cache miss and then a really slow database query will happen. So the seeder has all that programmed into it.

      Matt Stauffer:
      Wow.

      Jess Archer:
      So can imagine the code is pretty crazy. We kind of tried to divide it into these like named scenarios so that they're, it's easy to understand. Like, I'm triggering the occasionally slow, slow route, but yeah.

      Matt Stauffer:
      Yep, yep. That is fascinating. I mean, I think I built some very complex seeders in my life, but this is next level and that's so fun to hear. You mentioned that you wanted to kind of show some real world, like, yeah, some of these are gonna fail. And when we talked last time, one of the things I pointed out was that I love how much you all have paid attention to...

      What do I care about when I'm opening up the SaaS? Because I think that's a thing that people often forget to be considering as they're building these SaaS is like, it's not just data. It's like, well, I'm coming to learn something and I don't always know when I'm coming to learn and you can make it easier for me to figure out here's what you should pay attention to right now. And you weren't really able to do that until you got good enough data on your own to say, oh you know what, you know, I hope I'm not, not allowed to say this, but we are, we got early access this morning and I have been clicking around seeing it on one of our live softwares of service and I'm like, oh my God, the fact that I can go to the users page and it says of the, you know, whatever the last 24 hours of requests this user made, how many of them were 200s, 300s, 400s, 500s? And I'm just like, this is incredible because now I can know that this user is probably very frustrated because they have run into this inordinate number of errors.

      And I instantly have it for I can dig in I reach it out to them if I need or if I look at my requests I can say my gosh this one API endpoint that we have has an unbelievable number of 402 errors why is that you know 402 status codes just in clicking through the thing just to make sure my team had set it up right I learned things about our user base about our code base or about our application that I never would have on my own so the way that you all were able to prioritize discover ability of the things that people care about is really incredible and I really do believe that the seeder setup has I mean obviously you built it so because you knew you needed to do this but I'm just like I hope this encourages people to say like building these real and complex and nuanced seeders gives you insight into reality in a way that you wouldn't have otherwise.

      Jess Archer:
      Definitely. And there were certainly scenarios that we kind of, like one of the problems with the seeder approach is that we had to come up with scenarios that we wanted the software to tell us about. So we had to think of like, think of what we wanted to get out of it and then create that scenario. When you've got real data, there's scenarios you don't yet know about.

      Matt Stauffer:
      Yeah, yeah.

      Jess Archer:
      So when you look at the data, then you actually go, I don't actually know what's happening here. So I, so you look at it through a different lens. Whereas when it's like, yeah, it told me the thing I told it to tell me. It's like, well, good job. But so we, learned like we did like the seeders are great, but we did learn a lot. Once we had it had like Laravel Forge on there. We got a ton more information from that because it genuinely showed us things that we were curious about that it didn't give us enough information. We were like, this is showing me something, but I want that little bit more.

      Matt Stauffer:
      Yeah.

      Jess Archer:
      But then we can incorporate that into our seeders. So having that kind of combination of seeder data with tons of scenarios, but then continually incorporating new things into it and still testing with live data and dogfooding it. I mean, we use Nightwatch to monitor Nightwatch constantly. So we're always in there and we have to kind of switch context of like, I'm using this like to solve a problem versus like I'm building the thing. And sometimes it's kind of frustrating because it's like, I'm using Nightwatch.

      Matt Stauffer:
      Yeah. Yeah.

      Jess Archer:
      Like just as a tool, like I'm just using it. And then I spot something and I'm like, do I go fix that? Or do I continue actually doing the thing I was originally there for? Yeah.

      Matt Stauffer:
      It's not what I'm here for, but I do want to fix it. Yep.

      I love that. Okay, we are at 44 minutes. I said we were gonna stop at 45, so I'm gonna ask you one last question. Sorry to anybody who else's questions weren't asked. But my friend Kenny Myers asked a three-parter. It was, how do you approach scoping and planning a project? As a part of that, how do you break down the work? And then a part of his question was, can I be your best friend? And I included this both because Kenny is very funny, but because also I just want you to see that it's not just me that thinks you're incredible and brilliant delightful, but there's other people in the world who have the opportunity to ask a question and they just need to kind of make sure they can throw that in.

      But realistically, how do you approach as a lead with the type of team that you have? And you and multiple other people at Laravel have mentioned, despite the size of the team, it still is very much like a we just do it our own way. There's not a ton of process and overhead and each team runs their own way, but still.

      You've got a team that's more than just you and Tim hacking things out, right? It's a big enough team to be really interested in the question of what does it look like for you all to say, okay, we have to build the entirety of Nightwatch. Where do you get started? How do you break it apart? Are you doing weekly cycles? Just kind of what's the process like for you?

      Jess Archer:
      Yeah. So, I mean, the process has changed a lot as things have matured. So in the very early stages, it was just, just hacking around proof of concepts, just following wherever kind of the thing that was exciting was taking you, like letting, letting, just following like the interesting path, right. And, and just learning, it was kind of that discovery stage. Once we kind of had done all that exploration and learnt what was possible, what was hard, all those sorts of things. We were able to kind of then start to figure out, okay, what is this thing? How are we going to build it? What, what should it be? We got more people involved. So getting a designer in really early was really helpful. So we got, Jeremy in and Jeremy's this amazing designer who really understands, like he's a product designer, not just a graphic designer. He's also like a front end developer as well. So he can implement his crazy designs, but he's kind of really great to work with because he can kind of.

      Matt Stauffer:
      Yeah. Yeah.

      Jess Archer:
      You kind of talked to him about like, this is what I'm trying to achieve. And he can kind of go through like the user experience of that. And he really understands the problem space. So yes. Kind of collaborating in that sort of way, but still very, very loose on organic. We weren't doing a whole lot in the early stages in terms of like actually writing out tasks and tickets and all these sorts of things. But as it got, as we got more people and as you know, was starting to get more serious, then we started using linear.

      I didn't really know how to use, you know, project management software. So I kind of just had a few different stabs at like different approaches of how to break stuff up and then basically put a bunch of things in there and kind of, then just forgot about it and wasn't updating statuses. But then we got a product manager who's also a developer. So it basically everyone on our team codes, no matter what the job is and he helped bring a lot more kind of order to the chaos.

      Matt Stauffer:
      Yeah, brilliant.

      Jess Archer:
      And yeah, really break it down into like separate parts of the application, figure out what the other teams are doing so that from like the management perspective, there's like the reporting sides of things is a little bit more consistent while still letting us kind of work in the way that we want to work. So yeah, we now break things down into, into cycles. So we do, I think we're doing three week cycles at the moment. We do like a little bit of kind of refining where we go through all of the things in the backlog and decide what we think we can fit into it. So it's, it has become a lot more official in those sorts of ways, but we still, you know, we'll go and pick up things that aren't in the current cycle and all those sorts of things. Like we want to be like agile in the truest sense, right? Of this thing over here is really calling my name right now and I can, I can justify it in some way or another.

      Matt Stauffer:
      Yeah. Yeah. Yeah. Is there a line somewhere in linear that just says at this point it can be launched? Like, do you have a definition of done somewhere?

      Jess Archer:
      Not, not strictly speaking. We kind of, set like various deadlines of like, we get to this point and it's just going to be as good as it's going to be. At that point, like we don't want to continually keep refining this thing forever and never launch. So we had to kind of draw a line in the sand where we go, okay, of all the features we are committing to, we now want to get those as polished so that they kind of meet up to the Laravel standard and anything else we'll just, you know put it behind a feature flag for now, and we can then finish it off properly and bring it in later. So we'd rather get something out there and yeah, have those few little bits and pieces turned off and add them in when they're ready.

      Matt Stauffer:
      Okay, as we mentioned before, we could talk for hours, I'm when I'm supposed to cut us off, but I have to ask you, is there anything else that you wanted to cover about any of these individual topics or what's on your mind or your heart about this or about anything else before we wrap for the day?

      Jess Archer:
      Not that I can think of. I forgot to answer Kenny's question about being best friends. Let's just start with friends and see where it goes.

      Matt Stauffer:
      Very well responded.

      Jess Archer:
      But yeah, nothing else I can specifically think of. I'm just super excited about this thing. I'm really proud of what the team has built. I'm really excited to get more and more people's hands on it. Yeah, it's, as I said, like using it ourselves is exciting. Like putting it on our own application has been exciting to see and learn things about our application that we didn't know about. So I'm really looking forward to everyone else kind of getting that same experience.

      Matt Stauffer:
      Well, this is not a brag, I promise, but until yesterday, I would have said I haven't looked forward to anything like I'm looking forward to Nightwatch, you know, like in quite a while. I, know, Cloud is very exciting, but I'm not in like the perfect target market for what's exciting about Cloud. But like Nightwatch, I've been like, since I heard about this, I cannot wait. And I've only gotten to click around it for maybe three minutes today. You know, I've been too busy on other things, but those three minutes were everything I hoped for, you know? And I'm like, I'm trying not to like overhype it.

      But I just like, I can't believe I learned so much about an app that has been running for years in a couple minutes in this tool. So I'm 100 % with you. I cannot wait to see everyone's response and everyone's experience of it. And personally, I can't wait to use it more. So as always, thank you for all the work that you've done here and everywhere else. And thanks for hanging out for a little bit today.

      Jess Archer:
      Thank you, Matt, I appreciate it and thank you for having me.

      Matt Stauffer:
      That's always a pleasure. And for the rest of you, thank you so much for hanging out with us and we'll see you next time.

      Creators and Guests

      Matt Stauffer
      Host
      Matt Stauffer
      CEO Tighten, where we write Laravel and more w/some of the best devs alive. "Worst twerker ever, best Dad ever" –My daughter
      Jess Archer
      Guest
      Jess Archer
      Core team @laravelphp
      How We Built Nightwatch, with Jess Archer

      headphones Listen Anywhere

      More Options »
      Broadcast by
      He went upon the sick report at once, and for three days thereafter raved of crucified women with fair hair, of children lying dead in the ca?on, of the holes in his boot soles, and a missing aparejo, also of certain cursed citizens, and the bad quality of the canned butter. And the Indian may be trusted to know of these. Here where the jacales clustered, there was grass and wood and water that might last indefinitely. The fortifications of Nature had been added to those of Nature's man. It was a stronghold. "Doctor, he can't die. He mustn't die," said Shorty in agony. "The regiment can't spare him. He's the best soldier in it, and he's my pardner." to Miss Jerusha Briggs, at this plais, and I will pay the "I did," answered Shorty. He was carrying his Belbis beam, of course. The little metal tube didn't look like much, but it was guaranteed to stop anything short of a spaceship in its tracks, and by the very simple method of making holes. The Belbis beam would make holes in nearly anything: Alberts, people or most materials. It projected a quarter-inch beam of force in as near a straight line as Einsteinian physics would allow, and it was extremely efficient. Albin had been practicing with it for three years, twice a week. Mating, he thought. If the chain of obedience was broken would the trees refuse to obey, in their turn? Puna had said so, and it was true. And if the trees refused to obey there would be no mating.... "Wandered, you mean. Just wandered off. And—oh, I suppose a few have. Our methods aren't perfect. But they are pretty good, Johnny: look at the number of Alberts who simply stayed around." Then suddenly she began to plead: He took his place beside her, but he could not fix his mind on what they sang. In the intervals between the[Pg 153] anthems he was able to pour out instalments of his tragedy. Bessie was very brave, she lifted her eyes to his, and would not let them falter, but he felt her little coarse fingers trembling in his hand. God save the Queen!" Tilly had a spurt of anger. HoME大话西游免费版法宝用经验升一级要多少 ENTER NUMBET 0017
      tewei3.net.cn
      chizi8.net.cn
      www.zbfbjm.com.cn
      www.ylcn.net.cn
      www.watchwear.com.cn
      www.qpaw.com.cn
      www.miyin3.com.cn
      www.dekan6.net.cn
      www.iminii.com.cn
      www.ashapz.com.cn
      日本女同性爱毛片 妹妹av黄色 色女人激情图 双飞做爱图 6655人体亚洲 WWW.720BB.NET WWW.LBPMK.COM WWW.GEGE0.COM WWW.9ZY.COM WWW.AKXS6.COM WWW.SE59.COM WWW.V2511.COM WWW.TE3456.COM WWW.WUYESE.COM WWW.HNYEZF.COM WWW.977X.COM WWW.465E.COM WWW.CRXZ.COM WWW.OMYTVS.COM WWW.ENET.COM.CN WWW.8FKD.COM WWW.HYWIC.COM WWW.313K.COM WWW.NI37.COM JESSCIA.STROUP WWW.MXIEZI.COM MIDE543荒木在线 偷拍自拍在线录音 欧美少妇乱淫图 怡红院更新前的主页 黄影视 裸片A片 全球免费共享视频在线 岳母丝袜乱论 mcomcomc免费A片在线播放 大型色小说 www搞处女cn 中文往往对电影 欧美sm免费无插件在线视频 亚姐妹 咪米色网站 亚洲视频国产自拍亚洲色图 怎样进黄色电影网站 华人av偷拍视频在线 亚洲色图美利坚 oo后自慰高潮网站 性爱技巧9页 色色影www38rjcom wwwribi 美国伦理母亲电影 57AV00com 超碰涩涩涩 自拍偷拍卡通动漫黑白中文 内射妹妹 快播 3344nq 福利云点播免费日本A片黄片 144人体图片 appssav25com wwwpp856cc 人妻熟女自拍在线播放 快播理论黄色片 看老婆被技师抽插 少妇舔阴茎 欧美色网胖女人 kk44kk44com 黄色淫乱片子一 澉情五月网vv99vvcom 成人丝袜视频大全集 a资源吧亚洲首页 丝袜电话 在线影院淫色熟妇 欧美成人网站555dvd 西西性爱电影 黑太阳731续集之杀人工厂 欧美丝袜整片 sexwww ddfnetwork免费 射精卡通动漫 黄色l乱伦 变态强奸片 强奸乱伦破处 欧美干老太婆 小泽玛利亚女上男下 cao320AV 快插毛片电影百百度 淫淫色色色色 撸吧全迅 操少妇双洞齐开15p 日本有什么黄直播app 动漫啪福利 大香蕉霞 1769导航 成人文学公共汽车 老婆的淫荡晚会 大鸡吧在线av 成人嘿咻嘿咻网 成年人电影毛黄片 国语对白干妈视频 老头抽插美女 亚洲超碰撸撸在线视频 神雕侠侣伦理片 wwwbibiav520com WwW683kKC0med2k 每天射十次大叔 www97kxwcom av能看的操逼 WWW48com 一本道性欲?⒌纳俑 姐姐在线爱 在电影院偷情舔逼 3366vod下载 成人玩具哥色咪色 发嫩藤 和姐夫做爱吸乳 御姐很哀伤ckplayer wwavav521com japanesex无码日本动漫 色色哥哥色 孙丽让谁干过 淫chacha 张柏芝艳门b照图片 操中年女人的肥臀骚逼 长谷川由奈写真 妺妹网日本人体人体图片 cccaobipian 亲家母狠狠撸 东莞扫黄女子图片 欧美骚妇淫色诱惑图片 很很干很很撸图片 淫乱无码网站 最大胆美女人体艺术 她噢片级 春暖花开有你性亚州 无码 颓废的国模林邈子 pptv色色电影 超爽的性爱16p 影音先锋南洋第一邪降 肏阴部 手机性爱视频综合社区 丝袜诱惑小穴 台湾妹视频 66abcd怎么不能看了 国产人妻多年3p4p激情照62p 回家开门时被人强行拖进家中强奸中的女优 亚洲激色图 医生强奸 等爱的玫瑰 petsaga 生死狙击辅助 dewsuperior 操骚逼女 少女之交配 偷拍wc欧美 欧美女与动物发生性关系视频 影音先锋影院影视 99人体艺术网com 哥哥ppp 操乱伦操骚逼小说 乱伦另类撸 撸一撸色奶奶有妓看 韩国嫩白美女小穴图片 韩有天伊宝媛 亚洲另类先锋快播 超碰肛交免费视频 五月天丁稥婷婷 人体艺术女同性恋视频 翘起鸡巴日亲娘 亚洲性爱视频网站 国产AV资源百度云盘 东亚兽皇 韩国日本偷拍自拍视频 操昏迷女逼图 骚穴黑丝口 亚洲欧美卡通动漫偷拍自拍 theporn最猛成人网站 大鸡巴干衅电影 人体艺术图片有人体艺术图片 37av免费视频 漫画淫图 浴室性片 人妻被公公操的动漫 葫芦岛性息 轻吻也飘然在线福利 www老人兽laojjcom 韩国高中生美穴 日本人体阴唇艺术摄影 兄弟交换夫妻用 20岁成人免费视频在线免费试看 韩国美女主播阿里快播 商务qq黄色片 2017伦理电影手机农夫山泉在线 68人体艺术私处 赶紧撸东北浪妇偷情小说 010酷播妹妹 HDXXX幼女 国产超级法在线 俄罗斯人与shou 成人三级片黄片毛片 四虎相关网站 夫妻交换高清图片 米雪儿麦库尔A片 干少妇丝袜小说 色久久影院app最新版 贾静雯三级片 舔b全露视频 聊城交通违章查询 爱色影天天色 美丽熟女网 香港大胆人体 丝袜骚妇丝袜腿模 我的第一次被干从清纯到淫荡的幼儿教师 色中色人体艺术电影 美国裸体俱乐部 黄色一级倨情 91retvwww91retvm91retv 玉蒲团淫女 调教母狗的网站 另类激情小说淫色人与兽 五月天涩涩爱 情欲轮奸小说 移动上不了h网 东京热大乱cd2rmvb 怎么在快播里看黄片 前田かおり 红磨坊影院 高清成人图片 开心激情影视 美女娃娃做爱 御の二代目谁有E谁有G 色五月女王来了图片 俺去橹 色七七2018综合 久悠影视 李宗瑞偷拍影院 日韩αv小视频 vv影院 蒂亚AV资源 avtt144 韩国美女与男友宾馆开房嘿呦自拍表情销魂,我一旁拍摄她男友不行换我上,嫩 午夜丁香花在线电影 青青私密视频 性交无码教学 在线看片瑟瑟爱 日橹免费在线 酒店真实高清露脸对白 亚洲 小明看看 大香蕉X影院 阿v影音在线观看 五十岚纪子在线视频 诸葛影院在线理 日日夜夜不卡另类视频 了:国产自拍 亚洲狠狠色无码视频 黄色咸网 9877黄小游戏大全手机版 新视界影院 magnet 日本AV黄图 mp4 福利大鸡吧 九州资源永久免费视频 真人啪啪啪视频AV 邪恶插阴口动态图 五福影院aⅴ凹凸av 中国内地在线av免费视频 看看十八岁的性器官视频 淫荡便器电影 亚洲VS天堂 ssn190 谷露影院手机在线0 成人A片 迅雷下载 aiaifulidaohang snis885磁力 834成人视频 手机在线电影 国产区 色青春亚洲综合 影音先锋资发布站 香港成人夜色影 221sihucim 彩乃奈奈中文字幕在线播放 h版神探夏洛克下载 丁香五月网韩国主播 xxo影院 大尺度广场舞视频 日本换妻性交视频 一本道mag magnet 免费色系视频二十多分钟 2018仙女屋19禁电影大全 色酷狠狠干 8090电影风筝 女仆资源 曰本黄色视频免费高清 好XXOO在线视频 潮喷合集丝袜无码mp4 看着我的女友变淫荡 mp4 成人看片小视频 四虎影院手机观看视频 五月丁番 巨乳无码电影 平凡夫妻性生活自拍 3p美女拍拍 91密秀官网 九九深夜福利在线免费试看 干妹妹高清在线影院 依人综合在线观看视频 水上百合中出孕妇 sss黄片 洗澡自慰在线播放 三d影院深夜不再寂寞 色站导航丁香色 迅雷无码冲田杏梨 AV走 ssni-056 胸部跳蛋视频 小泽玛利亚无码在线视频 性交视频内射白浆视频 操洒店小姐 唐朝AV中文字幕 偷拍福利萝莉 后入大屁股美女全集 亚洲高清自拍有码 吃女友的胸她娇喘 日本高清959dd 一级黄色录像带 tyod-278hd 整个福利 感谢不删好友不屏蔽之大恩院线同步电影 发给没时间去电影院的朋 今日排名第一页长片 xooⅹ430 爆乳保姆激情电影 国产自拍裸照 mp4 操日本美女视频播放 被控者完整版在线观看 色搜在线播放 深夜直播 magnet 色悠久久桃花综合网 另类小说五月天综合网 色琪琪aⅴ stringendo av仓库永久地址 ww884aaco wuxiaorui renrenmoshiping japanese AV 谭晓彤在线福利视屏 成人操逼激情视频 维他命色vvtvt av宫前幸惠在线观看 颜射大奶在线播放 透b叉叉在线自慰视频 老司机影院院写真集福利 国内自拍va偷拍视频 本庄玲在线 国产足j在线观看 播放3个98年艺校小美女买完零食回来比赛 草榴在线自拍 国产在线 幼幼在线av 校花啪啪啪影院 少女哥哥我想看那个床震作文 换妻性交真实影片 日本做爱全集 酒色成人网1314 日韩欧洲淫荡视频 7zav gouhemaoxingjiao 国产自拍操逼直播 迷奸技师 花井美纱 真性中出在线播放 萝莉还债视频内个 热热色源20在线观看 让人想不到样子清纯的妹子居然在公园色诱个老头到厕所调教舔逼喝尿吮脚趾看大爷那 骑士影院宅男福利 苹果在线免费看a片 性女传奇 干小妹妹 美女写真摄影视频 真实破处妹子被日哭了 逼里香1 正在草她老公打电话来一边草一边打 风吟鸟唱摄影师嫩模 黄色网站在线视频 欧美裸体模特展示阴部app 欧美番号库 哦快拿大鸡巴操我 mp4 黑人大干金发美女 老司机免费福利AV 捆梆绳模羽洁视频 成人视频 你懂的 操我2 1乱伦强奸图片 淫色戏院 在线超碰天天 先锋AV 现场 sexo 漫话 东方在线αv 群交视频种子 街头射头视频迅雷下载 男同志cartoonyaolp 男人的福利你懂得 免费不卡的亚洲AV 影院在线观看 乖妈姨通叔伯 av大明星97影院 55xxp。て0M 并木优 一周年 穿线资源合集 mandingo 黄可46分钟三邦车视 美女妹妹自慰视频 888kbkb 六月停婷 澳门 人人g 漂亮的小姨h小说叶凡 黄色视频青青草 伦理片工作的女人斩 图片区成人福利 欧美激情 在线观看‘’ 美女内射无码 免费直接看片的网站 窥器美女 清纯援交女偷拍 大胆美丽人体漫画 波多野结衣被内射图片 快播石狮艳照门 成人电影导航qvod 成人大尺度gif 黄色录像强奸片 欧美人体私处摄影 真实夫妻生活 人体艺术照片逼特写 意淫强奸 宅男福利屌丝 � 汤加丽巴巴拉 偸拍骚妇 解说大咪咪女生丝袜 淫荡美骚妇的激情 公媳吸乳奶妈诱惑 WWW_7PO_COM 熟女内田由衣快播 人体艺术性爱小 333kikicom 人妻凌辱 快播网 男女操逼片视频 大鸡吧肏屄里了 少妇内射潮吹 快插我的蜜穴 爱爱快播撸一撸 韩国十八大禁片种子 前黄小学校车迷奸案 欧美肥妞妇乱 亚洲色图 欧美色图 经典三级 大色体 东欧少女 无码 小说 bt 亚洲 论坛 嫩臀骚逼 乱配母导航 红楼十八春tu seseav图片 成人色视频xp 吉吉影音母乳片 岛国色色图片 大鸡鸡插小屁眼水真多 韩国女主播夏娃7部合1部影音先锋 人之初性本善 高级电工证 生活观察网 北京天安妇科医院 中国铝业中州分公司 我的美艳舅妈 志村玲子与黑人图片欣赏 李宗瑞吴亚馨未经处理 网友自拍丝袜足交视频 春暖花开性吧校园春色 日韩美女裸体自拍艺术照 什么都不用下载无毒性片视频 堀北真希无码 涩涩爱综合 人体裸舞 da骚屄 西西妹妹大胆的展阴 冰奇套图种子 www510ccam 韩国色网站 小说交换的妻子最有味 guomobaibi 波多野结快播放器下载 123操b 爱鸡巴的小穴 我轮着干了两个女学生 和多人操逼的感觉 自拍偷拍视频下载 成人裸照无马在克 东京热快播最新成人电影 人兽交视频网址 热点资讯天天网美女人体艺术鳖客网 欧美奶奶15p 黄色少妇天上人间 西西人艺美女肏穴 少妇用卫生带 主角叫小满的乱伦小说 搞女儿被老婆发现15p 亚洲包色图 偷拍江祖平美腿图片 堤莎也加torrent 色尼玛乱伦性爱电影 少妇丝袜在线狠撸 不卡影院27号早间九龙电玩捕 爱主播怎么让主播看不见你 日本av在线sss 免费大片ccc858com 河北传媒北区偷拍 日本av删除删除删 亚洲专区一本道 老汉玩肥婆 东方大鸡巴 天龙淫女传 WWWBET365COM 韩国炮友打炮自拍视频 韩国女主播高清图片全集 骚逼老婆做爱露逼视频 隔壁邻居乱伦做爱小说 极品人妻援交系列套图 人体艺EEcom 苍进空av网址 综合插插a 操妈妈屄15年 日本h彩漫 生物老师被操 性爱自慰碰碰视频 波多野结衣熟女乱伦图 超碰免费视频caopocaowwwblz1000com 日本特级女人无码 家庭乱伦幼幼操逼小说 儿童爱爱网站 幼幼圣光福利 伊伊人妻 AV日日逼 大奶子被干了快播 好吊日AV在线视频19gancom 19isecom色哥哥帝国 模特屄re 淫香五月天 调情网址 优优人体艺术爽图 成人全彩动漫 好屌妞大色网小色网 亚洲欧美制服卡通heshizfucom 老师干儿子淫秽 男生的鸡巴操草你生的蛋裤子黄色视频 五月天激情古典 空姐丝袜大乱11p 免费看欧美黄色大片网站xxx av国语版 被虐家庭女教师 人与兽乱仑 最新里番社区 yyaaVvmagnet 三级黄色添下体 伊人在线视频变身6 wwwpp6scpm 处女草草www 网友自拍seba 520最大胆人体艺术 人妻性爱淫乱 姐弟经典性交thunderftp 泽尻绘理香作品快播qvod百度影 苍井空作品下载网盘 波多野结衣逼器 婶婶的原味内内 我与姐姐乱轮小说 偷拍自拍高潮影院 AV视频色图 华人95偷拍自拍视频 东亚AV 影音先锋熟女少妇 五月天激情亚洲图片区 7777bbcom 沈阳推油 日本A片555影院 欧美36d性爱 图片区偷拍自拍15p 怡春院分站 酒色网 美女 撸撸射秘密爱 yy44bbcomcaoporn29htm 影音先锋av天堂2015 曰本骑大哥操逼自述 亚洲五十路熟女在绒 郑州换妻俱乐部偷拍 撸撸色最新网站 亚洲AV_插插射射 巨乳泽井芽衣在线无码 985bbcon pp494c慰m 人兽性爱欧美三级片 金发天国在线播放1 少妇艺术人体图片优优 9h明星合成裸体网 毛片基地美女图片 鸡巴插小美女淫穴 眼镜少妇参加老外群P聚会有5个黑鬼真正操到爆三洞已爆废 经典千人斩首页wwwiiii41com 米奇第四色骚姐姐 天使社区换成什么平台了 亚洲在线做爱 中文亚洲欧美 35vucom 开心色色自拍偷怕 快播电影日本理论片 美女高跟踩踏图片 偷拍厕所在线 成人撸多宝 在线播放富家女被干 性涩影音app 专业偷窥在线视频 久久精品视频在线看99-百度-百度 美女拷臂动态图 牛牛射在线av ymdd099磁力 校园春色系列小说合集 让你的女友高潮吧 亚洲第一AV天堂网 兰桂坊野战视频种子 做爱漫画小说图片 871kkcm 日本成人图片小说ed2k 韩日撸逼 鸡逼逼在线视频 清纯唯美在线国产亚洲色图美腿丝袜 美穴撸 性交后尾图片 大香蕉伊人萝莉 黄色日逼紧逼医院护十 天天更新欧美性爱日韩AV国内自拍偷拍电影 色色资源最新地址2017 dizhi99妹控 类似于蜜桃影院的网站 李小璐被强奸乱伦 卡戴珊三级 插进射吸爽春 黑丝诱惑亚州性夜夜射 丝袜夫人 类似巨乳淫奴的小说 美女咆轰图 WVW2499 90后美女做爱图片 干死美女电影 刘亦菲阴道毛多吗 欧美视频xxx 最新电影2014sewoyingyin 我和小舅妈的故事 色史中色 av兽 黄网视频 黄色网站电影二级影片 人体艺术toupian 我干美女老师做爱 黄色日批照动态 日本丰满熟女五十路 xxoo无插件 张悠雨房乳特写 水水美妹 原纱央莉大尺度人体 des574 儿子的面前太过美丽的妈妈 操b激情文 美女双穴被奸 福鼎市人民政府 银子变黑 侯镜如 日本逼操图片 丽江美女偷情 偸拍野站视频 做爱大全视频观看 男人添女人乳头 色女16p 女性抠穴图片集 日本女老师的小穴图带毛的 屄最黑女明星 激情漫画套图 百度搜索成人影视小说 翟凌的无码图 mm六月天 台湾美女叫床 女子学校返回途中乱搞6p淫乱大派对02 妺妹林人体艺术 最好的我们神马影院 强奸迷奸轮奸 亚州图色干哥哥 黄片处女破处流血 淫大妈影院 立花20p 舔姐姐咪咪 岩佐あゆみ吉吉语音 长谷川凉子 欧美t0upaizipai 撸小人琪琪影院 幼少女口交 影音先锋幼幼黄色视频 涩涩网影音先锋观看 性感护士15p 得撸小说 小色哥脱衣舞 五月天成人操逼小说 人与动物法国zo0 有关做爱的网页 家庭伦理小说深爱五月wwwcbcb093com 成人美女视频免费wwwlu2310com 莎拉波娃五月天丁香五月 A片毛片免费观看天天干 噜噜色影院噜噜色电影色噜噜影视噜噜色网 索取玛雅最新网址 娇妻被淫记朱茵 色小说综合导航 欧美男女性抽插动图片 我爱咪咪影视网 暴力肛交小萝莉 我淫我浪 螺女挑情四级下载 91porr 大乳大臀美女的性爱15p www点爱人体点com 人兽杂交av电影免费下载下载 美女视频免费播放啪啪百度百度 poco能搜成人片 色妹妹sex 幼童pussy 女生未成年自慰网站 wwwzzjixxxxe 洗濯屋手机在线观看 人人干全免费视频xulawyercn 黄色片做爱后入式 中国伦理电影网站大全 操操曰偷拍上传 WWW唐人电影www69rrrrcom 777sejingwang 大色网不用播放器 视讯主播先锋 kanxxx 日本女人大屄图片 父子乱轮 姐脱你看淫淫 操久国产片 成人Hh漫画 日本人体艺术窝窝妹 韩日女优大奶视频 欧式性爱满足你的欲望【2937】 三级色图网 大尺度性交电影 鬼吹灯第二部有声小说 qq电台有声小说 电台播放有声小说 yuemu春色 vagaa樱井莉亚片子 小泽玛利亚1024800 小泽玛利亚口暴 求可以看的h网 www狗酷音乐com 开心尽情五月天 怎么在快播里看黄片 色狼巴士 性生活时间 征服淫荡少妇 撸时代 额尔撸 看片 magnet 色网站4438oxox 悠悠比资源 大香焦久草是易视 一本道手机高清AⅤ在线2017 香蕉视频app1024 mlgd488云盘 在线自拍大神约酒店 成人 免费 动漫 视频在线观看 超碰在线视频进入离开 杏花社福利成人 免费 动漫 视频在线观看 成人影院和狗 日本骚黄视频 在线白丝裤袜美女 欲望太平洋在线玩 手机看国产短片福利群 谭晓彤脱黑奶罩视频 操逼福利动态影院 百度97 成人自拍淫色 Caoporn任你操 第九影院男人社区A√电影 亚洲系列爱情动作影院 手机成人免费大全 sefuliwng 福立盒子 无毒福利网址大全 桃野铃 yJ丨zZ一Tⅴ 人兽杂交操b视频 桃奶木 淫妻妹 偷拍 自拍 一本道 青娱乐精品视频一级 夜店认识的高挑女白领一起吃饭喝多了,带到酒店趁不注意安放摄像头 澳门金沙大鸡吧操逼视频 人人操 人人妻 1自拍偷拍伦 神马福利小说图片大全 亚洲 偷拍成人视频 萝莉小逼 任你操这里只有精品6 午夜福利理论yy 4480 黑人与人妻中文系列 大佬色在线观看精品 26UUU亚洲一26 国产网红自拍福利视频 蓝沢润黑人在线播放 伊人网综合网站 偷偷摸视屏在线 黄色里番在线看1 弱气乙女 浴室套图 成人影院a在线看网址jajjaatat 开发三味 6无码magnet 飘花网sdde481 五月婷婷在线看 爱泽心梨在线 XRW-498播放 1024东方 SNIS850在线观看 汤姆影av 另类亚洲图片小说在线电影 超碰视频天堂 菲菲影院 东北娇妻土豪视频 大香巨乳家政爱爱在线 大学生兼职 偷拍下载 嗲囡囡在线福利视频tv 女主播朴惠恩福利 xiengjiaoshipin wwwsaobibi5353 打飞机推荐极品高颜值网红美女主播收费房大尺度福利高清无水印打飞机推荐极品高颜 人妻小悠福利在线 王薄团在线观看 色伦理片 穿着内衣做爱操逼的视频 2018仙女屋19禁电影大全 欧美老头av www4438X2com 伊人谷姐干岳电影网 偷拍自慰国产在线视频 94色人格影院第四色 avttt天堂2004 日本狼拍屋 香港皇室伦理电影 网红雅兴视频链接 84ab午夜剧场 桃大桥未久在线 一人一碰操视频 谷露做重 李丽莎福利 青青草成人成人电影 美女视频免费视频 jvid免费视频 正在播放 迪卡侬所有视频全集迅雷 图片区亚洲另类偷拍 欧美有码性爱 gqwuma 欧美中文合集磁力 木村都那迅雷磁力链接 黄色视频555 在线 里番 纯 av列表 岛国丝袜 色欲影视狠狠插 ac无码ac天堂 234hu四虎在线 动漫男人和女人操逼 小萝莉被内射视频 小日本做爱高潮视频 想要零用钱妹妹帮素股结果爽到自行插 性爱互插阴交视频 驯服吴静娴 崩坏之人璃沙 色在线视频综合影院 三邦车在线手机伦理片 熟女AV 视频 日本妞啪啪高清 公公夏夏天强奸未婚媳妇 www5595con 国产自拍白丝 西野翔在线播放叔母 近水楼台先得月 PORN 人妻 二人的春光 麻油拓也 柳岩磁力链接 草包网在钱精彩视频 黄色舔淫视频 超级诱惑 mp4 女主角医院看男友隔着帘子被搞在哪里可以免费在线观看 538国产视频视频无线 泰迪熊rct502在线播放 废柴导航青娱乐 海量无码av play sss 操逼126 4438成人网官网 色男人色天堂旧址 少妇自拍影片 韩日午夜404影院 ntr先锋资源资源 内地av 格影院第四色先锋 春丽成年AV动漫 车模聂子雨 成人3d动漫免费视频播放器 午夜福利第一村 2素人搭讪a片 哥也高色 西川结衣先锋在钱视频 紫禁城轶事哪里能看 成电人影在线电影。欧美图片 色WWW 午夜小视院 男女作爱后插鸡 色日本ww一澳门 xinh4610高清在线播放 黄片91福利 巨乳空姐在线播放 秽色福利小视频 苍老师视频福利 波多野结衣乳交的视频 国产自拍系列 揉捏胸玉兔视频 国产美女做爱视频种子 下载 一本道java高清 78y4 空姐不愿意拍视频被男友强干到高潮的视频 开苞视频迅雷下载 苍井空在线教师2015 haosedaohang 沧州天气4438x 亚洲无码视频下载 坐盗市最新流出电信营业厅女厕TP 亚洲伦理中文字幕总站 gouhemaoxingjiao 北原夏美无码 资源 噜噜色插 中国自拍视频, 上海罗城厕所种子 国产vdio 加朵ai视频资源下载 马配xX女人毛片 美女被黑人操音乐 马贼物语在线全文阅读 精品成人在线 黄页网站变态另类视频 古装爱爱伦理 4438x香蕉伊人 大鸡巴福利 35sao费永久视频 思思久久re免费视频在线观看 黑丝少妇迅雷磁力吧 女主女王sm视频免费专区 黄色性交裸频 华人成人视频 黄色录像真人试看 黄片蜜桃软件下载 黄图男视频 黄色网 下载 狠狠爱不卡天堂网 女王SM阉割 免费露逼网站 shen4club在线观看 dajiji33 美女作妇科检查被色狼医师偷插入肉棒内射 - 线上直播区 - 5278论坛- 我爱78论坛 - 国产av短视 首页—宅男 偷拍自拍福利院 www路bbb990路com sm乐园另类视频手机版 女主播自慰漏奶 国产自拍郑州局长与情人在宾馆 非洲大香蕉高清 在线 视频 激情 最新强奸乱伦中文字幕 关于欧美做爱视频图片 嫩穴鮑女 好xoo在线视频永久免费福利视频 AV国产福利资源 看得清的美国1级毛片 遥望南方的童年ED2K ROSI视频丝袜视频 2o17免费人妻视频 全国最大的网站4438 西瓜影音 男人天生爱风流 91 后背中出在线 李宗瑞1~16在线观完整 怡红院快播大香蕉 狼友成人福利在线 漂母色香 激情小说大奶少妇 美女无码不雅视频 四房播播色播电影bt 欧美口交足交 婷婷激情撸啊撸 女优与黑人的邪恶 屁眼集中营 有没有可以直接看的黄色网站 迷奸我的表妹 嫩苞流水图 我的嫂子是女女 巨乳苍井空人体艺术日本