当前位置:   article > 正文

设计前后端系统以处理长时间运行的计算任务并提供缓存支持

设计前后端系统以处理长时间运行的计算任务并提供缓存支持

后端设计

1. 任务队列

创建一个任务队列来存储提交的计算任务。

  1. @Component
  2. public class TaskQueue {
  3. private final Queue<CalculationTask> queue = new LinkedList<>();
  4. public synchronized void addTask(CalculationTask task) {
  5. queue.add(task);
  6. }
  7. public synchronized CalculationTask getNextTask() {
  8. return queue.poll();
  9. }
  10. }
2. 计算服务
  1. @Service
  2. public class CalculationService {
  3. @Autowired
  4. private TaskQueue taskQueue;
  5. @Autowired
  6. private CacheManager cacheManager;
  7. public void submitTask(CalculationTask task) {
  8. taskQueue.addTask(task);
  9. }
  10. @Async
  11. public void processTasks() {
  12. while (true) {
  13. CalculationTask task = taskQueue.getNextTask();
  14. if (task != null) {
  15. Result result = performCalculation(task);
  16. cacheManager.put(task.getId(), result);
  17. }
  18. }
  19. }
  20. public Result getResultFromCache(String taskId) {
  21. return cacheManager.get(taskId);
  22. }
  23. private Result performCalculation(CalculationTask task) {
  24. // Perform long-running calculation here
  25. // ...
  26. return new Result();
  27. }
  28. }
3. 缓存管理器
  1. @Component
  2. public class CacheManager {
  3. private final Map<String, Result> cache = new ConcurrentHashMap<>();
  4. public void put(String key, Result result) {
  5. cache.put(key, result);
  6. }
  7. public Result get(String key) {
  8. return cache.get(key);
  9. }
  10. }

前端设计

1. 提交任务

前端通过API提交计算任务,并获取一个任务ID

  1. async function submitTask() {
  2. const response = await fetch('/submitTask', {
  3. method: 'POST',
  4. body: JSON.stringify({ /* task data */ }),
  5. headers: {
  6. 'Content-Type': 'application/json'
  7. }
  8. });
  9. const data = await response.json();
  10. const taskId = data.taskId;
  11. return taskId;
  12. }
2. 获取结果

前端通过任务ID获取计算结果。

  1. async function getResult(taskId) {
  2. const response = await fetch(`/getResult?taskId=${taskId}`);
  3. const data = await response.json();
  4. return data.result;
  5. }
3. 使用缓存
  1. async function handleTask() {
  2. const taskId = await submitTask();
  3. // Poll or use a WebSocket to check if the task is completed
  4. const result = await getResult(taskId);
  5. // Use the result
  6. }

这个设计方案通过任务队列、异步处理和缓存管理器实现了任务提交、计算和结果缓存。前端可以通过任务ID来轮询或使用WebSocket来检查任务是否完成,并从缓存中获取结果,从而减少计算时间和资源消耗。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/515941
推荐阅读
相关标签
  

闽ICP备14008679号