Сайты PHP / Rails / Django / ASP должны были быть написаны на C ++? - PullRequest
4 голосов
/ 21 мая 2009

Я смотрел на проект с открытым исходным кодом члена SO. Это был веб-фреймворк, написанный на C ++.

Теперь вы все, вероятно, готовы ответить на вопрос о том, как C ++ является ужасным языком для веб-сайтов, и что на веб-сайтах узкое место в базе данных.

Но ... Я прочитал этот пост:

http://art -blog.no-ip.info / CppCMS / блог / запись / 42

и там он доказывает, что на большом сайте, таком как Википедия, серверы баз данных составляют только 10% всех серверов. Поэтому C ++ будет лучше, чем такие языки, как PHP Python Ruby C #.

Его очки действительны?

Ответы [ 8 ]

17 голосов
/ 21 мая 2009

Проблема со статьей, на которую вы ссылаетесь, состоит в том, что автор явно не знает, о чем говорит, когда спрашивает, где находится «узкое место»; тот факт, что кто-то имеет больше веб-серверов, чем серверов баз данных, не означает, что «база данных не может быть там, где проблема». То, что обычно подразумевается под «базой данных, является узким местом», - это то же самое, чему научились все, кто когда-либо выполнял профилирование во время выполнения веб-приложения.

Рассмотрим приложение, для возврата полного ответа которого требуется полсекунды. Предположим, вы сели и профилировали его, и обнаружили, что эта половина секунды времени обработки разбивается следующим образом:

  • Разбор входящего запроса: 50мс
  • Запрос к базе данных: 350 мс
  • Отображение HTML для ответа: 50 мс
  • Отправка ответа обратно: 50 мс

Если бы вы увидели подобный сбой, когда запросы к базе данных составляют 70% фактического времени работы приложения, вы бы правильно пришли к выводу, что база данных является узким местом. И это именно то, что большинство людей обнаруживают, когда они делают профилируют свои приложения (и, как правило, база данных настолько полностью доминирует во времени обработки, что выбор языка для остальной обработки никому не имеет значения) заметит).

Оказалось, что количество задействованных серверов баз данных не имеет большого значения; известная цитата состоит в том, что такие люди, как автор поста, который вы связали, - это люди, которые слышат, что одной женщине требуется девять месяцев, чтобы родить ребенка, и предполагают, что девять женщин, работающих вместе, могут сделать это за один месяц. С точки зрения базы данных: если выполнение данного запроса занимает 100 мс для данной БД, то добавление большего количества серверов БД не позволит любому из них выполнить этот запрос быстрее. Причина добавления большего количества серверов баз данных заключается в возможности обрабатывать больше одновременных запросов и предотвращать перегрузку вашей БД, а не заставлять отдельные запросы выполняться быстрее.

И оттуда вы попадаете в обычный танец масштабирования приложения: кэширование для сокращения общего времени, затрачиваемого на получение данных или представление ответов, балансировка нагрузки для увеличения количества одновременных запросов, которые вы можете обслуживать, сегментирование и более сложные схемы проектирования баз данных, чтобы не перегружаться под нагрузкой и т. д. и т. д.

Но, вы заметите, ничего из этого не имеет ничего общего с используемым языком программирования, потому что, опять же, количество времени, потраченного или сэкономленного другими факторами, значительно превышает количество времени, полученное или потерянное «быстрый» или «медленный» язык (и, конечно, на самом деле такой вещи нет; от проблемной области и умений программиста зависит так много всего, что вы просто не можете иметь значимого общего сравнения).

Во всяком случае, это становится довольно длинным и бессвязным, поэтому я просто заверну это общим руководством: если вы видите, что кто-то утверждает, что «вы должны встроить язык X, потому что он работает быстрее», это мертвая распродажа. что они действительно ничего не знают о реальной производительности или масштабировании. Потому что, в конце концов, если бы это просто сводилось к «писать на самом быстром языке», они бы рекомендовали всем нам использовать ассемблер:)

11 голосов
/ 21 мая 2009

Серверы - это единовременная фиксированная стоимость в несколько штук. Время программиста стоит намного больше. Конечно, написание веб-сайтов на C ++ уменьшит затраты на оборудование, но значительно замедлит разработку. Поэтому, если вы можете сократить время разработки на один человеко-месяц, используя Ruby вместо C ++, это окупит дополнительный сервер.

Лучше значит намного больше, чем "быстрее".

3 голосов
/ 21 мая 2009

Я бы неохотно сказал, что серверы - это единовременная стоимость в несколько штук, так как некоторые стоят сотни тысяч, и я рискну сказать миллионы. Ряд источников предположит, что самая большая стоимость для ИТ-индустрии - это аппаратные средства, а не рабочая сила. Но для сравнения языков нам нужно сравнивать их, а не аппаратные средства.

Идея таких языков, как Ruby, Python, PHP и Groovy, заключается в быстрой разработке приложений (RAD). Фреймворки, Ruby on Rails, Django, CakePHP и Grails предназначены для лучшего облегчения RAD. Языки просты в использовании и позволяют разработчикам настраивать и разрабатывать с небольшими затратами, а временные рамки сокращаются по сравнению с другими языками или настройками.

Это правильно или неправильно? Это все личное мнение, но в конечном итоге потребности проекта определят, какой набор инструментов лучше всего подходит. Если ваше приложение имеет низкий трафик, и вы хотите, чтобы оно было разработано и работало в течение нескольких месяцев, тогда было бы идеально использовать один из ранее упомянутых языков и / или фреймворков.

А как насчет C ++, .Net и J2EE? Theres место для всего. Как правило, это приводит к более высоким первоначальным затратам, связанным с затратами времени и энергии на разработку проекта, настройку среды разработки и фактическую разработку. Но построенные из них языки и интегрированные среды лучше подходят для масштабируемости, чтобы приспособиться к интенсивному трафику или вычислениям.

Посмотрите на Facebook в качестве примера. Первоначальный сайт был создан по прототипу и развернут как приложение PHP, а база пользователей была относительно небольшой. Поскольку сайт превратился в чудовище, мы знаем это, поскольку сегодня они масштабировали свое приложение, внедрив J2EE на серверной части и используя существующие сценарии PHP для внешнего интерфейса.

Как человек, имеющий опыт разработки J2EE и Python / PHP, у него есть очевидный набор преимуществ и недостатков. Я могу создать блог с PHP за несколько дней, готовый для публичного доступа, но этот же проект в J2EE может занять гораздо больше времени.

Простите мою терминологию, но корпоративные языки (J2EE, .Net) требуют значительных усилий по настройке и развертыванию. Ruby, PHP и Python этого не делают, вы просто открываете Блокнот, пишете свой код и сохраняете его с правильным расширением, и вы готовы к загрузке.

Это помогает?

3 голосов
/ 21 мая 2009

При написании на компилируемых статически типизированных языках, таких как C ++, возникает гораздо больше проблем, и все они могут повлиять на разработку. Некоторые из основных причин, по которым были разработаны языки сценариев, такие как Ruby или PHP, заключаются в том, чтобы мы, программисты, могли более эффективно использовать язык и наборы инструментов, с которыми мы работаем.

Да, сайты были бы быстрее, если бы они были написаны на языке, таком как C ++. Да, они могли бы обслуживать больше людей, быть более масштабируемыми и более эффективными. Но достаточно ли это хорошая причина, чтобы потерять все преимущества, которые дает нам интерпретированный язык? Счастье программиста, время разработки, простота использования, мобильность и многое другое, что я не могу упомянуть.

Правильный инструмент для правильной работы, а для C ++ разработка веб-сайтов не входит в их число.

2 голосов
/ 21 мая 2009

Счастье программиста, время разработки, простота использования, мобильность и многое другое, что я не могу упомянуть

На самом деле ... это не настолько ужасный и медленный процесс разработки на C ++, учитывая правильных инструментов.

Wiki, который запускает этот проект, был написан и создан за несколько дней (и да, на C ++) ... Неплохо для ужасного языка C ++; -)

Взгляните:

Я думаю, что это не медленный процесс работы по вечерам для создания такой вики: http://art -blog.no-ip.info / wikipp / en / page / main

1 голос
/ 22 мая 2009

Нет, его очки недействительны. Не то чтобы один лучше другого, но возьмем, к примеру, C # и java, это просто более продвинутые современные языки, которые были разработаны с учетом проблем C ++.

Нет смысла беспокоиться о таких вещах, как сборка мусора, если это не нужно. Кроме того, различные языки веб-фреймворка имеют так много компонентов, элементов управления, модулей и многих других частей, с открытым исходным кодом или иным образом, уже написанных для них другими разработчиками, и вы будете изобретать колеса, которые существуют на других языках повсюду.

В моем сердце всегда будет место для C ++, но это своего рода идиотизм или тролль, достойный того, чтобы предлагать вам лучше писать сайты на C ++.

(РЕДАКТИРОВАТЬ: Возможно, если C ++ является единственным языком, который вы знаете, или у вас есть много самодельных компонентов в C ++ для веб-сайтов, но вам все еще, вероятно, лучше изучать язык C ++ для разработки веб-сайтов, что довольно Легко учиться, когда вы знаете C ++ / C)

0 голосов
/ 15 июня 2009

Его очки НЕ действительны для 99% веб-приложений. Веб-приложения выигрывают от быстрой итерации и дружественных интерфейсов, которые лучше достигаются с помощью таких языков, как PHP, Python и Ruby. Если вы достаточно удачливы в разработке часто используемых услуг, у вас не возникнет проблем с его масштабированием.

0 голосов
/ 21 мая 2009

В последний раз, когда я проверял, php, Ruby и Python написаны на C. Разве это не считается?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...