Files

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 - используется для удаленного вызова методов

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>
  1. base matrix
    [9993, 2215, 5963]
    [2518, 4778, 5851]
    [8100, 8887, 3157]

    sortedMatrix
    [2215, 9993, 5963]
    [4778, 2518, 5851]
    [8887, 8100, 3157]

  2. base matrix
    [2116, 8500, 1025]
    [2417, 1084, 7133]
    [6561, 7924, 3981]

    sortedMatrix
    [1025, 8500, 2116]
    [7133, 1084, 2417]
    [3981, 7924, 6561]

  3. 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 для выполнения сортировки в отдельном потоке.