-
Notifications
You must be signed in to change notification settings - Fork 888
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add service to glossary #2111
Add service to glossary #2111
Conversation
I think it would be more suitable to place the definition of concepts described by semantic conventions in the semantic convention document itself. |
I am OK with moving it there, I just picked the glossary because for me as someone who is not yet deeply into all the bits and pieces of the spec, this would be the place to look for definitions of commonly used terms (like in a math paper where you have a section "Definitions" first) |
@tigrannajaryan @svrnm was it decided where this should be added? Otherwise, LGTM for the actual content. |
I still think https://github.com/open-telemetry/opentelemetry-specification/blob/main/semantic_conventions/resource/service.yaml is a better place for Service definition. Not a strong opinion, would like other @open-telemetry/specs-approvers to chime in. |
We could link from semconv file into glossary |
@yurishkuro @tigrannajaryan any updates on this? Should I updated my PR to link from the semconv into the glossary then? |
Yes please |
done. |
I personally don't understand what this definition of service includes or doesn't include. We should make sure it does not include "client applications" like web pages or mobile apps, as developers of those programs do not think of them as "services" and will be confused if we refer to them that way. |
Why should we? A mobile app is not an "application" as defined here, because it typically does not function without a backend. I don't have any issues with considering a mobile app a "service". I think it's irrelevant what different people think what "service" means (e.g. in J2EE it was typical to refer to certain internal interfaces as services), what's relevant is how we define it here (which is pretty aligned with what people think a service is). |
It is definitely not aligned with what mobile developers think a service is, or what web developers think a service is. A service is a backend thing that the mobile app calls. If we define semantics that don't make sense to one more segments of our end users, we will end up building APIs that are confusing to those users. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree with @jkwatson but I'm not a native english speaker so please weight this accordingly:
Based on my experience, service usually means something that can serve its clients for many people (e.g.: a webservice that can serve client requests).
Based on this, the following applications usually are not considered as services:
- Desktop/Mobile/other Client apps (e.g.: browsers, games, IDEs)
- Batch data processors (e.g.: ETLs)
- Scheduled jobs
- Web crawlers, automated bots
As a former web developer I agree with @jkwatson and @jonatan-ivanov that However, as someone who is building a backend for observability, I prefer a common mandatory attribute that helps me to identify groups of telemetry sources which are doing the same thing (instances of backend services, end-user apps, scheduled jobs, bots, database), because I don't have to bother about the type of thing to identify it properly. To give two examples:
I raised the issue and created this PR to verify that "everything is a service" and with that I see three options:
|
@svrnm The reason why I believe we shouldn't use "service" to refer to client applications is because the shape of the data is very, very different from traditional services. It usually requires a completely different telemetry pipeline, as the volume of data is far, far larger than from traditional services. And, the analysis that you do on that data is significantly different than for traditional services. Hence, it very rarely makes sense to be building common dashboards for both RUM and service use-cases, and the queries that you would build should, inherently, be different for the different types. |
I think having a specific name for different kind of software (app.name, service.name, job.name, bot.name, etc.) is not a good idea it would make things hard and increase confusion by a lot. But calling them applications ( |
While I understand the different needs in the telemetry pipeline due to the volume and origin of data (thousands to millions of untrusted devices), I can not follow why the data is very, very different from traditional services and why it makes rarely sense to build common dashboards. I created a bunch of those dashboards in the past and my naive perspective always was that it is all just software. I am happy to get my view changed :-) Nevertheless, my goal is to have clarity on what a service is (and what it is not) and if it can be used for uniquely identifying a group of software thingies doing the same thing. I would prefer to have a unique name (service, application, telemetrySource, entity, ...) just for the sake of simplicity on the implementation side (see above) and specification side (e.g. if I look at #2115, I see a copy&paste defintion of .name, .version, .namespace, the introduction of a .short_name making me wonder if we need the same for service, ...) However, if the consensus is that "service" does not cover client applications, I can update my code and also add a definition for "app" as in #2115 |
I think "service" is a perfectly fine term to describe different kinds of workloads. I worked with developers generating telemetry from mobile apps who had no problem understanding that it is just a convention and putting the name of the app into service.name field, then using it in the UI to search for their telemetry. What matters is that we have a uniform way of referring to the name of the software component. I think "source" would be semantically much more confusing and imprecise. |
This PR was marked stale due to lack of activity. It will be closed in 7 days. |
@@ -153,6 +154,14 @@ This refers to the `name` and (optional) `version` arguments specified when | |||
creating a new `Tracer` or `Meter` (see [Obtaining a Tracer](trace/api.md#tracerprovider)/[Obtaining a Meter](metrics/api.md#meterprovider)). | |||
The name/version pair identifies the [Instrumentation Library](#instrumentation-library). | |||
|
|||
### Service | |||
|
|||
A `service` is a component of a larger distributed `application`. A service logically represents a repeatable business activity with a specified outcome. A service exchanges information with other services via some form of inter-process communication mechanism, such as network or shared storage. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we feel that service
is not self-explanatory, then we cannot define it via application
, which itself is not defined.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's a good point. A proposal how service defines the word application
:
AA service logically represents a repeatable business activity with a specified outcome. A service exchanges information with other services via some form of inter-process communication mechanism, such as network or shared storage. A group of services are forming anservice
is a component of a larger distributedapplication
.application
.
Note: we have to pay attention with the word "application" since it is heavily overloaded, see the conversation around service vs frontend app(lication). Distributed Application
would make this more clear, but as per your other comment, this would not make sense for an application only having a single service.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's not correlate at all with "application" to avoid confusion as you suggested:
A service logically represents a repeatable business activity with a specified outcome. A service exchanges information with other services via some form of inter-process communication mechanism, such as network or shared storage.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't understand what "logically represents a repeatable business activity with a specified outcome" means. That doesn't sound like a service to me. Also, why does a service need to exchange information with other services? That seems like something a service might do, but it's certainly not a requirement.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"logically represents a repeatable business activity with a specified outcome"
See #2111 (comment): this comes from the service definition of SOA. What alternative would you suggest?
Also, why does a service need to exchange information with other services? That seems like something a service might do, but it's certainly not a requirement.
Would adding a "may", i.e. "A service may exchange..." help?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Higher level answer provided as a comment on the PR itself, for broader visibility.
@@ -153,6 +154,14 @@ This refers to the `name` and (optional) `version` arguments specified when | |||
creating a new `Tracer` or `Meter` (see [Obtaining a Tracer](trace/api.md#tracerprovider)/[Obtaining a Meter](metrics/api.md#meterprovider)). | |||
The name/version pair identifies the [Instrumentation Library](#instrumentation-library). | |||
|
|||
### Service | |||
|
|||
A `service` is a component of a larger distributed `application`. A service logically represents a repeatable business activity with a specified outcome. A service exchanges information with other services via some form of inter-process communication mechanism, such as network or shared storage. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is distributed
important here? If my application is not distributed, then I don't have any services by this definition?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See my note above, if we remove distributed it can be confused much more easily with a frontend application. Maybe there is a better term.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See my note, let's remove any reference to "application" for the moment.
Co-authored-by: Nikita Salnikov-Tarnovski <gnikem@gmail.com>
Are you saying the decision to have one for both cases or keeping the name? |
If a decision was reached to define a |
Let me explain my over-arching problem with this PR (or any PR that attempted to do what this one is doing). First, this PR defines a "service" as "A service logically represents a repeatable business activity with a specified outcome.". This is trivially shown to be both too broad, and too narrow. For example: a) Clearly not a service: me walking to the corner store to buy a six-pack of beer. But, it falls under this definition. In the end, I firmly believe that what constitutes a "service" lies in the eye of the beholder. Whatever definition we come up with will end up either being too broad, or too narrow. We should not be trying to define this at all, in my opinion. We should leave this up to the author of the service to call their thing a service. Or NOT call it a service if they don't think of it as such. If the end-goal of this PR is to define a service as "anything that emits OpenTelemetry signals", then let's call a spade a spade and just write that. I think this is a near-useless definition, as I have stated, but it is one possible outcome from this discussion. The other option is to abandon "service" as the "one true namespace for things that emit telemetry" and create a new one, that is obviously inclusive (aka |
+1.
I would define it slightly differently though: "anything that uses OpenTelemetry SDK to emit telemetry". The distinction is important: there are other emitters of OpenTelemetry signals which have nothing to do with SDK (e.g. the Collector which can emit telemetry on behalf of variety of other entities, e.g. k8s pods or nodes, hosts, etc - which clearly are NOT Services themselves, but may or may not contain one or more Services). I share your doubts that this is a great approach though. It appears to be influenced by the fact that some existing backends make the Service a required concept on the wire (Zipkin?) and thus we also decided to make it a required concept for our SDK. I do not think the SDK should be designed around limitations of particular backends, instead those limitations must be a concern of a particular exporter that deals with that backend. In my opinion the Service should NOT be a required entity of recorded telemetry, at best it may be the default entity, but the user of the SDK should be able to specify a different entity. I do not know if the Service is the right term to use for client-side apps. May be it is. But it is clear that there are some other telemetry sources that no matter how much you try to shoehorn cannot be called services. If the goal is to call every telemetry source a Service then I disagree that it is a good idea. IMO the following is what we need to do:
|
@tigrannajaryan I like the summary and the steps overall. Let's discuss this next Tuesday in the Specs SIG, so we can get more feedback on this (and finally unblock the effort - one way or another). |
@jkwatson: the purpose of this PR and the related issue (#2050) is to create clarity if a service is that "thing that uses OpenTelemetry SDK to emit telemetry" or not. The discussions we have at multiple places, makes it obvious that this clarity is urgently needed. From those discussions I am with you that "service" should not be that magical thing.
I don't see a definition of the concept of a service in the semantic conventions. However, if the service is not going to be that important anymore, it's also not that relevant to have a clear definition of it. But, it would be good to have some hints or examples what a service could be, like the specs has them for other resources like "Compute Unit" or "Compute Instance"
+1 |
This PR was marked stale due to lack of activity. It will be closed in 7 days. |
@carlosalberto, @tigrannajaryan, @jkwatson, @tedsuo following up on this topic: is there any update from the discussions with the client side telemetry SIG? To be honest, I am not really sure if I fully understood the discussion around using schema_url to distinguish client/server-side telemetry. However, I was wondering if a change like the following was suggested before, that, I think, could fix the issue (changes are in bold):
This solution would have the following advantages:
|
This PR was marked stale due to lack of activity. It will be closed in 7 days. |
@svrnm I don't know if any additional discussions happened. So far I have not seen any new information since I posted my comment above, so my position remains unchanged. As for schema_url-based approach, it is a possibility that we can consider for the future, but I think it is non-trivial and will complicate even more. I would advise to set that aside for now. It will require some structural changes to how schemas work today which I can look into at, but it will take time to figure out and come to an agreement. I would not make that a prerequisite to resolving this issue. |
There have been some discussions on one of the last client telemetry SIG meeting, but there was also no final conclusion. We all agreed that there should be some place (probably not this ticket, or any of the other that has been opened on that), where all requirements are collected. I am not sure if that exists already. @tedsuo, @jkwatson can maybe add some more details to that.
I fully agree with that. As said I couldn't follow that discussion and from the pieces I understood I found it overly complicated. If it helps I am happy to close this PR and the related issue for now. |
This PR was marked stale due to lack of activity. It will be closed in 7 days. |
Closed as inactive. Feel free to reopen if this PR is still being worked on. |
Fixes #2050
Changes
Add a definition for service and service instance to the glossary.