OSGi giải quyết vấn đề gì?


279

Tôi đã đọc trên Wikipedia và các trang khác về OSGi , nhưng tôi không thực sự thấy bức tranh lớn. Nó nói rằng đó là một nền tảng dựa trên thành phần và bạn có thể tải lại các mô-đun khi chạy. Ngoài ra, "ví dụ thực tế" được đưa ra ở mọi nơi là Khung trình cắm thêm Eclipse.

Câu hỏi của tôi là:

  1. Định nghĩa rõ ràng và đơn giản của OSGi là gì?

  2. Những vấn đề phổ biến nào nó giải quyết?

Theo "các vấn đề chung", ý tôi là những vấn đề chúng ta gặp phải hàng ngày, như "OSGi có thể làm gì để làm cho công việc của chúng ta hiệu quả / vui vẻ / đơn giản hơn?"

Câu trả lời:


95

Hệ thống thành phần của OSGi mang lại lợi ích gì cho bạn?
Vâng, đây là một danh sách:

Giảm độ phức tạp - Phát triển với công nghệ OSGi có nghĩa là phát triển các gói: các thành phần OSGi. Gói là các mô-đun. Họ giấu nội bộ của mình khỏi các gói khác và liên lạc thông qua các dịch vụ được xác định rõ. Ẩn nội bộ có nghĩa là tự do hơn để thay đổi sau này. Điều này không chỉ làm giảm số lượng lỗi, nó còn giúp phát triển các gói đơn giản hơn vì các gói có kích thước chính xác thực hiện một phần chức năng thông qua các giao diện được xác định rõ. Có một blog thú vị mô tả những gì công nghệ OSGi đã làm cho quá trình phát triển của họ.

Tái sử dụng - Mô hình thành phần OSGi giúp sử dụng rất nhiều thành phần bên thứ ba trong một ứng dụng. Ngày càng nhiều dự án nguồn mở cung cấp các JAR của họ đã sẵn sàng cho OSGi. Tuy nhiên, các thư viện thương mại cũng đang trở nên có sẵn như là các gói sẵn sàng.

Thế giới thực -Khung OSGi là động. Nó có thể cập nhật các gói trên bay và các dịch vụ có thể đến và đi. Các nhà phát triển đã sử dụng Java truyền thống hơn, coi đây là một tính năng rất có vấn đề và không thấy được lợi thế. Tuy nhiên, hóa ra thế giới thực rất năng động và có các dịch vụ năng động có thể đến và đi khiến các dịch vụ trở thành một kết hợp hoàn hảo cho nhiều kịch bản trong thế giới thực. Ví dụ: một dịch vụ có thể mô hình hóa một thiết bị trong mạng. Nếu thiết bị được phát hiện, dịch vụ được đăng ký. Nếu thiết bị biến mất, dịch vụ không được đăng ký. Có một số lượng đáng ngạc nhiên các kịch bản trong thế giới thực phù hợp với mô hình dịch vụ năng động này. Do đó, các ứng dụng có thể sử dụng lại các nguyên hàm mạnh mẽ của đăng ký dịch vụ (đăng ký, nhận, liệt kê bằng ngôn ngữ bộ lọc biểu cảm và chờ đợi các dịch vụ xuất hiện và biến mất) trong miền riêng của chúng. Điều này không chỉ tiết kiệm mã viết, nó còn cung cấp khả năng hiển thị toàn cầu, công cụ gỡ lỗi và nhiều chức năng hơn so với triển khai cho một giải pháp chuyên dụng. Viết mã trong một môi trường năng động như vậy nghe có vẻ như một cơn ác mộng, nhưng may mắn thay, có những lớp hỗ trợ và khung công tác chiếm phần lớn, nếu không nói là hết nỗi đau.

Triển khai dễ dàng - Công nghệ OSGi không chỉ là một tiêu chuẩn cho các thành phần. Nó cũng chỉ định cách các thành phần được cài đặt và quản lý. API này đã được sử dụng bởi nhiều gói để cung cấp một tác nhân quản lý. Tác nhân quản lý này có thể đơn giản như trình vỏ lệnh, trình điều khiển giao thức quản lý TR-69, trình điều khiển giao thức OMA DM, giao diện điện toán đám mây cho EC2 của Amazon hoặc hệ thống quản lý IBM Tivoli. API quản lý được tiêu chuẩn hóa giúp tích hợp công nghệ OSGi rất dễ dàng trong các hệ thống hiện tại và tương lai.

Cập nhật động - Mô hình thành phần OSGi là mô hình động. Các gói có thể được cài đặt, bắt đầu, dừng, cập nhật và gỡ cài đặt mà không làm sập toàn bộ hệ thống. Nhiều nhà phát triển Java không tin rằng điều này có thể được thực hiện một cách đáng tin cậy và do đó ban đầu không sử dụng điều này trong sản xuất. Tuy nhiên, sau khi sử dụng điều này trong phát triển một thời gian, hầu hết bắt đầu nhận ra rằng nó thực sự hoạt động và giảm đáng kể thời gian triển khai.

Thích nghi - Mô hình thành phần OSGi được thiết kế từ đầu để cho phép trộn và kết hợp các thành phần. Điều này đòi hỏi các phụ thuộc của các thành phần cần phải được chỉ định và nó yêu cầu các thành phần phải sống trong một môi trường mà các phụ thuộc tùy chọn của chúng không phải lúc nào cũng có sẵn. Sổ đăng ký dịch vụ OSGi là một sổ đăng ký động nơi các gói có thể đăng ký, nhận và nghe các dịch vụ. Mô hình dịch vụ động này cho phép các gói tìm ra những khả năng nào có sẵn trên hệ thống và điều chỉnh chức năng mà chúng có thể cung cấp. Điều này làm cho mã linh hoạt hơn và linh hoạt hơn với các thay đổi.

Tính minh bạch - Gói và dịch vụ là công dân hạng nhất trong môi trường OSGi. API quản lý cung cấp quyền truy cập vào trạng thái bên trong của gói cũng như cách nó được kết nối với các gói khác. Ví dụ, hầu hết các khung công tác cung cấp một vỏ lệnh cho thấy trạng thái bên trong này. Các phần của ứng dụng có thể bị dừng để gỡ lỗi một vấn đề nhất định hoặc có thể đưa các gói chẩn đoán vào. Thay vì nhìn chằm chằm vào hàng triệu dòng đầu ra đăng nhập và thời gian khởi động lại lâu, các ứng dụng OSGi thường có thể được gỡ lỗi bằng vỏ lệnh trực tiếp.

Phiên bản - Công nghệ OSGi giải quyết JAR hell. Địa ngục JAR là vấn đề mà thư viện A hoạt động với thư viện B; version = 2, nhưng thư viện C chỉ có thể hoạt động với B; version = 3. Trong Java tiêu chuẩn, bạn không gặp may. Trong môi trường OSGi, tất cả các gói được phiên bản cẩn thận và chỉ các gói có thể cộng tác được nối với nhau trong cùng một không gian lớp. Điều này cho phép cả bó A và C hoạt động với thư viện riêng của chúng. Mặc dù không nên thiết kế các hệ thống có vấn đề về phiên bản này, nhưng nó có thể là một trình cứu sinh trong một số trường hợp.

Đơn giản - API OSGi đơn giản đến bất ngờ. API lõi chỉ là một gói và ít hơn 30 lớp / giao diện. API lõi này đủ để viết các gói, cài đặt chúng, bắt đầu, dừng, cập nhật và gỡ cài đặt chúng và bao gồm tất cả các lớp nghe và bảo mật. Có rất ít API cung cấp rất nhiều chức năng cho rất ít API.

Nhỏ - Khung công tác OSGi Release 4 có thể được triển khai trong tệp JAR khoảng 300KB. Đây là một chi phí nhỏ cho số lượng chức năng được thêm vào ứng dụng bằng cách bao gồm OSGi. Do đó, OSGi chạy trên một loạt các thiết bị: từ rất nhỏ, nhỏ đến máy tính lớn. Nó chỉ yêu cầu một máy ảo Java tối thiểu để chạy và thêm rất ít vào đầu nó.

Nhanh - Một trong những trách nhiệm chính của khung OSGi là tải các lớp từ các gói. Trong Java truyền thống, các JAR hoàn toàn hiển thị và được đặt trong danh sách tuyến tính. Tìm kiếm một lớp học yêu cầu tìm kiếm thông qua danh sách này (thường rất dài, 150 không phải là hiếm). Ngược lại, OSGi gói trước dây và biết chính xác từng gói cung cấp lớp. Sự thiếu tìm kiếm này là một yếu tố tăng tốc đáng kể khi khởi động.

Lười biếng - Lười trong phần mềm là tốt và công nghệ OSGi có nhiều cơ chế để thực hiện mọi thứ chỉ khi chúng thực sự cần thiết. Ví dụ, các gói có thể được khởi động một cách háo hức, nhưng chúng cũng có thể được cấu hình để chỉ bắt đầu khi các gói khác đang sử dụng chúng. Dịch vụ có thể được đăng ký, nhưng chỉ được tạo khi chúng được sử dụng. Các thông số kỹ thuật đã được tối ưu hóa nhiều lần để cho phép các loại kịch bản lười biếng này có thể tiết kiệm chi phí thời gian chạy rất lớn.

Bảo mật - Java có một mô hình bảo mật hạt mịn rất mạnh ở phía dưới nhưng nó thực sự rất khó cấu hình trong thực tế. Kết quả là hầu hết các ứng dụng Java an toàn đang chạy với lựa chọn nhị phân: không có khả năng bảo mật hoặc rất hạn chế. Mô hình bảo mật OSGi tận dụng mô hình bảo mật hạt mịn nhưng cải thiện khả năng sử dụng (cũng như làm cứng mô hình ban đầu) bằng cách yêu cầu nhà phát triển gói xác định các chi tiết bảo mật được yêu cầu ở dạng dễ kiểm tra trong khi người vận hành môi trường vẫn chịu trách nhiệm hoàn toàn. Nhìn chung, OSGi có thể cung cấp một trong những môi trường ứng dụng an toàn nhất vẫn còn thiếu các nền tảng điện toán được bảo vệ bằng phần cứng.

Không xâm nhập - Các ứng dụng (gói) trong môi trường OSGi được để riêng. Họ có thể sử dụng hầu như bất kỳ cơ sở nào của VM mà không cần OSGi hạn chế chúng. Cách thực hành tốt nhất trong OSGi là viết các Đối tượng Java cũ đơn giản và vì lý do này, không có giao diện đặc biệt nào được yêu cầu cho các dịch vụ OSGi, thậm chí một đối tượng Chuỗi Java có thể hoạt động như một dịch vụ OSGi. Chiến lược này làm cho mã ứng dụng dễ dàng chuyển sang môi trường khác.

Chạy mọi nơi - Vâng, điều đó phụ thuộc. Mục tiêu ban đầu của Java là chạy mọi nơi. Rõ ràng, không thể chạy tất cả mã ở mọi nơi vì khả năng của máy ảo Java khác nhau. Một VM trong điện thoại di động có thể sẽ không hỗ trợ các thư viện giống như máy tính lớn của IBM chạy ứng dụng ngân hàng. Có hai vấn đề cần quan tâm. Đầu tiên, API OSGi không nên sử dụng các lớp không có sẵn trên tất cả các môi trường. Thứ hai, một gói không nên bắt đầu nếu nó chứa mã không có sẵn trong môi trường thực thi. Cả hai vấn đề này đã được quan tâm trong thông số kỹ thuật của OSGi.

Nguồn: www.osgi.org/Tĩ/WhyOSGi


2
Dường như với tôi như người ta có thể đạt được ít nhất một số lợi ích này bằng cách sử dụng một SOA (không trạng thái / trạng thái). Khi tôi triển khai một phiên bản được vá / cập nhật của một thành phần đến một điểm cuối (phiên bản) khác thì tôi có thể chỉ cần có thành phần phụ thuộc, chuyển đổi và sử dụng dịch vụ được vá ở điểm cuối mới. Vì tôi có thể có cả phiên bản cũ và phiên bản mới được triển khai và chạy cùng một lúc, tôi cũng có thể có thành phần phụ thuộc sử dụng các phần khác nhau của cả phiên bản cũ và phiên bản mới khi cần.
MikeM

1
Có vẻ như mọi người đang trải qua rất nhiều rắc rối khi làm microservice và SOA để (hy vọng) có được chức năng nhiều hơn 20% so với OSGi. Các công ty nên suy nghĩ hai lần OSGi mang lại bao nhiêu cho công việc làm thêm. Tất cả các dịch vụ trên cùng một JVM trong một quy trình, trong đó nhiều dịch vụ có thể được thực hiện ngoại tuyến hoặc nâng cấp theo yêu cầu.
Teddy

Các gói OSGi có thể chỉ là sự trừu tượng gần nhất với "thành phần" khó nắm bắt mà mọi người đã tìm kiếm từ lâu!
Teddy

SOA và microservice có thể cung cấp một số lợi ích nhưng với chi phí lớn hơn nhiều. Trong cả hai trường hợp, tất cả các giao tiếp xảy ra qua mạng rất tốn kém so với các cuộc gọi nội hạt. Quản lý các phiên bản trong SOA và microservice cũng là một cơn ác mộng. Gọi một dịch vụ OSGi so với giá rẻ như bất kỳ cuộc gọi phương thức java nào.
Christian Schneider

90

Tôi đã tìm thấy những lợi ích sau từ OSGi:

  • Mỗi plugin là một tạo phẩm được tạo phiên bản có trình nạp lớp riêng.
  • Mỗi plugin phụ thuộc vào cả các lọ cụ thể mà nó chứa và cả các plugin được phiên bản cụ thể khác.
  • Do các trình nạp lớp phiên bản và bị cô lập, các phiên bản khác nhau của cùng một tạo phẩm có thể được tải cùng một lúc. Nếu một thành phần trong ứng dụng của bạn phụ thuộc vào một phiên bản của trình cắm và một phiên bản khác phụ thuộc vào phiên bản khác, cả hai đều có thể được tải cùng một lúc.

Với điều này, bạn có thể cấu trúc ứng dụng của mình dưới dạng một bộ các tạo phẩm plugin được phiên bản được tải theo yêu cầu. Mỗi plugin là một thành phần độc lập. Giống như Maven giúp bạn cấu trúc bản dựng của mình để nó có thể lặp lại và được xác định bởi một tập hợp các phiên bản cụ thể mà nó được tạo bởi, OSGi giúp bạn thực hiện việc này khi chạy.


14
Một trong những lợi ích lớn nhất của cơ chế phiên bản mạnh mẽ này là các phụ thuộc được xác minh trong quá trình triển khai, nghĩa là bạn nhận được các lỗi phụ thuộc chưa được giải quyết tại thời điểm triển khai thay vì NoClassDefFoundErrors trong thời gian chạy. Ngoài hệ thống mô-đun, lớp dịch vụ OSGi đáng được đề cập. Không dễ để bắt đầu vì nó tác động đến kiến ​​trúc của bạn (và không phải lúc nào cũng thích hợp để sử dụng nó), nhưng đó là một hệ thống rất mạnh mẽ khi bạn đã áp dụng nó.
Barend

58

Tôi không quan tâm quá nhiều về khả năng cắm nóng của các mô-đun OSGi (ít nhất là hiện tại). Đó là nhiều hơn các mô-đun thực thi. Không có hàng triệu lớp "công khai" có sẵn trên đường dẫn bất cứ lúc nào cũng bảo vệ tốt các phụ thuộc vòng tròn: Bạn phải thực sự nghĩ về các giao diện công cộng của mình - không chỉ về mặt ngôn ngữ java xây dựng "công khai", mà cả về thư viện của bạn / module: Thành phần nào (chính xác) là những gì bạn muốn cung cấp cho người khác? Các giao diện (của các mô-đun khác) bạn thực sự cần để thực hiện chức năng của mình là gì?

Thật tuyệt, hotplug đi kèm với nó, nhưng tôi thà khởi động lại các ứng dụng thông thường của mình hơn là kiểm tra tất cả các kết hợp của khả năng cắm nóng ...


9
Bạn có thể đạt được điều tương tự bằng cách sử dụng Guice và các gói, chỉ xuất các giao diện và Mô-đun và đánh dấu mọi thứ khác là gói riêng
Pablo Fernandez

20
  • Nói một cách tương tự, bạn có thể thay đổi động cơ của xe mà không cần tắt.
  • Bạn có thể tùy chỉnh các hệ thống phức tạp cho khách hàng. Xem sức mạnh của Eclipse.
  • Bạn có thể sử dụng lại toàn bộ các thành phần. Tốt hơn là chỉ các đối tượng.
  • Bạn sử dụng một nền tảng ổn định để phát triển Ứng dụng dựa trên thành phần. Những lợi ích của việc này là rất lớn.
  • Bạn có thể xây dựng các thành phần với khái niệm hộp đen. Các thành phần khác không cần biết về các giao diện ẩn, chúng chỉ nhìn thấy các giao diện được xuất bản.
  • Bạn có thể sử dụng trong cùng một hệ thống một số thành phần bằng nhau, nhưng trong các bản phát hành khác nhau, mà không ảnh hưởng đến ứng dụng. OSGi giải quyết vấn đề Jar Hell.
  • Với OSGi, bạn phát triển tư duy cho các kiến ​​trúc sư hệ thống với CBD

Có rất nhiều lợi ích (tôi đã nhắc ngay bây giờ), có sẵn cho tất cả những người sử dụng Java.


15

chỉnh sửa cho rõ ràng. Trang OSGi đã đưa ra một câu trả lời đơn giản tốt hơn của tôi

Một câu trả lời đơn giản: Nền tảng dịch vụ OSGi cung cấp một môi trường điện toán được định hướng theo thành phần được tiêu chuẩn hóa để hợp tác các dịch vụ được nối mạng. Kiến trúc này làm giảm đáng kể sự phức tạp chung của việc xây dựng, duy trì và triển khai các ứng dụng. Nền tảng dịch vụ OSGi cung cấp các chức năng để thay đổi thành phần động trên thiết bị của nhiều loại mạng mà không yêu cầu khởi động lại.

Trong một cấu trúc ứng dụng duy nhất, giả sử IDE IDE, việc khởi động lại một plugin mới không phải là vấn đề lớn. Sử dụng hoàn toàn triển khai OSGi, bạn sẽ có thể thêm các plugin khi chạy, có được chức năng mới, nhưng không phải khởi động lại nhật thực chút nào.

Một lần nữa, không phải là một vấn đề lớn cho mỗi ngày, sử dụng ứng dụng nhỏ.

Nhưng, khi bạn bắt đầu xem xét các khung ứng dụng phân tán, đa máy tính, đó là nơi nó bắt đầu trở nên thú vị. Khi bạn phải có 100% thời gian hoạt động cho các hệ thống quan trọng, khả năng các thành phần hotswap hoặc thêm chức năng mới khi chạy là hữu ích. Cấp, có hầu hết các khả năng để làm điều này ngay bây giờ, nhưng OSGi đang cố gắng kết hợp mọi thứ vào một khung nhỏ đẹp với các giao diện chung.

OSGi có giải quyết được các vấn đề phổ biến không, tôi không chắc về điều đó. Ý tôi là, nó có thể, nhưng chi phí có thể không đáng cho những vấn đề đơn giản hơn. Nhưng đó là điều cần xem xét khi bạn bắt đầu đối phó với các ứng dụng lớn hơn, được nối mạng.


Bạn có nói rằng OSGi cung cấp một cơ chế liên JVM để khám phá dịch vụ trong môi trường phân tán không? Câu hỏi của riêng tôi ( stackoverflow.com/questions/375725/ - ) đã được trả lời như thể OSGi là một VM
oxbow_lakes

Bạn có ý nghĩa gì khi "các mạng" trong "thay đổi thành phần động trên thiết bị của nhiều loại mạng"?
Thilo

Không phải microservice giải quyết các vấn đề tương tự?
Vibha

12

Một vài điều khiến tôi thất vọng trên OSGi:

1) Các hàm ý và bộ tải ngữ cảnh của chúng có rất nhiều điểm kỳ quặc đối với chúng và có thể hơi không đồng bộ (Chúng tôi sử dụng felix bên trong hợp lưu). So với một lò xo thuần túy (không có DM) trong đó [chính] có khá nhiều hoạt động đồng bộ hóa mọi thứ.

2) Các lớp không bằng nhau sau khi tải nóng. Ví dụ, bạn có một lớp bộ đệm tangosol trên chế độ ngủ đông. Nó được lấp đầy bằng Fork. Class, bên ngoài phạm vi OSGi. Bạn tải một bình mới và Fork không thay đổi. Lớp [Ngã ba]! = Lớp [Ngã ba]. Nó cũng xuất hiện trong quá trình tuần tự hóa, cho các nguyên nhân cơ bản tương tự.

3) Phân cụm.

Bạn có thể làm việc xung quanh những điều này, nhưng đó là một nỗi đau lớn, và làm cho kiến ​​trúc của bạn trông thật thiếu sót.

Và với những người bạn đang quảng cáo về việc cắm nóng .. Khách hàng số 1 của OSG? Nhật thực. Eclipse làm gì sau khi tải gói này?

Nó khởi động lại.


Đừng quên đề cập rằng Eclipse thậm chí có thể không khởi động do biểu đồ phụ thuộc OSGi đã bị phá vỡ bởi gói mới đó.
Martin Vysny

6

OSGi làm cho mã của bạn bị ném NoClassDefFoundErrorClassNotFoundExceptionkhông có lý do rõ ràng (rất có thể là do bạn quên xuất gói trong tệp cấu hình OSGi); vì nó có Trình tải lớp, nó có thể khiến lớp của bạn com.example.Fookhông được truyền tới com.example.Foovì thực tế nó có hai lớp khác nhau được tải bởi hai trình nạp lớp khác nhau. Nó có thể làm cho Eclipse của bạn khởi động vào một bảng điều khiển OSGi sau khi cài đặt một trình cắm thêm Eclipse.

Đối với tôi, OSGi chỉ thêm sự phức tạp (vì nó đã thêm một mô hình tinh thần cho tôi để mò mẫm), thêm phiền toái vì ngoại lệ; Tôi không bao giờ thực sự cần sự năng động mà nó "cung cấp". Nó đã bị xâm phạm vì nó yêu cầu cấu hình gói OSGi cho tất cả các mô-đun; nó chắc chắn không đơn giản (trong một dự án lớn hơn).

Vì kinh nghiệm tồi tệ của tôi, tôi có xu hướng tránh xa con quái vật đó, cảm ơn bạn rất nhiều. Tôi thà chịu đựng địa ngục phụ thuộc jar, vì đó là cách dễ hiểu hơn so với địa ngục trình tải lớp mà OSGi giới thiệu.


5

Tôi vẫn chưa phải là "fan" của OSGi ...

Tôi đã làm việc với một ứng dụng doanh nghiệp tại các công ty Fortune 100. Gần đây, sản phẩm chúng tôi sử dụng đã "nâng cấp" thành triển khai OSGi.

bắt đầu triển khai cba địa phương ... [18/12/14 8: 47: 23: 727 EST] 00000347 CheckForOocation

cuối cùng đã triển khai và "các gói sau sẽ được gỡ bỏ và sau đó khởi động lại" [2/18/14 9: 38: 33: 108 EST] 00000143 AriesApplicat I CWSAI0054I: Là một phần của hoạt động cập nhật cho ứng dụng

51 phút ... mỗi lần mã thay đổi ... Phiên bản trước (không phải OSGi) sẽ triển khai trong vòng chưa đầy 5 phút trên các máy phát triển cũ.

trên máy có 16 gig ram và 40 gig gig miễn phí và CPU Intel i5-3437U 1.9 GHz

"Lợi ích" của việc nâng cấp này được bán dưới dạng cải thiện (sản xuất) - một hoạt động mà chúng tôi thực hiện khoảng 4 lần một năm với khoảng 2-4 lần triển khai sửa chữa nhỏ mỗi năm. Thêm 45 phút mỗi ngày cho 15 người (QA và nhà phát triển) Tôi không thể tưởng tượng được là mình đã được chứng minh. Trong các ứng dụng doanh nghiệp lớn, nếu ứng dụng của bạn là ứng dụng cốt lõi, thì việc thay đổi nó là đúng, vì vậy (những thay đổi nhỏ có khả năng tác động sâu rộng - phải được truyền đạt và lên kế hoạch với người tiêu dùng trên toàn doanh nghiệp), một hoạt động hoành tráng - sai kiến ​​trúc OSGi. Nếu ứng dụng của bạn không phải là ứng dụng dành cho doanh nghiệp - tức là mỗi người tiêu dùng có thể có mô-đun được tùy chỉnh riêng có khả năng đánh vào silo dữ liệu của riêng họ trong cơ sở dữ liệu silo của riêng họ và chạy trên máy chủ lưu trữ nhiều ứng dụng, thì có thể xem OSGi. Ít nhất,


4
OSGi không thể khiến việc triển khai diễn ra từ 5 đến 51 phút vì nó hầu như không có phí. Sự gia tăng thời gian khởi động này phải được gây ra bởi một thứ khác, hoặc, bằng cách tuần tự hóa việc khởi tạo bằng cách làm cho các trình kích hoạt khởi tạo đồng bộ. Đó không phải là lỗi của OSGi vì nhìn chung mọi người có thời gian khởi động thấp hơn.
Peter Kriens

Trả lời thú vị. Bây giờ tôi chỉ đọc về OSGi ... vâng, người đến muộn. Nhưng mối quan tâm của tôi là về dữ liệu trong bối cảnh doanh nghiệp. Vấn đề tương tự tôi có với microservice.
Bill Rosmus

4

Nếu một ứng dụng dựa trên Java yêu cầu thêm hoặc xóa các mô-đun (mở rộng chức năng cơ bản của ứng dụng), mà không tắt JVM, OSGI có thể được sử dụng. Thông thường nếu chi phí tắt JVM nhiều hơn, chỉ để cập nhật hoặc tăng cường chức năng.

Ví dụ :

  1. Eclipse : Cung cấp nền tảng cho các plugin để cài đặt, gỡ cài đặt, cập nhật và phụ thuộc lẫn nhau.
  2. AEM : Ứng dụng WCM, nơi thay đổi chức năng sẽ được định hướng kinh doanh, không thể dành thời gian để bảo trì.

Lưu ý : Khung công tác mùa xuân đã ngừng hỗ trợ các gói mùa xuân OSGI, coi đó là sự phức tạp không cần thiết cho các ứng dụng dựa trên giao dịch hoặc trong một số điểm trong các dòng này. Cá nhân tôi không xem xét OSGI trừ khi nó thực sự cần thiết, trong một cái gì đó lớn như xây dựng một nền tảng.


3

Tôi đã làm việc với OSGi gần 8 năm và tôi phải nói rằng bạn chỉ nên xem xét OSGi nếu bạn có nhu cầu cập nhật, gỡ bỏ, cài đặt hoặc thay thế một thành phần trong thời gian chạy. Điều này cũng có nghĩa là bạn nên có một tư duy mô-đun và hiểu ý nghĩa của mô-đun. Có một số lập luận rằng OSGi rất nhẹ - vâng, điều đó đúng nhưng cũng có một số khung khác nhẹ và dễ bảo trì và phát triển hơn. Cùng đi để bảo mật java blah blah.

OSGi yêu cầu một kiến ​​trúc vững chắc để được sử dụng một cách chính xác và khá dễ dàng để tạo ra hệ thống OSGi có thể dễ dàng trở thành một jar-runnable-jar độc lập mà không cần bất kỳ OSGi nào tham gia.


2

OSGi cung cấp lợi ích sau:

■ Môi trường thực thi di động và an toàn dựa trên Java

■ Hệ thống quản lý dịch vụ, có thể được sử dụng để đăng ký và chia sẻ dịch vụ trên các gói và tách riêng nhà cung cấp dịch vụ từ người tiêu dùng dịch vụ

■ Một hệ thống mô-đun động, có thể được sử dụng để cài đặt và gỡ cài đặt động các mô-đun Java, mà OSGi gọi là các gói

■ Một giải pháp nhẹ và có thể mở rộng


1

Nó cũng đang được sử dụng để mang lại tính di động bổ sung của phần mềm trung gian và ứng dụng ở phía di động. Phía di động có sẵn cho WinMo, Symbian, Android chẳng hạn. Ngay khi tích hợp với các tính năng của thiết bị xảy ra, có thể bị phân mảnh.


1

Ít nhất, OSGi làm cho bạn NGHINK về tính mô đun, tái sử dụng mã, phiên bản và nói chung hệ thống ống nước của một dự án.


Nó không khiến bạn phải suy nghĩ về điều đó, nó chỉ có thể làm bạn bối rối, đó là một lời nói dối rằng nó giải quyết tất cả các vấn đề đó (chỉ bạn mới có thể giải quyết chúng), nó chỉ mang lại địa ngục phụ thuộc khi dự án của bạn lớn hơn ~ 50 plugin, và thường bạn cần phải thực hiện nhiều thủ thuật nạp lớp. Vì vậy, mã của bạn lộn xộn hơn rất nhiều, bởi vì bạn cần thực hiện một số hack osgi và tất cả các nhà phát triển trong nhóm của bạn cần phải hiểu những hack đó để hiểu mã. Ảnh hưởng này rất lớn, nó ảnh hưởng đến kiến ​​trúc của bạn theo cách bạn làm những điều rất xấu đối với mã của mình, Đó là một địa ngục.
Krzysztof Cichocki

1

Những người khác đã phác thảo các lợi ích một cách chi tiết, tôi xin giải thích các cách sử dụng thực tế mà tôi đã thấy hoặc sử dụng OSGi.

  1. Trong một trong các ứng dụng của chúng tôi, chúng tôi có luồng và luồng dựa trên sự kiện được xác định trong các plugin dựa trên nền tảng OSGi, vì vậy ngày mai nếu một số khách hàng muốn có luồng khác nhau / bổ sung thì anh ta chỉ cần triển khai thêm một plugin, định cấu hình từ bảng điều khiển của chúng tôi và anh ta đã hoàn tất .
  2. Nó được sử dụng để triển khai các trình kết nối Store khác nhau, ví dụ, giả sử chúng ta đã có trình kết nối Oracle DB và mong muốn ngày mai được kết nối, sau đó viết một trình kết nối mới và triển khai nó và định cấu hình chi tiết thông qua bảng điều khiển và một lần nữa bạn đã hoàn tất. việc triển khai các kết nối được xử lý bởi khung plugin OSGi.

1

Đã có một tuyên bố khá thuyết phục trong trang web chính thức của nó, tôi có thể trích dẫn như

Lý do chính khiến công nghệ OSGi thành công là vì nó cung cấp một hệ thống thành phần rất trưởng thành , thực sự hoạt động trong một số môi trường đáng ngạc nhiên. Hệ thống thành phần OSGi thực sự được sử dụng để xây dựng các ứng dụng rất phức tạp như IDE (Eclipse), máy chủ ứng dụng (GlassFish, IBM Websphere, Oracle / BEA Weblogic, Jonas, JBoss), khung ứng dụng (Spring, Guice), tự động hóa công nghiệp, cổng thông tin dân cư, điện thoại, và nhiều hơn nữa.

Còn về lợi ích cho nhà phát triển?

NHÀ PHÁT TRIỂN: OSGi giảm độ phức tạp bằng cách cung cấp kiến ​​trúc mô đun cho các hệ thống phân tán quy mô lớn ngày nay cũng như các ứng dụng nhúng nhỏ. Xây dựng hệ thống từ các mô-đun trong nhà và ngoài kệ làm giảm đáng kể sự phức tạp và do đó chi phí phát triển và bảo trì. Mô hình lập trình OSGi nhận ra lời hứa của các hệ thống dựa trên thành phần.

Vui lòng kiểm tra các chi tiết trong Lợi ích của việc sử dụng OSGi .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.