HTTP-шлюз обмена сообщениями с Scala - PullRequest
1 голос
/ 04 января 2012

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

Моя предлагаемая архитектура выглядит следующим образом:

  • Независимые от платформы мобильные веб-приложения с использованием PhoneGap (готово)
  • Шлюз - это веб-сервис, использующий Scala для бизнес-логики и ZeroMQ для передачи сообщений (новый)
  • Бэкэнды - это существующие веб-сервисы (существующие)

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

Я настоятельно рекомендую использовать Scala в качестве языка разработки, потому что он, кажется, хорошо подходит для приложений такого типа, но что будетправильная архитектура для такого сервиса Scala?Я посмотрел на фреймворки, такие как Lift and Play, а также подумал о создании простого веб-сервиса на основе java и просто использовал Scala для реализации своей бизнес-логики.Я твердо верю, чтобы все было как можно проще.Я опасаюсь сложных настроек и тысяч строк мертвого кода в фреймворках, которые никогда не могут быть использованы.С другой стороны, ограничивать себя решением «Роль себе» и создавать много работы и поддерживать код, который мог быть частью существующих решений, также не идеально.

Некоторые вещи, которые следует учитывать:Я архитектор и разработчик, но мои знания о Scala ограничены первой половиной «Программирование в Scala, второе издание».Кроме того, мое время очень ограничено.Тем не менее, я хочу сделать это правильно с первого раза.

Я надеюсь, что какой-нибудь умный джентльмен или дам даст мне понимание этого типа решения и, возможно, одну или две ссылки, чтобы быстро начать работу.Мне действительно нужно идти БЫСТРО, но надеюсь, что опыт или идеи другого профессионала могут помочь мне избежать ошибок на этом пути.Любое понимание сред и инструментов разработки также будет полезно.Я должен разрабатывать на Mac (правила компании), но буду развертывать на сервере Ubuntu.В настоящее время я работаю между установками Eclipse или Idea в качестве IDE и компилятором scala или sbt для сборки.

UPDATE

Спасибо за все возможные ответы ниже.Я посмотрел на каждое предложение, и у каждого из них есть свои достоинства.Теперь проблема в том, чтобы сделать ставку на правильную лошадь.Спрей, возможно, самое простое решение проблемы, но я также нашел Finagle .Это похоже на потрясающее решение моей проблемы.Я немного обеспокоен тем, что он построен поверх Netty вместо Akka.Кто-нибудь видит какие-либо проблемы с этим.Я надеялся сохранить свое решение как можно более чисто Scala, но Finagle, похоже, самый зрелый из всех.Есть идеи?

Ответы [ 5 ]

3 голосов
/ 04 января 2012

Возможно, стоит взглянуть на Akka , который предоставляет облегченную среду для написания параллельных, отказоустойчивых приложений на JVM, а также полезные встроенные абстракции для написания веб-сервисов.Кроме того, проект Spray выглядит так, как будто он может быть полезен для ваших целей, предоставляя HTTP-сервер и клиентские библиотеки поверх Akka (хотя, в отличие от самого Akka, я сам этим не пользовался, поэтому могу »ручаюсь за это).

2 голосов
/ 05 января 2012

Если вы используете веб-сервис, предназначенный исключительно для других сервисов, вам лучше всего подойдет сервис на основе Akka, например Spray или Blueeyes.Вы можете использовать Jerkson для сопоставления JSON с вашими классами дел и использовать Akka-Camel для связи с ZeroMQ.

2 голосов
/ 04 января 2012

Как говорит мистистим, Акка - хороший вариант.Я предвзят, но я думаю, что Lift и его RestHelper - фантастический способ (я создал несколько API для приложений iPhone, использующих Lift).Помимо них, я знаю нескольких людей, которые очень довольны нефильтрованным .

0 голосов
/ 08 января 2012

Если ваша система является промежуточным ПО и быстро справляется, то лучше всего подойдет Spray .Спрей был разработан поверх Akka .У Akka есть поддержка ZeroMQ.

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

Вы можете выбрать SBT в качестве вашей сборки, есть несколько шаблонов проектов, доступны инструменты генерации шаблонов, так что вы можете очень быстро получить сборку проекта..

По моему опыту, SBT + InteliJ Idea хорошо работает, посмотрите на плагин sbt-idea

Шаблон проекта Spray
Генератор шаблонов проектов лифтов

0 голосов
/ 04 января 2012

Нефильтрованный - очень интересный вариант, если вы хотите сохранить его легким, так как это не полноценный веб-фреймворк.

Если честно, в документации можно использовать больше подробностей, но для предоставления веб-службы вы просто пишете:

object MyService extends unfiltered.filter.Plan {
    def intent = {
            case req @ GET(Path ("/myendpoint")& Params(params)) => 
                                 for { 
                                    param1<-params("param1")
                                    param2<-params("param2") 
                                 } yield ResponseString(yourMethod(param1,param2))
          }

override def main(args:Array[String]) = unfiltered.jetty.Http.anylocal.filter(MyService).run(); 
}

Очень полезно, если вы не хотите использовать фреймворк и неЯ не хочу смешивать java / java-аннотации со Scala (в противном случае у вас есть обычные java-решения)

Тем не менее, я бы порекомендовал посмотреть на Akka, если вы думаете, что актеры подойдут для вашей проблемы

...