معرفی
داده ها زندگی مجله زیبایی و درمانی آذروت است و بینش هایی که از آن به دست می آوریم، تمام تصمیمات حیاتی تجاری که توسط Grabbers و رهبران ما هر روز اتخاذ می شود را متحرک می کنند.
تیم مهندسی داده Grab برای حفظ پلتفرم داده مسئولیت دارد که شامل خطوط لوله داده، برنامه های برنامه اندازی شده و موتورهای پرس و جو/محاسباتی که اجزای کلیدی برای تولید بینش ها از داده ها هستند است. SQL یک زبان اصلی برای تحلیل در مجله زیبایی و درمانی آذروت است و از اوایل سال 2020، پلتفرم Presto ما حدود 200 گروه کاربری است که در مجموع 500 کاربری هستند که روزانه 350،000 پرس و جو را اجرا می کنند. این پرس و جوها روی 10،000 جدولی است که تا 1PB از داده ها را روزانه پردازش می کنند.
در سال 2016، ما پروژه DataGateway را آغاز کردیم تا امکان دسترسی به داده برای صدها Grabbers که نیاز به دسترسی به Presto برای کار خود داشتند را فراهم کنیم. از آن زمان به بعد، DataGateway به بسیاری از چیزهای بیش از یک مکانیزم کنترل دسترسی برای Presto تبدیل شده است. در این بلاگ، می خواهیم برخی از دستاوردهایی که از زمان راه اندازی اولیه این پروژه داشتیم را به اشتراک بگذاریم.
مشکلاتی که می خواستیم حل کنیم
هنگام بررسی چالش های کلیدی مربوط به دسترسی به داده در مجله زیبایی و درمانی آذروت و ارزیابی راه حل های ممکن، ما به لیست اولویت بندی شده زیر از نیازهای کاربری که می خواستیم به آن کار کنیم، رسیدیم:
- استفاده از یک نقطه اتصال واحد برای خدمات همه مدیریت دسترسی کاربر به خوشه ها، طرح ها، جداول و فیلدها فراهم کردن تجربه کاربری سریسازی هنگامی که خوشه های Presto تغییر اندازه می دهند یا به داخل/بیرون می شوند یا تجهیز/غیرفعال می شوند دریافت زنجیره یادداشت فعالیت کاربر.
برای ارائه نیازهای بحرانی کویری تعاملی به Grabbers و همچنین انجام کارهای استخراج، تبدیل و بارگیری (ETL)، تکنولوژی های مختلفی را ارزیابی کردیم. Presto یکی از آنها بود و با این حال تمام نیازهای ما را از جعبه خارج نکرد. به منظور پر کردن این حفره ها، ایده یک دروازه امن برای موتور محاسباتی Presto که همچنین به عنوان یک توازن بار/پروکسی عمل کند، به ذهن ما رسید. این است که تا قدرت ایجاد کننده DataGateway را بدست آوریم.
DataGateway یک سرویس است که بین مشتریان و خوشه های Presto قرار می گیرد. در واقع یک سرور پروکسی HTTP هوشمند است که لایه انتزاعی در بالای خوشه های Presto است که عملیات زیر را انجام می دهد:
- تجزیه بیانات SQL و دریافت طرح ها، جداول و فیلدهای درخواست شده از آنها مدیریت لیست کنترل دسترسی کاربر (ACL) برای محدود کردن دسترسی داده کاربران با بررسی نتایج تجزیه SQL مدیریت دسترسی خوشه های کاربر انتقال ترافیک کاربران به خوشه های مجاز نمایش پیام های خطا مناسب به کاربران در صورت رد یا بروز استثناء از خوشه ها.
ساختار DataGateway
اجزای کلیدی DataGateway به شرح زیر است:
- سرویس API تجزیه کننده SQL چارچوب Auth رابط کاربری اداری
از Kubernetes برای اجرای تمام این اجزا به عنوان میکروسرویس ها استفاده کردیم.
سرویس API
این بخش مدیریت همه کاربران و فرآیندهای قابل دسترسی به خوشه ها را مدیریت می کند. ما این سرویس را با API Presto یکپارچه کردیم، به این معنی که برای مشتری مانند یک خوشه Presto به نظر می رسد. این سرویس درخواست های کوئری را از مشتریان دریافت می کند، نتیجه تجزیه را دریافت می کند و اجازه دسترسی از طریق تجزیه کننده SQL و چارچوب Auth را اجرا می کند.
اگر همه چیز خوب باشد، سرویس API کوئری ها را به خوشه های اختصاص یافته ارسال می کند و فرایند کوئری کل را ادامه می دهد.
چارچوب Auth
این چارچوب درخواست های تأیید هویت و اجازه دسترسی را در دست می گیرد. این چارچوب ACL کاربران را ذخیره می کند و با سرویس API و تجزیه کننده SQL برای اجرای کل فرایند تأیید هویت ارتباط برقرار می کند. اما چرا یک میکروسرویس در فضای کاربری است و نه یک ماژول در سرویس API، شما می پرسید؟ این به این دلیل است که ما عملکرد های امنیتی در مجله زیبایی و درمانی آذروت را برای اطمینان از مطابقت با نیازهای امنیتی خود، به خصوص در ارتباط با داده ها، در حال تحول نگه می داریم.
ما می خواستیم آن را انعطاف پذیر کنیم تا درخواست های ازاد از تیم امنیت را بدون تأثیر بر سرویس API پاوربندی کنیم. علاوه بر این، روش های احراز هویت مختلفی وجود دارد که ممکن است بخواهیم با آنها برخورد کنیم (OAuth2، SSO و غیره). سرویس API چارچوب های احراز هویت چندگانه را پشتیبانی می کند که امکان روش های احراز هویت مختلف برای کاربران مختلف را فراهم می کند.
تجزیه کننده SQL
این یک موتور تجزیه SQL است که با خواندن بیانات SQL طرح ها، جداول و فیلدها را به دست می آورد. از آنجا که تجزیه SQL Presto در هر نسخه به صورت متفاوت کار می کند، ما چندین تجزیه کننده SQL که با خوشه های Presto ما همخوانی دارند ترجمه می کنیم. تجزیه کننده SQL منبع واحد حقیقت می شود.
رابط کاربری اداری
این یک رابط کاربری برای مدیران Presto است که به آنها امکان مدیریت خوشه ها و دسترسی کاربر را فراهم می کند، همچنین انتخاب چارچوب احراز هویت را آسان می کند تا مدیران با کل اکوسیستم سامانه سریسازی مقابله کنند.
نحوه استقرار DataGateway با استفاده از Kubernetes
در چند سال گذشته، ما رشد قابل توجهی در بار کاری های تحلیلگران و دانشمندان داده داشتیم. زیرا ما به Kubernetes علاقه مند بودیم، DataGateway به عنوان یکی از اولین سرویس هایی که برای استقرار در Kubernetes انتخاب شد به کار گرفته شد. استفاده از DataGateway در Kubernetes به عنوان یک سرویس بسیار قابل دسترس و به طور کامل مقیاس پذیر برای مدیریت ترافیک از کاربران و سیستم ها است.
همچنین عملکرد HPA Kubernetes را آزمایش کردیم که یک ویژگی مقیاس پذیری پویا برای مقیاس بندی داخل یا بیرون تعداد پادها بر اساس ترافیک و مصرف منابع واقعی است.
قابلیت های DataGateway
این بخش برخی از راه های استفاده از DataGateway را برای مدیریت بهره وری از اکوسیستم Presto ما برجسته می کند.
محدود کردن کاربران بر اساس دسترسی سطح طرح/جدول
در یک محیط که یک خوشه Presto روی AWS Amazon Elastic MapReduce (EMR) یا Elastic Kubernetes Service (EKS) استقرار می شود، یک نقش IAM را پیکربندی کرده و به گره های EMR یا EKS اتصال می دهیم. نقش IAM برای محدود کردن دسترسی به ذخیره سازی S3 تنظیم شده است. با این حال، IAM فقط کنترل سطح وباکت و سطح فایل را ارائه می دهد؛ نیازی به معماری طرح، جدول و ستون ACL نداریم. به همین دلیل DataGateway در چنین سناریوهایی مفید است.
یکی از سرویس های DataGateway تجزیه کننده SQL است. همانطور که پیش از این بیان کردیم، این سرویس یک سرویسی است که پارسینگ و بررسی طرح ها و جداول درگیر در یک کوئری را انجام می دهد. سرویس API نتیجه تجزیه را دریافت کرده و با کنترل دسترسی لیست کنترل دسترسی کاربران در برابر آن بررسی می کند و تصمیم می گیرد کوئری را مجاز یا رد کند. این یک بهبود چشمگیر در کنترل امنیت ما است زیرا اکنون دسترسی را محدود کردیم ، فوق العاده از ذخیره سازی S3. ما کنترل دسترسی بر اساس SQL را تا سطح جدولها پیاده کرده ایم.
همانطور که در شکل 3 نشان داده شده است، کاربر A در حال تلاش برای اجرای بیانیه SQL select * from locations.cities است. تجزیه کننده SQL بیانیه را می خواند و به سرویس API می گوید که کاربر A در حال تلاش برای خواندن داده ها از جدول cities در طرح locations است. سپس، سرویس API بررسی ACL کاربر A را انجام می دهد. سرویس می یابد که کاربر A فقط دسترسی خواندن به جدول countries در طرح locations دارد. در نهایت، سرویس API این تلاش را رد می کند زیرا کاربر A به جدول cities در طرح locations دسترسی خواندن ندارد.
جریان بالا نشان دهنده نتیجه عدم دسترسی است زیرا کاربر مجوز مناسب را ندارد.
تجربه کاربری بی درز در طول مهاجرت EMR
ما از AWS EMR برای استقرار Presto به عنوان یک موتور کوئری SQL استفاده می کنیم زیرا استقرار واقعاً آسان است. با این حال، بدون DataGateway، هر عملیات EMR مانند پایان دادن به کارها، استقرار جدید خوشه، تغییرات پیکربندی و ارتقاء نسخه، نیاز به مشارکت کاربران را می طلبد. بعضی اوقات نیاز داشتیم کاربران تغییراتی در سمت خود ایجاد کنند. به عنوان مثال، از کاربران درخواست می کنیم تا تغییراتی را در Endpoints خود انجام دهند تا یک خوشه مناسب را برای اتصال انتخاب کنند.
با DataGateway، برای هر یک از حساب کاربری ها ACL ها وجود دارد. ACL شامل لیستی از خوشه های EMR است که کاربران مجاز به دسترسی به آنها هستند. به عنوان یک پلتفرم مدیریت دسترسی Presto، در اینجا DataGateway ترافیک کاربران را به خوشه مناسب بر اساس ACL هدایت می کند، مانند یک پروکسی. کاربران همیشه به همان Endpoints که ارائه می دهیم متصل می شوند که DataGateway است. برای تغییر از یک خوشه به خوشه دیگر، فقط کافیست ACL خوشه را ویرایش کنیم و همه چیز به طور بی درز کنترل می شود.
شکل 4 نشان می دهد که در صورت انتقال EMR از یک خوشه به خوشه دیگر، هیچ تغییری از کاربران نیاز نیست.
ما مهاجرت کل پلتفرم Presto خود را از نمونه AWS EMR به نمونه دیگری از AWS EMR با استفاده از همان روش انجام دادیم. مهاجرت ها بدون اختلال به کاربران ما انجام شد. ما توانستیم 40 خوشه با صد ها کاربر انتقال دهیم. آنها قادر بودند میلیون ها کوئری را روزانه در چند فاز برای چند ماه صادر کنند.
در اکثر موارد، کاربران لازم نبود که