etcd یک پایگاه دادهی توزیعشده مبتنی بر مدل کلید-مقدار (Key-Value Store) است. یعنی دادهها را بهصورت جفتهای کلید و مقدار در میان چندین سرور ذخیره و همگامسازی میکند. این سیستم بیشتر در زیرساختهای ابری و محیطهای توزیعشده مثل Kubernetes کاربرد دارد. در ادامه مفصل درباره etcd در سیستمهای مدرن صحبت کردهایم.
Etcd چیست؟
etcd یک پروژهی متنباز است که توسط تیم CoreOS توسعه یافت. در آن زمان، تیم CoreOS به دنبال راهحلی برای ذخیره و هماهنگسازی پیکربندیها در میان چندین سرور بود. در سیستمهای توزیعشده، نگهداری نسخهی یکسانی از دادهها در تمام گرهها همیشه یک چالش جدی بود.
برای حل این مشکل، CoreOS سامانهای طراحی کرد که بتواند دادهها را با دقت بالا و بهصورت همزمان میان گرهها همگامسازی کند یعنی همان etcd.
etcd همان «منبع یکتای حقیقت» (Single Source of Truth) برای سیستمهای فلان است (از صفت پیجیده استفاده نکن). یعنی تمام گرهها (Nodes) و سرویسها برای فهمیدن وضعیت دقیق سیستم، به دادههای آن مراجعه میکنند.
یک نگاه کلی به تاریخچه Etcd
|
رویداد |
توضیح |
|
شروع توسعه (۲۰۱۳) |
ایجاد توسط تیم CoreOS با هدف ذخیره و هماهنگی دادههای پیکربندی در زیرساختهای توزیعشده |
|
خرید CoreOS (۲۰۱۸) |
ادغام CoreOS در شرکت Red Hat |
|
انتقال به CNCF (۲۰۱۸) |
واگذاری پروژه به بنیاد Cloud Native Computing Foundation؛ اکنون به عنوان پروژهی «فارغالتحصیل» (Graduated) شناخته میشود |
|
etcd Operator |
ابزار خودکارسازی مدیریت خوشههای etcd در Kubernetes شامل پشتیبانگیری، ارتقا و تغییر اندازهی خودکار |
کاربردهای اصلی Etcd چیست؟
با توجه به قابلیتهایی مانند هماهنگی دقیق و قابلیت اطمینان بالا، etcd در بسیاری از سامانههای توزیعشده، پلتفرمهای ابری و ابزارهای مدیریت زیرساخت به کار میرود. در ادامه سه کاربرد اصلی آن را با مثال توضیح دادهایم.
1. هستهی داده در Kubernetes
Kubernetes یک سیستم متنباز برای خودکارسازی استقرار و مدیریت کانتینرها است. برای آنکه این پلتفرم بتواند وضعیت همهی اجزا مانند پادها (Pods)، سرویسها، تنظیمات و دادههای حساس را همیشه دقیق نگه دارد، به یک مرکز ذخیرهسازی هماهنگ نیاز دارد.
برای رفع این نیاز، etcd همهی اطلاعات خوشه را ذخیره و هر بار که تغییری در وضعیت سیستم رخ میدهد، ابتدا در خود ثبت و سپس میان تمام گرهها همگامسازی میکند. به این ترتیب، Kubernetes همیشه تصویری بهروز و واحد از وضعیت کل سیستم دارد و میتواند تصمیمهای درستی برای زمانبندی، بازیابی خطا یا مقیاسگذاری خودکار بگیرد.
2. کشف سرویس و هماهنگی بین گرهها
در سیستمهای توزیعشده، سرویسها باید از وجود و آدرس یکدیگر آگاه باشند. etcd این فرآیند را از طریق ثبت مسیرها و آدرسها ممکن میسازد تا گرهها بدون وابستگی به مکان یا زمان راهاندازی، بتوانند یکدیگر را پیدا کنند.
3. قابلیت Watch برای نظارت زنده
در سیستمهایی که باید همیشه با وضعیت بهروز سرویسها کار کنند، نظارت زنده اهمیت زیادی دارد. به این فرآیند Watch گفته میشود. در واقع برخی برنامهها تغییرات کلید یا مسیر خاصی را در لحظه دنبال میکنند تا در صورت تغییر مقدار، فوراً واکنش نشان دهند. etcd این عملکرد را در هستهی خود دارد و همین ویژگی باعث میشود سیستمهایی مانند Kubernetes بتوانند بلافاصله پس از هر تغییر، وضعیت جدید را اعمال و هماهنگ کنند.

نحوه عملکرد Etcd چگونه است؟
پشتصحنهی عملکرد etcd بر اساس الگوریتم اجماع Raft طراحی شده است. این الگوریتم تضمین میکند که تمام گرههای موجود در خوشه حتی در صورت بروز خطا، نسخهی واحدی از دادهها را نگه دارند. برای درک بهتر نحوهی هماهنگی گرهها، بهتر است با نقشهای اصلی آنها در Raft آشنا شویم:
|
نقش گره |
وظیفه اصلی |
|
Leader (رهبر) |
دریافت درخواستهای نوشتن از کلاینتها و ارسال آنها به سایر گرهها برای همگامسازی |
|
Follower (دنبالکننده) |
دریافت داده از رهبر و تأیید تغییرات انجامشده |
|
Candidate (کاندید) |
زمانی فعال میشود که رهبر از دسترس خارج شود و انتخابات جدید برای انتخاب رهبر تازه برگزار گردد |
فرآیند هماهنگی در Raft
- زمان به بازههای عددی (Term) تقسیم میشود.
- اگر رهبر در مدت مشخصی پاسخ ندهد، یکی از دنبالکنندگان به حالت کاندید درمیآید.
- انتخابات انجام میشود و گرهای که رأی اکثریت را دارد، رهبر جدید میشود.
- هر تغییر جدید (ورودی لاگ) به همهی دنبالکنندگان ارسال و پس از تأیید اکثریت، ثبت نهایی میشود.
مزایا و معایب Etcd چیست؟
قبل از انتخاب هر فناوری زیرساختی، باید مزایا و معایب آن را بشناسید. به همین دلیل در این قسمت Etcd را هم از نظر ویژگیهای مثبت و هم منفی بررسی کردهایم.
مزایا:
- سازگاری بالا: همهی گرهها همیشه یک نسخه از داده را نگه میدارند؛ بنابراین احتمال اختلاف یا ناسازگاری در سیستم وجود ندارد.
- دسترسپذیری بالا: در صورت خرابی یک سرور، سایر گرهها به کار ادامه میدهند و خوشه متوقف نمیشود.
- امنیت قوی: ارتباطات درون خوشه با TLS رمزگذاری میشوند و امکان احراز هویت مبتنی بر گواهی وجود دارد.
- واکنش سریع به تغییرات: قابلیت Watch باعث میشود سیستمها بهصورت آنی به تغییرات پاسخ دهند.
- سادگی در استفاده: APIهای استاندارد gRPC و HTTP کار توسعهدهندگان را برای ادغام و توسعه آسان میکند.
معایب:
- پیچیدگی در راهاندازی: ایجاد یک خوشهی پایدار نیاز به دانش دقیق شبکه و اجماع دارد.
- وابستگی به عملکرد دیسک: سرعت پایین I/O میتواند روی کارایی اثر مستقیم بگذارد.
- حساسیت در سیستمهای بزرگ: خرابی etcd در Kubernetes میتواند عملکرد کل کنترلپلن را مختل کند.
- نیاز به پشتیبانگیری منظم: برای جلوگیری از از دست رفتن دادهها باید نسخههای پشتیبان بهصورت دورهای گرفته شود.
نگاهی به تفاوتهای etcd با ابزارهای دیگر
Etcd تنها گزینه برای هماهنگی و ذخیرهسازی داده در سیستمهای توزیعشده نیست. فناوریهای دیگری مانند ZooKeeper، Consul و Redis نیز هرکدام با معماری و هدف متفاوتی توسعه یافتهاند.
آشنایی کلی با تفاوتهای آنها کمک میکند بهتر بفهمیم هرکدام در چه سناریویی مناسبترند و چرا Kubernetes و سایر پلتفرمهای مدرن، etcd را انتخاب کردهاند.
|
ویژگی |
etcd | Apache ZooKeeper | Consul |
Redis |
|
هدف اصلی |
ذخیرهسازی کلید-مقدار و هماهنگی سیستمهای توزیعشده | هماهنگی و قفل توزیعشده | کشف سرویس و پیکربندی |
ذخیرهسازی در حافظه (Cache) |
|
الگوریتم اجماع |
Raft | Zab | Raft |
ندارد |
|
API |
HTTP/gRPC مدرن | API اختصاصی | HTTP/JSON |
پروتکل اختصاصی |
|
سازگاری داده |
قوی | قوی | قوی |
وابسته به تنظیمات |
|
کاربرد |
Kubernetes | Hadoop Ecosystem | Service Mesh |
کش سریع و ساده |
|
پایداری داده |
بالا | بالا | متوسط |
پایینتر |

جمعبندی
بنابراین etcd در بستر زیرساخت دادهای فعالیت میکند که نیاز به هماهنگی و سازگاری میان چندین گره دارد. به لطف الگوریتم Raft، این سیستم میتواند دادهها را در محیطهای پیچیدهی ابری با اطمینان بالا نگهداری کند. از همین رو، شرکتهایی مانند Red Hat، Google Cloud و VMware آن را در مرکز زیرساختهای Cloud-Native خود بهکار گرفتهاند تا ثبات و انسجام دادهها در مقیاس بالا تضمین شود.
سوالات متداول (FAQ)
۱. آیا میتوان از etcd بهصورت مستقل و خارج از Kubernetes استفاده کرد؟
بله، etcd را میتوان در هر سیستم توزیعشدهای برای هماهنگی داده و کشف سرویسها بهصورت مستقل اجرا کرد.
۲. چند گره برای راهاندازی خوشهی پایدار etcd لازم است؟
حداقل سه گره برای داشتن رأی اکثریت در الگوریتم Raft توصیه میشود تا در صورت خرابی یکی از آنها، سیستم همچنان پایدار بماند.
۳. آیا etcd از نسخهسازی دادهها پشتیبانی میکند؟
بله، هر تغییر در دادهها با نسخهی مشخصی ذخیره میشود و امکان مشاهده یا بازگردانی نسخههای قبلی وجود دارد