بدائل: HashiCorp go-plugin
Plugins قائمة على RPC لدعم الأنظمة متعددة المنصات
بدائل: HashiCorp go-plugin درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
لماذا go-plugin؟
تعمل حزمة plugin الأصلية في Go على Linux وmacOS فقط، وتتطلب تطابق إصدارات التبعيات، ولا يمكنها إلغاء تحميل الإضافات. ويحل HashiCorp go-plugin هذه المشكلات بتشغيل الإضافات كعمليات منفصلة تتواصل عبر RPC (باستخدام gRPC أو net/rpc).
البنية
يشغّل go-plugin الملف الثنائي للإضافة كعملية فرعية. ويبدأ المضيف هذه العملية، وينشئ اتصال gRPC أو net/rpc، ويستدعي الإضافة عبر عميل مُولَّد. وتُنهى عملية الإضافة عند خروج المضيف.
تعريف الواجهة
عرّف الواجهة في حزمة مشتركة، ثم وفّر جسرًا لـ gRPC أو net/rpc.
// shared/interface.go
type Greeter interface {
Greet(name string) (string, error)
}جانب الإضافة
تنفّذ الإضافة الواجهة وتسجّلها باستخدام آلية الخدمة الخاصة بـ go-plugin:
func main() {
plugin.Serve(&plugin.ServeConfig{
HandshakeConfig: Handshake,
Plugins: map[string]plugin.Plugin{
"greeter": &GreeterPlugin{Impl: &Greeter{}},
},
GRPCServer: plugin.DefaultGRPCServer,
})
}جانب المضيف
يطلق المضيف العملية الفرعية للإضافة ويحصل على الواجهة عبر عميل:
client := plugin.NewClient(&plugin.ClientConfig{
HandshakeConfig: Handshake,
Plugins: PluginMap,
Cmd: exec.Command("./greeter-plugin"),
AllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC},
})
rpcClient, _ := client.Client()
raw, _ := rpcClient.Dispense("greeter")
greeter := raw.(Greeter)إعداد المصافحة
يمنع HandshakeConfig مشترك (مفتاح+قيمة لملف تعريف سحري) تشغيل ملف ثنائي غير خاص بإضافة عن طريق الخطأ باعتباره إضافة:
var Handshake = plugin.HandshakeConfig{
ProtocolVersion: 1,
MagicCookieKey: "GREETER_PLUGIN",
MagicCookieValue: "hello",
}التوافق عبر المنصات
بما أن الإضافة عملية منفصلة تتواصل عبر TCP أو مأخذ Unix، يمكن ترجمتها لأي منصة. ولا يحتاج المضيف والإضافة إلى استخدام إصدارات Go متطابقة.
عزل الأعطال
إذا تعطلت الإضافة، يتلقى المضيف خطأً عند استدعاء RPC التالي. ويمكن للمضيف إعادة تشغيل العملية الفرعية للإضافة وإعادة الاتصال بها من دون أن يتعطل هو نفسه.
الأداء
يضيف RPC في go-plugin زمن استجابة مقارنةً باستدعاءات الدوال داخل العملية (ميكروثوانٍ مقابل نانوثوانٍ). وهذا مقبول لاستدعاءات الإضافات الثقيلة وغير المتكررة، لكنه غير مناسب للحلقات الساخنة.
إدارة الإصدارات
يدعم go-plugin إصدار البروتوكول، إذ يمكن للمضيف التفاوض مع إصدارات متعددة من واجهة الإضافة في الوقت نفسه، مما يتيح ترقية الإضافات تدريجيًا.
الاستخدام العملي
يُستخدم go-plugin في موفّري HashiCorp Terraform ومحركات الأسرار في Vault وبناة Packer، وهي منظومات كبيرة تضم إضافات يطوّرها المجتمع.
متى تختار go-plugin؟
اختر go-plugin بدلًا من الإضافات الأصلية عند الحاجة إلى دعم عدة منصات، أو عندما يكون عزل الأعطال مهمًا، أو يتعذر توحيد إصدارات التبعيات، أو تكون الإضافات مكتوبة من جهات خارجية.
تحقق سريع
كيف يحقق HashiCorp go-plugin عزل الأعطال؟
مراجعة: HashiCorp go-plugin
النقاط الأساسية:
- تعمل الإضافات كعمليات فرعية وتتواصل عبر gRPC أو net/rpc
- متعددة المنصات، ومعزولة الأعطال، ومتسامحة مع اختلاف الإصدارات
- يمنع HandshakeConfig تشغيل ملف ثنائي عن طريق الخطأ
- توجد كلفة أداء بسبب RPC؛ لذا استخدمه للاستدعاءات الثقيلة وغير المتكررة
الأسئلة الشائعة
هل درس «بدائل: HashiCorp go-plugin» مجاني؟
نعم — نص درس «بدائل: HashiCorp go-plugin» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «بدائل: HashiCorp go-plugin»؟
Plugins قائمة على RPC لدعم الأنظمة متعددة المنصات تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «بدائل: HashiCorp go-plugin»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات حزمة Go plugin
- تصميم واجهة Plugin
- التحميل الديناميكي والرموز
- بدائل: HashiCorp go-plugin