تجربه شخصی از FaaS
ما یه سرویس link preview داشتیم که روی کلاستر aws اجرا میشد و وظیفه اش این بود که برای پیام های جدید کاربران که حاوی لینک بود بره از لینک مورد نظر یه open-graph data بگیره، یا اگه لینک مربوط به social network ها بود به شیوه خاص خودش لینک رو scrape کنه و دیتای مورد نیاز رو جمع کنه. ضمنا دیتا رو باید تو دیتابیس ذخیره میکرد که دفعات بعد از دیتابیس دیتارو لود کنه.
یه مشکل دیگه هم که بود این بود که سایت های پربازدید معمولا درخواست های از مبدا سرورهای aws رو block میکنن. به همین دلیل مجبور بودیم یه سری http proxy همیشه توی دیتابیس آپدیت کنیم که از طریق اون درخواست ها ارسال بشه.
نرخ تعداد درخواست های link preview هم خیلی متغیر بود گاها خیلی کم بود گاهی هم پیش میومد زیاد باشه.
با این راه حل ما هم داشتیم هزینه containerی که همیشه این سرویس رو up نگه میداشت رو میدادیم هم هزینه دیتابیس میدادیم (از rds آمازون استفاده میکردیم) و هم مشکل proxy رو باید حل میکردیم.
راه حل جایگزینی که دوستم ارائه داد این بود که یه تابع ساده پایتونی نوشت که یه لینک میگرفت و دیتای مورد نیاز رو scrape میکرد و پاسخ رو پس میداد. این تابع رو بصورت FaaS رو اگه اشتباه نکنم روی Heroku بالا آورد (که ۱ میلیون درخواست اولش رایگان بود...). نیاز به storage هم نداشت چون سرویس پشت cache system بود (فکر کنم cloudfront) و فقط درخواست هایی که حاوی لینک جدید بودن function رو اجرا میکردن (تو معماری قبلی سرویس همیشه در حال اجرا بود و کلی resource مصرف میکرد)، بقیه رو خود cache جواب میداد. مشکل proxy هم دیگه نداشتیم.
عملا هم کلی هزینه کم شد، و هم کد و معماری ساده تر شد.
در انتها هم شاید بد نباشه پروژه OpenFaaS رو یه نگاهی بندازید.
https://github.com/openfaas/faas
https://www.openfaas.com
این پادکست هم شاید شنیدنش بد نباشه.
https://ardanlabs.buzzsprout.com/1466944/9750624-finding-a-model-for-open-source-with-alex-ellis
این کتاب هم من خیلی دوست دارم داشته باشم اگه گیر آوردید به منم بدید 🙂
Serverless for Everyone Else
https://openfaas.gumroad.com/l/serverless-for-everyone-else
#faas #open_faas
#designing_distributed_systems_brendan_burns
@gocasts
Post #111
1.46K
Go Casts | Systems & Agents 🚀 Event-Based Pipeline دسته ای از application ها وجود دارن که بهتره اونارو بصورت یه pipelineی از decoupled event ها ببینیم. در الگوی event pipeline هر node یک function یا webhook هست و ارتباط این نودها از طریق network و http request هست. هیچ shared stateی بین…
- 🔥 2
- ❤ 1