Это хорошая идея использовать ruby ​​для программирования сокетов? - PullRequest
5 голосов
/ 28 ноября 2009

Мой язык выбора - Ruby, но я знаю из-за твиттера, что Ruby не может обрабатывать много запросов. Это хорошая идея использовать его для разработки сокетов? или я должен использовать функциональный язык, такой как erlang, haskell или scala, как разработчики твиттера?

Ответы [ 9 ]

15 голосов
/ 28 ноября 2009

Компания, в которой я работаю, использует Ruby для нашего веб-сайта. На сегодняшний день мы обработали чуть более 34 000 000 000 обращений. У нас нет проблем с обработкой около 10 000 000 обращений в день. Пиковые попадания превысили 40 000 000 обращений в день.

Масштабируемость зависит от множества факторов. Наши базы данных делают непропорционально высокий процент записей по сравнению с чтением, например. Хотя большинство веб-сайтов читает около 90%, а 10% пишет, мы приближаемся к 50% -50%. Я хочу сказать, что на масштабируемость влияет множество факторов. Если вы ограничены в базе данных, как это часто бывает в веб-приложениях, не имеет значения, какой язык вы используете, вы будете ждать в своей базе данных.

Есть много о чем подумать, если вы смотрите на работу с большими весами. Разделение баз данных, memcached и т. Д. И т. Д. И т. Д. И т. Д. Язык, который вы используете для своего приложения, является лишь одним аспектом и часто, хотя и не всегда, небольшим аспектом масштабируемости.

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

13 голосов
/ 28 ноября 2009

Я не уверен, что любые «уроки», которые команда Twitter узнала о Ruby (точнее, Rails) и масштабировании, подойдут к вашему проекту. Они смотрят на ПУТЬ больше трафика, чем может ожидать большинство людей.

Что касается сокетов и Ruby, посмотрите Мне нравится Unicorn, потому что это Unix . Это довольно интересное прочтение о том, как делать сокеты в Ruby.

4 голосов
/ 29 ноября 2009

Сначала я хотел бы предоставить немного контекста. Я довольно активен в сообществе Scala, и I выберет Scala вместо Ruby для любого проекта.

Итак, сказав это, продолжайте с Руби, если вы действительно не столкнетесь с барьером. Если вы предпочитаете Ruby, возможно, вам никогда не понравится тот выбор, который вы упомянули, особенно статически типизированный.

Возможно, было бы неплохо выучить новый язык, если у вас есть альтернатива. В вашем случае я бы порекомендовал Clojure или Erlang. Scala - это хороший статически типизированный язык ОО с функциональными возможностями программирования. Это может быть проще для изучения, чем другие, но люди, которые действительно любят динамическую типизацию, не могут легко перейти на статическую типизацию.

Что касается Haskell, то это один из самых удивительных языков (и гораздо более хорошо поддерживаемый и популярный, чем столь же удивительные альтернативы), и он может открыть ваш ум как ничто другое. Это также трудно освоить.

3 голосов
/ 28 ноября 2009

Если ruby ​​- ваш любимый язык, да, это хорошая идея. Всегда лучше использовать то, что вы знаете и что вам нравится

1 голос
/ 11 декабря 2009

Я также использовал Ruby для многих проектов, хотя недавно перешел на Scala и мне это очень нравится. Одна вещь, о которой я слышал хорошие вещи (но никогда не пробовал себя) для сетевых вещей в Ruby, это EventMachine . Он использует Reactor Pattern точно так же, как скрученный, и кажется довольно солидным.

1 голос
/ 29 ноября 2009

По крайней мере, у вас есть возможность остаться на вашем любимом языке высокого уровня, если вы используете быстрый, параллельный язык, такой как Haskell, Erlang или Scala. В Ruby узкие места в производительности будут означать переключение на скомпилированный C (или Haskell, или ...) для скорости в любом случае.

Ruby обладает преимуществом хороших каркасов внешнего интерфейса.

1 голос
/ 28 ноября 2009

Принимая во внимание, что вы можете получить лучшую производительность от функционального языка, такого как Erlang, пригодность Ruby будет действительно зависеть от того, чего вы пытаетесь достичь. Например, сколько запросов вы собираетесь обрабатывать - это, пожалуй, первый вопрос, если выигрыш в производительности от использования Erlang не имеет большого значения, используйте то, что вам удобно, зачем изучать новый язык, если вам это не нужно?

0 голосов
/ 18 февраля 2010

Недавно написав (на самом деле все еще делаю сейчас) проект, использующий сокеты с Ruby и Java, я бы сказал, нет. Реализация сокетов ruby ​​плохо документирована, если вы не планируете писать базовый блокирующий сервер чата. Я обнаружил, что писать на C или Java проще, Ruby оборачивает нативные сокеты, и вы, похоже, задаетесь вопросом, как, черт возьми, использовать его сейчас. Ранее я написал множество кодов сокетов для Windows, Linux и других платформ на C, с меньшим стрессом.

Мой код на Ruby теперь очень маленький и хорошо работает, так как добраться до этого момента было настоящей болью.

0 голосов
/ 28 ноября 2009

Ключ в том, чтобы иметь низкоуровневую библиотеку в C / C ++, которая выполняет мультиплексирование сокетов для вас. Мультиплексирование сокетов - это то, что делает процесс TCP-сервера действительно многопользовательским. такие библиотеки в C (что вам нужно) могут быть libevent / libev ... и в c ++ boost :: asio. Python крутит, что делает это за кадром.

Если вы получите такую ​​библиотеку и будете использовать ее в ruby, вы сможете довольно хорошо реализовать большинство программ сокетов. Это особенно актуально для ОС UNIX, которые предпочитают многопоточность многопоточности.

...