🔵 عنوان مقاله
on using JSON schemas in Go
🟢 خلاصه مقاله:
** این مقاله به مزایای استفاده از JSON Schema برای تعریف، اعتبارسنجی و مستندسازی دادههای JSON در Go میپردازد و نشان میدهد چطور میتوان این رویکرد را در یک جریان کاری «schema-first» بهصورت عملی پیاده کرد. محور بحث، نگاشت دقیق قابلیتهای JSON Schema به انواع ایستا در Go است؛ از چالشهایی مانند فیلدهای اختیاری، additionalProperties، enumها، nullability و ترکیبگرهایی مثل oneOf/anyOf/allOf تا تصمیمهای طراحی میان رویکردهای مبتنی بر reflection در زمان اجرا و code generation در زمان ساخت. مقاله سپس به کار انجامشده در Google، بهویژه در مخزن google/jsonschema-go، اشاره میکند که هدفش ارائه نگاشت پایدار schema↔type، اعتبارسنجی سریع و گزارش خطای قابل اتکا است. در ادامه، مخزن ianlancetaylor/jsonschema نیز معرفی میشود و نقاط همگرایی و تفاوتهای رویکردی آن بیان میگردد. در پایان، مسیرهای آینده مانند همگرایی بهتر با OpenAPI، تقویت codegen برای ویژگیهای پیشرفته، راهبردهای تکامل schema و یکپارچگی عمیقتر با ابزارها مطرح میشود تا توسعه مبتنی بر Schema در Go هم قابل اتکا و هم خوشتجربه باشد.
#Go #JSONSchema #Google #golang #APIs #Validation #OpenSource
🟣لینک مقاله:
https://golangweekly.com/link/176345/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
on using JSON schemas in Go
🟢 خلاصه مقاله:
** این مقاله به مزایای استفاده از JSON Schema برای تعریف، اعتبارسنجی و مستندسازی دادههای JSON در Go میپردازد و نشان میدهد چطور میتوان این رویکرد را در یک جریان کاری «schema-first» بهصورت عملی پیاده کرد. محور بحث، نگاشت دقیق قابلیتهای JSON Schema به انواع ایستا در Go است؛ از چالشهایی مانند فیلدهای اختیاری، additionalProperties، enumها، nullability و ترکیبگرهایی مثل oneOf/anyOf/allOf تا تصمیمهای طراحی میان رویکردهای مبتنی بر reflection در زمان اجرا و code generation در زمان ساخت. مقاله سپس به کار انجامشده در Google، بهویژه در مخزن google/jsonschema-go، اشاره میکند که هدفش ارائه نگاشت پایدار schema↔type، اعتبارسنجی سریع و گزارش خطای قابل اتکا است. در ادامه، مخزن ianlancetaylor/jsonschema نیز معرفی میشود و نقاط همگرایی و تفاوتهای رویکردی آن بیان میگردد. در پایان، مسیرهای آینده مانند همگرایی بهتر با OpenAPI، تقویت codegen برای ویژگیهای پیشرفته، راهبردهای تکامل schema و یکپارچگی عمیقتر با ابزارها مطرح میشود تا توسعه مبتنی بر Schema در Go هم قابل اتکا و هم خوشتجربه باشد.
#Go #JSONSchema #Google #golang #APIs #Validation #OpenSource
🟣لینک مقاله:
https://golangweekly.com/link/176345/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍1
🔵 عنوان مقاله
Go's Green Tea Garbage Collector
🟢 خلاصه مقاله:
** در Go 1.25 یک garbage collector آزمایشی به نام Green Tea معرفی شده که با هدف کاهش تأخیر و نوسان، بهبود کارایی و مصرف حافظه، و مقیاسپذیری بهتر ارائه میشود. این قابلیت فعلاً بهصورت opt-in و از طریق فلگهای مستند در release notes فعال میشود و پیشفرض نیست. نتایج اولیه بسته به بار کاری میتواند متفاوت باشد؛ در صورت پسرفت میتوان به GC فعلی بازگشت. تیم Go با تکیه بر بازخورد و سنجش میدانی، در نسخههای بعدی آن را بهبود میدهد و در صورت موفقیت، میتواند بر راهبرد آینده GC در Go اثر بگذارد.
#Go #Golang #GreenTea #GarbageCollection #Go125 #MemoryManagement #Performance #Runtime
🟣لینک مقاله:
https://golangweekly.com/link/176318/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Go's Green Tea Garbage Collector
🟢 خلاصه مقاله:
** در Go 1.25 یک garbage collector آزمایشی به نام Green Tea معرفی شده که با هدف کاهش تأخیر و نوسان، بهبود کارایی و مصرف حافظه، و مقیاسپذیری بهتر ارائه میشود. این قابلیت فعلاً بهصورت opt-in و از طریق فلگهای مستند در release notes فعال میشود و پیشفرض نیست. نتایج اولیه بسته به بار کاری میتواند متفاوت باشد؛ در صورت پسرفت میتوان به GC فعلی بازگشت. تیم Go با تکیه بر بازخورد و سنجش میدانی، در نسخههای بعدی آن را بهبود میدهد و در صورت موفقیت، میتواند بر راهبرد آینده GC در Go اثر بگذارد.
#Go #Golang #GreenTea #GarbageCollection #Go125 #MemoryManagement #Performance #Runtime
🟣لینک مقاله:
https://golangweekly.com/link/176318/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
go.dev
The Green Tea Garbage Collector - The Go Programming Language
Go 1.25 includes a new experimental garbage collector, Green Tea.
تو نسخه ۱.۲۵ گولنگ یه garbage collector تازه به اسم Green Tea اضافه کردن که سرعتش خیلی بهتره. فعلاً آزمایشیه ولی از ۱.۲۶ به بعد قراره پیشفرض بشه.
اگه گو کار میکنید یا نه، پیشنهاد میکنیم این پست رو بخونید. خیلی خوب توضیح میده GC چطور کار میکنه و چطوری باید به پرفورمنس یه برنامه نگاه کنیم؛
از instruction های CPU تا دسترسی به مموری و بقیه داستانها.
لینکش اینه:
https://go.dev/blog/greenteagc
<Ali />
➖➖➖➖➖➖➖➖
👑 @gopher_academy
اگه گو کار میکنید یا نه، پیشنهاد میکنیم این پست رو بخونید. خیلی خوب توضیح میده GC چطور کار میکنه و چطوری باید به پرفورمنس یه برنامه نگاه کنیم؛
از instruction های CPU تا دسترسی به مموری و بقیه داستانها.
لینکش اینه:
https://go.dev/blog/greenteagc
<Ali />
➖➖➖➖➖➖➖➖
👑 @gopher_academy
❤5🔥2 1
🔵 عنوان مقاله
Fyne: A GUI App Framework for Desktop, Mobile and Web
🟢 خلاصه مقاله:
**Fyne یک فریمورک GUI برای Desktop، Mobile و Web است که با Go کار میکند و امکان ساخت اپهای بومی چندسکویی را بدون بستهبندی یک موتور کامل مرورگر فراهم میکند. این روش به باینریهای کوچکتر، مصرف حافظه کمتر و تجربهی بصری منسجمتر منجر میشود. نسخههای اخیر بهبودهای مهمی در i18n، قابلیتهای canvas برای ترسیم و گزینههای styling ارائه کردهاند تا هم بومیسازی سادهتر شود و هم ظاهر و تمها بهتر با استانداردهای هر پلتفرم و نیازهای برند هماهنگ شوند.
#Fyne #Go #GUI #CrossPlatform #MobileDevelopment #DesktopApps #i18n #OpenSource
🟣لینک مقاله:
https://golangweekly.com/link/176309/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Fyne: A GUI App Framework for Desktop, Mobile and Web
🟢 خلاصه مقاله:
**Fyne یک فریمورک GUI برای Desktop، Mobile و Web است که با Go کار میکند و امکان ساخت اپهای بومی چندسکویی را بدون بستهبندی یک موتور کامل مرورگر فراهم میکند. این روش به باینریهای کوچکتر، مصرف حافظه کمتر و تجربهی بصری منسجمتر منجر میشود. نسخههای اخیر بهبودهای مهمی در i18n، قابلیتهای canvas برای ترسیم و گزینههای styling ارائه کردهاند تا هم بومیسازی سادهتر شود و هم ظاهر و تمها بهتر با استانداردهای هر پلتفرم و نیازهای برند هماهنگ شوند.
#Fyne #Go #GUI #CrossPlatform #MobileDevelopment #DesktopApps #i18n #OpenSource
🟣لینک مقاله:
https://golangweekly.com/link/176309/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍2🔥1
چرا Go تا این حد سریع است ؟ پشت پردهی کامپایل و Runtime
وقتی برای اولین بار دیدم برنامهی Go چقدر سریع اجرا میشه، کنجکاو شدم بدونم پشت داستان چیه
با توجه به مطالعه دایکیومنت های رسمی خود گو سعی کردم تمامی مباحثی که درک کردم به رو به ساده ترین شیوه ممکن براتون بنویسم و رفرنس ها رو هم در حد ممکن لابه لای بخش ها گذاشتم
لینک مقاله
<Erfan Yousefi/>
وقتی برای اولین بار دیدم برنامهی Go چقدر سریع اجرا میشه، کنجکاو شدم بدونم پشت داستان چیه
با توجه به مطالعه دایکیومنت های رسمی خود گو سعی کردم تمامی مباحثی که درک کردم به رو به ساده ترین شیوه ممکن براتون بنویسم و رفرنس ها رو هم در حد ممکن لابه لای بخش ها گذاشتم
لینک مقاله
<Erfan Yousefi/>
Linkedin
چرا Go تا این حد سریع است؟ پشت پردهی کامپایل و Runtime
(Why Go Is So Fast — The Compiler and Runtime Architecture) 🚀 مقدمه وقتی برنامهای با Go مینویسی و اجراش میکنی، اولین چیزی که چشمگیر میشه سرعت باورنکردنیه — نه فقط در زمان اجرا، بلکه حتی در مرحلهی build و compile. برخلاف زبانهایی مثل Python یا Node.
👍3 3🔥1
Forwarded from Software Engineer Labdon
تفاوت Access Token و Refresh Token به زبان ساده
در سیستمهای احراز هویت مدرن مثل Keycloak یا IdentityServer،
دوبار اسم «توکن» رو میشنویم:
ولی واقعاً فرقشون چیه؟
Access Token
توکن کوتاهمدتیه (مثلاً ۵ تا ۱۵ دقیقه) که بعد از لاگین کاربر صادر میشه.
هر بار که کاربر به API درخواست میفرسته، این توکن همراه درخواست میره تا سرور بفهمه کاربر کیه.
Refresh Token
طول عمر بیشتری داره (مثلاً ۳۰ دقیقه یا حتی چند ساعت).
اگر Access Token منقضی بشه، سیستم با استفاده از Refresh Token یه Access Token جدید میگیره
— بدون اینکه کاربر مجبور باشه دوباره لاگین کنه.
به زبان ساده Access Token مثل بلیط ورود به یک سالن هست ️
اما Refresh Token مثل کارت عضویت اون سالنه
باهاش میتونی هر بار بلیط جدید بگیری بدون ایستادن تو صف لاگین.
مزیت این روش:
امنیت بیشتر (Access Token کوتاهمدت و ایمنتره)
تجربه کاربری بهتر (کاربر کمتر لاگاوت میشه)
کنترل بهتر سمت سرور روی اعتبار توکنها
در پروژهی اخیرم با Keycloak این مکانیزم رو پیادهسازی کردم.
کاربر بعد از ثبتنام، هم در Keycloak و هم در SQL Server ذخیره میشه تا
میان سیستم احراز هویت و اپلیکیشن اصلی یکپارچگی کامل برقرار باشه.
هر وقت در مورد Authentication کار میکنی،
یادت باشه که هدف فقط «ورود کاربر» نیست —
بلکه «مدیریت ایمن و هوشمند عمر نشست (Session Lifecycle)» هست.
در دنیای Api ها ما موظفیم با توکن ها کار کنیم
در ریزور پیج ها یک ورودی هیدن داشتیم که مدیریت توسط آن توسط خود asp بود
اما در api ها مدیریت توکن ها با ماست
بهترین گزینه هم استفاده از IDP (Identity Provider) هاست چون هم فرانت و هم بک را برای ما پوشش میدهد.
<Hossein Molaei/>
در سیستمهای احراز هویت مدرن مثل Keycloak یا IdentityServer،
دوبار اسم «توکن» رو میشنویم:
ولی واقعاً فرقشون چیه؟
Access Token
توکن کوتاهمدتیه (مثلاً ۵ تا ۱۵ دقیقه) که بعد از لاگین کاربر صادر میشه.
هر بار که کاربر به API درخواست میفرسته، این توکن همراه درخواست میره تا سرور بفهمه کاربر کیه.
Refresh Token
طول عمر بیشتری داره (مثلاً ۳۰ دقیقه یا حتی چند ساعت).
اگر Access Token منقضی بشه، سیستم با استفاده از Refresh Token یه Access Token جدید میگیره
— بدون اینکه کاربر مجبور باشه دوباره لاگین کنه.
به زبان ساده Access Token مثل بلیط ورود به یک سالن هست ️
اما Refresh Token مثل کارت عضویت اون سالنه
باهاش میتونی هر بار بلیط جدید بگیری بدون ایستادن تو صف لاگین.
مزیت این روش:
امنیت بیشتر (Access Token کوتاهمدت و ایمنتره)
تجربه کاربری بهتر (کاربر کمتر لاگاوت میشه)
کنترل بهتر سمت سرور روی اعتبار توکنها
در پروژهی اخیرم با Keycloak این مکانیزم رو پیادهسازی کردم.
کاربر بعد از ثبتنام، هم در Keycloak و هم در SQL Server ذخیره میشه تا
میان سیستم احراز هویت و اپلیکیشن اصلی یکپارچگی کامل برقرار باشه.
هر وقت در مورد Authentication کار میکنی،
یادت باشه که هدف فقط «ورود کاربر» نیست —
بلکه «مدیریت ایمن و هوشمند عمر نشست (Session Lifecycle)» هست.
در دنیای Api ها ما موظفیم با توکن ها کار کنیم
در ریزور پیج ها یک ورودی هیدن داشتیم که مدیریت توسط آن توسط خود asp بود
اما در api ها مدیریت توکن ها با ماست
بهترین گزینه هم استفاده از IDP (Identity Provider) هاست چون هم فرانت و هم بک را برای ما پوشش میدهد.
<Hossein Molaei/>
👍3❤1
در چهارمین رویداد تکوتاک – سلسله رویدادهای تخصصی در حوزه توسعه نرمافزار همکاران سیستم – که به صورت #رایگان و #آنلاین برگزار میشه، سراغ مبحث Concurrency در Go خواهیم رفت:
✅ CSP & GMP Concept
✅ Unbounded Concurrency
✅ Race Condition & Shared State
✅ Goroutine Leaks
✅ Context & Cancellation & Shutdown
✅ Scheduler and Runtime Behavior
👨🏻💻 ارائهدهنده: هادی جعفری | برنامهنویس ارشد همکاران سیستم
📅 پنجشنبه ۲۲ آبانماه | ساعت ۱۰ تا ۱۲
📌 شرکت در رویداد فقط در صورت ثبتنام امکانپذیره.
🌐 اطلاعات بیشتر و لینک ثبتنام:
https://B2n.ir/bw9161
.
Linkedin | Instagram
✅ CSP & GMP Concept
✅ Unbounded Concurrency
✅ Race Condition & Shared State
✅ Goroutine Leaks
✅ Context & Cancellation & Shutdown
✅ Scheduler and Runtime Behavior
👨🏻💻 ارائهدهنده: هادی جعفری | برنامهنویس ارشد همکاران سیستم
📅 پنجشنبه ۲۲ آبانماه | ساعت ۱۰ تا ۱۲
📌 شرکت در رویداد فقط در صورت ثبتنام امکانپذیره.
🌐 اطلاعات بیشتر و لینک ثبتنام:
https://B2n.ir/bw9161
.
Linkedin | Instagram
❤3👍1
🎙️ عنوان پادکست:
An episode as short as the name of a unix command
خلاصه پادکست:
این اپیزود کوتاه بهروزترین خبرها را پوشش میدهد: انتشار نسخههای Go 1.25.3 و 1.24.9، و مرور بلاگ Thea Heinen دربارهی کشف یک باگ در کامپایلر arm64 زبان Go. همچنین دربارهی پیشرفت پشتیبانی zsh و بهبودهای مرتبط با sh صحبت میشود، و خبر یک Go meetup و ضبط زنده اپیزود در San Francisco اعلام میگردد. در بخش Lightning، به qjs (یک JavaScript runtime مدرن و امن بدون CGO برای برنامههای Go) و Kaizen (تماشای انیمه از ترمینال) میپردازیم. در پایان از مخاطبان برای حمایت از پادکست در Patreon دعوت میشود.
#Go #Golang #arm64 #Unix #zsh #JavaScript #qjs #Podcast
An episode as short as the name of a unix command
خلاصه پادکست:
این اپیزود کوتاه بهروزترین خبرها را پوشش میدهد: انتشار نسخههای Go 1.25.3 و 1.24.9، و مرور بلاگ Thea Heinen دربارهی کشف یک باگ در کامپایلر arm64 زبان Go. همچنین دربارهی پیشرفت پشتیبانی zsh و بهبودهای مرتبط با sh صحبت میشود، و خبر یک Go meetup و ضبط زنده اپیزود در San Francisco اعلام میگردد. در بخش Lightning، به qjs (یک JavaScript runtime مدرن و امن بدون CGO برای برنامههای Go) و Kaizen (تماشای انیمه از ترمینال) میپردازیم. در پایان از مخاطبان برای حمایت از پادکست در Patreon دعوت میشود.
#Go #Golang #arm64 #Unix #zsh #JavaScript #qjs #Podcast
👍1🔥1
🔵 عنوان مقاله
How We Saved 70% CPU and 60% Memory in Refinery’s Go Code
🟢 خلاصه مقاله:
**تیم Refinery روی یک سرویس مهم مبتنی بر Go با مصرف بالای CPU و Memory کار میکرد و با پروفایلینگ دقیق (pprof، tracing و بنچمارکهای انتهابهانتها) گلوگاههای واقعی را پیدا کرد. بیشترین صرفهجویی با حذف کارهای غیرضروری بهدست آمد: حذف پردازشها و serialization تکراری، دوری از reflection در مسیرهای داغ، جایگزینی JSON در hot path با دسترسی مستقیم/کدگذاری ساده، پیشاختصاص slices/maps و بازاستفاده از بافرها برای کاهش allocation و فشار GC. در همروندی، بهجای goroutineهای بدونمهار، از worker poolهای محدود و backpressure استفاده شد، کارها batch و دادهها تا حد امکان stream شدند تا قفلزنی و جابهجایی زمینه کاهش یابد. همچنین چند حلقه O(n^2) با ایندکسگذاری مبتنی بر map/set جایگزین شد، نتایج گران با cache کردن تکرار نشد و الگوهای I/O با خواندن/نوشتن تجمیعی بهینه شدند. در نهایت با تکیه بر allocationهای روی stack، استفاده از sync.Pool و روشهای zero-copy، نیاز به GC پایین آمد. نتیجه: حدود 70% کاهش مصرف CPU و 60% کاهش Memory همراه با بهبود تاخیرهای p95/p99. درس کلیدی: بهینهسازی اغلب یعنی کمتر کار کردن—اندازهگیری کن، کار زائد را حذف کن و سادهسازی را تکرار کن.
#Go #Golang #Performance #Profiling #CPU #Memory #Optimization #pprof
🟣لینک مقاله:
https://golangweekly.com/link/176624/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
How We Saved 70% CPU and 60% Memory in Refinery’s Go Code
🟢 خلاصه مقاله:
**تیم Refinery روی یک سرویس مهم مبتنی بر Go با مصرف بالای CPU و Memory کار میکرد و با پروفایلینگ دقیق (pprof، tracing و بنچمارکهای انتهابهانتها) گلوگاههای واقعی را پیدا کرد. بیشترین صرفهجویی با حذف کارهای غیرضروری بهدست آمد: حذف پردازشها و serialization تکراری، دوری از reflection در مسیرهای داغ، جایگزینی JSON در hot path با دسترسی مستقیم/کدگذاری ساده، پیشاختصاص slices/maps و بازاستفاده از بافرها برای کاهش allocation و فشار GC. در همروندی، بهجای goroutineهای بدونمهار، از worker poolهای محدود و backpressure استفاده شد، کارها batch و دادهها تا حد امکان stream شدند تا قفلزنی و جابهجایی زمینه کاهش یابد. همچنین چند حلقه O(n^2) با ایندکسگذاری مبتنی بر map/set جایگزین شد، نتایج گران با cache کردن تکرار نشد و الگوهای I/O با خواندن/نوشتن تجمیعی بهینه شدند. در نهایت با تکیه بر allocationهای روی stack، استفاده از sync.Pool و روشهای zero-copy، نیاز به GC پایین آمد. نتیجه: حدود 70% کاهش مصرف CPU و 60% کاهش Memory همراه با بهبود تاخیرهای p95/p99. درس کلیدی: بهینهسازی اغلب یعنی کمتر کار کردن—اندازهگیری کن، کار زائد را حذف کن و سادهسازی را تکرار کن.
#Go #Golang #Performance #Profiling #CPU #Memory #Optimization #pprof
🟣لینک مقاله:
https://golangweekly.com/link/176624/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Honeycomb
How We Saved 70% of CPU and 60% of Memory in Refinery’s Go Code, No Rust Required.
We've just released Refinery 3. 0 , a performance-focused update which significantly improves Refinery's CPU and memory efficiency.
👍2❤1
🔵 عنوان مقاله
Concord: A Resilient Chord Implementation in Go
🟢 خلاصه مقاله:
اConcord یک پیادهسازی مقاوم از پروتکل Chord در زبان Go است که برای پایداری در برابر churn و خرابیهای جزئی طراحی شده. Chord یک DHT همتابههمتاست که با استفاده از consistent hashing یک حلقه منطقی میسازد؛ هر گره بخشی از فضای کلید را نگه میدارد و با تکیه بر successor، predecessor و finger table، کلیدها را در زمان تقریبی O(log N) مسیردهی میکند.
تمرکز اصلی Concord بر مدیریت عضوگیری و بازیابی سریع است: پایش و stabilization دورهای برای بهروزرسانی اشارهگرها، استفاده از successor list برای تحمل خرابی، و تعمیر پسزمینه fingerها برای کاهش انحراف مسیریابی. جهت دوام داده، کلیدها روی چند successor تکرار میشوند و همگرایی نسخهها با سیاستهای ساده نسخهبندی یا last-writer-wins انجام میگیرد. تشخیص خرابی با زمانبندیها و heartbeatهای اکتشافی تنظیم میشود تا بین حساسیت و خطای مثبت کاذب تعادل برقرار شود.
مدل همزمانی Go پایهی طراحی Concord است: goroutineها و channelها کارهای پروتکلی مانند stabilization، replication و رسیدگی به درخواستها را جدا میکنند تا کندی یا خرابی یک همتا کل سیستم را متوقف نکند. ارتباطات RPC مرز روشنی بین گرهها ایجاد میکند و الگوهای backoff و circuit breaker از آبشاریشدن timeoutها جلوگیری میکنند. Concord همچنین به نیازهای عملیاتی مانند bootstrap گرههای جدید، خروج ایمن، و توزیع مجدد کماختلال کلیدها میپردازد.
نتایج آزمایشهای churn، تزریق خطا و بنچمارکها نشان میدهد که lookupها نزدیک به O(log N) باقی میمانند و در زمان خرابیهای گذرا نرخ موفقیت بالایی دارند؛ در حالیکه کارایی پایدار همتراز Chord استاندارد و از نظر تابآوری بهتر است. حاصل کار، یک DHT عملی مبتنی بر Go برای کاربردهایی مانند فراداده توزیعشده، service discovery و content indexing است.
#DistributedSystems #Chord #DHT #Go #P2P #FaultTolerance #ConsistentHashing #Scalability
🟣لینک مقاله:
https://golangweekly.com/link/176641/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Concord: A Resilient Chord Implementation in Go
🟢 خلاصه مقاله:
اConcord یک پیادهسازی مقاوم از پروتکل Chord در زبان Go است که برای پایداری در برابر churn و خرابیهای جزئی طراحی شده. Chord یک DHT همتابههمتاست که با استفاده از consistent hashing یک حلقه منطقی میسازد؛ هر گره بخشی از فضای کلید را نگه میدارد و با تکیه بر successor، predecessor و finger table، کلیدها را در زمان تقریبی O(log N) مسیردهی میکند.
تمرکز اصلی Concord بر مدیریت عضوگیری و بازیابی سریع است: پایش و stabilization دورهای برای بهروزرسانی اشارهگرها، استفاده از successor list برای تحمل خرابی، و تعمیر پسزمینه fingerها برای کاهش انحراف مسیریابی. جهت دوام داده، کلیدها روی چند successor تکرار میشوند و همگرایی نسخهها با سیاستهای ساده نسخهبندی یا last-writer-wins انجام میگیرد. تشخیص خرابی با زمانبندیها و heartbeatهای اکتشافی تنظیم میشود تا بین حساسیت و خطای مثبت کاذب تعادل برقرار شود.
مدل همزمانی Go پایهی طراحی Concord است: goroutineها و channelها کارهای پروتکلی مانند stabilization، replication و رسیدگی به درخواستها را جدا میکنند تا کندی یا خرابی یک همتا کل سیستم را متوقف نکند. ارتباطات RPC مرز روشنی بین گرهها ایجاد میکند و الگوهای backoff و circuit breaker از آبشاریشدن timeoutها جلوگیری میکنند. Concord همچنین به نیازهای عملیاتی مانند bootstrap گرههای جدید، خروج ایمن، و توزیع مجدد کماختلال کلیدها میپردازد.
نتایج آزمایشهای churn، تزریق خطا و بنچمارکها نشان میدهد که lookupها نزدیک به O(log N) باقی میمانند و در زمان خرابیهای گذرا نرخ موفقیت بالایی دارند؛ در حالیکه کارایی پایدار همتراز Chord استاندارد و از نظر تابآوری بهتر است. حاصل کار، یک DHT عملی مبتنی بر Go برای کاربردهایی مانند فراداده توزیعشده، service discovery و content indexing است.
#DistributedSystems #Chord #DHT #Go #P2P #FaultTolerance #ConsistentHashing #Scalability
🟣لینک مقاله:
https://golangweekly.com/link/176641/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - ollelogdahl/concord: A resilient Chord implementation in Go
A resilient Chord implementation in Go. Contribute to ollelogdahl/concord development by creating an account on GitHub.