Wäh­rend Vor­rei­ter Ama­zon in bestimm­ten Absatz­ge­bie­ten heute bereits mit einer Wahr­schein­lich­keit von 80% vor­her­sa­gen kann, wel­che Pro­dukte ein Kunde mor­gen bestel­len wird, sind vor allem deut­sche Unter­neh­men nach wie vor skep­tisch gegen­über der Kunst der moder­nen sta­tis­ti­schen Daten­ana­lyse. Obwohl die Erkennt­nis wächst, schätzt ein Groß­teil der IT-Ver­ant­wort­li­chen der D‑A-CH Region, dass Pre­dic­tive Ana­ly­tics erst inner­halb der nächs­ten drei Jahre wirk­lich rele­vant wird, wäh­rend Welt­markt­füh­rer ihre Markt­macht wei­ter aus­bauen und der Kon­kur­renz davonlaufen.

Doch woher kommt die feh­lende Inno­va­ti­ons­freude der eigent­lich doch so inno­va­ti­ven Deut­schen? Hein­rich Vaske, Edi­to­rial Direc­tor der Fach­zeit­schrif­ten „Com­pu­ter­wo­che“ und „CIO“, sieht das Haupt­pro­blem neben erschwe­ren­den Fak­to­ren wie dem Man­gel an IT-Kräf­ten auch bei den Ent­schei­dern. In sei­nem Vor­wort zur Stu­die „Pre­dic­tive Ana­ly­tics 2018“ von IDG Rese­arch Stu­dies erklärt er: „Schwe­rer noch wiegt aber die kul­tu­relle Über­for­de­rung von Ent­schei­dern, die sich nun auf Daten statt auf ihren Bauch ver­las­sen sol­len.” Ziel die­ses Bei­trags ist es eine ver­ständ­li­che Ein­füh­rung in das Thema zu geben, um so Ver­ständ­nis für die kom­men­den Anfor­de­run­gen zu schaffen.

Dies ist der erste Teil einer Blog­se­rie, die sich um die Her­aus- und Anfor­de­run­gen an ein Sys­tem zur Ana­lyse von Click­stream Daten, zur Ver­bes­se­rung des Inter­net­auf­tritts eines Web Shops dreht. Der erste Teil behan­delt dabei die grund­le­gende Hard­ware Archi­tek­tur und ver­deut­licht den Ein­satz moder­ner Tech­no­lo­gien in einer Lambda Archi­tek­tur anhand eines Beispiels.

Anfor­de­run­gen an Architektur

Aus­gangs­punkt unse­rer Über­le­gun­gen soll die Web­site eines Online-Rei­se­por­tals sein. Das Geschäfts­mo­dell ist die Ver­mark­tung von Urlaubs­rei­sen rund um den Glo­bus. In letz­ter Zeit sinkt die Zahl der Buchun­gen auf Grund von star­ker Kon­kur­renz und so genann­ten Ein­mal­käu­fern, also Kun­den die maxi­mal ein­mal über unsere Platt­form buchen. Das Pro­blem: Obwohl sich jeden Tag viele Nut­zer auf der Web­site auf­hal­ten, buchen sie doch bei ande­ren Anbie­tern. Wie schafft es der Betrei­ber also Besu­cher der Web­site auch als Kun­den zu gewin­nen? Die Ant­wort lau­tet Advan­ced Analytics.

Advan­ced Ana­ly­tics gehen über die Erklä­rung der heu­ti­gen Zah­len, wie es in der tra­di­tio­nel­len Daten­ana­lyse üblich war, hin­aus und ermög­li­chen Aus­sa­gen über zukünf­tige Ereig­nisse. Die­ser Ansatz ermög­licht es z.B. Nut­zer als Ein­mal­käu­fer zu iden­ti­fi­zie­ren und über indi­vi­du­elle Mar­ke­ting Maß­nah­men als Kun­den zu binden.

Mög­lich gewor­den ist diese Art der Ana­lyse durch die Masse an ver­füg­ba­ren Daten und den wirt­schaft­li­chen Ein­satz mas­si­ver Rechen­leis­tung über Cloud-Dienste. Im oben genann­ten Bei­spiel wird davon aus­ge­gan­gen, dass sich die his­to­ri­schen Daten bereits im Sys­tem befin­den. Um mög­lichst genaue Vor­her­sa­gen tref­fen zu kön­nen sol­len tages­ak­tu­elle Daten in Echt­zeit mit ein­be­zo­gen wer­den. Damit ergibt sich bereits die erste Anfor­de­rung an die Archi­tek­tur. Benö­tigt wird ein Sys­tem, um Infor­ma­tio­nen über das Nut­zer­ver­hal­ten auf unse­rer Web­site in Echt­zeit und ohne Daten­ver­lust in ein Sys­tem zur Ana­lyse der Daten aufzunehmen.

Die Durch­füh­rung der Algo­rith­men zur Daten­ana­lyse (die in einem spä­te­ren Teil behan­delt wer­den) benö­ti­gen in ers­ter Linie Rechen­leis­tung. Je nach Traf­fic auf unse­rer Web­site wird mehr oder weni­ger Leis­tung benö­tigt. Dar­aus wer­den zwei Sze­na­rien abgeleitet.

  • Zu Last­spit­zen wer­den zusätz­li­che Rechen­ka­pa­zi­tä­ten benötigt.
  • Der Web Shop ist auf einen loka­len Markt fokus­siert. Das bedeu­tet, dass zwi­schen 22 und 10 Uhr nicht genug Daten gene­riert wer­den, um sinn­volle Ana­ly­sen durch­zu­füh­ren. Dem ent­spre­chend wird auch keine Rechen­leis­tung benötigt.

Es muss also für die Ska­lier­bar­keit unse­res Sys­tems gesorgt und gleich­zei­tig bedacht wer­den, dass die Rechen­ka­pa­zi­tät nicht rund um die Uhr benö­tigt wird. In vie­len Fäl­len bie­tet sich dafür Cloud Com­pu­ting an. Auch in die­sem Bei­spiel wer­den wir die benö­tigte Rechen­leis­tung aus der Cloud bezie­hen. Um trotz­dem anbie­ter­un­ab­hän­gig agie­ren zu kön­nen wird Open-Source Soft­ware ein­ge­setzt, statt Cloud-Ser­vices zu nut­zen und damit an einen bestimm­ten Cloud-Ser­vice gebun­den zu sein.

Abge­se­hen von der ska­lier­ba­ren Rechen­leis­tung muss das Sys­tem noch ande­ren Anfor­de­run­gen genü­gen. Was hätte man von in Echt­zeit zur Ver­fü­gung ste­hen­den Daten, wenn die Aus­wer­tung auf Grund von hohen Latenz­zei­ten ver­zö­gert wird. Um ver­wert­bare Aus­wer­tun­gen zu erhal­ten, wer­den spä­ter meh­rere Algo­rith­men zur Daten­ana­lyse vor­ge­stellt, die teil­weise par­al­lel aus­ge­führt wer­den. Damit ein Feh­ler in einem der Algo­rith­men nicht zum Absturz des Sys­tems führt, muss die Archi­tek­tur robust und feh­ler­to­le­rant sein.

Echt­zeit Daten­über­tra­gung mit Apa­che Kafka

An der Kom­mu­ni­ka­tion für die erste Anfor­de­rung ist auf der einen Seite ein Sys­tem zum tra­cken der Nut­zer­ak­ti­vi­tät und auf der ande­ren Seite das von uns in der zwei­ten Anfor­de­rung zu erzeu­gende Sys­tem betei­ligt. Man könnte an die­ser Stelle auf die Idee kom­men beide Sys­teme direkt mit­ein­an­der zu ver­bin­den, z.B. über eine REST- Schnitt­stelle auf Nach­rich­ten­emp­fän­ger­seite. Dabei wür­den man aller­dings auf ernst­zu­neh­mende Her­aus­for­de­run­gen sto­ßen, wenn man sich über­legt, dass das Track­ing-Sys­tem zu Last­zei­ten kon­ti­nu­ier­lich große Daten­men­gen über­trägt. Diese könn­ten das Emp­fan­gende Sys­tem in die Knie zwin­gen oder zu Daten­ver­lus­ten füh­ren, weil die Daten nicht so schnell ver­ar­bei­tet wer­den kön­nen wie sie gesen­det werden.

Um sich keine Gedan­ken um die Daten­über­tra­gung machen zu müs­sen, wer­den Mes­sa­ging-Sys­teme als Midd­le­ware zwi­schen Sen­der und Emp­fän­ger ein­ge­setzt. Neben unzäh­li­gen Alter­na­ti­ven beschränkt sich das Bei­spiel auf das weit­ver­brei­tete, open source Pro­jekt Apa­che Kafka. Im Kern basie­ren alle Mas­sa­ging Sys­teme auf den glei­chen Prin­zi­pien. Dabei dif­fe­ren­ziert man zwei Arten von Nachrichtenkanälen.

Auf der einen Seite die Imple­men­tie­rung als Queue. Dabei wird der Sen­der übli­cher­weise als Pro­du­cer und der Emp­fän­ger als Con­su­mer bezeich­net. Ent­schei­dend ist, dass jede Nach­richt ins­ge­samt nur ein­mal gele­sen wird.

Website-Optimierung-mit-Advanced-Analytics-–-Teil-1-Systemarchitektur-Bild1
Abbilung 1 Nach­rich­ten­ver­ar­bei­tung mit­tels Queue

Das Topic-Modell auf der ande­ren Seite, basiert auf dem Publish-Sub­scribe-Modell. Dabei erhal­ten alle Con­su­mer die Nach­rich­ten eines von ihnen abon­nier­ten Topics.

Website-Optimierung-mit-Advanced-Analytics-–-Teil-1-Systemarchitektur-Bild2
Abbil­dun 2 Nach­rich­ten­ver­ar­bei­tung auf Grund­lage des Publish-Subscribe-Modells

Die Leis­tungs­fä­hig­keit von Kafka basiert in ers­ter Linie auf Ska­lier­bar­keit und Repli­ka­tion. Ver­ein­facht gesagt besteht ein Kafka Clus­ter aus X Bro­kern, die Nach­rich­ten unab­hän­gig des Topics bezie­hen. Dabei gibt der Repli­ca­tion Fac­tor an, auf wie vie­len Bro­kern eine Nach­richt abge­legt wer­den soll. Jeder Bro­ker besteht aus meh­re­ren Par­ti­tio­nen. Eine die­ser Par­ti­tio­nen ist der Lea­der auf dem sämt­li­che Lese- und Schreib­vor­gänge statt­fin­den. Außer­dem wer­den Nach­rich­ten aus­ge­hend vom Lea­der auf alle Fol­lower (rest­li­che Par­ti­tio­nen) repliziert.

Das glei­che Kon­zept nutzt Kafka in leicht abge­wan­del­ter Form für die Über­mitt­lung der Nach­rich­ten an die Con­su­mer. Dafür wer­den Con­su­mer des­sel­ben Topics zu einer Con­su­mer Group zusam­men­ge­fasst. Im End­ef­fekt erhält die Con­su­mer Group jede Nach­richt nur ein­mal. Umge­setzt wird die­ses Prin­zip indem jede Instanz einer Con­su­mer Group exklu­si­ver Con­su­mer eines Anteils der Par­ti­tio­nen mit für ihn inter­es­san­ten Topics ist. Grund­le­gend ent­spricht die­ses Kon­zept dem Publish-Sub­scribe-Modell auf Grund­lage von Clus­tern statt ein­zel­ner Pro­zesse als Consumer.

Website-Optimierung-mit-Advanced-Analytics-–-Teil-1-Systemarchitektur-Bild3
Abbil­dung 3 Nach­rich­ten­ver­mitt­lung inner­halb Kafkas

In unse­rem Fall wird die Nut­zer­ak­ti­vi­tät unse­rer Web­site live über ein Dritt­an­bie­ter Tool getrackt. Die erho­be­nen Daten wer­den über die Midd­le­ware an das Sys­tem zur Daten­ana­lyse über­tra­gen. Dabei über­nimmt Kafka die Daten­über­tra­gung in Echt­zeit, ohne dass wir uns Gedan­ken um den Ver­lust von Daten machen müssen.

Streng genom­men ist Kafka bzw. die spä­tere Kafka-Instanz eben­falls Bestand­teil der Lambda-Archi­tek­tur (die im nächs­ten Abschnitt genauer erläu­tert wird). Sie ist den bei­den Kern­kom­po­nen­ten als Data Inges­tion Layer vor­ge­schal­tet und bie­tet einen zen­tra­len Ein­tritts­punkt in das Big-Data-System.

Auf­bau einer Lambda Architektur

Die Lambda-Archi­tek­tur ist eine Strea­ming Archi­tek­tur zur Daten­ver­ar­bei­tung in Echt­zeit, um schnellst­mög­lich Reak­tio­nen durch Tech­nik oder Manage­ment in die Wege zu lei­ten. Bezo­gen auf das vor­lie­gende Bei­spiel haben die Ope­ra­ti­ven Daten ein gra­vie­ren­des Merk­mal. Ihr Wert nimmt sofort nach dem Ereig­nis­zeit­punkt stark ab. Dies liegt darin begrün­det, dass ein maß­ge­schnei­der­tes Ange­bot kei­nen wirt­schaft­li­chen Nut­zen hat, wenn der Kunde die Seite schon wie­der ver­las­sen hat bevor es für ihn sicht­bar ist. Die not­wen­dige Reak­ti­ons­zeit auf neue Daten erkauft man sich auf Kos­ten der Genau­ig­keit. Um das Poten­zial der ope­ra­ti­ven und der vor­han­de­nen Daten zu nut­zen, besteht die Archi­tek­tur aus zwei Kern­kom­po­nen­ten: Speed oder auch Strea­ming Layer genannt und Batch Layer.

Strea­ming Layer

Ziel ist es nach­ge­la­ger­ten Sys­te­men oder End­an­wen­dern mög­lichst aktu­elle Zah­len zu lie­fern. Die Aktua­li­tät die­ser Zah­len geht zwangs­läu­fig auf Kos­ten der Genau­ig­keit. Obwohl opti­ma­ler Weise kom­plett „In-Memory“ gear­bei­tet wird, kann in die­ser Zeit nur eine Teil­menge der Daten aus­ge­wer­tet werden.

Batch Layer

Der Batch Layer arbei­tet in der Regel auf der gesam­ten Daten­menge. Er lie­fert exakte Ergeb­nisse und führt Ana­ly­sen über lange Zeit­fens­ter durch. Dabei arbei­tet er zeit­ver­setzt in bestimm­ten Inter­val­len. Damit ist er auch für das Trai­nie­ren von Machine Lear­ning Algo­rith­men zuständig.

Als abschlie­ßende Kom­po­nente gibt es den Ser­ving Layer, der die ver­ar­bei­te­ten Daten aus den Kern­kom­po­nen­ten in einem Real-Time- oder Manage­ment-Dash­board auf­be­rei­tet und bereitstellt.

Website-Optimierung-mit-Advanced-Analytics-–-Teil-1-Systemarchitektur-Bild4
Abbil­dung 4 Über­sicht Lambda Architektur

Bei­spiel­hafte Umset­zung der Layer

An die­ser Stelle kon­zen­trie­ren wir uns auf die ver­füg­ba­ren Soft­ware Lösun­gen, die zur Umset­zung unse­rer Pro­blem­stel­lung ein­ge­setzt wer­den könn­ten. Die Hard­ware der Ser­ver betrach­ten wir an die­ser Stelle nicht. Sie vari­iert je nach Anwen­dungs­fall und ist in der Cloud rela­tiv dyna­misch anpassbar.

Star­ten wir mit den Kern­kom­po­nen­ten. Es gibt viele Tech­no­lo­gie­an­bie­ter, die fer­tige Lösun­gen für Big Data Ana­ly­tics bereit­stel­len. Aller­dings ist nicht eine in der Lage, an die Mäch­tig­keit und den Umfang eini­ger Open Source Pro­jekte her­an­zu­rei­chen. So auch nicht an Apa­che Spark. Das 2013 zum Incu­ba­tor Pro­jekt der Apa­che Spark Foun­da­tion gewor­dene Spark ist ein All­zweck-Tool zur Daten­ver­ar­bei­tung, eine soge­nannte Data Pro­ces­sing Engine. Es nutzt das bekannte Hadoop File­sys­tem HDFS mit dem Unter­schied, dass Spark laut Exper­ten­mei­nun­gen bis zu 100mal schnel­ler, als die zuvor häu­fig genutzte Alter­na­tive Map­Re­duce ist. Den Geschwin­dig­keits­vor­teil ver­dankt Spark in ers­ter Linie der „in-Memory“ Ver­ar­bei­tung von Daten­ab­fra­gen. Außer­dem sind ele­men­tare Machine Lear­ning Biblio­the­ken inte­gra­ler Bestand­teil von Spark. Dem­entspre­chend las­sen sich die für Pre­dic­tive Ana­ly­tics so wich­ti­gen neu­ro­na­len Netze und dar­auf lau­fen­den Machine Lear­ning Algo­rith­men beson­ders ele­gant umsetzen.

Ein wei­te­rer Vor­teil geht flie­ßend in unsere zweite Kern­kom­po­nente, den Speed/Streaming Layer, über. Die­ser kann über die in Spark inte­grierte Biblio­thek Spark Strea­ming aus­ge­führt wer­den. Die­ser Umstand schafft einen beson­de­ren Vor­teil: Ein­mal geschrie­be­ner Code lässt sich sowohl auf Batch als auch im Strea­ming Layer aus­füh­ren. Gleich­zei­tig gibt es native APIs die beliebte Pro­gram­mier­spre­chen wie Java, Python oder R unter­stüt­zen, was die Ent­wick­lung vereinfacht.

Nach­dem die Daten in den Kern­kom­po­nen­ten mit­hilfe von Spark ana­ly­siert wur­den, müs­sen sie im Nach­gang visua­li­siert wer­den. Die Soft­ware zur Umset­zung des Ser­ving Lay­ers wird an die­ser Stelle nur skiz­ziert. Eine genauere Aus­füh­rung erfolgt in einem spä­te­ren Bei­trag. In unse­rem Bei­spiel nut­zen wir mit Elastic´s Kibana, ein wei­te­res open source Tool. Kibana basiert auf Ela­s­tic­se­arch, einer eben­falls open source Such- und Ana­ly­se­da­ten­bank mit REST-Schnitt­stelle. Ela­s­tic­se­arch ist zwar der defacto Stan­dard zur Daten­hal­tung in unse­rem Anwen­dungs­sze­na­rio, trotz­dem ist der Ein­satz nicht ganz unpro­ble­ma­tisch. Auf­grund von Spei­cher und Kon­sis­tenz Pro­ble­men wird emp­foh­len eine hoch kon­sis­tente Daten­bank als Backup Daten­bank zu nut­zen. Für prä­zise Vor­her­sa­gen sind kon­sis­tente Daten von ele­men­ta­rer Wich­tig­keit. Abge­se­hen davon betrei­ben wir zu die­sem Zeit­punkt bereits einen hohen Auf­wand, damit die Daten in Echt­zeit ana­ly­siert wer­den kön­nen. Auch hier haben wir uns mit Apa­che HBase wie­der für ein wei­te­res open source Pro­jekt ent­schie­den. HBase ist eine column-family-ori­en­ted  NoSQL Daten­bank, die Lese- und Schrei­b­ope­ra­tio­nen in Echt­zeit ermög­licht. Damit stellt HBase eine per­fekte Ergän­zung zu Ela­s­tic­se­arch dar.

Website-Optimierung-mit-Advanced-Analytics-–-Teil-1-Systemarchitektur-Bild5
Abbil­dung 5 Bei­spiel­hafte Umset­zung der Layer

Erläu­te­rung der Funk­ti­ons­weise anhand eines Beispiels

Die Ver­an­schau­li­chung der Zusam­men­hänge lässt sich sehr gut Anhand eines Bei­spiels erklä­ren. Dafür betrach­ten wir Herr Mül­ler aus Mün­chen, der für sich und seine Frau nach mög­li­chen Zie­len für ihren gemein­sa­men Som­mer­ur­laub sucht. Bereits mit dem Auf­ruf der Seite wer­den erste anony­mi­sierte Infor­ma­tio­nen über Herrn Mül­ler an den Strea­ming Layer über­tra­gen. Die Erhe­bung der Daten mit­tels Track­ing-Metho­den las­sen wir an die­ser Stelle außen­vor. Wir gehen der Ein­fach­heits­hal­ber davon aus, dass alle für unsere Ana­ly­sen rele­van­ten Daten erho­ben werden.

Das getrackte Surf­ver­hal­ten von Herrn Mül­ler wird nun kon­ti­nu­ier­lich mit­tels Kafka an den Strea­ming Layer über­tra­gen. An die­ser Stelle müs­sen wir ein wenig vor­grei­fen. Wie wir spä­ter sehen wer­den, müs­sen einige unse­rer Algo­rith­men erst trai­niert bzw. kon­ti­nu­ier­lich trai­niert wer­den, um sie gewinn­brin­gend anzu­wen­den. Die­ses Trai­ning kann jedoch nicht in Echt­zeit statt­fin­den, son­dern wird wie bereits im vier­ten Abschnitt erwähnt, in fest­ge­schrie­be­nen Inter­val­len im Batch Layer aus­ge­führt. Betrach­ten wir bei­spiel­haft einen Algo­rith­mus der Nut­zer auf Grund ihres Surf­ver­hal­tens in Kun­den­grup­pen kate­go­ri­siert. Der Batch Layer ermit­telt Mus­ter, auf des­sen Grund­lage eine Zuord­nung zu bestimm­ten Kun­den­grup­pen statt­fin­den soll. Der Strea­ming Layer kate­go­ri­siert Nut­zer fortan in Echt­zeit basie­rend auf die­sen Mus­tern. Im nächs­ten Inter­vall bezieht der Batch Layer auch das seit der letz­ten Ite­ra­tion auf­ge­tre­tene Nut­zer­ver­hal­ten in seine Berech­nun­gen mit ein. Im End­ef­fekt erhal­ten wir also Mus­ter, die den aktu­el­len Kun­den­grup­pen entsprechen.

Aber zurück zu unse­rem Bei­spiel. Das Surf­ver­hal­ten von Herrn Mül­ler wurde ana­ly­siert. Dadurch wis­sen auch wir jetzt, dass er nach einem Ziel für den Som­mer­ur­laub sucht. Außer­dem haben wir her­aus­ge­fun­den, dass er mit sei­ner Frau reist und ein ruhi­ges, eher geho­be­nes Hotel sucht. Wir haben ihn dar­über hin­aus als User iden­ti­fi­ziert, der unsere Seite nur zur Infor­ma­ti­ons­be­schaf­fung nutzt und nicht direkt bei uns buchen würde. (diese Annah­men sind pla­ka­tiv gewählt, ent­spre­chen aber durch­aus dem heu­ti­gen Stan­dard) Mit die­sem Wis­sen sind wir in der Lage indi­vi­du­elle Ange­bote für Herrn Mül­ler zu gene­rie­ren und sie gut sicht­bar zu plat­zie­ren. Im bes­ten Fall sind unsere Ange­bote so gut, dass sich Herr Mül­ler doch dazu ent­schei­det seine Reise bei uns zu buchen.

Wäh­rend des­sen wer­den uns die wich­tigs­ten Erkennt­nisse und Trends im Ser­ving Layer per Dash­board nach Belie­ben visu­ell dar­ge­stellt. So haben auch wir als Betrei­ber jeder­zeit den vol­len Über­blick. Auf Grund die­ser Trends wäre es uns mög­lich das Sor­ti­ment der Nach­frage ent­spre­chend anzupassen.

Egal ob Herr Mül­ler im End­ef­fekt bei uns bucht oder nicht. Ziel all unse­rer Anstren­gun­gen ist es die User Expe­ri­ence zu ver­bes­sern. Herr Mül­ler soll frei­wil­lig und gerne zurück­kom­men. Im bes­ten Fall emp­fiehlt er uns sogar noch sei­nen Freun­den Manuel und Mats.

Fazit

In die­sem Teil der Serie haben wir die Grund­la­gen geschaf­fen, um eine Web­site mit­hilfe von Advan­ced Ana­ly­tics zu opti­mie­ren. An die­ser Stelle noch­mal eine kurze Zusammenfassung.

Alle Akti­vi­tä­ten auf der Web­site wer­den durch ein Dritt­an­bie­ter Tool getrackt. So erho­bene Daten wer­den über unsere Midd­le­ware mit­tels Kafka in Echt­zeit an Batch und Strea­ming Layer über­tra­gen. Der Batch Layer trai­niert bzw. opti­miert die Algo­rith­men, die vom Strea­ming Layer in Echt­zeit genutzt wer­den, um Nut­zer­ver­hal­ten zu pro­gnos­ti­zie­ren. Die Ergeb­nisse der Ana­ly­sen wer­den nicht nur zur Opti­mie­rung der Web­site genutzt, son­dern auch im Ser­ving Layer für den Betrei­ber visu­ell aufbereitet.