cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From build...@apache.org
Subject svn commit: r965321 - in /websites/production/cxf/content: cache/ docs/ docs/using-apache-htrace.data/
Date Sun, 13 Sep 2015 20:47:15 GMT
Author: buildbot
Date: Sun Sep 13 20:47:12 2015
New Revision: 965321

Log:
Production update by buildbot for cxf

Added:
    websites/production/cxf/content/docs/using-apache-htrace.data/
    websites/production/cxf/content/docs/using-apache-htrace.data/image2015-9-13-15:46:11.png
  (with props)
    websites/production/cxf/content/docs/using-apache-htrace.data/image2015-9-13-15:53:59.png
  (with props)
    websites/production/cxf/content/docs/using-apache-htrace.data/image2015-9-13-16:17:53.png
  (with props)
Modified:
    websites/production/cxf/content/cache/docs.pageCache
    websites/production/cxf/content/docs/using-apache-htrace.html

Modified: websites/production/cxf/content/cache/docs.pageCache
==============================================================================
Binary files - no diff available.

Added: websites/production/cxf/content/docs/using-apache-htrace.data/image2015-9-13-15:46:11.png
==============================================================================
Binary file - no diff available.

Propchange: websites/production/cxf/content/docs/using-apache-htrace.data/image2015-9-13-15:46:11.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: websites/production/cxf/content/docs/using-apache-htrace.data/image2015-9-13-15:53:59.png
==============================================================================
Binary file - no diff available.

Propchange: websites/production/cxf/content/docs/using-apache-htrace.data/image2015-9-13-15:53:59.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: websites/production/cxf/content/docs/using-apache-htrace.data/image2015-9-13-16:17:53.png
==============================================================================
Binary file - no diff available.

Propchange: websites/production/cxf/content/docs/using-apache-htrace.data/image2015-9-13-16:17:53.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Modified: websites/production/cxf/content/docs/using-apache-htrace.html
==============================================================================
--- websites/production/cxf/content/docs/using-apache-htrace.html (original)
+++ websites/production/cxf/content/docs/using-apache-htrace.html Sun Sep 13 20:47:12 2015
@@ -117,13 +117,15 @@ Apache CXF -- Using Apache HTrace
            <!-- Content -->
            <div class="wiki-content">
 <div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1442162807490 {padding: 0px;}
-div.rbtoc1442162807490 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1442162807490 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1442177193000 {padding: 0px;}
+div.rbtoc1442177193000 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1442177193000 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1442162807490">
-<ul class="toc-indentation"><li><a shape="rect" href="#UsingApacheHTrace-Overview">Overview</a></li><li><a
shape="rect" href="#UsingApacheHTrace-DistributedTracinginNutshell">Distributed Tracing
in Nutshell</a></li><li><a shape="rect" href="#UsingApacheHTrace-DistributedTracinginApacheCXF">Distributed
Tracing in Apache CXF</a></li><li><a shape="rect" href="#UsingApacheHTrace-ConfiguringClientconfigure.client">Configuring
Client</a></li><li><a shape="rect" href="#UsingApacheHTrace-ConfiguringServerconfigure.server">Configuring
Server</a></li><li><a shape="rect" href="#UsingApacheHTrace-DistributedTracingInAction:UsageScenarios">Distributed
Tracing In Action: Usage Scenarios</a></li></ul>
-</div><h1 id="UsingApacheHTrace-Overview">Overview</h1><p><a shape="rect"
class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache HTrace</a>
is a tracing framework intended for use with distributed systems written in java. Since version
<strong>3.1.3</strong>, Apache CXF fully supports integration with <a shape="rect"
class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache HTrace</a>,
both on client side and server side. This section gives a complete overview on how distributed
tracing support is supported in JAX-RS applications built on top of Apache CXF.</p><h1
id="UsingApacheHTrace-DistributedTracinginNutshell">Distributed Tracing in Nutshell</h1><p>Distributed
tracing, first described by Google in <a shape="rect" class="external-link" href="http://research.google.com/pubs/pub36356.html"
rel="nofollow">Dapper, a Large-Scale Distributed Systems Tracing Infrastructure</a>
paper became increasingly important topic these days. With 
 microservices (aka SOA) gaining more and more adoption, the typical applications are built
using dozens or even hundreds of small, distributed pieces. The end-to-end traceability of
the requests (or any kind of work performed on user's behalf) is hard task to accomplish,
particularly taking into account asyncronous or/and concurrent invocations. <a shape="rect"
class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache HTrace</a>
is inspired by <a shape="rect" class="external-link" href="http://research.google.com/pubs/pub36356.html"
rel="nofollow">Dapper, a Large-Scale Distributed Systems Tracing Infrastructure</a>
paper and essentially is a full-fledged distributed tracing framework.</p><p>Distributed
tracing is additional instrumentation layer on top of new or existing applications. In terms
of distributed tracing, <strong>span</strong> represents a basic unit of work.
For example, executing database query is a <strong>span</strong>. <strong>Spans</strong>

 are identified by a unique 64-bit ID for the <strong>span</strong> and another
64-bit ID for the <strong>trace</strong> the span is a <strong>part</strong>
of. <strong>Spans</strong> also have other data, such as <strong>descriptions</strong>,
<strong>timelines</strong>,<strong> key-value annotations</strong>,
the <strong>ID</strong> of the <strong>span</strong> that caused them
(parent), and <strong>process</strong> ID&#8217;s (normally IP address and
process name). Spans are started and stopped, and they keep track of their timing information.
Once <strong>span</strong> is created, it should be stopped at some point in the
future. In turn, <strong>trace</strong> is a set of spans forming a tree-like
structure. For example, if you are running a JAX-RS service, a trace might be formed by a
<strong>PUT</strong> request.</p><p>From implementation prospective,
and in context of Java applications, <strong>spans</strong> are attached to their
threads (in general, thread which created the
  <strong>span</strong> should close it). However it is possible to transfer <strong>spans</strong>
from thread to thread in order to model a complex execution flows. It is also possible to
have many <strong>spans</strong> in the same thread, as long as they are properly
created and closed. In the next sections we are going to see the examples of that.</p><p>Another
two important concepts of in context of distributed tracing are <strong>span receivers</strong>
and <strong>samplers</strong>. Essentially, all spans (including start/stop time,
key/value annotations, timelines, ..) should be persisted (or collected) somewhere. <strong>Span
receiver</strong> is a collector within a process that is the destination of <strong>spans</strong>
when a trace is running (it could be a console, local file, data store, ...). <a shape="rect"
class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache HTrace</a>
provides span receivers for <a shape="rect" class="external-link" h
 ref="http://hbase.apache.org">Apache HBase</a>, <a shape="rect" class="external-link"
href="https://flume.apache.org/">Apache Flume</a> and <a shape="rect" class="external-link"
href="http://zipkin.io/" rel="nofollow">Twitter Zipkin</a>. From other side, <strong>samplers</strong>
allow to control the frequency of the tracing (all the time, never, probability driven, ...).
Using the <strong>sampler</strong> is the way to minimize tracing overhead (or
just amount of traces) by limiting them to particular conditions.</p><h1 id="UsingApacheHTrace-DistributedTracinginApacheCXF">Distributed
Tracing in Apache CXF</h1><p><a shape="rect" href="http://cxf.apache.org/">Apache
CXF</a> is a very popular framework for building services and web APIs. No doubts, it
is going to play even more important role in context of microservices architecture letting
developers to quickly build and deploy individual JAX-RS/JAX-WS services. As it was just mentioned
before, distributed tracing is an essential tec
 hnique to monitor the application as whole, breaking the request to individual service traces
as it goes through and crosses the boundaries of threads, processes and machines.</p><p>The
current integration of distributed tracing in <a shape="rect" href="http://cxf.apache.org/">Apache
CXF</a> supports <a shape="rect" class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache
HTrace</a> only in JAX-RS 2.x applications. From high-level prospective, it consists
of three main parts:</p><ul style="list-style-type: square;"><li><strong>TracerContext</strong>
(injectable through <strong>@Context</strong> annotation)</li><li><strong>HTraceProvider</strong>
(server-side JAX-RS provider) and <strong>HTraceClientProvider</strong> (client-side
JAX-RS provider)</li><li><strong>HTraceFeature</strong> (server-side
<a shape="rect" href="http://cxf.apache.org/">Apache CXF</a> feature to simplify
<a shape="rect" class="external-link" href="http://htrace.incubator.apache.org/inde
 x.html">Apache HTrace</a> configuration and integration)</li></ul><p><a
shape="rect" href="http://cxf.apache.org/">Apache CXF</a> uses HTTP headers to hand
off tracing context from the client to the service and from the service to service. Those
headers are used internally by <strong>HTraceProvider</strong> and <strong>HTraceClientProvider</strong>,
but are configurable. The default header names are declared in the TracerHeaders class:</p><ul
style="list-style-type: square;"><li><strong>X-Trace-Id</strong>: contains
a current trace ID</li><li><strong>X-Span-Id</strong>: contains a
current span ID</li></ul><p>By default, <strong>HTraceProvider</strong>
will try pass the currently active <strong>span</strong> through HTTP headers
on each service invocation. If there is no active span, the new span will be created and passed
through HTTP headers on per-invocation basis. Essentially, just registering the <strong>HTraceProvider</strong>
on the client and <strong>HTraceClientProvider</str
 ong> on the server is enough to have tracing context to be properly passed everywhere.
The only configuration part which is necessary are <strong>span receiver(s)</strong>
and <strong>sampler</strong>.</p><h1 id="UsingApacheHTrace-ConfiguringClientconfigure.client">Configuring
Client <span class="confluence-anchor-link" id="UsingApacheHTrace-configure.client"></span></h1><p>There
are a couple of way the JAX-RS client could be configured, depending on the client implementation.
<a shape="rect" href="http://cxf.apache.org/">Apache CXF</a> provides its own
<strong>WebClient</strong> which could be configured just like that (in future
versions, there would be a simpler ways to do that using client specific features):</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent
pdl">
+/*]]>*/</style></p><div class="toc-macro rbtoc1442177193000">
+<ul class="toc-indentation"><li><a shape="rect" href="#UsingApacheHTrace-Overview">Overview</a></li><li><a
shape="rect" href="#UsingApacheHTrace-DistributedTracinginNutshell">Distributed Tracing
in Nutshell</a></li><li><a shape="rect" href="#UsingApacheHTrace-DistributedTracinginApacheCXF">Distributed
Tracing in Apache CXF</a></li><li><a shape="rect" href="#UsingApacheHTrace-ConfiguringClientconfigure.client">Configuring
Client</a></li><li><a shape="rect" href="#UsingApacheHTrace-ConfiguringServerconfigure.server">Configuring
Server</a></li><li><a shape="rect" href="#UsingApacheHTrace-DistributedTracingInAction:UsageScenarios">Distributed
Tracing In Action: Usage Scenarios</a>
+<ul class="toc-indentation"><li><a shape="rect" href="#UsingApacheHTrace-Example#1:ClientandServerwithdefaultdistributedtracingconfigured">Example
#1: Client and Server with default distributed tracing configured</a></li></ul>
+</li></ul>
+</div><h1 id="UsingApacheHTrace-Overview">Overview</h1><p><a shape="rect"
class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache HTrace</a>
is a tracing framework intended for use with distributed systems written in java. Since version
<strong>3.1.3</strong>, Apache CXF fully supports integration with <a shape="rect"
class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache HTrace</a>,
both on client side and server side. This section gives a complete overview on how distributed
tracing support is supported in JAX-RS applications built on top of Apache CXF.</p><h1
id="UsingApacheHTrace-DistributedTracinginNutshell">Distributed Tracing in Nutshell</h1><p>Distributed
tracing, first described by Google in <a shape="rect" class="external-link" href="http://research.google.com/pubs/pub36356.html"
rel="nofollow">Dapper, a Large-Scale Distributed Systems Tracing Infrastructure</a>
paper became increasingly important topic these days. With 
 microservices (aka SOA) gaining more and more adoption, the typical applications are built
using dozens or even hundreds of small, distributed pieces. The end-to-end traceability of
the requests (or any kind of work performed on user's behalf) is hard task to accomplish,
particularly taking into account asyncronous or/and concurrent invocations. <a shape="rect"
class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache HTrace</a>
is inspired by <a shape="rect" class="external-link" href="http://research.google.com/pubs/pub36356.html"
rel="nofollow">Dapper, a Large-Scale Distributed Systems Tracing Infrastructure</a>
paper and essentially is a full-fledged distributed tracing framework.</p><p>Distributed
tracing is additional instrumentation layer on top of new or existing applications. In terms
of distributed tracing, <strong>span</strong> represents a basic unit of work.
For example, executing database query is a <strong>span</strong>. <strong>Spans</strong>

 are identified by a unique 64-bit ID for the <strong>span</strong> and another
64-bit ID for the <strong>trace</strong> the span is a <strong>part</strong>
of. <strong>Spans</strong> also have other data, such as <strong>descriptions</strong>,
<strong>timelines</strong>,<strong> key-value annotations</strong>,
the <strong>ID</strong> of the <strong>span</strong> that caused them
(parent), and <strong>process</strong> ID&#8217;s (normally IP address and
process name). Spans are started and stopped, and they keep track of their timing information.
Once <strong>span</strong> is created, it should be stopped at some point in the
future. In turn, <strong>trace</strong> is a set of spans forming a tree-like
structure. For example, if you are running a JAX-RS service, a trace might be formed by a
<strong>PUT</strong> request.</p><p>From implementation prospective,
and in context of Java applications, <strong>spans</strong> are attached to their
threads (in general, thread which created the
  <strong>span</strong> should close it). However it is possible to transfer <strong>spans</strong>
from thread to thread in order to model a complex execution flows. It is also possible to
have many <strong>spans</strong> in the same thread, as long as they are properly
created and closed. In the next sections we are going to see the examples of that.</p><p>Another
two important concepts of in context of distributed tracing are <strong>span receivers</strong>
and <strong>samplers</strong>. Essentially, all spans (including start/stop time,
key/value annotations, timelines, ..) should be persisted (or collected) somewhere. <strong>Span
receiver</strong> is a collector within a process that is the destination of <strong>spans</strong>
when a trace is running (it could be a console, local file, data store, ...). <a shape="rect"
class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache HTrace</a>
provides span receivers for <a shape="rect" class="external-link" h
 ref="http://hbase.apache.org">Apache HBase</a>, <a shape="rect" class="external-link"
href="https://flume.apache.org/">Apache Flume</a> and <a shape="rect" class="external-link"
href="http://zipkin.io/" rel="nofollow">Twitter Zipkin</a>. From other side, <strong>samplers</strong>
allow to control the frequency of the tracing (all the time, never, probability driven, ...).
Using the <strong>sampler</strong> is the way to minimize tracing overhead (or
just amount of traces) by limiting them to particular conditions.</p><h1 id="UsingApacheHTrace-DistributedTracinginApacheCXF">Distributed
Tracing in Apache CXF</h1><p><a shape="rect" href="http://cxf.apache.org/">Apache
CXF</a> is a very popular framework for building services and web APIs. No doubts, it
is going to play even more important role in context of microservices architecture letting
developers to quickly build and deploy individual JAX-RS/JAX-WS services. As it was just mentioned
before, distributed tracing is an essential tec
 hnique to monitor the application as whole, breaking the request to individual service traces
as it goes through and crosses the boundaries of threads, processes and machines.</p><p>The
current integration of distributed tracing in <a shape="rect" href="http://cxf.apache.org/">Apache
CXF</a> supports <a shape="rect" class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache
HTrace</a> only in JAX-RS 2.x applications. From high-level prospective, it consists
of three main parts:</p><ul style="list-style-type: square;"><li><strong>TracerContext</strong>
(injectable through <strong>@Context</strong> annotation)</li><li><strong>HTraceProvider</strong>
(server-side JAX-RS provider) and <strong>HTraceClientProvider</strong> (client-side
JAX-RS provider)</li><li><strong>HTraceFeature</strong> (server-side
<a shape="rect" href="http://cxf.apache.org/">Apache CXF</a> feature to simplify
<a shape="rect" class="external-link" href="http://htrace.incubator.apache.org/inde
 x.html">Apache HTrace</a> configuration and integration)</li></ul><p><a
shape="rect" href="http://cxf.apache.org/">Apache CXF</a> uses HTTP headers to hand
off tracing context from the client to the service and from the service to service. Those
headers are used internally by <strong>HTraceProvider</strong> and <strong>HTraceClientProvider</strong>,
but are configurable. The default header names are declared in the TracerHeaders class:</p><ul
style="list-style-type: square;"><li><strong>X-Trace-Id</strong>: contains
a current trace ID</li><li><strong>X-Span-Id</strong>: contains a
current span ID</li></ul><p>By default, <strong>HTraceProvider</strong>
will try pass the currently active <strong>span</strong> through HTTP headers
on each service invocation. If there is no active span, the new span will be created and passed
through HTTP headers on per-invocation basis. Essentially, just registering the <strong>HTraceProvider</strong>
on the client and <strong>HTraceClientProvider</str
 ong> on the server is enough to have tracing context to be properly passed everywhere.
The only configuration part which is necessary are <strong>span receiver(s)</strong>
and <strong>sampler</strong>.</p><p>It is also worth to mention the
way <a shape="rect" href="http://cxf.apache.org/">Apache CXF</a> attaches the
description to <strong>spans</strong>. With regards to the client integration,
the description becomes a full URL being invoked prefixed by HTTP method, for example: <strong>GET
</strong><a shape="rect" class="external-link" href="http://localhost:8282/books"
rel="nofollow"><strong>http://localhost:8282</strong>/books</a>. On the
server side integration, the description becomes a relation JAX-RS resource path prefixed
by HTTP method, f.e.: <strong>GET books, POST book/123</strong></p><h1
id="UsingApacheHTrace-ConfiguringClientconfigure.client">Configuring Client <span class="confluence-anchor-link"
id="UsingApacheHTrace-configure.client"></span></h1><p>There are a couple
  of way the JAX-RS client could be configured, depending on the client implementation. <a
shape="rect" href="http://cxf.apache.org/">Apache CXF</a> provides its own <strong>WebClient</strong>
which could be configured just like that (in future versions, there would be a simpler ways
to do that using client specific features):</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">final
Map&lt;String, String&gt; properties = new HashMap&lt;String, String&gt;();
 final HTraceConfiguration conf = HTraceConfiguration.fromMap(properties);
 Trace.addReceiver(new StandardOutSpanReceiver(conf));
@@ -171,7 +173,21 @@ final JAXRSServerFactoryBean factory = R
 factory.setFeatures(Arrays.&lt; Feature &gt;asList(new HTraceFeature(HTraceConfiguration.fromMap(properties))));
 ...
 return factory.create();</pre>
-</div></div><p>Once the <strong>span receiver(s)</strong> and
<strong>sampler</strong> are properly configured, all generated <strong>spans</strong>
are going to be collected and available for analysis and/or visualization.</p><h1
id="UsingApacheHTrace-DistributedTracingInAction:UsageScenarios">Distributed Tracing In
Action: Usage Scenarios</h1><p>In the following subsections we are going to walk
through many different scenarios to illustrate the distributed tracing in action, starting
from the simplest ones and finishing with asynchronous JAX-RS services. All examples assume
that configuration&#160; has been done (see please&#160;<a shape="rect" href="using-apache-htrace.html">Configuring
Client</a> and <a shape="rect" href="using-apache-htrace.html">Configuring Server</a>
sections above).</p><p>&#160;</p></div>
+</div></div><p>Once the <strong>span receiver(s)</strong> and
<strong>sampler</strong> are properly configured, all generated <strong>spans</strong>
are going to be collected and available for analysis and/or visualization.</p><h1
id="UsingApacheHTrace-DistributedTracingInAction:UsageScenarios">Distributed Tracing In
Action: Usage Scenarios</h1><p>In the following subsections we are going to walk
through many different scenarios to illustrate the distributed tracing in action, starting
from the simplest ones and finishing with asynchronous JAX-RS services. All examples assume
that configuration <strong>has been done</strong> (see please&#160;<a shape="rect"
href="using-apache-htrace.html">Configuring Client</a> and <a shape="rect" href="using-apache-htrace.html">Configuring
Server</a> sections above).</p><h2 id="UsingApacheHTrace-Example#1:ClientandServerwithdefaultdistributedtracingconfigured">Example
#1: Client and Server with default distributed tracing configured</h2><p>In the
f
 irst example we are going to see the effect of using default configuration on the client
and on the server, with only&#160;<strong>HTraceClientProvider</strong>&#160;
and <strong>HTraceProvider</strong> registered. The JAX-RS resource endpoint is
pretty basic stubbed method:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">@Produces(
{ MediaType.APPLICATION_JSON } )
+@GET
+public Collection&lt;Book&gt; getBooks() {
+    return Arrays.asList(
+        new Book("Apache CXF Web Service Development", "Naveen Balani, Rajeev Hathi")
+    );
+}</pre>
+</div></div><p>The client is as simple as that:</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">final
Response response = client
+    .target("http://localhost:8282/books")
+    .request()
+    .accept(MediaType.APPLICATION_JSON)
+    .get();</pre>
+</div></div><p>The actual invocation of the request by the client (with
process name <strong><span class="label label-default service-filter-label service-tag-filtered">jaxrsclient/192.168.0.100</span></strong>)
and consequent invocation of the service on the server side (process name<strong> <span
class="label label-default service-filter-label">jaxrsserver/192.168.0.100</span></strong>)
is going to generate the following sample traces:</p><p><span class="confluence-embedded-file-wrapper
confluence-embedded-manual-size"><img class="confluence-embedded-image" height="250"
src="using-apache-htrace.data/image2015-9-13%2016:17:53.png"></span></p><p>&#160;</p></div>
            </div>
            <!-- Content -->
          </td>



Mime
View raw message