Hier einmal exemplarisch der Code mit dem wir eine vorher vorbereitete Liste an Gruppeneinstellungen bei denen das angemeldet Flag gesetzt ist an die Starface übergeben um die Benutzer anzumelden :
/** * Setzen einer Liste von Gruppensettings in der Starface, bei denen zum Beispiel das angemeldet Flag beeinflusst wurde. * @param groupSettings * @throws UciException */ public void setGroupSettings(ListgroupSettings) throws UciException { UciGroupRequests group = uciProxy.getRequests(UciGroupRequests.class); group.setGroupSettings(groupSettings); }
Dieser Aufruf dauert auf unserer Starface für einen Beispielbenutzer ganze 7 Sekunden in dem die Anlage bis zum Anschlag belastet ist. Die meiste CPU Zeit konsumiert dabei der Postgresql Prozess. Man kann sich vorstellen, wie stark die Anlage in die Knie geht, wenn sich in der Früh der gesamte Verkauf anmeldet, bzw vor der Mittagspause wieder abmeldet. Wir haben das Problem schon vor langer Zeit an den Starfacesupport gemeldet und bisher aber leider noch keine Lösung für das Problem bekommen, obwohl immer wieder versprochen wurde, dass die Performance in diesem Bereich verbessert worden sei. Da das Problem bei uns mittlerweile ziemlich eskaliert ist, haben wir uns nocheinmal intensiv damit beschäftigt und herausgefunden, dass das Problem nur auftritt, wenn man die Gruppensettings als Liste übergibt. Wenn man die einzelnen Gruppensettings einzeln setzt ist die Performance um ein vielfaches schneller. Siehe folgenden Code:
/** * Setzen einer Liste von Gruppensettings in der Starface, bei denen zum Beispiel das angemeldet Flag beeinflusst wurde. * @param groupSettings * @throws UciException */ public void setGroupSettings(ListgroupSettings) throws UciException { UciGroupRequests group = uciProxy.getRequests(UciGroupRequests.class); for (GroupSetting gs : groupSettings) { group.setGroupSetting(gs); } }
Mit dieser kleinen Anpassung dauert der An Abmeldevorgang nicht mehr 7 Sekunden sondern nur noch 1,5 Sekunden, was einigermaßen erträglich ist. Eigentlich ist es komplett unlogisch, da der gesammelte Aufruf gegenüber dem Einzelaufruf eigentlich großes Optimierungspotential bieten würde. z.B. Könnte die Starface die Events, dass sich der Agentenstatus geändert hat als ein Event versenden und müsste nicht nach jeder Gruppe ein eigenes Event generiern usw. Wir haben das auf jeden Fall nocheinmal an den Starfacesupport gemeldet mit genauen Codebeispielen und sind erst mal glücklich, dass wir einen akzeptablen Workaround gefunden haben.
No comments:
Post a Comment