2017-11-09 1 views
1

Der Server hält Logik, iOS/Android App enthält UI. Geläufiger Fall.Kontinuierliche Bereitstellung: Wie werden neue Funktionen bereitgestellt, die gleichzeitig Client und Server betreffen?

Wie soll ich neue Funktionen in diesem Fall mit einer kontinuierlichen Bereitstellungsmethode bereitstellen?

Ich gehe davon aus, dass die serverseitige Bereitstellung wie folgt aussieht: Ich bin Auslöser neue Feature-Bereitstellung, Load Balancer startet 1% aller Benutzer auf die Serverinstanz mit der neuen Funktion umleiten. Wenn alles reibungslos verläuft, startet Load Balancer die Umleitung von 10%, 30% usw. auf 100%.

Das gleiche kann für Client-Anwendungen getan werden, zum Beispiel mit CodePush.

Also, wenn ich Server ohne eine App bereitstellen, dann wird es keine neue Funktionen Verwendung geben und daher keine Probleme mit der neuen Bereitstellung sicher.

Also, wahrscheinlich muss ich zuerst Anwendung bereitstellen und eine Art von Server Version Checker, also, wenn der Server API für diese neue Funktion hat, wird die Benutzeroberfläche für diese Funktion angezeigt, und wenn die App mit dem verbunden ist Falscher Server, die neue Benutzeroberfläche ist ausgeblendet.
Das scheint primitiv. Ich muss Socket-Verbindung zu dem gleichen Server beibehalten, um zu vermeiden, den falschen Server zu schlagen, nicht wahr? Und was passiert, wenn Instanz/Zone/Region ausfällt und der Benutzer plötzlich auf eine andere sone/region umgeleitet wird und der neue Server nicht über die neue Funktion api verfügt? Wahrscheinlich ist meine Annahme falsch.

Also, wie soll ich neue Funktionen in diesem Fall mit einer kontinuierlichen Bereitstellungsmethode bereitstellen?

Antwort

1

Ich würde sagen, dass Ihre Frage mehr Versionskompatibilität der Server/Client-API als CD ist. Wir haben eine ähnliche Anforderung, bei der ein Server und die Clients miteinander kommunizieren und beide ständig mit Funktionen ausgestattet sind. Ich kenne Ihre Produktionssoftwarearchitektur nicht, die die Anforderungen entsprechend ändern könnte, aber ich werde versuchen, einige Ideen zu entwickeln.

Ich werde zwei Fälle beschreiben, die für Sie gelten könnten.

Erster Fall:

Die Sache ist einfacher, wenn man die Situation nicht stellen, die neuen Client-Versionen müssen mit alten Server-Versionen kommunizieren. Die neue Serverversion wird zuerst bereitgestellt, und alte Clients verwenden die neue Funktion einfach nicht, wie Sie bereits erwähnt haben. In dieser Situation empfehle ich, zuerst die Server-App bereitzustellen und dann mit dem Rollout der neuen Client-Apps zu beginnen. Wenn das möglich wäre, würde ich das tun. Es gilt nur, wenn Sie durch die neue Funktion nicht gezwungen werden, die API zu unterbrechen.

Zweiter Fall:

Im Fall, dass neue Client-App-Versionen müssen auf eine alte Server-Anwendung sprechen, die ich unter allen Umständen zu vermeiden versuchen würde, muss der neue Client einige Schalter im Inneren Funktion deaktivieren z.B B wenn es mit einem alten Server kommuniziert, der diese Funktion nicht unterstützt. Ein API-Versionszähler könnte die Lösung sein. Es erfordert jedoch, dass der Client zwischen den Serverversionen unterscheiden kann. In REST sieht man oft die .../v1/.. innerhalb der URL, könnte aber auch anders gelöst werden. Hoffentlich bietet die API einen Mechanismus, um die Version zu erhalten, die der Server spricht.

Wir haben beide Fälle zur gleichen Zeit gesehen, das Protokoll hat sich im Laufe der Zeit geändert, einschließlich der Änderungen, so dass wir einen Verhandlungsmechanismus für die API-Version implementieren mussten.

Verwandte Themen