[PR #20050] feat: Add an asynchronous repository to improve workflow performance #29302

Closed
opened 2026-02-21 20:45:17 -05:00 by yindo · 0 comments
Owner

Original Pull Request: https://github.com/langgenius/dify/pull/20050

State: closed
Merged: Yes


Summary

Addresses #20147
See also #10982, See also https://github.com/langgenius/dify/pull/19325

The default workflow-run api is very slow on simple tasks, making it unacceptable for real time interactions. The api calls spend most of the time interacting with DB. In a scenario where the api is called by another service, there is not much sense to save each call into DB.
image

So here I added a fast mode for workflow api, it can be turned on by setting WORKFLOW_NODE_EXECUTION_REPO_MODE=memory. This enables deploying a dedicated api service for external api calls, with the tradeoff of not able to see execution detail in application logs from the web page.

We added celery based implements for CORE_WORKFLOW_EXECUTION_REPOSITORY and CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY, so the database saving is completely asynchronous in this mode.

Checklist

Important

Please review the checklist below before submitting your pull request.

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran dev/reformat(backend) and cd web && npx lint-staged(frontend) to appease the lint gods
**Original Pull Request:** https://github.com/langgenius/dify/pull/20050 **State:** closed **Merged:** Yes --- # Summary Addresses #20147 See also #10982, See also https://github.com/langgenius/dify/pull/19325 The default workflow-run api is very slow on simple tasks, making it unacceptable for real time interactions. The api calls spend most of the time interacting with DB. In a scenario where the api is called by another service, there is not much sense to save each call into DB. ![image](https://github.com/user-attachments/assets/79d2e71a-8e00-4c75-9e8a-7f60cb6ccb5d) ~~So here I added a fast mode for workflow api, it can be turned on by setting `WORKFLOW_NODE_EXECUTION_REPO_MODE=memory`. This enables deploying a dedicated api service for external api calls, with the tradeoff of not able to see execution detail in application logs from the web page.~~ We added celery based implements for CORE_WORKFLOW_EXECUTION_REPOSITORY and CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY, so the database saving is completely asynchronous in this mode. # Checklist > [!IMPORTANT] > Please review the checklist below before submitting your pull request. - [ ] This change requires a documentation update, included: [Dify Document](https://github.com/langgenius/dify-docs) - [x] I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!) - [x] I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change. - [x] I've updated the documentation accordingly. - [x] I ran `dev/reformat`(backend) and `cd web && npx lint-staged`(frontend) to appease the lint gods
yindo added the pull-request label 2026-02-21 20:45:17 -05:00
yindo closed this issue 2026-02-21 20:45:17 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#29302