2013-12-14 3 views
3

У меня есть сервер Java с одной универсальной операцией, которая обслуживает множество функций внутри.Легкий механизм правил на стороне сервера для управления функциональностью сервера

Выполнение одной или нескольких функций во время вызова сервера зависит от того, какой клиент звонит и какие параметры передают клиент.

Сервера выполняет функциональные возможности оркестровки внутренне на основе параметров клиента (как правило, параметры типа клиента, страны, типа продукта и т.д.)

В рамках сервера в настоящее время мы установили в случае/иначе блок, чтобы определить это, но какие-либо изменения в этом требует изменения и выпуска кода.

Я планирую изменить это и использовать механизм очень легкого веса, где я могу передавать множество параметров и настраивать функциональность по правилам (или нокаутом оттуда).

Важнейшим требованием является то, что этот механизм правил может быть настроен «на лету» (через некоторый интерфейс) без какой-либо освобождения кода (например, правил, хранящихся в кеше).

Кроме того, мой сервер принимает 10 миллионов запросов в день, и он должен быть очень быстрым с точки зрения ответа, и я не могу позволить себе использовать БД или тяжелые правила для каждого HIT.

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

Любые идеи или предложения по внедрению?

ответ

1

Вы можете использовать Prolog в качестве механизма правил: существует множество облегченных реализаций.

Конечно это не всегда молниеносный, но, возможно, достаточно быстро для вас, особенно если правила написаны с осторожностью.

Затем вы можете кэшировать результаты.

Если у вас есть обычный набор параметров, сделайте эту группу объектов, предоставляйте хеш-функцию в зависимости от содержимого параметров и используйте в качестве ключа хэш-карту. Чтобы обеспечить разумный размер кеша, выполните список LRU для ключей.

+0

Действительно понравился ваш второй подход, будет отлично работать для моего использования, принят! – Rushik

+0

@ Rushik У меня очень схожая проблема, было бы здорово получить ваши отзывы о том, как это решило вашу проблему – hershey92

Смежные вопросы