Upload path
Currently Service API uploads import data to the web app disk. This is first of all problematic in a load balanced server setup. A file can be uploaded to one server but when the commit request is sent, there is no guarantee that it will be picked up by the same server. If the commit is picked up by another server, it results in a 404.
The second issue is that after some time running, there will be potential "There is not enough space on the disk" exceptions. The only thing that helps in this case is a restart of the web app. According to support, this is caused by some default cache limit of 1GB which we are frequently hitting for some of our customers that have heavy traffic from PIM to Optimizely.
Suggestion: Store the uploaded files in the blob storage instead.
Message/status storage in DDS
Service API status and information messages are currently stored in DDS. We have had issues with performance in DXP when there are a lot of messages. In some cases we have seen a response time of 2-3 minutes to query import status for one single job/operation! The only thing we have found that helps is to manually clean the messages in the DDS by executing a stored procedure.
Suggestion: Store the messages in an optimized table using Entity framework or something more performant than DDS.
I have seen a somewhat similar error with "Export Content", when running without Sticky Session in a Load Balanced environment. Then the export file is saved locally on one server, but the download request might be handled by another server on which the file is not local.