forked from sevastyan_b/SSPR_25
Second lab work
Local setup
на контейнерах поставить java
cd firstContainer
mvn spring-boot:run
запуск на втором контейнере
cd secondContainer/secondsContainer
mvn spring-boot:run
стрелять запросами, где n - размер матрицы
curl -X GET "http://localhost:8090/matrix/n"
Technologies used
- java (programming language)
- SpringBoot - framework
- spring-boot-starter базовая зависимость для запуска springBoot приложения
- lombok - логирование
- spring-boot-starter-web - tomcat и запуск контроллеров
- spring-cloud-starter-openfeign - используется для удаленного вызова методов
- SpringBoot - framework
Project structure
Server (main container)
| SpringMainApplication.java
|
+---Controller
| MatrixController.java
|
\---Service
Matrix.java
SortFeignClient.java
SortingHelper.java
SortMatrix.java
SortMatrixByMin.java
Client (cluster)
| ServiceBootApplication.java
|
+---controller
| SortController.java
|
\---service
SortingHelper.java
SortMatrix.java
Code explanation
Java doc comments
Tests
Работа завершена на основном контейнере
2025-03-15T20:03:49.160+04:00 INFO 28720 --- [springMain] [io-8090-exec-10] c.e.f.Controller.MatrixController : jobs completed <br>
2025-03-15T20:03:49.165+04:00 INFO 28720 --- [springMain] [onPool-worker-3] c.example.firstContainer.Service.Matrix : Matrix printing <br>
2025-03-15T20:03:49.166+04:00 INFO 28720 --- [springMain] [ task-8] c.e.f.Service.SortMatrixByMin : Sorted by min values completed <br>
2025-03-15T20:03:49.166+04:00 INFO 28720 --- [springMain] [onPool-worker-3] c.example.firstContainer.Service.Matrix : Matrix printing <br>
Работа завершена на клиентском контейнере
2025-03-15T20:03:49.163+04:00 INFO 21352 --- [second-container] [nio-8085-exec-8] c.e.s.controller.SortController : sort matrix in cluster <br>
2025-03-15T20:03:49.164+04:00 INFO 21352 --- [second-container] [ task-4] c.e.secondContainer.service.SortMatrix : findMinInCols in cluster <br>
-
base matrix
[9993, 2215, 5963]
[2518, 4778, 5851]
[8100, 8887, 3157]
sortedMatrix
[2215, 9993, 5963]
[4778, 2518, 5851]
[8887, 8100, 3157] -
base matrix
[2116, 8500, 1025]
[2417, 1084, 7133]
[6561, 7924, 3981]
sortedMatrix
[1025, 8500, 2116]
[7133, 1084, 2417]
[3981, 7924, 6561] -
base matrix
[4218, 6745, 3835]
[6278, 2170, 8543]
[6773, 6144, 7253]
sortedMatrix
[6745, 3835, 4218]
[2170, 8543, 6278]
[6144, 7253, 6773]
Conclusion
В данной работе был разработан механизм распределенных вычислений в Spring Boot приложении.
Ключевые ачивки:
- Микросервисная архитектура с rest контроллерами
- Реализация параллельной обработки данных через CompletableFuture API позволила существенно повысить производительность системы за счёт одновременного вычисления минимальных значений на клиенте и сервере.
- Распределение вычислительной нагрузки между микросервисами с использованием Feign Client демонстрирует понимание принципов масштабируемой архитектуры.
- Неблокирующая обработка HTTP-запросов через возврат CompletableFuture из REST-контроллера позволяет эффективно управлять потоками в сервере приложений.
- Применение аннотации @Async для выполнения сортировки в отдельном потоке.