بناء serverless الخاصة بك على أساس الجبهة الوطنية


تعد الحوسبة بدون خادم واحدة من أكثر الاتجاهات وضوحًا في الحوسبة السحابية. مبدأ العمل الأساسي هو أن البنية التحتية لا تهم DevOps ، بل هي مزود الخدمة. يتكيف حجم الموارد تلقائيًا مع الحمل ويتسم بمعدل تغيير مرتفع.


ميزة شائعة أخرى هي الميل إلى تقليل التركيز والتركيز ، ولهذا السبب تسمى الحوسبة بدون خادم أحيانًا "وظيفة كخدمة" (FaaS).


تاريخياً ، كان أمازون هو أول مزود للخدمات السحابية يقدم خدمة FaaS مع AWS Lambda ، وهو الاسم الذي يأتي منه. يقدم مزودو الخدمات السحابية الأخرى نظائرهم:


  • وظائف جوجل السحابية
  • وظائف أزور من مايكروسوفت

توفر كل هذه الشركات حوسبة بدون خادم ، وتحجيم تلقائي ، وتدفع فقط مقابل الموارد المستخدمة فعليًا ، ولكنها في الوقت نفسه تربط العملاء بمنتجهم الخاص. ومع ذلك ، هناك بدائل مفتوحة المصدر مجانية للحوسبة بدون خادم. تجدر الإشارة إلى:


  • نظام Apache OpenWhisk ، الذي طورته شركة IBM في الحاضنة ،
  • وظائف Spring Cloud ، كجزء من نظام Spring Framework البيئي الغني بشكل معقول ، والذي يمكن استخدامه أيضًا كواجهة لـ AWS Lambda و Azure Functions و OpenWhisk ،
  • مشروع Fn بدعم من أوراكل.

جميعها مستقلة تمامًا عن السحب ، أي أنها مثبتة في أي سحابة ، بما في ذلك الخاصة بك ، العامة أو الخاصة ، وبالطبع في Exoscale.


كيف يعمل مشروع Fn


Fn يعتمد بالكامل على Docker ، ويتكون من عنصرين رئيسيين:


  • برنامج CLI مصمم لإدارة جميع جوانب البنية التحتية Fn ، والتفاعل مع خادم Fn ،
  • في الواقع خادم Fn ، والتطبيق المعتاد تعبئتها في حاوية ل Docker.

يتم أيضًا تنفيذ الوظائف المنشورة في Fn في حاويات منفصلة ، مما يسمح لك بدعم الكثير من لغات البرمجة ، على سبيل المثال ... Clojure!


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


للراحة ، تتوفر القوالب المدمجة لتسهيل نشر FaaS في قائمة واسعة من اللغات المختلفة وإصداراتها (Go ، إصدارات مختلفة من Java ، Python ، إلخ).


من السهل إنشاء FaaS باتباع هذا النمط:


  • نقوم بنشر الوظيفة باستخدام CLI Fn: يتم إنشاء ملف تكوين تطبيق لـ Fn ، استنادًا إلى القالب المحدد.
  • نقوم بطرح وظيفتنا الخاصة ، مرة أخرى باستخدام CLI Fn: يتم وضع صورة الحاوية في مستودع تخزين معين ، وبعد ذلك يتم إخطار الخادم بوجود هذه الصورة وموضعها.


وظيفة تسليم مبدأ في الجبهة الوطنية


التثبيت المحلي واختبار وظائف serverless


ننتقل إلى تثبيت Fn على الجهاز المحلي. يتم تثبيت Docker أولاً ، كما هو مطلوب بواسطة Fn. من المفترض أن نكون على Debian / Ubuntu:


$ sudo apt-get update $ sudo apt-get install docker.io 

حسنًا ، أو استخدم مدير الحزم / Docker بناءً على نظامك. ثم يمكنك الانتقال مباشرة إلى تثبيت Fn CLI. على سبيل المثال ، باستخدام curl:


 $ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh 

إذا كنت تقوم بتشغيل OSX مع تثبيت Homebrew ، فيمكنك الذهاب في الاتجاه الآخر:


 $ brew install fn ==> Downloading https://homebrew.bintray.com/bottles/fn-0.5.8.high_sierra.bottle.tar.gz ==> Downloading from https://akamai.bintray.com/b1/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb ######################################################################## 100.0% ==> Pouring fn-0.5.8.high_sierra.bottle.tar.gz /usr/local/Cellar/fn/0.5.8: 5 files, 16.7MB 

الآن أصبح كل شيء جاهزًا للنشر الأولي لوظيفةنا باستخدام CLI. للبساطة ، سوف نستخدم البيئة المدمجة للتشغيل ، على سبيل المثال ، العقدة:


 $ fn init --runtime node --trigger http hellonode Creating function at: /hellonode Function boilerplate generated. func.yaml created. 

سيتم إنشاء دليل hellonode جديد لزيادة تطوير وظيفة Fn الخاصة بنا مع بعض ملفات التكوين الأساسية. داخل الدليل الذي تم إنشاؤه حديثًا ، يمكنك إنشاء تطبيقك وفقًا لمعايير اللغة التي اخترتها أو وقت التشغيل:


 #   node  : hellonode ├── func.js ├── func.yaml └── package.json #   Java11 : hellojava11 ├── func.yaml ├── pom.xml └── src ├── main │ └── java │ └── com │ └── example │ └── fn │ └── HelloFunction.java └── test └── java └── com └── example └── fn └── HelloFunctionTest.java 

تقوم Fn بإنشاء بنية المشروع الأولية ، func.yaml ملف func.yaml يحتوي على الإعدادات اللازمة لـ Fn ، ويقوم بتثبيت قالب للرمز باللغة التي حددتها.


في حالة وقت تشغيل العقدة ، هذا يعني:


 $ cat hellonode/func.js const fdk=require('@fnproject/fdk'); fdk.handle(function(input){ let name = 'World'; if (input.name) { name = input.name; } return {'message': 'Hello ' + name} }) 

الآن سوف نتحقق بسرعة من وظائفنا محليًا لنرى كيف يعمل كل شيء.


أولاً ، سنبدأ خادم Fn. كما ذكرنا سابقًا ، فإن خادم Fn عبارة عن حاوية Docker ، وبالتالي ، بعد بدء تشغيله ، سوف يتم التقاط الصورة من سجل Docker.


 $ fn start -d #      Unable to find image 'fnproject/fnserver:latest' locally latest: Pulling from fnproject/fnserver ff3a5c916c92: Pull complete 1a649ea86bca: Pull complete ce35f4d5f86a: Pull complete ... Status: Downloaded newer image for fnproject/fnserver:latest 668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5 

لتشغيل وظيفتنا ، تحتاج إلى طرحها. يتطلب هذا : في Fn ، يجب تعريف جميع التطبيقات على أنها مساحات أسماء للوظائف ذات الصلة.


سيبحث Fn CLI عن ملف func.yaml في الدليل الحالي ، والذي سيتم استخدامه لتكوين الوظيفة. لذا عليك أولاً الذهاب إلى دليل hellonode بنا.


 $ cd hellonode $ fn deploy --app fnexo --local #   ,   - fnexo. #  local      , #    Deploying hellonode to app: fnexo Bumped to version 0.0.2 Building image nfrankel/hellonode:0.0.3 . Updating function hellonode using image nfrankel/hellonode:0.0.3... Successfully created app: fnexo Successfully created function: hellonode with nfrankel/hellonode:0.0.3 Successfully created trigger: hellonode-trigger 

كما ترون من إخراج الأمر ، يتم إنشاء صورة حاوية جديدة لـ Docker تحتوي على وظيفتنا. الوظيفة جاهزة للاستدعاء ، ولدينا طريقتان للقيام بذلك:


  • باستخدام الأمر fn invoke
  • الاتصال مباشرة عبر http

استدعاء invoke عبر Fn ببساطة يحاكي عمل HTTP للاختبارات ، وهو مناسب للتحقق السريع:


 $ fn invoke fnexo hellonode #   hellonode  fnexo {"message":"Hello World"} 

من أجل استدعاء الوظيفة مباشرة ، تحتاج إلى معرفة عنوان URL الكامل:


 $ curl http://localhost:8080/t/fnexo/hellonode-trigger {"message":"Hello World"} 

يوفر خادم Fn وظائفه من خلال المنفذ 8080 ، ويبدو أن عنوان URL للوظيفة يطابق نظام t/app/function ، ولكن ليس تمامًا. من خلال HTTP ، لا يتم استدعاء الوظيفة مباشرة ، ولكن من خلال ما يطلق عليه المشغل ، والذي ، وفقًا لاسمه ، "يطلق" استدعاء الوظيفة. يتم تعريف المشغلات في مشروع `func.yml :


 schema_version: 20180708 name: hellonode version: 0.0.3 runtime: node entrypoint: node func.js format: json triggers: - name: hellonode-trigger type: http source: /hellonode-trigger # URL  

يمكننا تغيير اسم المشغل بحيث يطابق اسم الوظيفة ، وهذا سوف يبسط كل شيء:


 triggers: - name: hellonode-trigger type: http source: /hellonode #     

ثم نبدأ تسليم الوظيفة مرة أخرى ونطلق عليها من المشغل الجديد:


 $ fn deploy --app fnexo hellonode --local $ curl http://localhost:8080/t/fnexo/hellonode {"message":"Hello World"} 

كل شيء يعمل! حان الوقت للذهاب إلى تجارب واسعة النطاق ونشر FaaS لدينا على الخادم!


تثبيت خدمات وظيفة serverless على البنية التحتية الخاصة بك


لنقم بسرعة بتثبيت جهاز افتراضي باستخدام CLI Exoscale. إذا لم تقم بإعداده بعد ، فيمكنك استخدام دليلنا لإطلاقه بسرعة . هذه أداة رائعة ستزيد من إنتاجيتك. لا تنس أنك بحاجة إلى تكوين قاعدة لفتح المنفذ 8080 في مجموعة الأمان! ستقوم الأوامر التالية بإطلاق جهاز ظاهري نظيف ، جاهز لاستضافة ميزاتنا:


 $ exo firewall create fn-securitygroup $ exo firewall add fn-securitygroup ssh --my-ip $ exo firewall add fn-securitygroup -p tcp -P 8080-8080 -c 0.0.0.0/0 $ exo vm create fn-server -s fn-securitygroup 

يمكنك بعد ذلك الدخول إلى الجهاز الظاهري وتثبيت خادم Fn البعيد:


 $ exo ssh fn-server The authenticity of host '185.19.30.175 (185.19.30.175)' can't be established. ECDSA key fingerprint is SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '185.19.30.175' (ECDSA) to the list of known hosts. Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64) 

ثم قم بتثبيت Docker وخادم Fn بنفس الطريقة التي فعلنا بها على الجهاز المحلي ، قم ببدء تشغيل الخادم:


 $ sudo apt-get update $ sudo apt-get install docker.io $ sudo systemctl start docker $ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh $ sudo fn start ... ______ / ____/___ / /_ / __ \ / __/ / / / / /_/ /_/ /_/ v0.3.643 

Fn جاهز للميزات! من أجل النقل المستهدف للوظائف إلى خادم بعيد ، سوف نستخدم أمر --local من الكمبيوتر المحلي ، مع حذف العلامة المحلية.


بالإضافة إلى ذلك ، يتطلب منك Fn تحديد موقع خادم Fn وسجل Docker. يمكن تعيين هذه المعلمات من خلال متغيرات البيئة FN_API_URL و FN_REGISTRY على التوالي ، ولكن يتم توفير طريقة أكثر ملاءمة لإدارة إنشاء التكوينات وإدارتها للنشر بسهولة.


من حيث Fn ، تكوين التكوين يسمى context . سيقوم الأمر التالي بإنشاء السياق:


 $ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankel 

يمكنك عرض السياقات المتاحة مثل هذا:


 $ fn list contexts CURRENT NAME PROVIDER API URL REGISTRY default default http://localhost:8080/ exoscale default http://185.19.30.175:8080 nfrankel 

وانتقل إلى السياق الذي تم إنشاؤه للتو ، مثل هذا:


  $ fn use context exoscale Now using context: exoscale 

من هذه النقطة فصاعدًا ، سيؤدي توفير وظائف Fn إلى تحميل صور Docker باستخدام الحساب المحدد على DockerHub (في حالتي ، nfrankel ) ، ثم إبلاغ الخادم البعيد (في هذا المثال ، http://185.19.30.175:8080 ) بالموقع والإصدار الصورة الأخيرة التي تحتوي على وظيفتك.


 $ fn deploy --app fnexo . #       hellonode Deploying function at: /. Deploying hellonode to app: fnexo Bumped to version 0.0.5 Building image nfrankel/hellonode:0.0.5 . 

أخيرا:


 $ curl http://185.19.30.175:8080/t/fnexo/hellonode {"message":"Hello World"} 


وظيفة دورة الحياة في الحوسبة بدون خادم على أساس Fn


مزايا الحوسبة بدون خادم في منشآتها


تعد الحوسبة بدون خادم حلاً مناسبًا للتنفيذ السريع لأجزاء التطبيقات المستقلة التي تتفاعل مع التطبيقات أو الخدمات المصغرة الأكثر تعقيدًا.


غالبًا ما يكون هذا بسبب التكلفة الخفية للربط للمورد المحدد ، والتي ، حسب حالة الاستخدام والحجم المحدد ، يمكن أن تؤدي إلى ارتفاع التكاليف وتقليل المرونة في المستقبل.


في هذه الحالة ، تعاني معماريات السحابة متعددة السحاب والهجين أيضًا ، لأنه يمكنك بسهولة أن تجد نفسك في موقف ترغب في استخدام الحوسبة فيه بدون خادم ، ولكن نظرًا لسياسة الشركة ، قد لا يكون ذلك ممكنًا.


Fn بسيط للغاية في العمل ، يمكن أن يعطي نفس واجهة FaaS تقريبًا ، بتكاليف منخفضة. إنه يلغي أي روابط للمزود ؛ يمكنك تثبيته محليًا أو في أي مزود حلول سحابة مناسب من اختيارك. هناك أيضا حرية في اختيار لغة البرمجة.


يتم تقديم أساسيات Fn فقط في المقالة ، ولكن إنشاء بيئة وقت التشغيل الخاصة بك بسيط جدًا ، ويمكن توسيع البنية العامة على نطاق أوسع باستخدام موازن تحميل Fn ، أو عن طريق وضع Fn خلف وكيل للحماية.

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


All Articles