Wyzwania
W systemach informatycznych wraz ze wzrostem ilości funkcjonalności często wzrasta trudność w dodawaniu nowych. System staje się trudny w rozwoju, a koszta związane z utrzymaniem systemu zaczynają przekraczać koszty wprowadzania nowych funkcjonalności. Tego typu sytuacje najczęściej są bardzo złym znakiem ostrzegającym przed problemami.
System klienta już na początku wykazywał znamiona erozji – coraz częściej zaczęło dochodzić do przekroczenia limitów platformy. Było to spowodowane nieprawidłowym wykonaniem funkcjonalności i prowadziło do uszkodzenia danych. Celem projektu było osiągnięcie szeroko idącej skalowalności, która umożliwiłaby stabilną pracę przy jednoczesnym obciążeniu na poziomie kilku tysięcy użytkowników i napływie do kilkudziesięciu do kilkuset tysięcy rekordów dziennie. Oczywiście wszystko to przy zachowaniu nieprzerwanej pracy systemu oraz wysokiego poziomu rozszerzalności.
Rozwiązania
Wysokie wymagania wymuszały szeroki zakres zmian w architekturze systemu. Jednym ze sposobów podnoszenia produktywności jest wprowadzanie do zakresu projektu fazy refaktoryzacji – iteracyjnej modyfikacji kodu, która nie powoduje zmian funkcjonalnych. Celem procesu refaktoryzacji jest poprawienie atrybutów jakościowych systemu, takich jak łatwość utrzymania, rozszerzalność, wydajność, skalowalność, obserwowalność oraz elastyczność.
W ramach projektu przygotowano plan priorytezujacy te zadania, które wymagały najmniejszej ilości pracy, dając jednocześnie najlepsze rezultaty. W każdym sprincie wprowadzono od 10 do 30% zadań technicznych w taki sposób, aby nie kolidowały z implementacją nowych wymagań biznesowych.
W celu spełnienia potrzeb firmy zdecydowano się na zbudowanie modułu ułatwiającego optymalizowanie wykonywania funkcjonalności oraz redukującego ilość operacji bazodanowych. Wprowadzono moduł naśladujący działanie Messaging Queues oparty o Salesforce Platform Events, a także wprowadzono mechanizmy logowania błędów oraz śledzenia ilości i szybkości wywołań asynchronicznych, stanu kolejek systemowych, limitów platformy i stanu głównych procesów automatycznych w systemie.
Efekty
Proces refaktoryzacji z biegiem czasu bardzo ułatwił utrzymanie i rozwój systemu, a także w znaczący sposób wyeliminował błędy i utrudnił powstawanie nowych. Realizacja projektu pozwoliła na:
- zwiększenie szybkości i wydajności – ułatwiono optymalizowanie funkcjonalności, zredukowano ilość cyklicznych zależności w logice, przeniesiono większość funkcjonalności do kodu
- poprawę skalowalności – umożliwiono kolejkowanie zadań oraz ich przetwarzanie w przypadku wystąpienia błędów, zastosowano mechanizm wywołań, pozwalający na dobór odpowiedniej strategii w zależności od kontekstu wywołania,
- lepszą obserwowalność – wprowadzono mechanizmy logowania błędów oraz śledzenia ilości i szybkości wywołań, limitów platformy i stanu głównych procesów w systemie; generowane raporty pokazują co aktualnie dzieje się w systemie od strony technicznej,
- zwiększenie rozszerzalności i elastyczności – większość kodu została rozbita na mniejsze klasy, przy jednoczesnej dbałości o utrzymanie odpowiednich zależności; każda funkcjonalność może zostać dezaktywowana z poziomu administratora,
- ułatwienie utrzymania – zbudowano dobrze przetestowane i stabilne narzędzie, na którym oparto logikę biznesową.
Zastosowane technologie i narzędzia
Salesforce, Sales Cloud, Service Cloud, Community Cloud, Marketing Cloud, AWS, Apex, Lightning Web Components