Saturday, September 19, 2015

Performanceprobleme bei der An und Abmeldung an einer Starfacegruppe mittels UCI

Bei uns in der Firma verwenden wir im Verkauf das iQueue Feature der Starface, das eine automatische Verteilung von Anrufern an verschiedene Verkaufsmitarbeiter erlaubt. Eine wichtige Funktion bei einer solchen Lösung ist das An und Abmelden der Verkaufsagenten an den diversen iQueues. Um es unseren Benutzern so leicht wie möglich zu machen, haben wir die An und Abmeldung in unseren Notes basierten CTI Client integriert. Der Benutzer kann sich mit einem Mausklick in mehreren iQueues An und Abmelden. Prinzipiell funktioniert die Lösung auch ganz gut nur die Performance war sehr schlecht. Der An und Abmeldevorgang hat mehrere Sekunden gedauert und während der Vorgang lief, war die CPU Last auf der Telefonanlage extrem hoch, was zu Problemen beim Callhandling führen konnte.




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(List groupSettings) 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(List groupSettings) 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

ad