البرمجة عبر السحابة مع Go Cloud

مقدمة


اليوم (المترجم 07-24-2018 تقريبًا) ، أصدر فريق Go في Google مشروع Open Source الجديد Go Cloud ، وهو مكتبة وأدوات تطوير في السحابة المفتوحة . من خلال هذا المشروع ، نهدف إلى قيام المطورين باختيار لغة Go لإنشاء تطبيقات عبر السحابية.

يوضح هذا المنشور سبب بدء هذا المشروع وتفاصيل كيفية عمل Go Cloud وكيفية المشاركة والبدء في استخدامه.

لماذا البرمجة عبر السحابة؟ لماذا الآن؟


نقدر أن هناك أكثر من مليون مطور يستخدم Go في العالم. تقدم Go العديد من أهم المشاريع السحابية المهمة ، بما في ذلك Kubernetes و Istio و Docker. تعتمد شركات مثل Lyft و Capital One و Netflix وغيرها الكثير على Go في الإنتاج. على مر السنين ، وجدنا أن المطورين يحبون استخدام Go للتطوير السحابي بسبب كفاءته وإنتاجيته وقدرته التنافسية المضمنة وكمانه المنخفض.

كجزء من عملنا لدعم التطور السريع لـ Go ، أجرينا مقابلات مع فرق تعمل مع Go ونفهم كيف يستخدمون اللغة وكيفية تحسين النظام البيئي Go في المستقبل. أحد الموضوعات الرئيسية التي تم التعبير عنها بين العديد من المنظمات التي شملتها الدراسة هو الحاجة إلى التطوير عبر السحابة. تريد هذه الفرق (الذين تم استطلاع رأيهم) أن يكونوا قادرين على نشر تطبيقاتهم في بيئات سحابية متعددة السحابة المختلطة ، وتوزيع الحمل بين موفري السحابة دون تغييرات كبيرة في رمز التطبيق.

لتحقيق ذلك ، تحاول بعض الفرق فك ارتباط تطبيقاتها من واجهة برمجة تطبيقات خاصة بالموفر لكتابة كود أبسط وأكثر قابلية للحمل (عبر السحابة). ومع ذلك ، فإن المتطلبات قصيرة المدى لتقديم الوظائف تعني أنه يجب على الفرق التضحية بالمتطلبات طويلة المدى للحوسبة السحابية المتقاطعة. ونتيجة لذلك ، فإن معظم تطبيقات Go التي تعمل في السحابة مرتبطة بإحكام بموفر السحابة المحدد أصلاً.

بدلاً من ذلك ، يمكن للفرق استخدام Go Cloud ، وهي مجموعة من واجهات برمجة التطبيقات السحابية المفتوحة والمشتركة ، لبرمجة تطبيقات سحابية أبسط وأكثر قابلية للنقل. توفر Go Cloud أيضًا الأساس لنظام بيئي للمكتبات السحابية المحمولة. يسمح Go Cloud للفرق بالتركيز على الوظائف أثناء تطوير التطبيقات مع الحفاظ على المرونة على المدى الطويل لنشر التطبيقات في بنى سحابية متعددة السحابة المختلطة. يمكن أيضًا ترحيل تطبيقات Go Cloud إلى مزود السحابة الذي يناسب احتياجات التطبيق.

ما هو Go Cloud؟


لقد حددنا الخدمات المشتركة التي تستخدمها التطبيقات السحابية وأنشأنا واجهة برمجة تطبيقات مشتركة للعمل بين موفري الخدمات السحابية. اليوم ، يمكن لـ Go Cloud العمل مع تخزين blob وقاعدة بيانات MySQL وإعدادات وقت التشغيل (التكوين) وخادم HTTP الذي تم تكوينه مع تسجيل الطلبات والمراقبة والتحقق من الصحة. يعمل Go Cloud مع Google Cloud Platform (GCP) و Amazon Web Services (AWS). سنستمر في العمل مع شركاء في صناعة السحابة ومجتمع Go لإضافة دعم لموفري السحابة الآخرين في المستقبل القريب.

تهدف Go Cloud إلى تطوير واجهة برمجة تطبيقات مشتركة محايدة للبائع بالنسبة لمعظم الخدمات المستخدمة ، على سبيل المثال ، النشر البسيط والسهل لتطبيقات Go إلى سحابة أخرى. يمكن استخدام Go Cloud أيضًا كأساس لتطوير مكتبات مفتوحة المصدر أخرى للعمل بين موفري الخدمات السحابية. ستؤثر التعليقات الواردة من جميع أنواع المطورين وعلى جميع مستويات التطوير على أولوية تنفيذ / إضافة هذه الوظيفة أو تلك في الإصدارات المستقبلية من Go Cloud API.

كيف يعمل؟


يعتمد Go Cloud على مجموعة من واجهات برمجة التطبيقات الشائعة للبرمجة عبر السحابة. دعونا نلقي نظرة على مثال لاستخدام تخزين النقطة. يمكنك استخدام النوع العام * blob.Storage لنسخ ملف من محرك أقراص محلي إلى السحابة. لنبدأ بفتح تخزين S3 باستخدام حزمة s3blob المجمعة:

// setupBucket opens an AWS bucket. func setupBucket(ctx context.Context) (*blob.Bucket, error) { // Obtain AWS credentials. sess, err := session.NewSession(&aws.Config{ Region: aws.String("us-east-2"), }) if err != nil { return nil, err } // Open a handle to s3://go-cloud-bucket. return s3blob.OpenBucket(ctx, sess, "go-cloud-bucket") } 

من لحظة ظهور * blob.Bucket في التطبيق ، تحصل على فرصة إنشاء * blob.Writer ، والتي بدورها تنفذ واجهة io.Writer . من هذه اللحظة ، يمكن للتطبيق (البرنامج) استخدام * blob.Writer لكتابة البيانات إلى التخزين السحابي ، والتحقق من أن إغلاق لا يؤدي إلى ظهور خطأ.

 ctx := context.Background() b, err := setupBucket(ctx) if err != nil { log.Fatalf("Failed to open bucket: %v", err) } data, err := ioutil.ReadFile("gopher.png") if err != nil { log.Fatalf("Failed to read file: %v", err) } w, err := b.NewWriter(ctx, "gopher.png", nil) if err != nil { log.Fatalf("Failed to obtain writer: %v", err) } _, err = w.Write(data) if err != nil { log.Fatalf("Failed to write to bucket: %v", err) } if err := w.Close(); err != nil { log.Fatalf("Failed to close: %v", err) } 

لاحظ أن منطق العمل مع التخزين (الدلو) لا يشير إلى تفاصيل AWS S3. Go Cloud يجعل استبدال التخزين السحابي بشكل أساسي بديلاً للوظيفة المستخدمة لفتح * blob.Bucket . يمكن للتطبيق التبديل بسهولة إلى استخدام Google Cloud Storage من خلال إنشاء * blob.Bucket باستخدام gcsblob.OpenBucket دون تغيير الرمز الذي ينسخ الملف:

 // setupBucket opens a GCS bucket. func setupBucket(ctx context.Context) (*blob.Bucket, error) { // Open GCS bucket. creds, err := gcp.DefaultCredentials(ctx) if err != nil { return nil, err } c, err := gcp.NewHTTPClient(gcp.DefaultTransport(), gcp.CredentialsTokenSource(creds)) if err != nil { return nil, err } // Open a handle to gs://go-cloud-bucket. return gcsblob.OpenBucket(ctx, "go-cloud-bucket", c) } 

ومع ذلك ، حتى الآن ، يلزم اتخاذ خطوات مختلفة للوصول إلى التخزين لمختلف موفري السحابة ، ويظل النوع النهائي الذي يستخدمه التطبيق هو نفسه * blob.Bucket . وبالتالي ، يظل رمز التطبيق معزولًا عن الرمز الخاص بالسحابة. لزيادة التوافق مع مكتبات Go الحالية ، يستخدم Go Cloud الواجهات الموجودة المتوفرة في مكتبة Go القياسية ، مثل io.Writer و io.Reader و * sql.DB.

الكود المطلوب للوصول إلى الخدمات السحابية (وظيفة setupBucket () من المثال أعلاه) يتبع النمط التالي: يتم إنشاء تجريدات أعلى باستخدام تجريدات أساسية (أقل). بينما يمكنك كتابة مثل هذه التعليمات البرمجية باستخدام الأقلام ، فإن Go Cloud تقوم بأتمتة ذلك باستخدام Wire ، وهي أداة تقوم بإنشاء رمز خاص بالسحابة لك. تشرح وثائق Wire كيفية تثبيته واستخدامه ، بينما توضح الأمثلة تطبيق Wire في العمل.

كيف تشارك في المشروع ومعرفة المزيد؟


للبدء ، نوصي بالدليل التالي ، ثم نوصي بمحاولة إنشاء التطبيق باستخدام Go Cloud بنفسك. إذا كنت تستخدم AWS أو GCP بالفعل ، فيمكنك محاولة ترحيل أجزاء من التطبيقات الحالية لاستخدام Go Cloud. إذا كنت تستخدم موفري خدمات سحابية آخرين أو خدمة داخل الشركة ، فيمكنك توسيع Go Cloud لدعم ذلك من خلال تنفيذ واجهات برنامج التشغيل (مثل driver.Bucket ).

سنقدر جميع أنواع التجارب مع Go Cloud. يتم تطوير Go Cloud بواسطة GitHub. سنكون سعداء بأي مساهمة في المشروع ، بما في ذلك recuest pool. قم بإنشاء مشكلة لإعلامنا بما تعتقد أنه يجب تحسينه أو واجهات برمجة التطبيقات التي يجب أن تدعمها المكتبة في المقام الأول. ترقبوا التحديثات والأخبار ، انضموا إلى قائمة بريد المشروع.

يتطلب المشروع من المساهمين توقيع نفس اتفاقية ترخيص المساهم التي اعتمدها مشروع Go. اقرأ دليل المساهم لمزيد من التفاصيل.

شكرًا لك على الوقت الذي أمضيته في التعرف على Go Cloud ، يسعدنا العمل معك لجعل Go اختيار المطورين لإنشاء تطبيقات عبر السحابة (المحمولة).

Source: https://habr.com/ru/post/ar418131/


All Articles