{"id":36260,"date":"2018-01-30T10:43:32","date_gmt":"2018-01-30T09:43:32","guid":{"rendered":"https:\/\/owncloud.com\/?p=36260"},"modified":"2023-01-16T15:15:12","modified_gmt":"2023-01-16T15:15:12","slug":"ldap-sync-performance-effizienz","status":"publish","type":"post","link":"https:\/\/owncloud.com\/de\/blogs\/ldap-sync-performance-effizienz\/","title":{"rendered":"\u00dcberarbeitete LDAP-Applikation steigert Sync-Performance"},"content":{"rendered":"<p><span style=\"font-weight: 400;\"><span style=\"text-decoration: underline;\">Von J\u00f6rn Dreyer und Tom Needham<\/span><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Mit dem Release von user_ldap 0.10.0 am 20. Dezember 2017 konnte die Performance der LDAP-App um ein vielfaches gesteigert werden. Die App stellt ein Backend f\u00fcr ownCloud zur Verf\u00fcgung, das es dem User erm\u00f6glicht, ein bestehendes Verzeichnis von Benutzern zu verwenden und ihnen Zugriff auf ihre Daten zu erlauben. user_ldap ist ein integraler Bestandteil jeder gr\u00f6\u00dferen ownCloud-Instanz, die LDAP zur Benutzerauthentifizierung nutzt. Leistung und Zuverl\u00e4ssigkeit sind in diesem Zusammenhang essentiell \u2013 und jede noch so kleine Steigerung der Performance kann bei gro\u00dfen Instanzen deutliche Auswirkungen haben.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><b><br \/>\n<\/b><b>Leistungssteigerung durch neuen oc_accounts table<\/b><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Seit ownCloud X enth\u00e4lt ownCloud die neue Datenbanktabelle oc_accounts, die die Daten von Benutzer-Backends wie LDAP, SAML\/Shibboleth enth\u00e4lt, aber auch Daten von Nutzern, die innerhalb der ownCloud erstellt wurden. Um die Suche und Autovervollst\u00e4ndigung von Usern zu erm\u00f6glichen, wenn man sie ben\u00f6tigt, kann der Admin diese Backends vorab synchronisieren.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Bei der Legacy-Anwendung user_ldap waren daf\u00fcr jedoch viele zus\u00e4tzliche LDAP-Abfragen erforderlich, so dass eine Synchronisation f\u00fcr mehrere tausend Benutzer einige Stunden in Anspruch nehmen konnte. Wenn ein ownCloud-Administrator die initiale Benutzer-Synchronisation von LDAP zu oc_accounts veranlassen wollte, dauerte dies bei 100.000 Benutzern f\u00fcnf Stunden \u2013 und damit zu lange.<\/span><\/p>\n<p><b>\u00dcberwindung technischer H\u00fcrden<\/b><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Als wir uns in den Code, der die Benutzer \u201eeinf\u00e4ngt\u201d, genauer angesehen haben, stie\u00dfen wir ein interessante Detail: Zuerst f\u00fchrte der Code eine Abfrage aus, um alle Benutzer-IDs abzurufen. Die Ergebnismenge enthielt bereits Elemente wie E-Mail, Displayname und Quota, diese wurden jedoch verworfen und nur die Benutzer-IDs wurden zur\u00fcckgespiegelt. Demnach rief der Code alle notwendigen Attribute hinzereinandet ab, was zu 3-5 Abfragen pro Benutzer f\u00fchrte, bei 100.000 Benutzern also zu ungef\u00e4hr 500.000 Einzelabfragen.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dar\u00fcber hinaus wurde zus\u00e4tzlich jede laufende seitenbezogene Abfrage abgebrochen, da nicht alle LDAP-Server mehrere parallele seitenbezogene Abfragen auf derselben Verbindung unterst\u00fctzen. Dadurch musste die initiale Abfrage f\u00fcr alle Benutzer f\u00fcr jede Seite neu gestartet werden. Hinzu kommt die Tatsache, dass die Default Page rund 500 Benutzer umfasst, wodurch weitere 200 Queries hinzukommen. Das Ergebnis war eine hohe Belastung vieler LDAP-Instanzen, hohe Verz\u00f6gerungen und Frustration bei den Administratoren.<\/span><\/p>\n<p><b>Ein Query, um sie alle zu beherrschen<\/b><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Um hier Abhilfe zu schaffen, haben wir die user_ldap App \u00fcberarbeitet, um alle notwendigen Attribute in einer initialen Abfrage zu erfassen und sie in einem UserEntry (einer kleinen Einheit, die gesetzte Attribute f\u00fcr einen bestimmten Benutzer enth\u00e4lt) zwischenzuspeichern. Jeder nachfolgende Zugriff auf diese Attribute verwendet nun das zwischengespeicherte LDAP-Ergebnis, anstatt ein Reset durch- und eine neue Abfrage auszuf\u00fchren.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Der Sync umfasst 500 Benutzer pro Seite und f\u00fchrt keine zus\u00e4tzlichen Abfragen mehr durch, um die einzelnen Attribute einzuholen. Dadurch reduziert sich die Anzahl der Abfragen auf eine einzige Abfrage mit mehreren Ergebnisseiten. Schneller geht es nicht.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-36254\" src=\"https:\/\/owncloud.com\/wp-content\/uploads\/2018\/01\/Schaubild_LDAP_Corporate.jpg\" alt=\"\" width=\"2000\" height=\"1080\" srcset=\"https:\/\/owncloud.com\/wp-content\/uploads\/2018\/01\/Schaubild_LDAP_Corporate.jpg 2000w, https:\/\/owncloud.com\/wp-content\/uploads\/2018\/01\/Schaubild_LDAP_Corporate-1280x691.jpg 1280w, https:\/\/owncloud.com\/wp-content\/uploads\/2018\/01\/Schaubild_LDAP_Corporate-980x529.jpg 980w, https:\/\/owncloud.com\/wp-content\/uploads\/2018\/01\/Schaubild_LDAP_Corporate-480x259.jpg 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) and (max-width: 1280px) 1280px, (min-width: 1281px) 2000px, 100vw\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dies funktioniert besonders gut mit Active-Directory-Instanzen. <a class=\"wpil_keyword_link \" href=\"https:\/\/owncloud.com\/features\/active-directory-and-ldap\/\"  title=\"Active Directory\" data-wpil-keyword-link=\"linked\">Active Directory<\/a> kann mit gro\u00dfen Abfragen wesentlich besser umgehen als mit mehreren Abfragen gleichzeitig. Somit tr\u00e4gt die neue user_ldap App zur Stabilit\u00e4t von Active-Directory-Instanzen bei.<\/span><\/p>\n<p><b>Weitere Arbeiten<\/b><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">Zus\u00e4tzlich zu diesen Leistungsverbesserungen wurde die Entwicklung weiterer Tools zur Unterst\u00fctzung von Administratoren vorangetrieben \u2013 einschlie\u00dflich <\/span><a href=\"https:\/\/github.com\/owncloud\/core\/pull\/28212\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">single-user-sync<\/span><\/a><span style=\"font-weight: 400;\">, <\/span><a href=\"https:\/\/github.com\/owncloud\/core\/issues\/29644\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">seen user sync<\/span><\/a><span style=\"font-weight: 400;\"> (f\u00fcr bereits eingeloggte User). Au\u00dferdem wurden einige <\/span><a href=\"https:\/\/github.com\/owncloud\/core\/pull\/29669\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">core-sync-refactorings<\/span><\/a><span style=\"font-weight: 400;\"> realisiert, um Code-Duplizierung zu entfernen und die Protokollausgabe zu verbessern.<\/span><\/p>\n<p><b>Jetzt upgraden!<\/b><\/p>\n<p><span style=\"font-weight: 400;\">W\u00e4hrend die Performance-Anforderungen der gr\u00f6\u00dften Kunden der ownCloud GmbH diese Entwicklung vorangetrieben haben, kommt es auch der ownCloud-Community zugute. Wir beide sind seit Beginn Teil des ownCloud-Projektes und haben die Zeit seitdem daf\u00fcr genutzt, den alten Legacy-Code zu \u00fcberarbeiten und die hohen Standards zu erf\u00fcllen. Wir werden weiterhin Software entwickeln, die die Anforderungen von Unternehmen erf\u00fcllt, dabei aber Open Source bleibt.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Die neue LDAP-App ist ein guter Grund, um jetzt ein Upgrade durchzuf\u00fchren! Holen Sie sich hier das neue user_ldap-Release, um von den enormen Performance-Verbesserungen zu profitieren:<\/span><\/p>\n<p><strong><a href=\"https:\/\/marketplace.owncloud.com\/apps\/user_ldap\">Update user_ldap to 0.10.0!<\/a><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der \u00fcberarbeitete user_ldap-Code erm\u00f6glicht die schnellste LDAP-Benutzersynchronisation aller Zeiten \u2013 sie ist nur begrenzt durch die Netzwerkbandbreite.<\/p>\n","protected":false},"author":7,"featured_media":36256,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"categories":[43,55],"tags":[],"class_list":["post-36260","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-owncloud-product"],"acf":[],"_links":{"self":[{"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/posts\/36260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/comments?post=36260"}],"version-history":[{"count":1,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/posts\/36260\/revisions"}],"predecessor-version":[{"id":61282,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/posts\/36260\/revisions\/61282"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/media\/36256"}],"wp:attachment":[{"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/media?parent=36260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/categories?post=36260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/owncloud.com\/de\/wp-json\/wp\/v2\/tags?post=36260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}