Dopóki pozwolisz na indeksowanie/ponowne indeksowanie niezależnie od aplikacji, będziesz mieć problemy z synchronizacją. W zależności od dziedziny Twojej pracy może to nie stanowić problemu, ale w przypadku wielu aplikacji współbieżnych użytkowników tak właśnie jest.
Te same problemy mieliśmy, gdy system zadań uruchamiał asynchroniczne indeksowanie co kilka minut. Użytkownicy mogli znaleźć produkt za pomocą wyszukiwarki, a następnie, nawet jeśli osoba administracyjna usunęła produkt z ważnego stosu produktów, nadal znajdowała go w interfejsie użytkownika, aż do uruchomienia kolejnego zadania reindeksowania. Prowadzi to do bardzo mylących i rzadko powtarzalnych błędów zgłaszanych do wsparcia pierwszego poziomu.
Widzieliśmy dwie możliwości:albo ściśle połącz logikę biznesową z aktualizacjami indeksu wyszukiwania, albo zaimplementuj ściślejsze asynchroniczne zadanie aktualizacji. Zrobiliśmy to drugie.
W tle działa klasa w dedykowanym wątku wewnątrz aplikacji tomcat, która pobiera aktualizacje i uruchamia je równolegle. Czas oczekiwania na aktualizacje backoffice do frontendu skrócił się do 0,5-2 sekund, co znacznie zmniejsza problemy związane z obsługą pierwszego poziomu. I jest tak luźno powiązany, jak to tylko możliwe, możemy nawet zaimplementować inny silnik indeksowania.