Я собираюсь создать высокопроизводительный веб-сервис. Он должен использовать базу данных (или любую другую систему хранения), некоторый язык обработки (скриптовый или нет) и демон веб-сервера. Система должна быть распределена на большом количестве серверов, чтобы служба работала быстро и надежно.
Он должен реплицировать данные для достижения надежности, и в то же время он должен предоставлять функции распределенных вычислений для обработки больших объемов данных (в первую очередь, запросы к большим базам данных, которые не выдержат, выполняемые на одном сервере с подходящим уровнем отклика. ). Техники кеширования не в тему.
Какие кластерные / облачные решения мне следует принять во внимание?
Существует множество Single-System-Image (SSI), файловых систем кластеризации (могут быть частью дизайна), таких проектов, как Hadoop, клоны BigTable и многие другие. У каждого есть свои плюсы и минусы, и на странице «О нас» всегда написано, что решение отличное :) Если вы пытались развернуть что-то, что затрагивает эту тему - поделитесь своим опытом!
UPD: Это не файлообменник и не игра, а нечто весьма интерактивное. Вы можете взять ServerFault в качестве примера веб-службы: небольшие фрагменты данных, полустатический контент, интенсивные операции с базой данных.
Для тех, кому может быть интересно:
Перекрестная публикация на StackOverflow
Связанные вопросы:
Я несколько свободно воспринимаю суть запроса OP о том, что это «зрелая платформа облачных вычислений, которую легко найти для программистов и которую легко масштабировать для операций». Мы еще не совсем там; Насколько мне известно, не существует зрелых, коммерчески доступных систем, которые охватывают всю цепочку от HTTP-запроса и обработки до постоянного хранилища.
Наиболее близким к сегодняшнему дню, вероятно, является промежуточное ПО для распределенных данных, например Согласованность Oracle или может быть Терракота. Oracle Когерентность хороша для Squarespace и другие веб-приложения. Конечно, Oracle также с радостью продаст вам многораздельную базу данных Oracle, которая может обрабатывать огромные объемы данных и просто работает. А цена ... если нужно спросить, вы не можете себе этого позволить.
Если вам нужен дешевый (э-э), то вы в какой-то степени хотите сделать что-то самостоятельно, используя компоненты с открытым исходным кодом. В Семья Hadoop - это наиболее полный и зрелый набор инструментов с открытым исходным кодом, подобный BigTable и Map / Reduce. Раздробленный MySQL популярен для хранения данных и до сих пор остается в основном DIY решение. «NoSQL» сейчас набирает обороты, но все еще первые дни NoSQL.
Какие кластерные / облачные решения мне следует принять во внимание?
Разве у вас не задом наперед? Какие у вас есть свидетельства того, что ваше приложение достигает масштаба Интернета, каковы наблюдаемые модели доступа к данным в текущем масштабе, и с какими решениями и языками ваша команда ранее сталкивалась?
Невозможно ответить, не зная точно, что ты делаешь; даже тогда это может быть довольно сложно.
Судя по тому, что я читал (и пробовал), Кассандра кажется довольно хорошей, но вы не должны рассматривать ее как часть дизайна, не понимая, как именно она работает и каковы ее ограничения.
Такие вещи никогда не бывает легкими, и, более того, это скорее вопрос для Stackoverflow.
Hadoop + Hive (или PIG) создан для работы с большими объемами данных. Это то, что используют Yahoo (кластер на 4000 узлов), Facebook, eHarmony и т. Д.
Я считаю, что вы можете получить фирменные пакеты / поддержку на Cloudera.com или сами на apache.org
Его ужасно легко настроить, и он великолепен при работе с ГБ-ПБ запросов данных.
Вы можете легко протестировать его на EC2 (это один из их вариантов) практически бесплатно.
Facebook использует кассандра для хранения данных.
Вот это статья о масштабировании архитектуры и престижа youtube и google: Проекты, уроки и советы при построении больших распределенных систем Джеффа Дина из Google, описывающего, как они делают свое дело.
Мне очень нравится полный амазонский люкс.
Я считаю, что Amazon EC2 в сочетании с Amazon S3 и Amazon Simple DB или Amazon RDS может быть для вас хорошим вариантом.
Вы можете использовать кластер JBoss.