- عنوان کتاب: Big Data / PRINCIPLES AND BEST PRACTICES OF SCALABLE REAL-TIME DATA SYSTEMS
- نویسنده: NATHAN MARZ
- حوزه: کلان داده
- سال انتشار: 2015
- تعداد صفحه: 330
- زبان اصلی: انگلیسی
- نوع فایل: pdf
- حجم فایل: 7.40 مگابایت
زمانی که من برای اولین بار وارد دنیای Big Data شدم، احساس می کردم که غرب وحشی توسعه نرم افزار است. بسیاری پایگاه داده رابطهای و امکانات آشنای آن را برای پایگاههای داده NoSQL با مدلهای داده بسیار محدود طراحیشده برای مقیاس هزاران ماشین رها کردند. تعداد پایگاه های داده NoSQL، که بسیاری از آنها تنها تفاوت های جزئی بین آنها داشتند، بسیار زیاد شد. پروژه جدیدی به نام Hadoop شروع به ایجاد امواج کرد و نوید توانایی انجام تجزیه و تحلیل عمیق بر روی مقادیر عظیمی از داده ها را داد. درک نحوه استفاده از این ابزارهای جدید گیج کننده بود. در آن زمان، سعی میکردم مشکلات مقیاسپذیری را که در شرکتی که در آن کار میکردم با آن مواجه بودیم، برطرف کنم. معماری به طرز وحشتناکی پیچیده بود – شبکهای از پایگاههای اطلاعاتی رابطهای خرد شده، صفها، کارگران، استادان و بردهها. فساد راه خود را به پایگاه داده ها راه انداخته بود و کدهای ویژه ای در برنامه برای رسیدگی به فساد وجود داشت. بردگان همیشه عقب بودند. تصمیم گرفتم فناوری های جایگزین Big Data را بررسی کنم تا ببینم آیا طراحی بهتری برای معماری داده ما وجود دارد یا خیر. یکی از تجربههای اولیه من در زمینه مهندسی نرمافزار عمیقاً دیدگاه من را در مورد نحوه طراحی سیستمها شکل داد. یکی از همکاران من چند هفته را صرف جمع آوری داده ها از اینترنت روی یک سیستم فایل مشترک کرده بود. او منتظر بود تا داده های کافی را جمع آوری کند تا بتواند روی آن تجزیه و تحلیل انجام دهد. یک روز در حین انجام تعمیرات معمولی، به طور تصادفی تمام داده های همکارم را حذف کردم و او را هفته ها از پروژه خود عقب انداختم. می دانستم که اشتباه بزرگی مرتکب شده ام، اما به عنوان یک مهندس نرم افزار جدید نمی دانستم عواقب آن چه خواهد بود. آیا قرار بود به خاطر این همه بی دقتی اخراج شوم؟ من یک ایمیل برای تیم ارسال کردم و در آن عذرخواهی فراوان کردم – و در کمال تعجب، همه بسیار همدردی کردند. هرگز فراموش نمیکنم وقتی یکی از همکاران به پشت میز من آمد، دستی به پشتم زد و گفت: «تبریک میگویم. شما اکنون یک مهندس نرم افزار حرفه ای هستید.” در بیانیه شوخی او یک حقیقت ناگفته عمیق در توسعه نرم افزار وجود دارد: ما نمی دانیم چگونه نرم افزار کامل بسازیم. اشکالات می توانند و می توانند در تولید مستقر شوند. اگر برنامه بتواند در پایگاه داده بنویسد، یک اشکال می تواند در پایگاه داده نیز بنویسد. وقتی شروع به طراحی مجدد معماری داده خود کردم، این تجربه عمیقاً روی من تأثیر گذاشت. میدانستم که معماری جدید ما نه تنها باید مقیاسپذیر باشد، در برابر خرابی ماشینها قابل تحمل باشد، و به راحتی بتوان درباره آن استدلال کرد، بلکه باید نسبت به اشتباهات انسانی نیز مدارا کند. تجربه من در معماری مجدد آن سیستم، مرا به مسیری سوق داد که باعث شد همه چیزهایی را که فکر میکردم در مورد پایگاههای داده و مدیریت دادهها درست است، زیر سوال ببرم. من به معماری مبتنی بر دادههای تغییرناپذیر و محاسبات دستهای رسیدم و از اینکه سیستم جدید چقدر سادهتر از سیستمی که صرفاً بر اساس محاسبات افزایشی است، شگفتزده شدم. همه چیز آسان تر شد، از جمله عملیات، تکامل سیستم برای پشتیبانی از ویژگی های جدید، بازیابی از اشتباهات انسانی، و انجام بهینه سازی عملکرد. این رویکرد به قدری عمومی بود که به نظر می رسید می تواند برای هر سیستم داده ای استفاده شود. هر چند یه چیزی منو گیج کرد وقتی به بقیه صنعت نگاه کردم، دیدم که کمتر کسی از تکنیک های مشابه استفاده می کند. در عوض، مقادیر دلهرهآوری از پیچیدگی در استفاده از معماریهای مبتنی بر خوشههای عظیمی از پایگاههای داده بهروز شده بهصورت تدریجی پذیرفته شد. بنابراین بسیاری از پیچیدگیهای موجود در آن معماریها با رویکردی که من ایجاد کرده بودم، یا کاملاً اجتناب شد یا تا حد زیادی کاهش یافت. در طی چند سال بعد، من این رویکرد را گسترش دادم و آن را به چیزی که معماری لامبدا نامیدم رسمیت دادم. وقتی روی استارتاپی به نام BackType کار می کردیم، تیم پنج نفره ما یک محصول تجزیه و تحلیل رسانه های اجتماعی ساخت که مجموعه متنوعی از تجزیه و تحلیل بلادرنگ را روی بیش از 100 ترابایت داده ارائه می کرد. تیم کوچک ما همچنین استقرار، عملیات، و نظارت بر سیستم را در مجموعهای متشکل از صدها ماشین مدیریت کرد. وقتی محصول خود را به مردم نشان دادیم، آنها از اینکه ما یک تیم پنج نفره بودیم شگفت زده شدند. آنها اغلب میپرسیدند: «چطور افراد کمی میتوانند این همه کار را انجام دهند؟» پاسخ من ساده بود: “این چیزی نیست که ما انجام می دهیم، بلکه کاری است که انجام نمی دهیم.” با استفاده از معماری لامبدا، از پیچیدگیهایی که در معماری سنتی وجود دارد اجتناب کردیم. با اجتناب از این پیچیدگیها، ما به طرز چشمگیری بهرهورتر شدیم.
When I first entered the world of Big Data, it felt like the Wild West of software development. Many were abandoning the relational database and its familiar comforts for NoSQL databases with highly restricted data models designed to scale to thousands of machines. The number of NoSQL databases, many of them with only minor differences between them, became overwhelming. A new project called Hadoop began to make waves, promising the ability to do deep analyses on huge amounts of data. Making sense of how to use these new tools was bewildering. At the time, I was trying to handle the scaling problems we were faced with at the company at which I worked. The architecture was intimidatingly complex—a web of sharded relational databases, queues, workers, masters, and slaves. Corruption had worked its way into the databases, and special code existed in the application to handle the corruption. Slaves were always behind. I decided to explore alternative Big Data technologies to see if there was a better design for our data architecture. One experience from my early software-engineering career deeply shaped my view of how systems should be architected. A coworker of mine had spent a few weeks collecting data from the internet onto a shared filesystem. He was waiting to collect enough data so that he could perform an analysis on it. One day while doing some routine maintenance, I accidentally deleted all of my coworker’s data, setting him behind weeks on his project. I knew I had made a big mistake, but as a new software engineer I didn’t know what the consequences would be. Was I going to get fired for being so careless? I sent out an email to the team apologizing profusely—and to my great surprise, everyone was very sympathetic. I’ll never forget when a coworker came to my desk, patted my back, and said “Congratulations. You’re now a professional software engineer.” In his joking statement lay a deep unspoken truism in software development: we don’t know how to make perfect software. Bugs can and do get deployed to production. If the application can write to the database, a bug can write to the database as well. When I set about redesigning our data architecture, this experience profoundly affected me. I knew our new architecture not only had to be scalable, tolerant to machine failure, and easy to reason about—but tolerant of human mistakes as well. My experience re-architecting that system led me down a path that caused me to question everything I thought was true about databases and data management. I came up with an architecture based on immutable data and batch computation, and I was astonished by how much simpler the new system was compared to one based solely on incremental computation. Everything became easier, including operations, evolving the system to support new features, recovering from human mistakes, and doing performance optimization. The approach was so generic that it seemed like it could be used for any data system. Something confused me though. When I looked at the rest of the industry, I saw that hardly anyone was using similar techniques. Instead, daunting amounts of complexity were embraced in the use of architectures based on huge clusters of incrementally updated databases. So many of the complexities in those architectures were either completely avoided or greatly softened by the approach I had developed. Over the next few years, I expanded on the approach and formalized it into what I dubbed the Lambda Architecture. When working on a startup called BackType, our team of five built a social media analytics product that provided a diverse set of realtime analytics on over 100 TB of data. Our small team also managed deployment, operations, and monitoring of the system on a cluster of hundreds of machines. When we showed people our product, they were astonished that we were a team of only five people. They would often ask “How can so few people do so much?” My answer was simple: “It’s not what we’re doing, but what we’re not doing.” By using the Lambda Architecture, we avoided the complexities that plague traditional architectures. By avoiding those complexities, we became dramatically more productive.
نظرات کاربران