Вы должны выделить различные значения масштабирования:
- Масштабирование с точки зрения увеличения количества запросов в секунду, которое может быть обработано с пропорциональным увеличением аппаратного обеспечения.
- Масштабирование с точки зрения расширения базы кода без превращения ее в запутанный беспорядок
Scala помогает по первому пункту, потому что он компилируется в байт-код Java, который действительно похож на Java, и, следовательно, обычно имеет ту же производительность, что и Java. Я говорю «обычно», потому что в Scala есть некоторые случаи, когда идиоматическая Scala приводит к большому объему бокса, в отличие от идиоматической Java (это планируется изменить в Scala 2.8).
Производительность, конечно, отличается от масштабирования. Эквивалентный код, написанный на JRuby, также будет масштабироваться, но наклон линии будет круче - вам потребуется больше оборудования для обработки того же количества запросов, но форма линии будет такой же. Но с практической точки зрения производительность помогает, потому что вы редко можете линейно масштабировать масштаб при добавлении ядра или особенно серверов, а более высокая производительность замедляет скорость, с которой вы должны добавлять емкость.
Scala помогает со вторым моментом, потому что он имеет выразительную систему типов с принудительной компиляцией во время компиляции и предоставляет множество других средств для управления сложностью вашего кода, таких как миксины. Вы можете написать код спагетти на любом языке, но компилятор Scala сообщит вам, когда некоторые из лапш сломаны, а с JRuby вам придется полагаться исключительно на тесты. Я лично обнаружил, что для меня Python разбивается примерно на 1000 тесно связанных между собой LOC, и в этот момент мне нужно реорганизовать либо существенно сократить LOC, либо сделать структуру более модульной. Конечно, этот рефакторинг был бы хорошей идеей независимо от того, на каком языке вы говорите, но иногда сложность присуща. Работать с большим количеством тесно связанных LOC нелегко ни на одном языке, но в Scala это намного проще, чем в Python, и я думаю, что аналогия распространяется и на Ruby / JRuby.