Ich würde argumentieren, dass dies eher eine ökonomische Frage ist. Dies ist jedoch ein Urteil, zu dem Ingenieure fähig sein sollten. Daher antworte ich.
Ich teile meine Antwort in vier Teile:
- Risikomanagement
- Strategien
- Kosten
- Intuition
Risikomanagement
Daher kann es vorkommen, dass Ihr Client keine Antwort vom Server erhält. Ich gehe davon aus, dass dies nicht auf einen Programmfehler zurückzuführen ist (ansonsten besteht die Lösung darin, ihn zu beheben, also mach das). Stattdessen muss es sich um eine zufällige Situation handeln, auf die Sie keinen Einfluss haben ...
Aber nicht jenseits Ihres Wissens. Du musst wissen:
- Wie oft passiert es?
- Welche Auswirkungen hat es?
Wenn beispielsweise ein Fehler auftritt und nur in etwa 2% der Fälle ein erneuter Versuch unternommen wird, lohnt es sich wahrscheinlich nicht, ihn zu beheben. Wenn es ungefähr 80% der Zeit passiert, hängt es davon ab,
Wie viel Zeit muss der Kunde warten? Und wie sich das in Kosten niederschlägt ... Sie haben eine kleine Verzögerung bei einer regulären Bewerbung, es ist wahrscheinlich keine große Sache. Wenn es wichtig ist und Sie über eine Echtzeitanwendung oder ein Online-Videospiel verfügen, werden Benutzer abgelehnt, und Sie sollten wahrscheinlich besser in mehr oder bessere Server investieren. Andernfalls können Sie wahrscheinlich eine Meldung "Laden" oder "Warten auf Server" einfügen. Wenn die Verzögerung nicht wirklich groß ist (in der Größenordnung von zehn Sekunden), kann sie selbst für die reguläre Anwendung zu groß sein.
Strategien
Wie ich oben sagte, gibt es mehr als einen Weg, um dieses Problem zu lösen. Ich gehe davon aus, dass Sie bereits die Try-Fail-Retry-Schleife implementiert haben. Also, mal sehen ...
- Lade Nachricht. Es ist billig und hilft bei der Kundenbindung.
- Abfrage parallel. Kann schneller sein, kann immer noch scheitern. Benötigt einen redundanten Server (kann teuer sein), wird Serverzeit und Netzwerkverkehr verschwenden.
- Fragen Sie parallel ab, um den schnelleren Server einzurichten, und verwenden Sie diesen von da an. Kann schneller sein, kann immer noch scheitern. Benötigt redundante Server (kann teuer sein), wird nicht so viel Serverzeit und Netzwerkverkehr verschwenden.
Jetzt merke ich, dass diese immer noch scheitern können. Wenn wir davon ausgehen, dass eine Abfrage an einen Server eine Ausfallwahrscheinlichkeit von 80% hat, hat eine parallele Abfrage an zwei Server eine Ausfallwahrscheinlichkeit von 64%. Daher müssen Sie es möglicherweise noch einmal versuchen.
Ein zusätzlicher Vorteil der Auswahl des schnelleren Servers und seiner weiteren Verwendung besteht darin, dass die Wahrscheinlichkeit eines Ausfalls des schnelleren Servers aufgrund von Netzwerkproblemen geringer ist.
Was mich daran erinnert, wenn Sie herausfinden können, warum die Anfrage fehlschlägt, tun Sie dies. Es kann Ihnen helfen, die Situation besser zu meistern, auch wenn Sie die Ausfälle nicht verhindern können. Benötigen Sie beispielsweise mehr Übertragungsgeschwindigkeit auf der Serverseite?
Etwas mehr:
- Stellen Sie weltweit mehrere Server bereit und wählen Sie den Server nach Standort aus.
- Führen Sie einen Lastenausgleich auf der Serverseite durch (ein dedizierter Computer nimmt alle Anforderungen auf und leitet sie an Ihre Server weiter. Sie können dort Ihre Parallelität oder eine bessere Ausgleichsstrategie festlegen).
Und wer hat gesagt, dass Sie nur eines davon tun müssen? Sie können eine Lademeldung einfügen, mehrere Server abfragen, die über den gesamten Wrold verteilt sind, um die schnelleren zu ermitteln, und von da an bei einem erneuten Fehlversuch in einer Schleife nur diese Server verwenden. Jeder dieser Server kann ein Cluster von Computern mit Lastenausgleich sein . Warum nicht? Na ja, kostet ...
Kosten
Es gibt vier Kosten:
- Die Entwicklungskosten (in der Regel sehr billig)
- Die Bereitstellungskosten (normalerweise hoch)
- Die Kostenlaufzeit (abhängig von der Art der Anwendung und dem Geschäftsmodell)
- Die Kosten des Scheiterns (wahrscheinlich niedrig, aber nicht notwendig)
Sie müssen sie ausbalancieren.
Nehmen wir zum Beispiel an, Sie verdienen ungefähr einen Dollar pro zufriedenen Benutzer. Das haben Sie 3000 Benutzer pro Tag. Dass die Anfragen in etwa 50% der Fälle fehlschlagen. Und dass 2% der Nutzer ohne Bezahlung abreisen, wenn die Anfrage fehlschlägt. Dies bedeutet, dass Sie 30 Dollar pro Tag verlieren (3000 * 50% * 2%). Angenommen, die Entwicklung der neuen Funktion kostet 100 US-Dollar, und die Bereitstellung der Server kostet 800 US-Dollar. Wenn Sie die Laufzeitkosten außer Acht lassen, bedeutet dies, dass sich die Investition in ((100 + 800) / 30 rentiert ) 30 Tage. Jetzt können Sie Ihr Budget überprüfen und entscheiden.
Betrachten Sie diese Werte nicht als repräsentativ für die Realität, ich habe sie aus mathematischen Gründen ausgewählt.
Nachträge:
- Denken Sie daran, dass ich auch die Details ignoriere. Möglicherweise haben Sie nur geringe Bereitstellungskosten, zahlen jedoch für die CPU-Zeit und müssen dies berücksichtigen.
- Einige Kunden wissen es zu schätzen, wenn Sie ihr Datenpaket nicht in redundanten Anforderungen verschwenden.
- Die Verbesserung Ihres Produkts kann dazu beitragen, natürliche Werbung zu bringen.
- Opportunitätskosten nicht vergessen. Sollten Sie etwas anderes entwickeln?
Die Sache ist, dass Sie, wenn Sie das Problem in Bezug auf die Ausgleichskosten betrachten, eine Schätzung der Kosten für die Strategien vornehmen können, die Sie in Betracht ziehen, und diese Analyse verwenden, um zu entscheiden.
Intuition
Intuition wird durch Erfahrung gefördert. Ich schlage nicht vor, diese Art von Analyse jedes Mal durchzuführen. Einige Leute tun es, und das ist in Ordnung. Ich schlage vor, dass Sie dies verstehen und eine Intuition dafür entwickeln.
Darüber hinaus lernen wir im Ingenieurwesen neben dem Wissen, das wir aus der tatsächlichen Wissenschaft erhalten, auch in der Praxis und erstellen Richtlinien darüber, was funktioniert und was nicht. Daher ist es oft ratsam zu sehen, wie der Stand der Technik ist ... obwohl Sie manchmal außerhalb Ihrer Region sehen müssen.
In diesem Fall würde ich mir Online-Videospiele ansehen. Sie haben Ladebildschirme, sie haben mehrere Server, sie wählen einen Server basierend auf der Latenz und sie können dem Benutzer sogar erlauben, Server zu wechseln. Wir wissen, dass das funktioniert.
Ich würde vorschlagen, dies zu tun, anstatt bei jeder Anforderung Netzwerkverkehr und Serverzeit zu verschwenden. Beachten Sie auch, dass selbst bei redundanten Servern Fehler auftreten können.