Будет ли разделение полезно при редизайне устаревшего приложения?

Я работаю в компании, управляющей несколькими интернет-магазинами. Мы собираемся полностью переписать весь код: управление контентом сайта и продуктами, обработка заказов, отношения с партнерами, учет, клиентская база и прочее. На данный момент у нас есть система, в которой все (все сайты внутреннего управления, бизнес-логика и веб-сайты интернет-магазинов) тесно связаны, работают на одном экземпляре LAMP, и абсолютно все данные находятся буквально в одной мусорной базе данных. Из-за этого (а также из-за 10-летней разработки, частично переписанного с perl, качества php-кода) введение нового интернет-магазина, редизайн любого существующего или изменение чего-либо в логике является практически невыполнимой задачей.

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

С одной стороны, все интернет-магазины в основном продают одну общую базу продуктов, они являются своего рода зеркалами, иногда просто по-разному ориентированными на международных клиентов (названия и описания могут различаться). То, что мы продаем, является сервисным продуктом, который зависит от местных партнеров, но с общим предопределенным ассортиментом. Но в некоторых городах у нас действуют специальные цены, в других городах мы предлагаем расширенный ассортимент в дополнение к общему ассортименту. Поэтому мы также запускаем специальные веб-сайты, ориентированные на один город, веб-сайты, которые продают только специальные предложения и так далее.

В отличие от решения, в котором каждый веб-сайт имеет свою собственную базу данных продуктов (которая иногда является копией другой), я рассматриваю возможность собрать всю описательную информацию о продуктах, доступность в разных городах и/или на разных сайтах и ​​цены в единую изолированную систему управления продуктами. и подавайте всю информацию через SOAP. И каждый раз, когда любой пользователь посещает какой-либо сайт, сайт будет использовать эту услугу (предоставляя некоторые параметры), а затем перечислять продукты. По-видимому, можно разработать библиотеку общего доступа, чтобы включить ее в каждый сайт.

1) Является ли это решение адекватным? Будет ли он работать достаточно быстро без кэширования? У нас ограниченные ресурсы (1,5 разработчика), поэтому я стараюсь не вводить (по возможности) дополнительные технические сложности, такие как требование использовать memcached на каждом сайте.

2) Предположим, я реконструирую систему несвязанным образом. Будет ли выгода адекватной, чтобы заниматься всей работой с memcached и т.д.?

3) Разумно кэшировать данные на стороне SOAP-сервера, а не на веб-сайте и продолжать делать тысячи мыльных запросов?

Все системы будут разделены, некоторые из них связаны с веб-сайтом, например, обработка заказов, авторизация клиентов (общая для всех веб-сайтов), интеграция приема платежей и т. Д. В случае обработки заказа, когда заказ необходимо разместить через Интернет. - сайт удаленно приводит в порядок систему обработки через SOAP, а затем, в свою очередь, предоставляет собственный SOAP-сервер для получения обновлений статуса заказа.

4) Верна ли эта философия разъединения, ориентированная на SOAP?

Используемые технологии: nginx, php, MySQL.


person Community    schedule 17.08.2010    source источник


Ответы (1)


Эдуард. Я постараюсь ответить на ваш вопрос. Сначала я дам небольшую преамбулу, а затем по пунктам:

I. Практически очевидно, что полное переписывание должно быть оптимизацией архитектуры системы, просто чтобы иметь какой-то смысл. В вашем конкретном случае введение «некоторой» модульности в архитектуру ЯВЛЯЕТСЯ оптимизацией такого рода. (Я также хотел бы подчеркнуть, что до тех пор, пока вы не будете привязаны к какой-либо среде приложений в стиле AR, в вашем коде должно быть как минимум три узнаваемых корпуса:

1) модель в настоящее время является очень «общим» термином, но по-прежнему имеет смысл отделять все абстрактные знания предметной области (объекты и отношения) от всего, что не имеет к этому особого отношения
2) постоянство данных организация, которая в основном представляет собой «уровень доступа к данным», но я надеюсь, что он может быть не таким толстым из-за выбранной вами инфраструктуры ORM.
3) другой библиотечный код, который не является ни одним из вышеперечисленных

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

II. Небольшое замечание, которое я мог бы сделать, касается общего представления о качестве приложения. Вам придется найти баланс между лаконичностью вашей системы, сроками проекта и результирующими показателями производительности. Это все противоречивые требования, но я не могу сказать, что в вашем случае главное. Но слишком общий и абстрактный код может оказаться сложным в сопровождении, поэтому вам потребуется как минимум корректное описание функциональных требований к полученной системе. Я думаю, срок действия не менее 3-5 месяцев.


Теперь соответствующая часть:
1) Адекватно? По крайней мере, он должен быть более адекватным, чем то, что у вас есть сейчас. Будет ли он работать быстро без кэширования? Я действительно не знаю, но я думаю, что короткий ответ - «нет» - я полагаю, вы имеете в виду именно целевое кэширование данных (большие наборы данных), которое я не вижу подходящим для чего-либо похожего на memcache. (Кстати, у вас не 1,5 разработчика, а (1 - 0,25) разработчика, что дает вам 0,75, я думаю :))
2) В качестве предложения вы могли бы написать агентов, связанных с бизнес-логикой, на чем-то менее дерьмовом, чем PHP . В остальном - зависит от вашего личного опыта работы с потенциально задействованными технологиями.
3) Я думаю, что возможен любой вариант, но все же я думаю, что кеширование на стороне Интернета лучше, потому что вы можете устранить возможное узкое место
4) Для этого конкретного примера? Не в моем видении. В качестве аргумента могу сказать, что объединение двух сайтов (!) — это вообще ужасный процесс.

person Bubba88    schedule 17.08.2010