Register Application Code to the backend, and receive an integer represents the application.
[gRPC service define](../..apm-protocol/apm-network/src/main/proto/ApplicationRegisterService.proto)
- applicationCode is the config in your `agent.config`.
- The return id is **ApplicationId** as the value in `KeyWithIntegerValue`, which will be used in further data uplink.
## Discovery Service
### Register Instance Service
[gRPC service define](../../apm-protocol/apm-network/src/main/proto/DiscoveryService.proto#L11-L12)
- agentUUID generated by agent, should be unique. Stay same before reboot, at least.
-**ApplicationInstanceId** will be used in further data uplink.
### Heart beat service
[gRPC service define](../../apm-protocol/apm-network/src/main/proto/DiscoveryService.proto#L14-L15)
- Recommend to report heart beat every 20-60 seconds.
- Java agent don't use this, because JVM metrics upstream replace the capabilities of this.
## Service Name Discovery Service
### Abstract
Replace the literal String service(operation) name by an id(integer)
[gRPC service define](../../apm-protocol/apm-network/src/main/proto/DiscoveryService.proto#L53-L74)
- Optional service, reduce the network cost but use more memory as a buffer mapping.
## Network Address Register Service
### Abstract
Network Address includes all remove service address, includes ip, port, hostname, etc., which used in RPC framework, MQ, DB, etc.
[gRPC service define](../../apm-protocol/apm-network/src/main/proto/NetworkAddressRegisterService.proto)
- Optional service, reduce the network cost but use more memory as a buffer mapping.
## JVM Metrics Service
### Abstract
Uplink the JVM metrics, including PermSize, HeapSize, CPU, Memory, etc., every second.
[gRPC service define](../../apm-protocol/apm-network/src/main/proto/JVMMetricsService.proto)
## Trace Segment Service
[gRPC service define](../../apm-protocol/apm-network/src/main/proto/TraceSegmentService.proto)
- UniqueId represents segmentId and globalTraceId. It have 3 parts(Longs), 1) applicationInstanceId, 2) ThreadId, 3) Timestamp + 10000 + seq(seq is in [0, 100000) )
- Span data please refs to [Plugin Development Guide](Plugin-Development-Guide.md)
- Id and name both exist, please use id if possible.
- operationNameId/operationName
- networkAddress/networkAddressId
- entryServiceName/entryServiceId
- parentServiceName/parentServiceId
- peerId/peer
- componentIds are defined in backend, [here](../../apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java)
# HTTP JSON Services
All HTTP Services match the gRPC services, just adjust use short keys.