It's not necessarily about one or the other. What you mention is the k8s control plane that can take over your traffic/scaling needs. However, the beauty of dynamic services on OSGi can be that you reflect the "as-is" service topology (controlled and managed by k8s). OSGi services can understand and adapt to the availability (or non-availability) dynamically. It gives you fine-grained control which leads to smarter services. They are not black and white anymore (on or off) but can help re-reoute, cache or otherwise mitigate short term changes in the service topology.
Note that this is complementary to remote services mentioned above. RSA help you partition your (micro-)services easier. Though i think the story is not as easy because.. you know.. the network is not reliable, etc. There is a lot more to this, and its a great discussion you are having here. And its up to your needs if you want smarter services or can live with cheap & dump instances (that ultimately leads you towards FaaS) - which can be totally fine. Toni Toni Menzel / rebaze consultancy Alleestrasse 25 / 30167 Hannover / Germany M +49 171 6520284 www.rebaze.com Software Engineering Therapy rebaze GmbH, Zollstrasse 6, 39114 Hannover, Germany Managing Director: Toni Menzel Phone: +49 <+49%2030%2054909582> 171 6520284 / E-Mail: h...@rebaze.com Registration Court: District Court of Stendal Registration Number: HRB 17993 Sales Tax (VAT) Registration Number: DE282233792 On Sat, May 11, 2019 at 10:05 PM Jürgen Albert via osgi-dev < osgi-dev@mail.osgi.org> wrote: > Depends on how you build your services. If you go the classic way, with a > normal HTTP API with e.g. docker compose or swarm, you would get load > balancing out of the box. They do a DNS round robin, the moment you scale a > service there. I believe Kubernetes does the same. The remote service Admin > does not really specify something like this. Here you can do the load > balancing on the application side. if you have e.g. 3 instances of the > billing container, you would find 3 service instances on your consumer > side. > > Am 11/05/2019 um 10:36 schrieb Andrei Dulvac: > > Hi Jürgen. > > Ok, I missed the context of your previous mail - how modularity helps even > if you have multiple containers. > > I get it... It's fast to develop and easy to switch boundaries. One other > thing that I have on my mind: in your example, how easy would it be to > scale the billing container? I assume it would be easy to route calls at > least through a load balancer (I am not at all familiar with e. g. JaxRS) > > I might start to consider again the whole idea of microservices and using > OSGi to modularize code inside them. > > > On Fri, May 10, 2019, 22:26 Jürgen Albert <j.alb...@data-in-motion.biz> > wrote: > >> Hi Andrej, >> >> I think you got us wrong. Nobody suggested to use OSGi or Http >> MIcroservices as you have called them. The Concepts behind both are >> modularity. The following Definition would fit both: >> >> The smallest unit is a module that defines Service APIs as Interaction >> points. >> >> Thus OSGi is the best tool to create Http Microservices. I would prefer >> Distributed Microservices because you don't necessarily need HTTP for the >> Communication between your containers/processes. You can split your Bundles >> over as many Containers as you like and I will guarantee that is it easier >> to achieve and maintain then with anything else. >> >> A short and every much simplyfied example to show what Todor was >> describing: >> >> We have a small application that provides a REST API for an shop order >> process. We have written the following bundles: >> >> rest.api -> contains the REST Resources; uses the order.api interfaces >> order.api -> contains the order service interfaces >> order.impl -> implementation of the order service, needs the billing.api >> interface >> billing.api -> contains the billing service interfaces >> billing.debit -> a billing implementation for debit card payment >> >> Scenario A - We want everything in one JVM: >> We throw this in one run configuration, let the resolver do its job, we >> would end up with one Framework, containing our bundles, the JaxRS >> Whiteboard, HttpWhiteboard some persistence stuff and e.g. some XML stuff >> for debit provider. Export a self executable jar and of you go. Because we >> can, we wrap it in a docker container to. >> >> Scenario B - We want the Billing stuff to run in its own process : >> >> We add the remote service properties to the billing service and create >> two run configurations. One names the rest.api and the order.impl, the >> other one contains only the billing.debit and a RSA (Remote Service Admin) >> Implementation for both. Resolve both, export both to their jars, wrap them >> in docker. The Service with the REST API now has the JaxRS Whiteboard, >> HttpWhiteboard some persistence, the RSA and the billing.api. The other one >> has only the billing.api, billing.impl, some XML Stuff and the RSA. >> Congratulations, we have our first containerized microservice environment >> ready. >> >> If you use OSGi everywhere, you will get containers that contain only >> what they need and nothing else. Ideally nobody needs to write any extra >> REST APIs for the internal communication. If you use OSGi Services as >> intended, you will already have the API bundles with the interfaces. As a >> developer, I don't necessarily need to give any thought If the service I >> use is a remote or a local service. The framework does it for me. If you >> want to use other languages for your containers you can even implement the >> RSA for them as well and communicate with the OSGi Containers. The RSA has >> no java specific part and you only need to get the serialisation >> compatible. >> >> The amount of flexibility OSGi gives you in such a scenario is priceless. >> If you have developers that think modular, you will get well structured >> bundles. So you can redraw the lines of you boundaries from logic to >> business and back with out much risk or effort. >> >> I haven't found a Framework that comes even close to what I can do with >> OSGi in half the time everybody else needs. >> >> Jürgen. >> >> Am 10/05/2019 um 15:50 schrieb Andrei Dulvac: >> >> >> >> On Thu, May 9, 2019 at 2:01 PM Boev, Todor <todor.b...@softwareag.com> >> 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). >> >> Right. What I meant is BOTH choices have an impact on the size of the >> microservice, and you can end up with a smaller service if you split by >> business domains than the boundaries of sharing code or the opposite. >> >> >>> 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. >>> >> Debatable. I personally think it's not better off as a library unless >> it's "complete" and I won't have to change it whenever I change my >> services. If I introduce new functionality and dimensions to my service and >> start differentiating offerings to my customers by e.g. age, i'd have to >> change the library and update it in all my services. >> If it's just applying a generic mathematical function (based on >> literature and with no ties to my business domain), of course it should be >> a library. Classic example is calendar or date libraries, where we should >> all use an open-source library, everywhere :) >> >> >>> >>> 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. >>> >> >> I fully accept your analysis of how OSGi gives you a lot of what http >> microservices designs give you. Like "each bundle is an independent unit >> with its own lifecycle". But it doesn't reach the same level of decoupling >> like doing them with separate processes. If you run microservices in >> separate processes, you can rewrite some of them in a different language, >> you can move one microservice in a different network, and, most >> importantly, you can scale them horizontally (maybe elastically) beyond >> what you could do in an OSGi instance >> >>> >>> 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. >>> >> >> I agree, but I still stand beside my statement that OSGi would be limited >> in terms of decoupling and scalability, compared to what you could do with >> separate process, if you get it right. And yes, huge footprint and overhead >> (and risk) of defining APIs differently (like "REST APIs"), code >> duplication. But in some situations (If you're Netflix or Uber), you might >> trade that off for the extra bit that you don't get with OSGi. >> >>> >>> 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 >>> >> >> -- >> 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 >> >> > -- > 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