Должна ли программная служба быть полностью автономной или может / должна быть частью более крупного компонента? - PullRequest
0 голосов
/ 14 июля 2009

Я нахожусь в процессе рефакторинга 4 разнородных программных компонентов, которые в значительной степени выполняют одно и то же действие в одном сервисе (не веб-сервисе - обязательно или даже вероятно). 3 написаны на C ++, а последнее и самое важное написано на Java. Остальная часть системы написана на Java, и поэтому я не буду рефакторизовать код C ++ и использовать JNI, тем более что компоненты, написанные в настоящее время на C ++, планируется заменить на компоненты Java в обозримом будущем .

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

Должен ли я затем добавить поток к исходному / упаковочному компоненту, чтобы он выполнял роль шлюза службы, или полностью преобразовать код в автономную службу.

Я надеюсь, что я достаточно ясно ...

1 Ответ

0 голосов
/ 14 июля 2009

Как правило, не требуется отдельного экземпляра «service», и экземпляры не должны вызываться удаленно. Стратегия совместного развертывания по причинам производительности или доступности вполне разумна. Вы получаете большую выгоду, просто имея единую реализацию логики.

Однако, если у вас уже есть инфраструктура обслуживания, где поставщики услуг, возможно, управляются определенным образом, вероятно, желательно быть последовательным.

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

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

...