چه زمانی از Apache Cassandra، Kafka، Spark و Elasticsearch استفاده کنیم و چه زمانی استفاده نکنیم؟

تقریباً در همه‌ی تصمیم‌گیری‌های حوزه‌ی تکنولوژی باید دو معیار اساسی در نظر گرفته شود. اول اینکه تصمیم گرفته شده باید شما را قادر به برآورده کردن اهداف تجاری موردنظرتان کند سپس همراه سایر تکنولوژی‌های شما نیز به‌خوبی کار کند. وقتی نوبت به انتخاب تکنولوژی‌های Data-layer برای ایجاد معماری برنامه می‌رسد، برنامه‌های Open source مانند: Apache Cassandra، Apache Kafka، Apache Spark و Elastic search محبوبیت بیشتری دارند. بااین‌حال، آن‌ها برای هر کاری انتخاب درستی نیستند. در ادامه به بررسی عمیق‌تر هر یک از این تکنولوژی‌ها و برخی موارد استفاده آن‌ها پرداخته شده است.

 Apache Cassandra

Cassandra ابتدا توسط فیس‌بوک در سال 2007 ایجاد شد، از معماری Dynamo و Data model ای به سبک Big table، برای تهیه‌ی یک پایگاه داده‌ی NoSQL استفاده می‌کند و Availability و Scalability بالایی دارد.

  • چه زمانی باید از Apache Cassandra استفاده کنید:

Cassandra یک گزینه ایدال برای مواردی است که به بالاترین سطح Availability نیاز دارند. این پایگاه داده همچنین به‌ویژه برای سرویس‌دهی به سازمان‌هایی که حجم کار زیادی دارند و یا می‌خواهند اطمینان حاصل کنند که با گسترش حجم کار، خدمات آن‌ها رشد انعطاف‌پذیری خواهد داشت (به Scalability آسان Cassandra نیاز دارند)، بسیار مناسب است و همچنین Data redundancy و عملیات active-active را در چندین Node ارائه می‌دهد.

  • چه زمانی نباید از Apache Cassandra استفاده کنید:

Cassandra وقتی وظیفه‌ی ذخیره‌سازی داده یا ذخیره‌ی تجزیه‌وتحلیل‌ها را بر عهده دارد، نسبت به گزینه‌های دیگر منابع فشرده‌تری دارد. (حتی برای استفاده از اتصالات Spark و پلاگین های Tableau و Hadoop). همچنین برای تجزیه‌وتحلیل‌های Real-time (وقتی تجزیه‌وتحلیل در عرض چند ثانیه یا چند دقیقه پس از ورود اطلاعات جدید انجام می‌شود)، به‌ویژه برای درخواست‌های کاربران نهایی Ad-hoc یا Query های سفارشی مناسب نیست، زیرا نیاز به اجرای کد در سمت برنامه می‌تواند پیچیده شود. علاوه بر این، Cassandra اکثر نیازهای ACID را برآورده نمی‌کند.

 Apache Kafka

Apache Kafka برای اولین بار توسط تیم فنی در LinkedIn ایجاد شده‌است. یک Streaming پلتفرم بسیار Scalable و Available بوده که گذرگاهی برای پیام فراهم می‌کند. Kafka به‌عنوان یک log توزیع شده عمل می‌کند که در آن پیام‌های جدید به ابتدای یک Queue اضافه می‌شوند و خوانندگان (مصرف‌کنندگان) بر اساس Offset از آن‌ها استفاده می‌کنند.

  • چه زمانی باید از Apache Kafka استفاده کنید:

به‌طورکلی Apache Kafka یک انتخاب هوشمندانه برای کارهایی شامل Micro services و معماری‌های Service-oriented است. همچنین می‌تواند به‌عنوان یک Queue Work بسیار مؤثر عمل کند که می‌تواند مسیرهای کاری جداگانه را هماهنگ کرده و با Listening و Waiting تا رسیدن کار جدید، قدرت پردازش را افزایش دهد. از قابلیت‌های پردازش Streaming پلتفرم می توان Roll-ups و Aggregation را نام برد. Kafka همچنین گزینه بسیار مناسبی برای تأمین منابع رویداد، همسان‌سازی داده‌ها در Micro services های مختلف و همچنین ایجاد یک سیستم log خارجی برای سیستم‌های توزیع‌شده است. از موارد دیگری که Kafka برای آن‌ها مناسب است می‌توان جمع‌آوری log، Data Masking و فیلتر کردن داده‌ها را نام برد.

  • چه زمانی نباید از Apache Kafka استفاده کنید:

گرچه ممکن است در بعضی موارد وسوسه‌انگیز باشد، اما استفاده از Kafka به‌عنوان یک پایگاه داده یا منبع بایگانی، حداقل بدون درک کامل از محدودیت‌ها و خصوصیات Kafka در این موارد استفاده، توصیه خوبی نیست. کار با یک پایگاه داده واقعی تقریباً همیشه ساده‌تر و انعطاف‌پذیرتر است. در هر موردی که هدف انتقال سریع بسته‌های داده به منبع نهایی باشد، مانند صوت و تصویرهای Real-time یا سایر موارد که ممکن است قابلیت گم‌شدن داشته باشند. Kafka یک انتخاب نامناسب برای پردازش داده‌ها است و سازمان‌ها باید به‌جای Kafka از راه‌حل‌های دیگر استفاده کنند.

  Apache Spark

Apache Spark یک Framework محاسباتی خوشه‌ای مناسب برای استفاده در مواردی که نیاز به پردازش حجم زیادی از داده‌ها است. Spark، داده‌ها را تقسیم کرده و محاسبات را بر روی بخش‌های تقسیم شده اجرا می‌کند. تمام کارهای ممکن در هر بخش تا زمانی که به داده‌های سایر بخش‌ها نیاز نباشد انجام می‌شود. این طراحی Availability و Scalability فوق‌العاده‌ای را به Spark می‌دهد، درعین‌حال آن را در برابر از دست دادن اطلاعات بسیار مقاوم می‌کند.

  • چه زمانی باید از Apache Spark استفاده کنید:

Spark، جهت استفاده برای کارهایی که شامل تجزیه‌وتحلیل در مقیاس بزرگ، خصوصاً در مواردی که داده‌ها از طریق چندین منبع مختلف به دست می‌آید، مناسب است. Spark یک راه‌حل قدرتمند برای ETL  و Loading یا هر مورد استفاده‌ای است. این راه‌حل شامل جابجایی داده‌ها بین سیستم‌ها است. همچنین Spark برای سازمان‌هایی که Pipeline های یادگیری ماشین را طبق داده‌های موجود ایجاد می‌کنند و آن‌هایی که High-latency اند و یا تجزیه‌وتحلیل تعاملی زیادی دارند، کاملاً مناسب است. Spark همچنین با ارائه Masking یا همان پوشش برای داده‌ها، فیلتر کردن آن‌ها و بررسی مجموعه‌های بزرگ داده کمک می‌کند. که این عمل موجب می‌شود تا سازمان‌ها بتوانند نیازهای Compliance خود را برآورده کنند.

  • چه زمانی نباید از Apache Spark استفاده کنید:

به‌طورکلی، Spark گزینه‌ی مناسبی برای کارهایی شامل پردازش‌های Real-time یا Low-latency نخواهد بود. (Apache Kafka یا سایر تکنولوژی‌های با End-to-end latency، مواردی از جمله پردازش Real-time را ارائه می‌دهند.) هنگام کار با مجموعه داده‌های کوچک، Spark گزینه‌ی مناسبی نیست. همچنین، وقتی صحبت از Data warehousing می‌شود، بهتر است به‌جای Apache Spark، از تکنولوژی‌های سطح بالاتر استفاده کنید.

 Elastic search

Elastic search، موتور جستجوی Full-text ای را ارائه می‌دهد که دارای طیف گسترده‌ای از قابلیت‌ها برای جستجو و تجزیه‌وتحلیل داده‌های غیر ساخت‌یافته است. این تکنولوژی جستجوی خطی Scalable را نزدیک به Real-time ارائه داده و قابلیت جستجو و تجزیه‌وتحلیل قابل‌توجهی را فراهم می‌کند.

  • چه زمانی باید از Elastic search استفاده کنید:

Elastic search برای مواردی که به جستجوی کامل متن، جستجوی جغرافیایی، پاک کردن و ترکیب داده‌های عمومی، Logورود به سیستم، تجزیه‌وتحلیل گزارش‌ها و Visualizations کاملاً مناسب است.

  • چه زمانی نباید از Elastic search استفاده کنید:

از Elastic search نباید به‌عنوان پایگاه داده یا منبع بایگانی، با داده‌های Relational یا برای تأمین نیازهای ACID استفاده شود.

 انتخاب تکنولوژی‌های تکمیلی

بدیهی است برای انتخاب بهترین ترکیب تکنولوژی برای سازمان‌ها فقط ارزیابی خود راه‌حل‌ها کافی نیست. تصمیم‌گیرندگان باید تصور کنند که سازمان چگونه هر راه‌حل را به‌عنوان بخشی از تکنولوژی خود تصویب و استفاده می‌کند. Apache Cassandra، Apache Kafka، Apache Spark و Elastic search مجموعه‌ای ویژه از تکنولوژی را ارائه می‌دهند که بهتر است سازمان‌ها از ترکیب آن‌ها باهم استفاده کنند. این عمل موجب می‌شود به لطف ماهیت Open source آن‌ها از هزینه‌های مجوز یا Lock-in فروشنده رها شوند. با همکاری این تکنولوژی‌ها و ترکیب مزایای آن‌ها، سازمان‌ها می‌توانند به اهداف خود دست یابند و توسعه برنامه‌های Scalable، Available، Portable و انعطاف‌پذیر را امکان‌پذیر کنند.

و در آخر

وبسایت میربزرگی قصد دارد تا با ارائه مقاله‌ها و تجربه‌های کاربردی شما را در زمینه یادگیری و رفع اشکالاتتان کمک کند. در صورت وجود هرگونه سوالی به من ایمیل بزنید.

ارسال دیدگاه

4 + 1 =

این جا قراره با هم زبان برنامه نویسی جاوا رو یاد بگیریم. اگه جواب سوالتو توی مقاله ها پیدا نکردی، میتونی بهم ایمیل بزنی تا راهنماییت کنم. اگر موضوعاتی رو پیشنهاد داری حتما برام بفرست. منتظر ایمیلتم

پیام با موفقیت ثبت شد.
خطایی رخ داده است.