Масштабируемость в сети
-
03-07-2019 - |
Вопрос
Я спорил с некоторыми друзьями в университете, и мы не можем добраться до точки, к которой относится структура с большей масштабируемостью для веб-приложений (и все еще очень быстрая).
Один требует jsp, другой - ruby, другой - php и так далее. Могу ли я попросить вас разъяснить нам, что является более масштабным потенциалом?
Ткс, надеюсь, я не дублирую все, что искал, но не нашел ни одного предыдущего вопроса, подобного этому.
Редактировать. Если бы вы могли сравнить это, было бы неплохо:)
Решение 4
(пять лет спустя ...)
Я нашел этот пост в блоге, в котором тестируются веб-платформы, зависящие от нескольких языков. И теперь это в значительной степени отвечает на вопрос, который у меня был в 2008 году.
http://www.techempower.com/blog/2013 / 03/28 / рамочные-тесты /
Другие советы
Ruby и PHP не являются фреймворками для веб-приложений. Это языки программирования, которые популярны для веб-разработки.
Вообще говоря, масштабируемость веб-приложений не является свойством языка программирования, и конкретная инфраструктура веб-приложений может не более не препятствовать масштабируемости. Хорошая масштабируемость - это скорее свойство дизайна приложения.
Существует слишком много фреймворков веб-приложений для точечного сравнения, которое является чем-то большим, чем энциклопедический.
Кроме того, вы можете решить проблему масштабируемости для определенного приложения несколькими способами. Один из способов заключается в том, чтобы иметь четко определенные и узкие рамки и стремиться к удивительной сырой производительности, чтобы одна машина могла обслуживать несколько миллиардов рабочих единиц. Лучший пример - Mailinator .
Другой способ - упростить обслуживание увеличивающихся нагрузок за счет "просто" добавив больше оборудования. Практически любой каркас веб-приложений, поддерживаемый базой данных, может масштабироваться таким образом: просто добавьте больше серверов приложений между балансировщиком нагрузки и общей базой данных. Если вы решите проблему таким образом, ваша главная задача - разработать приложение, чтобы минимизировать 1. конфликт базы данных 2. загрузку базы данных.
Последний способ - спроектировать систему так, чтобы она была безумно параллельной. Google является ярким примером.
Вкратце: языки или платформы не создают масштабируемые приложения, как это делают архитекторы программного обеспечения.
РЕДАКТИРОВАТЬ: для ясности, мой ответ сосредоточен на масштабируемости , то есть на способности справляться с растущими нагрузками без изменения дизайна. Это свойство отличается от скорости выполнения.
Алгоритмы будут иметь большее значение для масштабируемости, чем используемый язык.
Тем не менее, будут различия в скорости выполнения между языками. Я считаю, что Java (сервлеты и JSP компилируются в сервлеты, т. Е. Нативный код) будет в некоторой степени быстрее, чем Ruby и PHP). Существует также множество веб-фреймворков для Java, которые помогут вам сделать что-то лучшее для масштабируемости.
Также спроектируйте свое приложение так, чтобы оно могло успешно работать за балансировщиком нагрузки, и масштабируемость становится намного проще :) Однако это не моя область знаний.
Масштабируемость веб-фреймворка - это немного продуманный вопрос (некоторые скажут, что конкурс p155ing). Если вы не получаете мега баксов (удачи с этим в наши дни) и не можете обеспечить миллионы посетителей в день, все эти фреймворки могут хорошо с этим справиться (как и ASP.NET). Р>
Лично я бы всегда выбирал ASP.NET. Он так же масштабируем, как и все, и имеет лучшие инструменты для разработчиков. Единственным недостатком является стоимость хостинга и операционной системы.
Вы также можете взглянуть на Что быстрее? PHP против ASP против JSP против CGI и т. Д. "
Я думаю, что Java / Java EE - это единственный " каркас " разработан с нуля для разработки распределенных / кластерных приложений, и это поощряет передовые методы для достижения этого из спецификаций (EJB, JTA ...).
Но, как обычно, это зависит. Подобные вопросы часто имеют тенденцию к пламенным войнам:)
Я не уверен, что какая-либо из упомянутых вами платформ серьезно затруднит масштабируемость.
Все зависит от реализации.
Сначала я бы сконцентрировался на том, чтобы ваше веб-приложение работало хорошо, а затем стал беспокоиться о масштабируемости, когда это станет проблемой. Другими словами «давайте перейдем этот мост, когда подойдем к нему».
A: C ISAPI dll (или пользовательский модуль apache):)
Даже тогда издержки веб-сервера, синтаксический анализ http-запросов и обслуживание html-страниц делают время выполнения ваших приложений практически несущественным. Если вы запускаете приложение как приложение CGI, ожидайте еще меньшей производительности.
Для обеспечения масштабируемости в сети вы действительно говорите о добавлении большего количества серверов и распределении нагрузки, о снятии нагрузки с сервера путем помещения базы данных (если она интенсивно используется) на отдельный сервер.
Производительность этих языков почти не вызывает беспокойства. Используйте тот, который вы хотите использовать, с которым вы будете наиболее продуктивны. Беспокойство по поводу других проблем, с которыми вы столкнетесь - сеть, безопасность, корректность.
Уже несколько хороших моментов. Моя главная мысль была бы такова: человек, который знает Python изнутри и снаружи, вероятно, сможет создавать более масштабируемый код с использованием Python, чем с помощью Java. И есть много очень крупных сайтов, которые используют все технологии, которые вы упоминаете, поэтому я не думаю, что в любом случае есть какое-то большое преимущество.
В большинстве случаев вам следует придерживаться того, с чем вы знакомы, если только нет веских причин идти другим путем.
Я случайно наткнулся на этот вопрос и заметил, что некоторые говорят о скорости, другие о масштабируемости. Я написал сообщение в блоге, объясняющее разницу:
http://www.fransekman.com/scalability -или-производительность-что-делать-вы-средний /
" Веб-сайт с высокой масштабируемостью - это веб-сайт, уровень производительности которого можно поддерживать, увеличивая емкость при увеличении нагрузки " ;. Это может быть достигнуто на любом языке программирования и практически в любой среде. Некоторые фреймворки имеют встроенную функциональность, которая может ускорить реализацию некоторых распространенных возможностей масштабирования.
Скомпилированный язык, как правило, будет работать быстрее, чем интерпретируемый, поэтому я думаю, что Ruby и PHP начинаются за восемь шагов, но на самом деле все сводится к тому, как вы используете язык и как вы структурируете код.
Все языки будут иметь свои собственные лучшие практики и шаблоны для построения масштабируемых приложений, и часто будут компромиссы в зависимости от функциональности предлагаемого приложения.
Если вы хотите узнать, как основные сайты используют LAMP для достижения масштабируемости, вам следует взглянуть на шардинг базы данных .
Выбор веб-инфраструктуры оказывает меньшее влияние на масштабируемость (способность к масштабированию), чем архитектура вашего сайта. Большинство современных веб-фреймворков очень хорошо поддаются масштабированию, поэтому вам действительно нужно уделить внимание настройке вашего развертывания.