Join us to discover the fundamentals and advanced techniques of programming and software architecture. Get to grips with microservices and event sourcing through practical examples. Subscribe for regular insights into cutting-edge software solutions. Also, follow me on LinkedIn for professional updates and networking opportunities in the tech community.
(فقط یه نقد خیلی کوچولو یه مقدار پشت سر هم صحبت میکنی و نحوه توضیح دادن منظورم هست و یکنواخت میشه ولی از هر لحاظ دیگه عالیه چه فنی چه توضیح دادن و...) انگار داری روخونی میکنی داداش
پیشنهاد میکنم وقتی که یک تکنولوژی را معرفی میفرمایید مزایا و معایب on و سناریوهایی که برای این تکنولوژی مناسب است در محتوای خود بگنجانید تا برای مخاطبین حرفهای نیز بیشتر مناسب باشد
با تمام ارزشی که برای کانتنت تو قائل هستم ولی دیسلایک کردم. اطلاعات اشتباه دادی. مباحثی رو با هم مخلوط کردی که ربطی به هم ندارن Cqrs یک معماری در حوضه infrastructure هست. ربطی به لایه های بالاتر مثل service نداره. تو توی مثالت اومدی از لایه presentation جدا سازی رو انجام دادی Microservice ها بر اساس read و write مرزبندی نمیشن. بر اسلاس مرز های منطقی جدا میشن. به طوری که هر کدام بتونن سرویسشون رو بدن و مستقل باشن. اگر شما برای کار با یک موجودیت نیاز به ارتباط با micro دیگه دارید این یعنی بیش از حد خرد کردید مرسوم که ابتدا سیستم رو از لحاظ ddd به agregate های مختلف تقسیم میکنن بعد هر کدام یک micro میشه زیاد شد. ببخشید
در مورد جمله اخرتون نمیشه گفت همیشه زیاد خرد شده شما یک میکرو برای سفارشاتت داری یک میکرو جدا هم برای یوزرت داری خب برای یک سری از کارها نیاز داری داخل سفارشت به یوزر هم دسترسی داشته باشی میتونستی جفتش رو داخل میکرو سرویس بزاری؟مسلما نه
@@arshiapiri9288 اینجا در یک سناریو اگر وابستگی و نیاز به اطلاعات سفارش زیاد باشه در مایکرو اول مثلا اون میزان اطلاعات که از سفارش نیاز رو نگه داری میکنن و در مایکرو دوم کل اطلاعات سفارش مایکرو اول تاریخ سفارش مبلغ کل مایکرو دوم تاریخ سفارش مبلغ کل اقلام و... و هنگام درج سفارش جدید در مایکرو دوم توسط بروکر به مایکرو اول اطلاعات مورد نیاز با یک event پاس داده میشه حالا اگر وابستگی و نیاز زیاد نباشه یا از طریف یک بروکر(rabitmq. Kafka) اطلاعات رو از مایکرو اول میگیره یا با grpc به صورت مستقیم(من فقط با بروکر کار کردم با grpc کار نکردم دقیق این روش رو نمیدونم) من خیلی پر چوونه ام 😀
توضیحات خیلی خوبو کامل بود 👌فقط بعدا اگه یه ویدیو درباره سطح های ایزولیشن ترنزاکشن ها که چهار سطح مختلف دارن مخصوصا برای اس کیو ال ها و چه فرق هایی باهم دارن بستزین عالیه میشه
سلام مرسی از ویدیو های خوب و ساده وکاملت. خواستم یه ایده بدم فک کنم جالب باشه. پیاده سازی یه مایکروسرویس چند تا سرویس کوچیک داره و این داره از rabbit mq استفاده میکنه خیلی میتونه کاربردی باشه. ممنون
سلام و درود محمد جان ببین کاربرد rabbit mq دقیقا تو یه همچین سیستم هاییه! و اون سیستم باید event sourcing باشه یعنی اون میکروسرویس ها لازم داشته باشن با ایونت با هم ارتباط برقرار کنن
یک مثال عملی بزنید ..اینکه تئوری بگید که فایده نداره! ضمنا ورژن ۷ مشکلات اینجوری رو رفع کرده... یکم کاربردیتر توصیح بدی بهتره واقعا اینجوری ادم چیزی نمیفهمه همش در سطح مفاهیم ساختمان داده صحبت میکنی واین خوب نیس
درود رضا جان دمت گرم از فیدبکی که بهم میدی! ببین من باز سعی می کنم بیشتر مثال بزنم یا اسلاید بیشتر درست کنم ولی تئوریه دیگه کاریش نمیشه کرد مثلا تهش بتونم ۲ میلیون دیتا اد کنم با uuid یه ۲ میلیون هم با uuid بعد مثلا range بگیرم که ببینین سرعتش بیشتر شده یه رم مثل چقدر سریع پر میشه و ... زیاد نمیشه با این مثال ها چیز انقدر تئوریو نشون داد درمورد uuid ورژن ۷ دقیقا درست می گی! میشه تو توضیحاتی که تو ویدیو دادم به جای ulid در نظر گرفت
مثالتون از سیستم شورت لینک اونجایی که یو ال آیدی داریم و پنالتی میخوریم سوال ایجاد میکنه. آیدی سطر های شورت لیست مرتب در یک پیج در رم هست شما از کجا مطمئنی که همش مال یه کاربره؟ اصلا آیدی کاربر تو این جدول مگر موثر هست؟ خولندن دینا مگر یک به یک نیست؟خب چند کاربر به صورت همزمان اینسرت کنن تو یک پیج پشت سر هم دیتای دو کاربر هم مگر پشت سر هم در یک پیج با لاک های متوالی نوشته نمیشه؟ با فرض تعداد بچ رکورد ورودی کمتر از پیچ سایز
درود برشما سوالات خیلی به جاست! ۱- در صورتی که مثلا سیستم به این شکل طراحی شده باشه که مثلا ۱۰ تا لینک بگیره و ۱۰ شورت لینک تحویل بده این امکان وجود داره که همه یک page مال یک نفر بشه! ۲- من منظورم id کاربر نبود منظورم id هر کدوم از اون short like هاست! یعنی یه جدول داریم که توش هر سطر یه uuid داره یه short link یه link اصلی کاربر و مثلا یه created و deleted at و ... ۳- منظور از خوندن دیتا مگه یک به یک نیست رو نفهمیدم! ۴-ببین من فرضم بر این بود که کاربر ۱۰ تا لینک همزمان می فرسته! و با فرض اینکه پیج سایز از این ۱۰ تا بزرگ تر باشه، اره امکانش هستش که یه کاربر دیگه کوری بزنه و باز دیتا به ادامه اون page اضافه کنه
درود. همه ی دیتابیس ها از اینULID پشتیبانی می کنند؟ دیتابیس چطوری تصمیم میگیره که چون uuid وارد کردیم باید ی page جدید باز کنه واسه insert و این که ulid بدیم تووووی ی Page عمل insert رو انجام میده؟ چطوری تضمین میدن دیتابیس ها؟ مکانیزم ش چیه؟ مرسییی
درود علی جان ۱- ببین ulid و uuid هر کدوم یه string چیزی نیست که دیتابیس پشتیبانی بخواد بکنه یا نکنه. صرفا باید مثل بقیه تایپ ها و دیتا هایی که ما بهش می دیم استورش کنه ۲- دیتابیس اون فیلدی رو که ما براش به عنوان کلید اصلی انتخاب کردیم رو استفاده می کنه برای اینکه بفهمه باید تو کدوم page دیتا بریزه حالا اگه اون کلید اصلی ما قابل سورت کردن باشه اون میاد یک page رو بر میداره و هر دیتایی بیاد رو به ترتیب داخلی اون میریزه تا وقتی که اون page پر بشه و وقتی پر شد میره سراغ page بعدی و وقتی این کار رو می کنه همون جور که توضیحش رو تو ویدیو دادم فایدش اینکه اگه دیتای اون کاربر پشت سر و توی یک ریکوست (توی یک بچ) هم وارد شده باشه پس توی یک page هم ذخیره شده و همه دیتارو می تونیم از همون یدون page برداریم حالا اگه اون کلید اصلی ما قابل سورت کردن نباشه هر دفعه که یه ریکوستی میاد با توجه به اون id میاد دیتاش رو تو پیج های متفاوت میریزه و حالا ممکنه که دو تا ریکوست رندم تو یه page هم بیفتن
@@kiarash-amiri مرسی از توضیحاتت همین پاراگراف آخری که فرمودی، منظورم از ساپورت کردن همین تشخیص sortable بودن یا نبودن بود. اینکه دیتابیس رفتار متفاوتی در برابر تایپ id ای که بش میدیم خواهد داشت یا ن. لاجیک insert دیتا تووو page ها رو تغییر میده بر اساس تایپ آنچه به عنوان id انتخاب کردیم یا ن.
سوال مهم اینه که اکثرا نمیان از uuid بعنوان کلید اصلی استفاده کنن 😁 چون طولانیه. راه ساخت یه کلید اصلی کوتاه ده کرکتری یونیورسال و یونیک و غیر متوالی چیه؟ مثل یوتیوب! ایا یوتیوب اکزیست بودن ای دی رو میاد قبلش چکمیکنه؟ اگه چکمیکنه که کاست داره؟ اگه چک نمیکنه چطور در کلاستراش مطمینه که ای دی تولید شده یونیکه؟ شرمنده کیارش یخورده بخام نقد ت کنم توضیحاتت عالیه ولی همش تئوریه دانشگاهیه و در عمل خیلی سخته درک توضیحاتت. سوال دیگه اینکه یک وبسایت کوتاه کننده لینک، به شما یه لینک کوتاه میده. درسته؟ و اون آی دی کوتاه کلید اصلی جدوله سایته دیگه. نقش uuid این وسط چیه؟
درود بر تو فرزاد جان ۱- ببین اتفاقا چیز معمولیه که بیاد uuid رو به عنوان کلید اصلی استفاده کنن! و برای ساخت یه id ده کاراکتری من مثلا nanoid میشناسم می تونی استفاده کنی و یه نکته ای که هست اینکه وقتی ما می گیم که یونیک یونیورسالی یعنی اینکه احتمالش خیلیی خیلی کمه دو تا id شبیه هم باشن و هر چقدر که تعداد کاراکتر های اون id کم تر باشه و تعداد کاراکتر هایی که میشه توش استفاده کرد کم تر باشه، تعداد کم تری id یونیک میشه ساخت و در نتیجه احتمال اینکه دوتا id مثل هم ساخته بشه بالا تر میره مثلا با 10 رقم + 26 حرف کوچک + 26 حرف بزرگ میشه برای یه id که ۱۰ کاراکتر داشته باشه ۶۲ به توان ۱۰ (ترکیب یا combinations) ساخت که uuid خیلی combinations بزرگ تر میشه
۲- من نمی دونم یوتوب داره از uuid استفاده می کنه یا نه. ولی کلا یکی از دلایلی که از uuid استفاده می کنن همینه اصلا که لازم نباشه هر دفعه چک کنن که یونیک هست یا نیست! احتمال اینکه دو تا uuid یکسان ساخته بشه خیلییییی کمه! و طبیعتا چک کردنش هر دفعه کلی کاست داره! یعنی می تونی بیای تعداد کاراکتر های id رو کم کنی ولی از اون طرف کاستش اینکه احتمال دوپلیکیت رو بالا می بری و شاید لازم باشه هر دفعه قبل insert بیای چک کنی که یونیک باشه
و در مورد نقدرت هم بگم که خیلی خوبه که نقد میکنی! بازم سعی می کنم حالا با مثال یا ساختن اسلاید های بیشتر ویدیو هارو قابل فهم تر کنم ولی با توجه به اینکه ویدیو ها تئوریه بعضی موقع ها طبیعیه چند بار ببیینی ویدیو هارو و با سوالتتم خیلی حال می کنم که مطرحشون می کنی !
یه مورد دیگم که فراموش کردم اینکه برای اینکه لازم نباشه id هارو قبل از اضافه کردن به دیتابیس برای یونیک بودن چکشون کنی احتمال داره به توجه به سیستمت مجبور باشی حتما سمت خودت جنریت کنی نه این که کاربر بتونه اون رو بفرسته!
منظورت اینکه گرفتن دیتا از دیتابیس با لینک کوتاهش انجام میشه نه Id؟ ببین نکتش اینجاست که وقتی کلید اصلیت uuid باشه اون داستانی که برای page گفتم پیش میاد یعنی میای ۱۰ لینک رو دیتاشون رو داخلی یک page میریزی و موقع گرفتن اون page رو باز می کنی و کل دیتای یک نفر روشه ...(توضیحش رو تو ویدیو دادم) میشه index روی اون short link هم گذاشته باشی ولی در نهایت وقتی می خواد رو page ذخیره بشه از همون uuid استفاده می کنه دیگه