Yup. Kind regards,
Peter Kriens > On 9 May 2019, at 14:01, Boev, Todor via osgi-dev <osgi-dev@mail.osgi.org> > wrote: > >> Others say you need to distribute based on your business domains, not on the >> low level need to share some code >>> But neither choice has an impact on the size of the (micro-) service > I tend to disagree. Splitting along business domains (e.g. "product > inventory") tends to require that the microservie is a full-blown, > self-container, three-tier web application. It implies state and storage and > more logic to integrate with other microservices (e.g. call "user management" > for access control). If you split the service by "logic reuse" you may end up > with something like "interest calculator" - a stateless generic piece of > logic with one rest endpoint to take input and return output. This is better > off as a library. > > So "well designed" microservies actually include a lot of stuff which in turn > makes OSGi more attractive: rest sever, rest client, db access, sso, > component runtime to integrate all of this... What people tend to do is to > pick a set of these things they feel are generic enough, call it "the > platform" or "the microservice chassis" and pay the cost of having it > everywhere. Think of "MicroProfile" - it's a fixed set of things and try as > they might to keep the list small it inevitably will bloat up with every > subsequent release > > OSGi gives you a way out. The "platform" is actually a shared bundle > repository and the OSGi build will put together for you exactly the pieces > you need in each microservice. Then because each bundle is an independent > unit with its own lifecycle they snap together just by being loaded into the > OSGi runtime. If you try to escape the "platform syndrome" with plain maven > for example you may be forced to provide the glue code yourself since outside > OSGi code tends to be shared as libraries with the expectation that the user > of the library will drive it's lifecycle. If you notice service dynamics are > not used in this scenario yet they are an important tool to enable the > bundles to hook together even though this happens only once at startup. > > In short you are right that for simple enough microservices plain maven and > plain jars are simpler. However I believe this gets out of hand very quickly > simply because the correct way to design microserviecs puts the bar of > functionality (and footprint) pretty high. > > As an example I have built a microservice with REST, JDBC, SSO through JWT > and some hello-world business logic in ~10 mb (the JVM excluded). Another > microservie did not need the JDBC so it was ~8 MB. What came into the image > was driven almost entirely by the requirements of my business code out of a > common bundle repository. > > Regards > ----------------------------------- > Todor Boev > OSGi Platform > Software AG > > From: Andrei Dulvac [mailto:dul...@apache.org] > Sent: Monday, May 6, 2019 6:21 PM > To: Boev, Todor; OSGi Developer Mail List > Cc: Jürgen Albert; SMAIL LOUNES > Subject: Re: [osgi-dev] Migrating from OSGI to Microservices > > This is a great and coherent answer and it made me think a lot. >> Others say you need to distribute based on your business domains, not on >> the low level need to share some code. > > But neither choice has an impact on the size of the (micro-) service > >> So microservice modularity runs orthogonally to in-process modularity. >> Indeed you need efficient in-process modularity to build good microservces. > > What I meant when I said there's an overlap it's the modularisation part. > Yes, with OSGi you can and might want to modularise your service further, but > if you're going through the infra and ops cost of maintaining and deploying > microservices, you can split down a larger service further into two > microservices (if performance and the arch permits). > And if your services are quite split already, how much benefits do the extra > in-process modularisation bring you? > > Don't get me wrong, I love OSGi and, on top of that, I think it's actually a > better way to start a project from a green field and make use of that > modularisation. So start with a monolith in that strict sense (as you don't > have the scalability part). And when you need all the advantages of > microservices in the strict sense, your service is already modular (*) and > you can just take out the part that needs to scale and make it a separate > service that you can scale independently. > > A wise man once told me: "You will never get the architecture and domain > boundaries right from the start with microservices" > > (*) As long as you future-proof a bit and don't make an architecture that > assumes blindly that osgi services are sharing the process with other > services. > > - Andrei > > > > On Fri, May 3, 2019 at 5:32 PM Boev, Todor via osgi-dev > <osgi-dev@mail.osgi.org> wrote: > I work on tools build OSGi-based microservices for the likes of K8S. By > extension this includes thinking/experimenting to discover whether/how OSGi > is applicable in these environments. > > One thing I noticed is that when you have a distributed application all of > its pieces must coordinate their internal lifecycles across the network. This > is more in the realm of communication between the microservices, rather than > in the realm of deploying containers. For example K8S can maintain replicas > of your containers, but this is for scalability rather than to create the > illusion network calls can’t fail. The application running on top is expected > to adapt on the fly. You really need good programming models. > > OSGi provides one elegant programming model. You already have services that > coordinate their independent dynamic lifecycles. If you model an external > entity as a service (e.g. a remote client object) you can hook your > application internal state directly to it. Then use discovery to distribute > knowledge when things are coming/going/relocating and have the distributed > system keep itself in balance while K8S takes care of responding to load – it > is a good fit. > > The other thing I have noticed is the inclination to think of microservices > as a universal modularity solution. People brag about having hundreds of > services with some consisting of one function. To share this one piece of > code you seem to pay the cost of handling distribution, memory/cpu/network to > maintain extra processes. This ultimately translates to paying raw money. > While Martin Fawler promotes modularity through microservices he explicitly > does not say where to stop if I remember correctly. Others say you need to > distribute based on your business domains, not on the low level need to share > some code. So microservice modularity runs orthogonally to in-process > modularity. Indeed you need efficient in-process modularity to build good > microservces. > > Here again OSGi can be a compelling solution since it tends to build really > small footprint images, because it has deep understanding what each jar > needs. This does not come for free – you need to describe your code well in > the module metadata. > > The third thing I noticed is that it only really works well when you use > simple/light OSGi components. Use http whiteboard, not web bundles. Use > declarative services, not blueprint. And so on. Even if you use “traditional” > distribution without the dynamic lifecycle it is still quite fun and OSGi has > a lot to offer (e.g. JAX-RS whiteboard). > > So in general if you choose a microservice architecture and choose to build > immutable small containers you are not at odds with OSGi. It actually can > help. If you already have an OSGi application you can consider it a head > start. You will have to refactor a lot to split your business logic into > independent services, but you won’t refactor less if you were not OSGi based. > Mohamed however mentioned he’d like to use ready-made solutions to implement > application features and has issues with OSGi in that respect. What are they? > OSGi can provide means to structure distributed applications, but it sure > can’t provide an independent analog of every heavy-lifting framework out > there. > ----------------------------------- > Todor Boev > OSGi Platform > Software AG > > From: osgi-dev-boun...@mail.osgi.org [mailto:osgi-dev-boun...@mail.osgi.org] > On Behalf Of Jurgen Albert via osgi-dev > Sent: Friday, May 3, 2019 3:41 PM > To: SMAIL LOUNES; OSGi Developer Mail List > Subject: Re: [osgi-dev] Migrating from OSGI to Microservices > > Well, like I said: Kubernetes only knows and cares about Containers (Pods) > and nothing about any application life cycle. You can define e.g. > dependencies like an application container requires a container with a DB. So > when someone triggers the start of your application container it will make > sure that the DB container is started and as far as I remember will set the > coordinates to the DB as system properties for you. However, It will not know > the state of readyness of your application or the DB. As an example, we have > search server tailor maid for one of our customers. On first start it > rebuilds the index from the raw data in their DB. This can take a couple of > minutes. For Kubernetes the container is up and running, but the server will > not be available to answer queries until the index is ready. > > Thus, if you want to use the Kubernetes API to start a Pod for a specific > services it you can do that, but everything else is not in its scope. It is > just a convenient tool to manage an Infrastructure. The rest belongs to your > application domain. > > Regards, > > Jürgen. > > Am 03/05/2019 um 14:16 schrieb SMAIL LOUNES: > Thank you for this remarkable answer, > I'm working on a research project about developping a highly distributed and > dynamic communication platform, so we're looknig for using kubernetes to > manage µservices life cycle, osgi is a condidate too. we can use an osgi > container to deploy some µservices.. do you have an idea about using > kubernetes for life cycle mangement and how integrate it's API > > Thank you so much, Best regards > > Le ven. 3 mai 2019 à 12:25, Jürgen Albert via osgi-dev > <osgi-dev@mail.osgi.org> a écrit : > Hi Mohamed, > > I had the fortune and in parts misfortune of being part of a few such > migration projects. Besides our own internal one, everyone decided against > OSGi. The descension was always because of personal resentment and/or because > everybody had his personal favourite toy they wanted to play with. The > reasons ranged from " We don't want to use Eclipse" (enroute with maven > wasn't available at the time) over "We want spring because we don't > understand OSGi and it seems to complicated" to " Java is outdated, we want > to build it with NodeJS". They all jumped on the Martin Fowler approach > without really considering what it means in the end. Each ended in disaster > or went through a hard phase of near disaster with jobs and reputations on > the line. Most ended up with something OSGiish with a lot of the pain going > along with modularity but missing most of its benefits. > > The issue is complex but we Identified one main reason: > > Modularity is an abstract concept for many developers. Spring for example > does not really teach and force a developer to think in a modular fashion. > All I saw was a bunch of smaller Monoliths packed in Docker containers. The > dynamic nature of a Microservice environment OSGi addresses with its Bundle > and Service life cycle , was pushed in the realm of Kubernetes. But > Kubernetes (or comparable Systems) is made for managing your Containers and > not for any application and service life cycle. Thus one needs at least a few > Developers/Architects that have modularity internalised and address issues > early on. > > Another issue with the Martin Fowler approach you have already addressed. A > fully distributed system comes with a lot of different problems (e.g. > caches). Also the point of network latency and the time serialization and > deserialization is an underestimated issue. > > Like Neil stated: If you are already have an OSGi application you already > have a microservice architecture, but maybe no distributed one. The way to go > is build a good microservice monolith (or modulith, like it is called > nowadays) and then move only the services to there own containers, that > really need scaling. Graham Charters talk from the 2016 EclipseCon Europe > addresses this quite nicely: > https://de.slideshare.net/mfrancis/microservices-osgi-better-together-graham-charters > > By your mention of blueprint, I deduct that you might use an older version of > OSGi. Our internal project was somewhat similar and we managed to go > distributed without major problems. We migrated to the latest OSGi Version > and used bnd instead of PDE. Later we moved some service to there own > container. It worked like charm. We could even show the process to a > customer, with zero downtime, by pulling up the new containers and removing > bundles with the local service implementations while the system was running. > > Regarding your point of finding/keep OSGi developers: This is something we > are confronted with rather often. The best way get developers sold on OSGi is > using the latest version of it together with bnd (pure or with the maven > integration). The development speed you can reach and maintain even in > complex applications makes most other Java developers jealous and interested > to learn more. > Regards, > Jürgen. > > Am 03/05/2019 um 10:57 schrieb Mohamed AFIF via osgi-dev: > Hi Andrei, > My question had as aim to collect some experiences of suchs migrations if > this exist, we're in brainstorming phase and I'm not making any judgement > value about OSGI or microservices architecture, but what we push to believe > that we should probely move toward another technology, is: the business > requirement, indeed we want to expose our service to clients as API, and the > several technical complications we 've ve been faced to everytime we want to > implement a feature easily provided and could be implemented by other open > framework in the market, there is also the Human ressource question is > involved beacause it's not easy find/keep OSGI developers. > personaly I think that OSGI is a perfect tehcnology for servers or embedded > system, but I've some doubt when it's regarding applications with open > architectures, it's my own view and I could be wrong > > Regards > > Mohamed. > > > > > > > > > @Neil > Obviously a simple > > > > Le jeu. 2 mai 2019 à 16:52, Andrei Dulvac <dul...@apache.org> a écrit : > Hi Mohamed, Neil. > > Neil, while I agree with you, I think Mohamed means it in the more "modern", > widely-accepted sense: > https://martinfowler.com/articles/microservices.html > > """ > In short, the microservice architectural style [1] is an approach to > developing a single application as a suite of small services, each running in > its own process and communicating with lightweight mechanisms, often an HTTP > resource API. > """ > > Mohamed, I'm curious what you end up with. Without getting too much into it, > I dismissed the idea as something "not worth it". > > - Andrei > > On Thu, May 2, 2019 at 12:37 PM Neil Bartlett via osgi-dev > <osgi-dev@mail.osgi.org> wrote: > Well the good news is that OSGi is already a microservice architecture, so > you have already finished. Congratulations! > > If that answer doesn't quite satisfy you, maybe you'd like to describe in > more detail what you are attempting to achieve and why? > > Regards, > Neil > > On Thu, 2 May 2019 at 11:06, Mohamed AFIF via osgi-dev > <osgi-dev@mail.osgi.org> wrote: > Hello everybody, > > We 're starting to study the possibility to transform our architcteure in > order to migrate from OSGI to microservice architecture, and I would like to > know if there is alreay some people who had thought about this subject or > already start this migration. > Because at first sight it would not be an easy task, many problems/issues we > will be facing to them (blueprint injections, managing ditrubued caches > instead of one cache in one JVM...) > > Many thanks > > > > > -- > > Cdt > Mohamed AFIF > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org > https://mail.osgi.org/mailman/listinfo/osgi-dev > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org > https://mail.osgi.org/mailman/listinfo/osgi-dev > > > > -- > > Cdt > Mohamed AFIF > > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org > https://mail.osgi.org/mailman/listinfo/osgi-dev > > -- > Jürgen Albert > Geschäftsführer > > Data In Motion Consulting GmbH > > Kahlaische Str. 4 > 07745 Jena > > Mobil: 0157-72521634 > E-Mail: j.alb...@datainmotion.de > Web: www.datainmotion.de > > XING: https://www.xing.com/profile/Juergen_Albert5 > > Rechtliches > > Jena HBR 513025 > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org > https://mail.osgi.org/mailman/listinfo/osgi-dev > > > -- > > > -- > Jürgen Albert > Geschäftsführer > > Data In Motion Consulting GmbH > > Kahlaische Str. 4 > 07745 Jena > > Mobil: 0157-72521634 > E-Mail: j.alb...@datainmotion.de > Web: www.datainmotion.de > > XING: https://www.xing.com/profile/Juergen_Albert5 > > Rechtliches > > Jena HBR 513025 > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org > https://mail.osgi.org/mailman/listinfo/osgi-dev > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org > https://mail.osgi.org/mailman/listinfo/osgi-dev _______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev