jakie korzyści zapewnia system komponentów OSGi?
Oto całkiem spora lista:
Mniejsza złożoność - programowanie w technologii OSGi oznacza tworzenie pakietów: komponentów OSGi. Pakiety to moduły. Ukrywają swoje elementy wewnętrzne przed innymi pakietami i komunikują się poprzez dobrze zdefiniowane usługi. Ukrywanie elementów wewnętrznych oznacza większą swobodę późniejszych zmian. To nie tylko zmniejsza liczbę błędów, ale także upraszcza tworzenie pakietów, ponieważ pakiety o prawidłowych rozmiarach implementują funkcjonalność poprzez dobrze zdefiniowane interfejsy. Istnieje ciekawy blog, który opisuje, co technologia OSGi zrobiła w procesie rozwoju.
Ponowne użycie - model komponentu OSGi sprawia, że korzystanie z wielu komponentów innych firm w aplikacji jest bardzo łatwe. Coraz więcej projektów open source dostarcza gotowe pliki JAR dla OSGi. Jednak biblioteki komercyjne stają się również dostępne jako gotowe pakiety.
Prawdziwy świat -Struktura OSGi jest dynamiczna. Może aktualizować pakiety w locie, a usługi mogą przychodzić i odchodzić. Programiści, którzy używali bardziej tradycyjnej Javy, postrzegają to jako bardzo problematyczną funkcję i nie dostrzegają korzyści. Okazuje się jednak, że świat rzeczywisty jest bardzo dynamiczny, a posiadanie dynamicznych usług, które mogą przychodzić i odchodzić, sprawia, że usługi te idealnie pasują do wielu scenariuszy w świecie rzeczywistym. Na przykład usługa może modelować urządzenie w sieci. Jeśli urządzenie zostanie wykryte, usługa zostanie zarejestrowana. Jeśli urządzenie zniknie, usługa nie zostanie zarejestrowana. Istnieje zaskakująca liczba rzeczywistych scenariuszy pasujących do tego dynamicznego modelu usług. Aplikacje mogą zatem ponownie wykorzystywać potężne operacje podstawowe rejestru usług (rejestrować, uzyskiwać, wyświetlać listę z ekspresyjnym językiem filtrowania i czekać na pojawienie się i zniknięcie usług) we własnej domenie. Pozwala to nie tylko zaoszczędzić na pisaniu kodu, ale także zapewnia globalną widoczność, narzędzia do debugowania i większą funkcjonalność niż w przypadku dedykowanego rozwiązania. Pisanie kodu w tak dynamicznym środowisku brzmi jak koszmar, ale na szczęście istnieją klasy wsparcia i frameworki, które pochłaniają większość, jeśli nie całość, bólu.
Łatwe wdrożenie - technologia OSGi to nie tylko standard dla komponentów. Określa również sposób instalowania i zarządzania komponentami. Ten interfejs API był używany przez wiele pakietów w celu zapewnienia agenta zarządzania. Ten agent zarządzania może być tak prosty jak powłoka poleceń, sterownik protokołu zarządzania TR-69, sterownik protokołu OMA DM, interfejs chmury obliczeniowej dla EC2 Amazon lub system zarządzania IBM Tivoli. Ujednolicony interfejs API zarządzania ułatwia integrację technologii OSGi z istniejącymi i przyszłymi systemami.
Aktualizacje dynamiczne - model komponentu OSGi jest modelem dynamicznym. Pakiety można instalować, uruchamiać, zatrzymywać, aktualizować i odinstalowywać bez wyłączania całego systemu. Wielu programistów Java nie wierzy, że można to zrobić niezawodnie i dlatego początkowo nie używają tego w środowisku produkcyjnym. Jednak po użyciu tego przez pewien czas w rozwoju większość zaczyna zdawać sobie sprawę, że to naprawdę działa i znacznie skraca czas wdrażania.
Adaptacyjny - model komponentu OSGi został zaprojektowany od podstaw, aby umożliwić mieszanie i dopasowywanie komponentów. Wymaga to określenia zależności komponentów i wymaga, aby komponenty działały w środowisku, w którym ich opcjonalne zależności nie zawsze są dostępne. Rejestr usług OSGi jest rejestrem dynamicznym, w którym pakiety mogą rejestrować, uzyskiwać i słuchać usług. Ten dynamiczny model usług pozwala pakietom dowiedzieć się, jakie możliwości są dostępne w systemie i dostosować funkcje, które mogą zapewnić. Dzięki temu kod jest bardziej elastyczny i odporny na zmiany.
Przejrzystość - pakiety i usługi są pierwszorzędnymi obywatelami w środowisku OSGi. Interfejs API zarządzania zapewnia dostęp do wewnętrznego stanu pakietu, a także sposobu, w jaki jest on połączony z innymi pakietami. Na przykład większość platform udostępnia powłokę poleceń, która pokazuje ten stan wewnętrzny. Części aplikacji można zatrzymać w celu debugowania określonego problemu lub wprowadzić pakiety diagnostyczne. Zamiast wpatrywać się w miliony linii danych wyjściowych rejestrowania i długi czas restartu, aplikacje OSGi często można debugować za pomocą powłoki poleceń na żywo.
Wersjonowanie - technologia OSGi rozwiązuje piekło JAR. Piekło JAR to problem polegający na tym, że biblioteka A działa z biblioteką B; wersja = 2, ale biblioteka C może działać tylko z biblioteką B; wersja = 3. W standardowej Javie nie masz szczęścia. W środowisku OSGi wszystkie pakiety są starannie wersjonowane, a tylko pakiety, które mogą współpracować, są połączone razem w tej samej przestrzeni klasowej. Dzięki temu zarówno pakiet A, jak i C mogą działać z własną biblioteką. Chociaż nie zaleca się projektowania systemów z tym problemem związanym z wersjonowaniem, w niektórych przypadkach może to być ratowanie życia.
Prosty - interfejs API OSGi jest zaskakująco prosty. Podstawowym interfejsem API jest tylko jeden pakiet i mniej niż 30 klas / interfejsów. Ten podstawowy interfejs API jest wystarczający do pisania pakietów, instalowania ich, uruchamiania, zatrzymywania, aktualizowania i odinstalowywania oraz obejmuje wszystkie klasy nasłuchiwania i zabezpieczenia. Istnieje bardzo niewiele interfejsów API, które zapewniają tak wiele funkcji dla tak małego interfejsu API.
Small - OSGi Release 4 Framework może być zaimplementowany w pliku JAR o wielkości około 300 KB. Jest to niewielki narzut związany z ilością funkcji dodanych do aplikacji przez włączenie OSGi. Dlatego OSGi działa na wielu urządzeniach: od bardzo małych, przez małe, aż do komputerów mainframe. Prosi tylko o uruchomienie minimalnej maszyny wirtualnej Java i dodaje bardzo niewiele.
Szybko - Jednym z głównych obowiązków frameworka OSGi jest ładowanie klas z pakietów. W tradycyjnej Javie pliki JAR są całkowicie widoczne i umieszczane na liście liniowej. Przeszukiwanie klasy wymaga przeszukania tej listy (często bardzo długiej, 150 nie jest rzadkością). W przeciwieństwie do tego, wiązki przewodów OSGi i dla każdego pakietu dokładnie wiedzą, który pakiet zapewnia klasę. Ten brak wyszukiwania jest znaczącym czynnikiem przyspieszającym podczas uruchamiania.
Leniwy - Leniwy w oprogramowaniu jest dobry, a technologia OSGi ma wiele mechanizmów do robienia rzeczy tylko wtedy, gdy są naprawdę potrzebne. Na przykład pakiety można uruchamiać chętnie, ale można je również skonfigurować tak, aby uruchamiały się tylko wtedy, gdy inne pakiety z nich korzystają. Usługi mogą być rejestrowane, ale tworzone tylko wtedy, gdy są używane. Specyfikacje zostały kilkakrotnie zoptymalizowane, aby uwzględnić tego rodzaju leniwe scenariusze, które mogą zaoszczędzić ogromne koszty środowiska wykonawczego.
Bezpieczny - Java ma bardzo wydajny drobnoziarnisty model bezpieczeństwa na dole, ale jego konfiguracja w praktyce okazała się bardzo trudna. Powoduje to, że najbezpieczniejsze aplikacje Java działają z wyborem binarnym: brak zabezpieczeń lub bardzo ograniczone możliwości. Model bezpieczeństwa OSGi wykorzystuje drobnoziarnisty model bezpieczeństwa, ale poprawia użyteczność (a także utwardza oryginalny model), ponieważ twórca pakietu określa wymagane szczegóły bezpieczeństwa w łatwo kontrolowanej formie, podczas gdy operator środowiska pozostaje w pełni odpowiedzialny. Ogólnie rzecz biorąc, OSGi prawdopodobnie zapewnia jedno z najbezpieczniejszych środowisk aplikacji, które wciąż jest użyteczne bez platform komputerowych chronionych komputerowo.
Non Intrusive - Aplikacje (pakiety) w środowisku OSGi są pozostawione same sobie. Mogą korzystać z praktycznie dowolnego narzędzia maszyny wirtualnej bez ograniczania ich przez OSGi. Najlepszą praktyką w OSGi jest pisanie zwykłych starych obiektów Java iz tego powodu nie wymaga specjalnego interfejsu dla usług OSGi, nawet obiekt Java String może działać jako usługa OSGi. Ta strategia ułatwia przenoszenie kodu aplikacji do innego środowiska.
Działa wszędzie - to zależy. Pierwotnym celem Javy było uruchamianie w dowolnym miejscu. Oczywiście nie można uruchomić całego kodu wszędzie, ponieważ możliwości maszyn wirtualnych Java są różne. Maszyna wirtualna w telefonie komórkowym prawdopodobnie nie będzie obsługiwać tych samych bibliotek, co komputer mainframe IBM z aplikacją bankową. Do rozwiązania są dwa problemy. Po pierwsze, interfejsy API OSGi nie powinny używać klas, które nie są dostępne we wszystkich środowiskach. Po drugie, pakiet nie powinien się uruchomić, jeśli zawiera kod, który nie jest dostępny w środowisku wykonawczym. Oba te problemy zostały rozwiązane w specyfikacjach OSGi.
Źródło: www.osgi.org/Technology/WhyOSGi
Znalazłem następujące korzyści z OSGi:
Dzięki temu możesz uporządkować aplikację jako zestaw wersjonowanych artefaktów wtyczek, które są ładowane na żądanie. Każda wtyczka jest samodzielnym komponentem. Podobnie jak Maven pomaga ustrukturyzować twoją kompilację, aby była powtarzalna i zdefiniowana przez zestaw określonych wersji artefaktów, które tworzy, OSGi pomaga ci to zrobić w czasie wykonywania.
źródło
Nie obchodzi mnie zbytnio możliwość podłączania modułów OSGi na gorąco (przynajmniej obecnie). To bardziej wymuszona modułowość. Brak miliona „publicznych” klas dostępnych na ścieżce klas dobrze chroni przed okrągłymi zależnościami: musisz naprawdę pomyśleć o swoich publicznych interfejsach - nie tylko pod względem konstruowania języka publicznego „java”, ale także pod względem biblioteki / module: Jakie (dokładnie) są komponenty, które chcesz udostępnić innym? Jakie (dokładnie) są interfejsy (innych modułów), których naprawdę potrzebujesz, aby wdrożyć swoją funkcjonalność?
Fajnie, że hotplug jest w to wyposażony, ale wolę zrestartować moje zwykłe aplikacje niż testować wszystkie kombinacje hotplug ...
źródło
Jest wiele korzyści (przypomniałem właśnie teraz), dostępnych dla każdego, kto używa Java.
źródło
zredagowane dla jasności. Strona OSGi dała lepszą, prostszą odpowiedź niż moja
Prosta odpowiedź: platforma usługowa OSGi zapewnia znormalizowane, zorientowane na komponenty środowisko komputerowe dla współpracujących usług sieciowych. Ta architektura znacznie zmniejsza ogólną złożoność budowania, utrzymywania i wdrażania aplikacji. Platforma serwisowa OSGi zapewnia funkcje dynamicznej zmiany składu na urządzeniu różnych sieci, bez konieczności ponownego uruchamiania.
W strukturze pojedynczej aplikacji, powiedzmy w Eclipse IDE, ponowne uruchomienie po zainstalowaniu nowej wtyczki nie stanowi problemu. Używając całkowicie implementacji OSGi, powinieneś być w stanie dodać wtyczki w czasie wykonywania, uzyskać nową funkcjonalność, ale w ogóle nie musisz restartować zaćmienia.
Ponownie, nie jest to wielka sprawa na co dzień, małe zastosowanie aplikacji.
Ale kiedy zaczynasz patrzeć na wielkomputerowe, rozproszone ramy aplikacji, zaczyna się to interesować. Gdy musisz mieć 100% czasu sprawności dla krytycznych systemów, przydatna jest możliwość wymiany składników podczas Hotswap lub dodania nowych funkcji w czasie wykonywania. To prawda, że w większości przypadków można to teraz zrobić, ale OSGi próbuje spakować wszystko w ładną małą platformę ze wspólnymi interfejsami.
Czy OSGi rozwiązuje typowe problemy, nie jestem tego pewien. Mam na myśli, że tak, ale koszty ogólne mogą nie być tego warte w przypadku prostszych problemów. Ale należy wziąć to pod uwagę, gdy zaczynasz zajmować się większymi aplikacjami sieciowymi.
źródło
Kilka rzeczy, które doprowadzają mnie do szału w OSGi:
1) Implanty i ich programy ładujące kontekst mają dla nich wiele dziwactw i mogą być nieco asynchroniczne (używamy feliksu w miejscu przecięcia). W porównaniu z czystą wiosną (bez DM), w której [main] prawie wszystko synchronizuje wszystko.
2) Klasy nie są równe po gorącym obciążeniu. Załóżmy na przykład, że masz hibernację w warstwie pamięci podręcznej tangosolu. Jest wypełniony klasą Fork.class, poza zakresem OSGi. Ładujesz nowy słoik, a Widelec się nie zmienił. Class [Fork]! = Class [Fork]. Pojawia się również podczas serializacji z tych samych przyczyn.
3) Klastrowanie.
Możesz obejść te rzeczy, ale jest to poważny ból i sprawia, że Twoja architektura wygląda na wadliwą.
A tym z was, którzy reklamują hotplugging ... Klient nr 1 OSGi? Zaćmienie. Co robi Eclipse po załadowaniu pakietu?
Zrestartuje się.
źródło
OSGi sprawia rzut kodu
NoClassDefFoundError
iClassNotFoundException
bez wyraźnego powodu (prawdopodobnie dlatego, że zapomniał wyeksportować pakiet w pliku konfiguracyjnym OSGi); ponieważ ma ClassLoaders, może sprawić, że twoja klasacom.example.Foo
nie zostanie przerzucona,com.example.Foo
ponieważ w rzeczywistości są to dwie różne klasy ładowane przez dwa różne moduły ładujące. Może sprawić, że Eclipse uruchomi się w konsoli OSGi po zainstalowaniu wtyczki Eclipse.Dla mnie OSGi tylko zwiększyło złożoność (ponieważ dodało mi jeszcze jeden model mentalny dla mnie do grokowania), dodało irytacji z powodu wyjątków; Nigdy tak naprawdę nie potrzebowałem dynamiki, jaką „oferuje”. Było to uciążliwe, ponieważ wymagało konfiguracji pakietu OSGi dla wszystkich modułów; zdecydowanie nie było to proste (w większym projekcie).
Z powodu mojego złego doświadczenia staram się trzymać z dala od tego potwora, bardzo dziękuję. Wolę cierpieć z powodu piekła zależnego od słoika, ponieważ jest to o wiele łatwiejsze do zrozumienia niż piekło klasyloader, które wprowadza OSGi.
źródło
Mam jeszcze być „fanem” OSGi ...
Pracuję z aplikacją dla przedsiębiorstw w firmach z listy Fortune 100. Ostatnio używany przez nas produkt został „uaktualniony” do implementacji OSGi.
Uruchamianie lokalnego wdrażania cba ... [2/18/14 8: 47: 23: 727 EST] 00000347 CheckForOasis
ostatecznie wdrożony i „następujące pakiety zostaną wyciszone, a następnie ponownie uruchomione” [2/18/14 9: 38: 33: 108 EST] 00000143 AriesApplicat I CWSAI0054I: W ramach operacji aktualizacji aplikacji
51 minut ... za każdym razem, gdy zmienia się kod ... Poprzednia wersja (inna niż OSGi) była wdrażana w mniej niż 5 minut na starszych komputerach programistycznych.
na maszynie z 16 gig RAM i 40 wolnymi dyskami i procesorem Intel i5-3437U 1,9 GHz
„Korzyści” z tego uaktualnienia zostały sprzedane jako ulepszenia (produkcyjne) wdrożenia - czynność, którą wykonujemy około 4 razy w roku, z 2–4 małymi poprawkami rocznie. Dodanie 45 minut dziennie do 15 osób (kontrola jakości i programiści) Nie wyobrażam sobie, aby kiedykolwiek było uzasadnione. W aplikacjach dużych przedsiębiorstw, jeśli twoja aplikacja jest aplikacją podstawową, to zmienianie jej jest słuszne (małe zmiany mają potencjalnie daleko idące skutki - muszą być komunikowane i planowane z konsumentami w całym przedsiębiorstwie), monumentalne działanie - zła architektura dla OSGi. Jeśli twoja aplikacja nie jest aplikacją korporacyjną - tzn. Każdy konsument może mieć własny, dostosowany moduł, który prawdopodobnie uderzy we własny silos danych we własnej silosowej bazie danych i będzie działał na serwerze, który obsługuje wiele aplikacji, to spójrz na OSGi. Przynajmniej,
źródło
Jeśli aplikacja oparta na Javie wymaga dodawania lub usuwania modułów (rozszerzenie podstawowej funkcjonalności aplikacji), bez wyłączania JVM, można zastosować OSGI. Zwykle, jeśli koszt zamknięcia JVM jest większy, wystarczy zaktualizować lub ulepszyć funkcjonalność.
Przykłady :
Uwaga : Framework Spring przestał obsługiwać pakiety wiosenne OSGI, uznając to za niepotrzebną złożoność dla aplikacji opartych na transakcjach lub dla pewnego punktu w tych liniach. Osobiście nie uważam OSGI, chyba że jest to absolutnie konieczne, w czymś takim, jak budowanie platformy.
źródło
Pracuję z OSGi prawie 8 lat i muszę powiedzieć, że powinieneś rozważyć OSGi tylko wtedy, gdy masz biznesową potrzebę aktualizacji, usunięcia, instalacji lub wymiany komponentu w czasie wykonywania. Oznacza to również, że powinieneś mieć modułowy sposób myślenia i rozumieć, co oznacza modułowość. Istnieją pewne argumenty, że OSGi jest lekki - tak, to prawda, ale są też inne ramy, które są lekkie i łatwiejsze w utrzymaniu i rozwoju. To samo dotyczy bezpieczeństwa java bla bla.
OSGi wymaga solidnej architektury do prawidłowego używania i dość łatwo jest stworzyć system OSGi, który równie łatwo może być samodzielnym uruchamianym słojem bez udziału OSGi.
źródło
OSGi zapewnia następujące korzyści:
■ Przenośne i bezpieczne środowisko wykonawcze oparte na Javie
■ System zarządzania usługami, za pomocą którego można rejestrować i udostępniać usługi w pakietach oraz oddzielać dostawców usług od odbiorców usług
■ Dynamiczny system modułów, którego można użyć do dynamicznej instalacji i deinstalacji modułów Java, które OSGi nazywa pakietami
■ Lekkie i skalowalne rozwiązanie
źródło
Jest również wykorzystywany do zapewnienia dodatkowej przenośności oprogramowania pośredniego i aplikacji po stronie mobilnej. Strona mobilna jest dostępna na przykład dla WinMo, Symbian, Android. Gdy tylko nastąpi integracja z funkcjami urządzenia, może ulec fragmentacji.
źródło
Przynajmniej OSGi sprawia, że MYŚLISZ o modułowości, ponownym użyciu kodu, wersjonowaniu i ogólnie hydraulice projektu.
źródło
Inni już szczegółowo opisali korzyści, niniejszym wyjaśniam praktyczne przypadki użycia, które widziałem lub stosowałem OSGi.
źródło
Na oficjalnej stronie znajduje się już dość przekonujące oświadczenie, które mogę zacytować jako
Co do korzyści dla programisty?
Sprawdź szczegóły w Korzyści z używania OSGi .
źródło