История создания Akka.NET

Роджер Олсинг и Аарон Станнард
Роджер Олсинг (Roger Alsing) и Аарон Станнард (Aaron Stannard) — основатели Akka.NET

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

Эффект бабочки

В 2005 году я был на семинаре по архитектуре в Лиллехаммере, Норвегия. Инициировал семинар Джимми Нильссон (Jimmy Nilsson) Один из участников Эйнар Ландри (Einar Landre), работающий в то время в компании Statoil, рассказывал о использовании асинхронных систем в его компании и о том, как можно строить единые системы, используя передачу сообщений.

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

В то время я познакомился с Матсом Хеландером (Mats Helander), он только начал разработку маппера Relatonal Mapper под названием Npersist. NPersist базировался на генерации кода, я показал ему свой фреймворк для аспектно-ориентированного программирования

Я и Матс начали работать над нашими инструментами вместе. Мы упаковали их под зонтиком проекта Puzzle Framework. В то время наш конкурент NHibernate находился на стадии альфа и мы намного опережали его.

Но, время шло, и оказалось, что NHibernate одержит победу, не потому, что он лучше, а потому, что он привлек намного больше людей из-за хорошо известного дочернего проекта Hibernate на JVM. У Hibernate было много обучающего материала; книги, видео и учебники.

В конце концов мы с Матсом бросили разработку Npersist. NHibernate стал уже де-факто стандартом и Linq на SQL только вышла. У нас не было причин сохранять проект.

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

Закладка фундамента

Теперь перенесемся в 2013 год. Я работал над консалтинговым проектом для шведского агентства. В ходе этого проекта, я все больше и больше разочаровывался из-за отсутствия инструментов параллелизма для .NET, я начал изучать материалы по этой теме и в итоге наткнулся на модель акторов и Akka на JVM.

Очень часто, когда я нахожу интересную тему по программированию, мне необходимо попробовать реализовать некоторые концепции самостоятельно, таков мой способ обучения. Я сделал хакинг выходного дня, сначала использовал F# с сопоставлением образцов, процессоры для сервера почтовых ящиков и все существующие там добро. Я игрался с реализаций основных концепций Akka для применения в повседневной работе.

Я знал, что если когда-нибудь появится шанс использовать все это в проектах моих клиентов, я должен перейти на C#. То же самое было справедливо для привлечения участников, C# имеет большую долю рынка, чем F#. Я также вспомнил усвоенный урок NPersist vs Nhbernate.

Портирование Akka

Спустя несколько недель я наконец имел хорошо работающие основные функции Akka-Actor и рудиментарную поддержку Akka-Remote — удаленное развертывание. Практически завершенную конфигурацию парсера HOCON.

Код опубликовал на Github, проект назвал Pigeon («Голубь»). Это неуклюжая попытка сыграть на том, что голуби используются для передачи сообщений. (Название «Голубь» все еще можно увидеть в исходном коде Akka.NET, так как основной файл конфигурации до сих называется «Pigeon.conf»).

Сетевой уровень стал проблемой, я не обладал большим опытом написания низкоуровнего сетевого кода, поэтому первые попытки Akka-Remote с использованием SignalR для коммуникации, позже были заменены очень примитивной реализацией сокетов.

Первоклассная поддержка F#

Я по-прежнему хотел привлечь F# сообщество. F# имеет поистине удивительное open source сообщество. Я увидел неподдельный интерес к модели акторов в лагере F#. Отправил несколько запросов на F# форумы, в поисках кого-то, кто мог бы помочь построить идиоматическое F# API на верхнем уровне С# кода.

Второй пилот

Как-то в феврале (2014), я получил письмо от парня по имени Аарон.

Вот это письмо:

Привет Роджер!

Меня зовут Аарон Станнард. Я основатель .NET стартапа MarkedUp Analytics в Лос-Анджелесе. Мы создаем маркетинговые и аналитические инструменты для разработчиков нативных приложений для платформ Microsoft, включая native Windows.

Я начал портировать Akka на C# в начала декабря. Накануне Рождества взял перерыв. На этой неделе я вернулся к этому. Когда начал изучать детали о TPL DataFlow!, обнаружил Pigeon, Жаль, что ты не приступил к реализации этого проекта на несколько недель раньше 😉

Pigeon предлагает более высокую производительность (3.5-5x), более простой дизайн, чем мой, и ты уже сделал большой прогресс в функциях, над которыми я даже не начал работать.

Поэтому, я хочу прекратить работу над собственной имплементацией Akka и поддержать Pigeon. Я думаю, так гораздо лучше использовать мое время, чем пытаться изобретать все это самостоятельно. Я опытный участник .NET OSS. В настоящее время я поддерживаю FluentCassandra (популярный C# Cassandra драйвер) и имею ряд собственных проектов с открытым исходным кодом.

Планирую продолжить использование Pigeon, по крайней мере для двух наших сервисов, оба из которых работают в условиях высоких нагрузок. Пожалуйста, дай мне знать, чем могу помочь!

С наилучшими пожеланиями, Аарон Станнард • Основатель • MarkedUp

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

Сказал ЧТООО!?

Оказалось, что Аарон создал свою собственную сетевую библиотеку под названием Helios, в такой библиотеке нуждалась и Akka-Remote. Аарон объединил усилия и начал работать над akka-remote bits в то время как я сосредоточены в основном на akka-actor и akka-testkit. У нас наметился хороший прогресс. Мы связались с Джонасом Боунером (Jonas Bonér) из Typesafe для того чтобы узнать: можем ли мы использовать название Akka. Мы получили утвердительный ответ.

Взлет

В настоящее время проект начал привлекать реальное внимание. Håkan Canberger присоединился к команде и Jérémie Chassaing посеял первое зерно F# API. В то же время, родился мой младший сын Тео на 10 недель раньше срока, весом 1195 граммов, поэтому ближайшие два месяца я провел в больнице, решая вопросы связанные с проектом по телефону.

Это оказалось полезно для проекта, до этого момента, я видел его «своим». Это плохое мышление, когда пытаешься запустить проект для сообщества. Между тем, мы получили больше пользователей и участников. Аарон и Хокан были заняты продвижением новых возможностей. Теперь у нас появились такие люди, как создатель языка F# Дон Сайм (Don Syme), который ретвитит наши твиты.

Bartosz присоединился к команде, и работает над завершением F# API. В результате усилилось внимание со стороны F# сообщества. Дон Сайм даже сделал анализ кода одного из F# API запроса на включение кода. С этого момента, проект стал намного самостоятельнее, благодаря новым участникам, предлагающим и создающим целые модули или интеграции.

С тех пор произошли многие события, но я надеюсь, что этот пост даст определенное понимание, почему Akka.NET появился. Я уверен, что другие разработчики поделятся интересными историями о своем участии в проекте.

Источник: rogeralsing.com, Автор: Роджер Олсинг, 26 июля 2015


Перевод выполнен abv24.com




Опубликовано 04.10.2015 в 12:08 дп · Автор abv24 · Ссылка
Рубрики: Технологии · Теги: , , , ,

@Mail.ru