вторник, 9 февраля 2010 г.

Erlang: AXD 301 – ATM switch from Ericsson

Взято тут.
"Как только упоминается язык Erlang, так сразу в качестве козырного туза предъявляется проект AXD 301 – ATM switch (телефонный цифровой коммутатор, если я правильно перевожу это на русский) от Ericsson-а. Поскольку практически всегда, когда речь заходит о нем, приходиться искать в Интернете статьи с указанием объема кода и количества разработчиков, то решил некоторые из них опубликовать здесь. Итак:

AXD 301-A new generation ATM switching system – рекламное-обзорное описание самого устройства. 1998 год.

Ulf Wiger’s Four-fold Increase in Productivity and Quality – презентация с рассказом о том, как программирование на Erlang увеличивает скорость и качество разработки. С примером AXD 301, естественно. 2001 год.

Joe Armstrong’s Concurrency Oriented Programming in Erlang – доклад о конкурентном программировании на Erlang. 2002 год (и тот же доклад, но уже в 2003 году).

Joe Armstrong’s Making reliable distributed systems in the presence of sodware errors – диссертация Армстронга, в которой он говорит, в том числе, и об AXD 301. 2003 год.

Mats Cronqvist’s Troubleshooting a Large Erlang System – небольшая статья о том, как разрабатывался софт для AXD 301. 2004 год.

Интересен рост количества строк в Erlang-овой части AXD от публикации к публикации. Ульф Виджер указывает 1M (+ еще 260K в самом OTP). Армстронг через год говорит об 1.7M (хотя в диссертации указана цифра в 1136150 строк кода). А Кронквист через два года – о 2.1M (хотя не факт, что там считались только Erlang-овские строки). Либо софт AXD 301 все время дорабатывают, либо со временем партизаны в воспоминаниях ветеранов становятся все толще и толще ;)

Меня впечатляют цифры из презентации Ульфа Виджера:

* 1M строк кода на Erlang-е;
* 400K строк на C/C++;
* 13K строк на Java;
* плюс к тому около 500K строк кода на C, который работал на т.н. device processor-ах;
* плюс к тому около 100K строк кода на C в стороннем ПО (запуском которого занимались программы на Erlang-е);
* плюс к тому 240K строк на Erlang-е, 460K строк на C++ и 15K строк на Java, которые входили в саму реализацию Erlang/OTP.

В статье Кронквиста указывается, что писало код около 300 человек, хотя раньше я слышал другие цифры – порядка 150."

1 комментарий:

  1. http://www.erlang.se/publications/Ulf_Wiger.pdf:

    "A typical requirement is that a system should be able to provide 90% throughput at 150% load. The AXD 301 manages 95% throughput at 150% load. Throughput then drops linearly to 40% at 1000% sustained load."

    "In large Erlang systems, supervision hierarchies are built in order to encapsulate errors
    and support restart escalation. With a little thought, one can build a structure where the
    worker processes rely on the supervision infrastructure for fault containment and
    recovery. The worker process itself can focus on asserting that functions return “useable”
    values, throwing an exception if something unexpected happens, and re-initialize itself
    after a restart. This, in combination with the use of pattern matching, leads to a style of
    programming that is often referred to as “programming for the correct case” or “ the Let it Crash philosophy.”"

    "The database management system, Mnesia, deserves special attention. It operates directly
    on Erlang data objects and in the same memory space as Erlang applications. Therefore,
    there is no semantic gap, and very little processing overhead when operating on the data.
    Tables can be replicated on demand to several processors, and can be kept fully in RAM,
    in RAM and on disk, or on disk only. Mnesia provides full transaction support, but also
    allows “dirty” operations to operate on database objects without the overhead of
    transactions. This means that Mnesia can be used even in applications where data access
    times must be in the order of microseconds – a requirement for real-time operation."

    ОтветитьУдалить