I maintain internet for a small business in a third-world country, and I am forever struggling with unreliable service from our ISPs. Our current setup uses a Peplink Balance 580 for load balancing, but it has a hard time when one of the ISPs isn't providing the amount of bandwidth they should. Currently, I have it set for failover, so when one ISP goes down, it falls back on the other, but that doesn't work when one of them drops to providing less than a Mbps. Is there any way to use both ISPs independent of the amount of bandwidth that they are providing?
The problem is that your router doesn't know why the traffic is coming in slowly. Maybe your ISP is flaking out, maybe the server is slow, maybe that particular data stream just doesn't have very much traffic.
You could have a script that periodically ran speed tests of course but aside from wasting bandwidth the network conditions between you and the speed test server may not be the same as those between you and the sites you actually want to visit.
A possible solution to this is some form of multichannel VPN, the VPN is hosted on a reliable internet connection elsewhere. Since the multichannel VPN system controls both ends of the connection it has a far better chance of being able to intelligently balance the load. The downside of course is that there will be ongoing costs in maintaining the VPN and there may be extra latency involved.
Unfortunately having not been in this situation myself I can't provide reconsiderations for particular multichannel VPN solutions.
You could run continuous tests on the links and factor those results into deciding how to route traffic, you could use IP SLA on Cisco routers for this however this will lead to you sending traffic continuously over the links (although a small amount). Even open-source routers such as PFSense have built in triggers based on latency to specific destination over WAN links.