У меня есть непреодолимое желание узнать как работают высоконагруженные системы. В частности понять, что под капотом у всем известных систем, с миллионами и сотнями миллионов пользователей.
Но разумеется, такой реальный проект в руки просто так не дадут. А желание потрогать все части такой системы есть. Поэтому прошу помощи у коллег, как организовать имитацию подобного проекта у себя дома.
Из того что есть — это подписка на Azure, понимание как на ней создавать VM, функции, AppServices, БД. Но реальный опыт ограничивается одним инстансом и одной БД. А хочется так 100 инстансов, причем в несколько слоев, несколько БД, кеширование, CDN и так далее.
А самое главное, протестировать это все как-будто заходят десятки тысяч пользователей одновременно на этот сервис. Как идея, для ясности например — упрощенный инстаграмм.
В общем хочется воочию увидеть как бы работала эта система, будь у нее 100млн пользователей. Знаю что это возможно, нагрузочным тестированием.(как пользоваться?)
Что посоветуете? Может есть мануал с практической направленностью? Или в какую сторону рыть?
Здравствуйте, ukrspecs, Вы писали:
U>Из того что есть — это подписка на Azure, понимание как на ней создавать VM, функции, AppServices, БД. Но реальный опыт ограничивается одним инстансом и одной БД. А хочется так 100 инстансов, причем в несколько слоев, несколько БД, кеширование, CDN и так далее.
Сколько у вас есть денег?
Здравствуйте, vlp, Вы писали:
vlp>Здравствуйте, ukrspecs, Вы писали:
U>>Из того что есть — это подписка на Azure, понимание как на ней создавать VM, функции, AppServices, БД. Но реальный опыт ограничивается одним инстансом и одной БД. А хочется так 100 инстансов, причем в несколько слоев, несколько БД, кеширование, CDN и так далее. vlp>Сколько у вас есть денег?
Не много. Ну если я построю систему и тест запущу на пару минут — я не думаю что разорюсь.
U>>>Из того что есть — это подписка на Azure, понимание как на ней создавать VM, функции, AppServices, БД. Но реальный опыт ограничивается одним инстансом и одной БД. А хочется так 100 инстансов, причем в несколько слоев, несколько БД, кеширование, CDN и так далее. vlp>>Сколько у вас есть денег? U>Не много.
>Ну если я построю систему и тест запущу на пару минут — я не думаю что разорюсь.
Посчитайте внимательно — это важный аспект. В не сможете запустить систему только на пару минут, чтобы что-то интересное выучить или заметить.
Мой личный опыт говорит, что индивидуально заниматься такими вещами — надо нереальное количество денег иметь, обычно такого числа денег у людей для личных экспериментов нет. Проще всего развлекаться, имея соовтетствующего работодателя.
Здравствуйте, ukrspecs, Вы писали:
U>Что посоветуете?
Это называется масштабирование. Для имитации можно создать множество виртуальных машин на одном компьютере, а потом попробовать всем этим управлять. Тогда возникнут дополнительные задачи, например, как массово конфигурировать операционки, Ansible, Chef, Puppet и так далее, или что-то своё. Так же есть программы для мониторинга и управления множеством компьютеров. Вопрос ещё и в том, какой кластер нужен, распределённая файловая система, распределённая база данных, может быть распределённый веб-сервер, да и вообще всё, что угодно, хоть рендер ферма.
Я когда-то думал, почему при столь очевидном решении хочется купить "железо". И пришёл к выводу, что дело не в количестве запросов, ведь никто не мешает грузить компьютер по полной, и не в производительности. Суть в том, что "железо" можно купить ничего не делая. Это такой вид прокрастинации, откладывания дела по выдуманной причине.
А в чём разница системы со множеством компьютеров, от одного или нескольких. Несколько ещё можно настроить вручную, хотя они уже могут с успехом имитировать кластер. Но что, если представить, что их слишком много. Тогда в идеале нужно управлять всеми компьютерами с одного устройства и полностью автоматизировать установку программ. Уже не прокатит заходить на каждый по отдельности для мониторинга или конфигурирования.
Но это всё касается, если брать готовые решения и просто их устанавливать и настраивать. Если же вести какие-то особые разработки, то дело конечно затянется. Можно просто использовать системы мониторинга вроде Zabbix. Или если нужен аналог, то просто набираем в поиске аналог zabbix. Но в целом этим обычно занимаются специалисты, которые приходят на работу и работают. Это не то, что можно сделать быстро, а ведь энтузиастам, которые просто решили поизучать никто платить не будет.
Все действующие высоконагруженные системы не были изначально спроектированы для такой нагрузки, которую они испытывают. Даже те системы, которые целенаправленно проектировались как высоконагруженные (парадокс, да).
Создать HighLoad в домашних условиях не получится, ибо вы ни нагрузку не сможете сымитировать, ни объем данных.
U>Что посоветуете? Может есть мануал с практической направленностью? Или в какую сторону рыть?
Начните со StackOverflow architecture
После этого можно смотреть доклады с HighLoad и смеяться.
Если есть azure, то просто изучайте примеры. Желательно не только те, которые дает Microsoft, ибо его примеры нужны чтобы вы купили больше azure.
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, ukrspecs, Вы писали:
G>Если есть azure, то просто изучайте примеры. Желательно не только те, которые дает Microsoft, ибо его примеры нужны чтобы вы купили больше azure.
У меня проблемы по сути 2:
1) Спроектировать микросервисную архитектуру, которая автоматически скейлиться при большой нагрузке
2) Запустить фейковый трафик аля 1 млн. разных пользователей
Вот для первого, мне надо поучить курс Azure Solutions Architect. А для второго — найти такой инструмент, который имитирует реальный трафик.
Просто я от этой темы далек, поэтому и спрашиваю, как что называется в этом мире.
По второму пункту подскажите? Я видел есть Yandex.Tank, нужно что-то подобное видимо.
Здравствуйте, TG, Вы писали:
TG>Здравствуйте, gandjustas, Вы писали:
G>>Начните со StackOverflow architecture G>>После этого можно смотреть доклады с HighLoad и смеяться.
TG>Я, признаться, не слежу за конфами HighLoad, а что там смешного?
Примерно все.
Уровень докладов на HighLoadпримерно такой: "давайте ресурсов добавим, так чтобы все данные в памяти лежали в двух экземплярах, и все зааботает быстро"
Здравствуйте, ukrspecs, Вы писали:
U>У меня есть непреодолимое желание узнать как работают высоконагруженные системы. В частности понять, что под капотом у всем известных систем, с миллионами и сотнями миллионов пользователей.
U>Но разумеется, такой реальный проект в руки просто так не дадут. А желание потрогать все части такой системы есть. Поэтому прошу помощи у коллег, как организовать имитацию подобного проекта у себя дома.
Ничего там такого сложнейшего нет. Инфраструктуры строятся н самых обыкновенных опенсорсных или самописных, или патченных демонах: sql субд, nosql cубд, вебсерваки, прокся, сетевые и кластерные FS. Всё это крутится на линуксах и/или bsd. Основной прикол тут в распределении данных. Все петабайты сущностей дробятся по каким-то параметрам и раскидываются для храненения, обработки, отдачи на разные сегменты и машины кластера. Масштабировать можно сколько угодно. Так работают все hpc и интернет ресурсы. Другое дело, когда данные не параллелятся и их обработка не кластеризуется. Например, бакновский процессинг, системы документоооброта. Там царствуют специализированные non stop high-end решения от ibm, hpe, oracle в виде высокопроизводительных шкафов. Такие решения просто покупают у вендора и юзают.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, ukrspecs, Вы писали:
U>>Что посоветуете? Может есть мануал с практической направленностью? Или в какую сторону рыть?
НС>Ты в результате что хочешь получить? Опыт настройки таких систем? Опыт создания таких систем? Возможность найти работу в этой области?
Все 3 пункта сразу.
Ну есть у меня детская мечта, создать сервис с 100 миллионов пользователей. Вот в первую очередь хочу понять как это будет работать, если случится.
Здравствуйте, ukrspecs, Вы писали:
U>Ну есть у меня детская мечта, создать сервис с 100 миллионов пользователей. Вот в первую очередь хочу понять как это будет работать, если случится.
Начни с изучения kubernetes, потом переходи к базовым примитивам — load balancers, очереди, распределенные хранилища. А там уже сам поймешь куда тебе дальше двигаться.
Здравствуйте, ukrspecs, Вы писали:
НС>>Ты в результате что хочешь получить? Опыт настройки таких систем? Опыт создания таких систем? Возможность найти работу в этой области?
U>Все 3 пункта сразу.
U>Ну есть у меня детская мечта, создать сервис с 100 миллионов пользователей. Вот в первую очередь хочу понять как это будет работать, если случится.
Начни с теории и рассказов о том, как другие уже решали эти проблемы. Сделай Мартина Клеппмана своим кумиром.
Здравствуйте, gandjustas, Вы писали:
G>Создать HighLoad в домашних условиях не получится, ибо вы ни нагрузку не сможете сымитировать, ни объем данных.
А если не имитировать, а совместить полезное с приятным? Создать для начала какой-нибудь простенький бесплатный сервис-кластер под кроватью, который чем-то полезным занимается на что фантазии хватит. Конвертирует какие-то файлы, например. Когда содержать его станет накладно ввести оплату и т.д. А там может и новая звезда на рынке взойдет
Здравствуйте, ukrspecs, Вы писали:
U>У меня есть непреодолимое желание узнать как работают высоконагруженные системы. В частности понять, что под капотом у всем известных систем, с миллионами и сотнями миллионов пользователей.
U>Но разумеется, такой реальный проект в руки просто так не дадут.
Дадут, если проявить настойчивость.
U>Что посоветуете? Может есть мануал с практической направленностью? Или в какую сторону рыть?
Я бы посоветовал искать работу в компании с такой направленостью, может быть как-то поговорить с HR (или поискать что спрашивают на собесе), что ты хочешь работать на этом направлении и спросить что нужно изучить для них.
Т.е. кажется что городить виртуальный цирк с конями странно. Если идти этим путем, то ищи идею какого-нибудь полезного усвлоно бесплатного сервиса, где у тебя будет высокая нагрузка. Ну вот тупая идея сразу пришла в голову — сделай HTTP прокси или что-нибудь такое.
Вообще это немного из серии — как стать директором космического корабля. Там ведь много компетенций — и софт и SRE и админство, нужно нехило поработать чтобы это выстроить, т.к. много уровней. Делать это в песочнице — откуда взять мотивацию да и зачем?
G>Все действующие высоконагруженные системы не были изначально спроектированы для такой нагрузки, которую они испытывают.
Не скажу за все, но все те, что мне доводилось видеть, — именно так, изначально были "наколенке" и дальше заплатками доросли до того, что называют highload, хотя принципиально это не более чем заплатки на заплатках.
Особенно жутко видеть какие-нибудь cluster management systems...