<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Blogs from RTI &#187; Best practices</title>
	<atom:link href="http://blogs.rti.com/category/best-practices/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.rti.com</link>
	<description>The Real-Time Middleware Experts</description>
	<lastBuildDate>Thu, 05 Jan 2012 07:49:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blogs.rti.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Blogs from RTI &#187; Best practices</title>
		<link>http://blogs.rti.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blogs.rti.com/osd.xml" title="Blogs from RTI" />
	<atom:link rel='hub' href='http://blogs.rti.com/?pushpress=hub'/>
		<item>
		<title>New Video: DDS in a Nutshell</title>
		<link>http://blogs.rti.com/2011/02/23/new-video-dds-in-a-nutshell/</link>
		<comments>http://blogs.rti.com/2011/02/23/new-video-dds-in-a-nutshell/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 03:28:35 +0000</pubDate>
		<dc:creator>Rick Warren</dc:creator>
				<category><![CDATA[Best practices]]></category>
		<category><![CDATA[Standards]]></category>

		<guid isPermaLink="false">http://blogs.rti.com/?p=328</guid>
		<description><![CDATA[A data-centric architecture helps you build and integrate systems efficiently and effectively &#8212; I&#8217;ve written about that before. And it&#8217;s all around you &#8212; even microblogging services like Facebook and Twitter depend upon it. Standards-based DDS technology is a great way to implement this approach: it&#8217;s fast, dynamic, and fault-tolerant. The cost savings can be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=328&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A data-centric architecture helps you <a href="http://blogs.rti.com/2010/12/17/the-data-centric-modus-operandi-part-2/">build and integrate systems efficiently and effectively</a> &#8212; I&#8217;ve written about that before. And it&#8217;s all around you &#8212; even microblogging services like Facebook and Twitter depend upon it.</p>
<p><a href="http://www.rti.com/products/dds/index.html">Standards-based DDS technology</a> is a great way to implement this approach: it&#8217;s fast, dynamic, and fault-tolerant. The cost savings can be dramatic: one large distributed asset-tracking program replaced their proprietary middleware with DDS and realized a 90%+ savings while increasing capacity, performance, and robustness.</p>
<p>Check out the video.</p>
<p><span style="text-align:center; display: block;"><a href="http://blogs.rti.com/2011/02/23/new-video-dds-in-a-nutshell/"><img src="http://img.youtube.com/vi/u-saogMmKOo/2.jpg" alt="" /></a></span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rtidds.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rtidds.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rtidds.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rtidds.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rtidds.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rtidds.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rtidds.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rtidds.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rtidds.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rtidds.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rtidds.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rtidds.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rtidds.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rtidds.wordpress.com/328/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=328&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.rti.com/2011/02/23/new-video-dds-in-a-nutshell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/90e74a4e6594c1b054e07d7a6c6193c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Rick</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/u-saogMmKOo/2.jpg" medium="image" />
	</item>
		<item>
		<title>The Data-Centric Modus Operandi: Part 2</title>
		<link>http://blogs.rti.com/2010/12/17/the-data-centric-modus-operandi-part-2/</link>
		<comments>http://blogs.rti.com/2010/12/17/the-data-centric-modus-operandi-part-2/#comments</comments>
		<pubDate>Fri, 17 Dec 2010 22:06:04 +0000</pubDate>
		<dc:creator>Rick Warren</dc:creator>
				<category><![CDATA[Best practices]]></category>

		<guid isPermaLink="false">http://blogs.rti.com/?p=324</guid>
		<description><![CDATA[An earlier post of mine, The Data-Centric Modus Operandi, has garnered a couple of good comments recently. I was in the process of responding to one of them when it occurred to me that (1) a response longer than the WordPress comment field probably didn&#8217;t belong there and that (2) more readers might have the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=324&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>An earlier post of mine, <em><a href="http://blogs.rti.com/2010/08/16/the-data-centric-modus-operandi/">The Data-Centric Modus Operandi</a></em>, has garnered a couple of good comments recently. I was in the process of responding to one of them when it occurred to me that (1) a response longer than the WordPress comment field probably didn&#8217;t belong there and that (2) more readers might have the same question, and an answer in the comments wouldn&#8217;t be very visible. So here it is, my feature-length response:</p>
<p><a href="http://www.cyclops-software.nl/">Frans Ott</a> says:</p>
<blockquote><p>Good piece of work Rick! Does this mean that practising the DDS-perspective, I will respect the business domain model more as it is? And that, as a consequence, less domain-burden will be drawn into the middleware?</p></blockquote>
<p>This question is an important and perceptive one. My answer has a couple of parts.</p>
<p>First, DDS is not a panacea. Adopting DDS but using it in the same way you used your old messaging middleware can bring you incremental benefits in terms of <a href="http://www.rti.com/resources/product-tour/performance-scalability.html">performance, scalability</a>, and <a href="http://www.rti.com/resources/product-tour/system-architecture.html">flexibility</a>. But it cannot by itself provide you transformative benefits in terms of time-to-market and long-term maintainability.</p>
<p>Those larger benefits accrue as you adopt data-centric <em>architecture</em> &#8212; that is, as you begin to model your business domain and tie your distributed applications to that model instead of to each other. You can start to do this with any middleware, not just with DDS, and doing so will allow you to more smoothly integrate capabilities over time without perturbing existing behavior. But when you use a technology like DDS, which unlike other middlewares provides functionality to directly support this type of architecture, you get an additional benefit: the middleware can start to automate things that you used to have to do yourself.</p>
<p>There&#8217;s my second point: when you tell your infrastructure what you&#8217;re trying to do, it can help you do it better. I used the word &#8220;model,&#8221; which might sound frightening and esoteric. But everyone does this anyway! They just don&#8217;t call it that. When people design a system in a message-centric way, they write long documents (<em>aka</em> &#8220;models&#8221;) describing who has to send messages to whom, in what format, at what times. Then they email these documents to each other and implement the various components based on what the documents say. In the process, they write a lot of code to encode and decode data, validate it, monitor and respond to the system&#8217;s status, manage application state, and so on. And once they&#8217;ve done all of this work, they plug their components in and find out whether the documents had any ambiguities in them and whether everyone has correctly implemented all of those infrastructure pieces I enumerated.</p>
<p>The truth is, from the point of view of the real business logic, &#8220;the middleware&#8221; isn&#8217;t just a messaging or data-distribution component purchased off the shelf. It also includes all of the stuff your in-house infrastructure developers had to build on top of that to make the applications work right. A key innovation in DDS is the answer to this question: what if we took a lot of the <em>ad hoc</em> content out of all of those word-processing design documents and replaced it with a formal structure that the off-the-shelf middleware could understand? The answer is that the <a href="http://www.rti.com/resources/product-tour/recording-analysis.html">off-the-shelf component can start to do a lot</a> of what the in-house &#8220;middleware-above-the-middleware&#8221; used to have to do &#8212; based on configuration rather than on custom code. The result is a more portable, interoperable system of higher quality and performance that was developed and integrated in less time. In other words: faster, cheaper, better.</p>
<p>You can use DDS as just a fast, interoperable way to send messages from here to there. Lots of people do. But DDS can do more than that if you&#8217;re willing to design differently. DDS does for data in motion something like what an RDBMS does for data at rest. It can&#8217;t <em>make</em> you create a good data design. But if you teach it what your design is, it can help you enforce that design, and it can reduce the amount of code you have to write in between your &#8220;middle&#8221;ware and your business logic.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rtidds.wordpress.com/324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rtidds.wordpress.com/324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rtidds.wordpress.com/324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rtidds.wordpress.com/324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rtidds.wordpress.com/324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rtidds.wordpress.com/324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rtidds.wordpress.com/324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rtidds.wordpress.com/324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rtidds.wordpress.com/324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rtidds.wordpress.com/324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rtidds.wordpress.com/324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rtidds.wordpress.com/324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rtidds.wordpress.com/324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rtidds.wordpress.com/324/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=324&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.rti.com/2010/12/17/the-data-centric-modus-operandi-part-2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/90e74a4e6594c1b054e07d7a6c6193c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Rick</media:title>
		</media:content>
	</item>
		<item>
		<title>The Data-Centric Modus Operandi</title>
		<link>http://blogs.rti.com/2010/08/16/the-data-centric-modus-operandi/</link>
		<comments>http://blogs.rti.com/2010/08/16/the-data-centric-modus-operandi/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 22:32:22 +0000</pubDate>
		<dc:creator>Rick Warren</dc:creator>
				<category><![CDATA[Best practices]]></category>
		<category><![CDATA[Standards]]></category>

		<guid isPermaLink="false">http://blogs.rti.com/?p=255</guid>
		<description><![CDATA[Data distribution is about observing a changing world. A system whose communication is based on this paradigm tends to become data-centric: it becomes more concerned with modeling the first-class concepts of its business domain and less concerned with managing second-class "who-told-whom-to-do-what" middleware concepts like queues and messages. Along the way, it enjoys the benefits of decreased coupling and improved reliability, scalability, and performance.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=255&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.omgwiki.org/dds/">DDS stands for &#8220;Data Distribution Service.&#8221;</a> <em>Data distribution</em> is not messaging, and it is not eventing. However, <a href="http://blogs.rti.com/2009/06/03/thinking-differently-about-messaging/">data distribution subsumes messaging</a> and eventing as use cases to a large extent, and as a result it often gets lumped into those categories.</p>
<p><em>Data distribution is about observing a changing world.</em> A system whose communication is based on this paradigm tends to become <em>data-centric</em>: it becomes more concerned with modeling the first-class concepts of its business domain and less concerned with managing second-class &#8220;who-told-whom-to-do-what&#8221; middleware concepts like queues and messages. Along the way, it enjoys the benefits of decreased coupling and improved reliability, scalability, and performance.</p>
<p><strong>Data Distribution and Its Kin</strong></p>
<p>Classically, <em>messaging</em> is an evolution of the remote method invocation (RMI) paradigm &#8212; an attempt to make that paradigm less coupled and more scalable by making it asynchronous. A message says &#8220;I tell you to do this.&#8221; When compared with RMI, &#8220;I&#8221; and &#8220;you&#8221; are more abstract, both in identity and multiplicity, and the request can be queued for processing at a later time or by another party without making the sender wait. These are improvements, but the interaction remains coupled, because the roles of &#8220;I&#8221; and &#8220;you&#8221; (often in the guises of &#8220;client&#8221; and &#8220;server&#8221; or the trendier &#8220;service consumer&#8221; and &#8220;service provider&#8221;), as well as the intention of what action should be performed, are still very much in play.</p>
<p><em>Eventing</em>, like data distribution, is preoccupied with changes to the world. An event says &#8220;I changed in this way.&#8221; It reduces coupling by entirely removing both the recipient of that information and  any notion of intention from you business logic and your mental model; who might receive an event, and what they might choose to do as a result, are not the business of the event source. But state management remains a problem, because in order to understand the change that occurred, all recipients must have an up-to-date understanding of the state of the world prior to the latest event &#8212; &#8220;the price went up by a dollar&#8221; doesn&#8217;t do me any good if I don&#8217;t know what the price was before. This temporal coupling means that every recipient must process every event in order, whether those events are interesting or not, just in case the interpretation of a subsequent interesting event should happen to require the state established by a previous otherwise-uninteresting one.</p>
<p>The resulting processing and state management are complex and expensive. As a mitigation, they are frequently factored out of the applications that need the data and into state-management &#8220;servers&#8221; that &#8220;clients&#8221; must query using a message-centric or even RMI-based approach &#8212; a huge regression in engineering practice! The system becomes complicated by the presence of multiple interacting communication paradigms, and the servers (which serve no business role) introduce performance and fault-tolerance choke points.</p>
<p>A data-centric architecture eliminate these problems by simplifying the interactions. A data sample says simply &#8220;the world is like this.&#8221; It thereby eliminates coupling not only in terms of source, recipients, and their intentions, but also in terms of time. There&#8217;s no longer any need for recipients to process or store information they don&#8217;t care about, because samples don&#8217;t implicitly encompass previous samples. Therefore it becomes perfectly reasonable for one observer to examine the state of the world every second, or every minute, or every hour &#8212; and for another to observe every single intermediate state, even if those states change from one to the other many times a second.</p>
<p><strong>Modeling the World with DDS</strong></p>
<p>A set of DDS entities, and the data they distribute and manage, define a view into this changing &#8220;world.&#8221;</p>
<ul>
<li>A &#8220;domain&#8221; defines the boundaries of the world, the set of information that a collaborating group of applications might find interesting. A &#8220;domain participant&#8221; defines the presence of some application in that world; it is the data-centric analogue to what is frequently known as a &#8220;connection&#8221; in the messaging middleware.</li>
<li><a href="http://blogs.rti.com/2009/04/30/data-transparency-why-you-should-care/">A &#8220;type&#8221; is a structural description of some part of the world</a> &#8212; for example, an Antelope is brown in color and has four legs and two horns; a Ferrari is red in color and has four wheels and two seats. A type has a formal definition, usually (though not always) in a  declarative language like XSD or OMG IDL, and it implies a corresponding definition in the target programming language.</li>
<li>A &#8220;quality-of-service&#8221; (QoS) definition defines the fidelity with which some party/parties is/are able to describe the world. For example, will the description contain every state the world passes through or only a subset? Will observers have access to new states of the world only, or will they be able to see previous states as well? If the latter, how far back will those previous states go?</li>
<li>A &#8220;topic&#8221; defines some aspect or subset of the world consisting of similar objects. As such, it combines a type, which defines the structure of those objects, with a QoS definition, which defines how they can be observed to change.</li>
<li>An &#8220;instance&#8221; defines a single object in the group defined by a topic. For example, a topic may be used to distribute the positions of airplanes as detected by a radar. Each plane would be an instance. All radar tracks have the same structure (type) and are updated in the same way (QoS). But they are also distinct from one another: it matters whether the plane at a given location happens to be American Airlines flight 123 or Delta flight 456.</li>
<li>A &#8220;data writer&#8221; defines a source of information about a particular subset of the world (topic). As such, it may override the QoS of its topic &#8212; multiple parties may provide information about the same part of the world but with different degrees of fidelity.</li>
<li>A &#8220;data reader&#8221; defines an observer of a particular subset of the world (topic). As such, it may also override the QoS of its topic. Furthermore, it may only be able and/or interested to observe certain states of the world. For example, it may only be interested in airplanes flying over a particular geographic area or in stocks trading at over $20/share.</li>
</ul>
<p>By creating a data reader with a certain QoS definition, an application makes an affirmative statement that it wishes to observe a certain portion of the world under a certain set of circumstances. For example, it may state that it is interested in observing the most recent five states (samples) to the objects (instances) in its part of the world (topic), but it doesn&#8217;t need to process changes more frequently than once every second.</p>
<p>This statement is one of interest only; it in no way requires the observer to actually observe a certain set of samples in a certain way or within a certain period of time. On the one hand, the observer may choose to be notified asynchronously of every new sample and to respond to it immediately. On the other, it may &#8220;go away&#8221; to other business and return hours later; when it does, it will find the most recent five samples of each instance, occurring no more frequently than once every second, waiting for it. In the mean time, DDS will have taken care of all of the necessary data reception, filtering, and replacement in order to make that happen.</p>
<p>DDS&#8217;s ability to combine notification and lightweight caching &#8212; in effect, to maintain an application&#8217;s observed state of the world on its behalf &#8212; is something no other standards-based technology provides. Developers of data-centric systems reap the benefits: <a href="http://www.rti.com/resources/product-tour/performance-scalability.html">higher performance and scalability</a>, <a href="http://www.rti.com/resources/product-tour/system-architecture.html">greater tolerance to dynamic network conditions</a>, and ultimately <a href="http://www.rti.com/mk/commercial-middleware-vs-roll-your-own.html">improved ROI and time-to-market</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rtidds.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rtidds.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rtidds.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rtidds.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rtidds.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rtidds.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rtidds.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rtidds.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rtidds.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rtidds.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rtidds.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rtidds.wordpress.com/255/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rtidds.wordpress.com/255/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rtidds.wordpress.com/255/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=255&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.rti.com/2010/08/16/the-data-centric-modus-operandi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/90e74a4e6594c1b054e07d7a6c6193c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Rick</media:title>
		</media:content>
	</item>
		<item>
		<title>What is “Real-Time SOA?”</title>
		<link>http://blogs.rti.com/2010/06/01/what-is-real-time-soa-white-paper/</link>
		<comments>http://blogs.rti.com/2010/06/01/what-is-real-time-soa-white-paper/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 19:39:07 +0000</pubDate>
		<dc:creator>David Barnett</dc:creator>
				<category><![CDATA[Best practices]]></category>
		<category><![CDATA[Standards]]></category>

		<guid isPermaLink="false">http://blogs.rti.com/?p=239</guid>
		<description><![CDATA[RTI released a new white paper today that asks (and answers) the question, &#8220;What Is Real-Time SOA?&#8221; Is it simply a Service Oriented Architecture (SOA) built on faster Web services or a faster Enterprise Service Bus (ESB)? Or, do real-time systems require different technologies? The answers to these questions are becoming increasingly important as real-time [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=239&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>RTI released a new white paper today that asks (and answers) the question, <a title="What is Real-Time SOA?" href="http://www.rti.com/docs/RTI_WP_RealTimeSOA.pdf" target="_blank">&#8220;What Is Real-Time SOA?&#8221;</a> Is it simply a Service Oriented Architecture (SOA) built on faster Web services or a faster Enterprise Service Bus (ESB)? Or, do real-time systems require different technologies?</p>
<p>The answers to these questions are becoming increasingly important as real-time systems scale up and are integrated into Systems of Systems. Without the right underlying architecture and technology, applications will fail to satisfy their performance objectives. For mission-critical systems, the consequences of this could be catastrophic. Integration costs could also explode if proprietary and stovepipe workarounds are required to compensate for limitations in the underlying integration infrastructure.</p>
<p>You can download the white paper <a title="What Is Real-Time SOA?" href="http://www.rti.com/docs/RTI_WP_RealTimeSOA.pdf" target="_blank">here</a>.</p>
<p>Check it out and let us know what you think. What does &#8220;Real-Time SOA&#8221; mean to you?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rtidds.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rtidds.wordpress.com/239/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rtidds.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rtidds.wordpress.com/239/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rtidds.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rtidds.wordpress.com/239/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rtidds.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rtidds.wordpress.com/239/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rtidds.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rtidds.wordpress.com/239/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rtidds.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rtidds.wordpress.com/239/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rtidds.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rtidds.wordpress.com/239/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=239&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.rti.com/2010/06/01/what-is-real-time-soa-white-paper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bea4981d6f7cb4ed799407224df59b76?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">David Barnett</media:title>
		</media:content>
	</item>
		<item>
		<title>Mutexes and Semaphores</title>
		<link>http://blogs.rti.com/2009/09/24/mutexes-and-semaphores/</link>
		<comments>http://blogs.rti.com/2009/09/24/mutexes-and-semaphores/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 03:09:00 +0000</pubDate>
		<dc:creator>Rick Warren</dc:creator>
				<category><![CDATA[Best practices]]></category>

		<guid isPermaLink="false">http://blogs.rti.com/?p=183</guid>
		<description><![CDATA[For many software developers, the differences between a mutex and a semaphore is murky at best. This post summarizes and links to several recent articles that clarify the situation.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=183&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This post doesn&#8217;t contain any new information or clever opinions. It simply points out a few articles published elsewhere that this humble author suspects his readers will find relevant. (Members of the <a href="http://www.linkedin.com/groups?home=&amp;gid=37565&amp;trk=anet_ug_hm">Embedded</a> group on <a href="http://www.linkedin.com/">LinkedIn</a> may have seen some of these articles already, but they have relevance to any multi-threaded system, embedded or not.)</p>
<p>Many developers suffer from confusion with respect to the differences between mutexes and semaphores. Michael Barr of <a href="http://www.netrino.com/">Netrino</a> provides solid information in his article <a href="http://www.netrino.com/node/202"><em>Mutexes and Semaphores Demystified</em></a>. My summary: mutexes protect shared resources by enforcing mutual exclusion; semaphores should be used for signaling across tasks.</p>
<p>Niall Cooling of <a href="http://www.feabhas.com/">Feabhas</a> provides a longer discussion in two parts:</p>
<ol>
<li><a href="http://www.feabhas.com/blog/2009/09/mutex-vs-semaphores-part-1-semaphores.html">Mutex vs. Semaphores – Part 1: Semaphores</a></li>
<li><a href="http://www.feabhas.com/blog/2009/09/mutex-vs-semaphores-part-2-mutex.html">Mutex vs. Semaphores – Part 2: The Mutex</a></li>
</ol>
<p>Cooling focuses especially on the problems that arise when developers use semaphores where they should rather use mutexes. In particular, he discusses accidental lock release, various causes of deadlock, and priority inversion. (The latter is of special interest to developers of real-time software.)</p>
<p>Although semaphores and mutexes are critical concurrency-control structures, the APIs to use them unfortunately differ from platform to platform with respect to both form and function. At the end of his Part 2, Cooling briefly summarizes some of the differences between the semaphore and mutex APIs of several operating systems. This section will be of interest to anyone developing systems that will be ported across very different platforms. Chris Simmonds goes into more depth, with respect to Linux in particular, in his article <a href="http://www.embedded-linux.co.uk/tutorial/mutex_mutandis"><em>Mutex mutandis: understanding mutex types and attributes</em></a> posted on <a href="http://www.embedded-linux.co.uk/">The Inner Penguin</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rtidds.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rtidds.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rtidds.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rtidds.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rtidds.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rtidds.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rtidds.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rtidds.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rtidds.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rtidds.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rtidds.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rtidds.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rtidds.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rtidds.wordpress.com/183/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=183&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.rti.com/2009/09/24/mutexes-and-semaphores/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/90e74a4e6594c1b054e07d7a6c6193c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Rick</media:title>
		</media:content>
	</item>
		<item>
		<title>Persisting data in a Real-Time distributed system</title>
		<link>http://blogs.rti.com/2009/06/26/persisting-data-in-a-real-time-distributed-system/</link>
		<comments>http://blogs.rti.com/2009/06/26/persisting-data-in-a-real-time-distributed-system/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 17:29:45 +0000</pubDate>
		<dc:creator>Jens Pillgram-Larsen</dc:creator>
				<category><![CDATA[Best practices]]></category>

		<guid isPermaLink="false">http://blogs.rti.com/?p=163</guid>
		<description><![CDATA[Most of the distributed systems we deal with at RTI have performance constraints at their core. Either the system is pushing the limits of the available resources, or the action-reaction timing is critical for a given event. In other words the constraint might be on throughput or latency (or increasingly latency vs. throughput). In these [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=163&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Most of the distributed systems we deal with at RTI have performance constraints at their core. Either the system is pushing the limits of the available resources, or the action-reaction timing is critical for a given event. In other words the constraint might be on throughput or latency (or increasingly latency vs. throughput). In these kinds of systems persisting data is a real challenge. In many systems it is becoming a requirement that the distributed data is persisted. Take for example flight systems and automated trading systems, where persisting data is necessary to adhere to regulatory demands. At RTI we have set out to make persisting distributed data as minimally intrusive, performant and configurable as possible.</p>
<p><span id="more-163"></span></p>
<p><strong>Recording Data</strong></p>
<p>The simplest case of persisting data in a distributed system is recording the data to a file system. This can be done locally for each node, or centrally on a &#8220;recording&#8221; node. Each system setup solves different problems. Persisting local state on each node allows you to recover from a local crash by reading that state during recovery. Recording all the data on a centralized node allows you to query the entire set of data recorded (not just the subset any node would see) to find patterns or anomalies, or do a post-mortem on a system failure.</p>
<p>Locally each RTI Data Distribution Service publisher or subscriber keeps samples in queues. To allow for local persistence a mirror of these in-memory queues can be kept on disk. After a crash the publishers and subscribers can then be created with the same state as they had before the crash.</p>
<p>Centrally you can run RTI Recorder that can be configured to subscribe to interesting data (or all data for that matter) and write it to a file system. This data can then be queried either in real-time or during off-peak hours. As an aside RTI Data Distribution Service and RTI Recorder have countless flight hours on mission critical systems!</p>
<p><strong>Connecting the Distributed System to an Enterprise Database</strong></p>
<p>In some cases simply having the data on a file system is not enough &#8212; the full power of an enterprise database is needed. At RTI we have solved this by having RTI Real-Time Connect for ODBC enabled databases. Now you can use RTI Data Distribution Service to implement a distributed database, or utilize a database for your persistent storage needs. This allows you to use any tool or query you are familiar with to work with a distributed set of data. The possibilities are literally endless!</p>
<p>No matter what the use-case &#8212; recovery, logging, post-mortem analysis or database integration &#8212; persisting real-time distributed data is here to stay. The challenge is persisting the data with minimal intrusiveness on the real-time aspects of the system. At RTI we work hard to make that happen.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rtidds.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rtidds.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rtidds.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rtidds.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rtidds.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rtidds.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rtidds.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rtidds.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rtidds.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rtidds.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rtidds.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rtidds.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rtidds.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rtidds.wordpress.com/163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=163&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.rti.com/2009/06/26/persisting-data-in-a-real-time-distributed-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e00128a3acff96b6109e5eb199b039a6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jens</media:title>
		</media:content>
	</item>
		<item>
		<title>Thinking Differently About Messaging</title>
		<link>http://blogs.rti.com/2009/06/03/thinking-differently-about-messaging/</link>
		<comments>http://blogs.rti.com/2009/06/03/thinking-differently-about-messaging/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 04:24:39 +0000</pubDate>
		<dc:creator>Rick Warren</dc:creator>
				<category><![CDATA[Best practices]]></category>
		<category><![CDATA[Standards]]></category>

		<guid isPermaLink="false">http://blogs.rti.com/?p=153</guid>
		<description><![CDATA[If you're an old hand at messaging, but new to data distribution, the phrase "data-centric design" may sound like just a new way of describing the same old architectures. But data-centric and message-centric thinking differ in subtle-yet-important ways. Understanding those differences will help you pick the right tool for each job.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=153&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>You may have heard system architects talking about &#8220;data-centric design,&#8221; or you may have attended an <a href="http://www.rti.com/services/training.html">RTI training class</a> and heard one of us use that term. Is data-centricity just a new buzzword to make messaging seem cool again? No indeed!</p>
<p>Message-centric design and data-centric design are similar, but they also differ in important ways. Let&#8217;s start with some terminology. There&#8217;s a reason why <a href="http://www.rti.com/mk/DDS.html">DDS</a> says &#8220;sample&#8221; where <a href="http://java.sun.com/products/jms/">JMS</a> says &#8220;message&#8221;: those words are intended to suggest a different mental model to you.<span id="more-153"></span></p>
<p><strong>Data-Centric Thinking</strong></p>
<p>When you hear the word &#8220;sample,&#8221; imagine some data value (perhaps the temperature in a certain place) being published periodically. Those values describe a single logical data object &#8212; an &#8220;instance&#8221; in DDS terms &#8212; whose state changes over time. Or think of subsequent frames of a movie: the movie is a single logical object, and you view slices of it one after another. In other words, in a data-centric design, as the system&#8217;s state changes, it uses the middleware to publish that state directly.</p>
<p>Therefore, a data distribution middleware &#8212; such as <a href="http://www.rti.com/products/data_distribution/index.html">RTI Data Distribution Service</a>, which implements the <a href="http://www.omg.org/spec/DDS/Current">DDS specification</a> &#8212; needs to understand what that state is and under what circumstances it should be published. That&#8217;s why RTI Data Distribution Service allows you to describe your application&#8217;s own data types to the middleware (using XML, IDL, or a programmatic API): your application stores its state using those types, so the middleware needs to understand them in order to publish that state. That&#8217;s also why DDS-compliant middleware provides applications with such extensive control over which data should be published where and when, including filters on data contents and update rates, duration- and depth-based time-to-live rules, data reliability and availability contracts, deadline enforcement, and so on. A data-centric system uses its network middleware as a lightweight cache to manage its state, thereby replacing programmatic application logic with declarative descriptions of its delivery obligations and expectations.</p>
<p><strong>Message-Centric Thinking</strong></p>
<p>In contrast, a messaging middleware provides no facilities for state maintenance or management. Instead, the system maintains that state externally to the middleware, and when it changes, it sends &#8220;messages&#8221; <em>about</em> those state changes. The recipient(s) of those messages then decide if and how to update their own state. Because only the application-level logic &#8220;above&#8221; the middleware has access to its state and knows when and how to update it, there&#8217;s no need for the middleware to understand the contents of messages. Messaging middleware implementations therefore typically don&#8217;t support content-aware message handling and provide more limited control over delivery contracts than do data distribution middleware implementations.</p>
<p><strong>Choices, Choices</strong></p>
<p>Of course, the lines between these communication paradigms are often blurred, and many complex systems will use both in different places. For example, you may use RTI Data Distribution Service to <em>distribute</em> your data, but use a relational database to <em>maintain</em> and <em>manage</em> that data, and then use a product like <a href="http://www.rti.com/products/data_distribution/RTIReal-TimeConnect.html">RTI Real-Time Connect</a> to make sure changes that occur on one side are automatically propagated to the other. Or you may implement a data-centric system with RTI Data Distribution Service but view that data, in certain subsystems, through a message-centric API with <a href="http://www.rti.com/products/jms/index.html">RTI Message Service</a>.</p>
<p>Just as you can write procedural code in C++ or Java by choosing not to use certain object-oriented features of those languages, you can implement a message-centric system using a data distribution middleware by simply choosing to limit the capabilities of that middleware that you leverage. And just as you can write object-oriented code in C if you put your mind to it, you can implement a data-centric system using a messaging middleware. But to get the most value from your middleware, and save yourself the most effort, <a href="http://www.rti.com/services/architecture-study.html">consider which paradigm will serve you best</a> most often, and pick the right tool for the job.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rtidds.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rtidds.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rtidds.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rtidds.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rtidds.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rtidds.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rtidds.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rtidds.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rtidds.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rtidds.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rtidds.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rtidds.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rtidds.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rtidds.wordpress.com/153/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=153&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.rti.com/2009/06/03/thinking-differently-about-messaging/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/90e74a4e6594c1b054e07d7a6c6193c3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Rick</media:title>
		</media:content>
	</item>
		<item>
		<title>Complex Event Processing – Making sense of all your data</title>
		<link>http://blogs.rti.com/2009/05/27/complex-event-processing-%e2%80%93-making-sense-of-all-your-data/</link>
		<comments>http://blogs.rti.com/2009/05/27/complex-event-processing-%e2%80%93-making-sense-of-all-your-data/#comments</comments>
		<pubDate>Thu, 28 May 2009 00:41:52 +0000</pubDate>
		<dc:creator>Jens Pillgram-Larsen</dc:creator>
				<category><![CDATA[Best practices]]></category>
		<category><![CDATA[Ecosystem]]></category>

		<guid isPermaLink="false">http://blogs.rti.com/?p=143</guid>
		<description><![CDATA[So you have a distributed system and you’re happily sending data between nodes in your system. The consumer applications are consuming the data your producer applications are producing, and everything is running smoothly. Now, that doesn’t sound like any system you know does it? Distributed systems are by nature complex. Nodes and applications are not [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=143&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So you have a distributed system and you’re happily sending data between nodes in your system. The consumer applications are consuming the data your producer applications are producing, and everything is running smoothly. Now, that doesn’t sound like any system you know does it? Distributed systems are by nature complex. Nodes and applications are not straight producers or consumers; they’re a bit of both. And there’s always some resource contention. This is where Complex Event Processing (CEP) comes on the scene. CEP allows you to run queries on streams of data in real-time, either transforming the data or triggering alerts based on data content. Let me explain by talking about a couple of use cases.</p>
<p><span id="more-143"></span>Let’s say you have a large distributed system where data is being exchanged between nodes and applications. You’re finding that some of your applications are getting starved for data, but everything looks fine in the network – there are only a few lost packets and plenty of bandwidth available.  The next step is moving up the stack to see what’s going on with the networking middleware. Now, if you’re lucky enough to have a well-behaved middleware like RTI Data Distribution Service, there are ways to retrieve detailed statistics about the communication channels. Passing this information through a CEP engine you can write queries that determine when and where you have a slow producer or consumer in your system that is clogging everything up.</p>
<p>Another common use-case is event correlation. Seemingly disparate events may not be, and corroborating can trigger pattern based alerts. Anyone who’s watched a Hollywood spy movie knows this – increased cell-phone chatter coupled with certain keywords and the change in behavior of suspected operatives means something bad is likely going to happen. Using CEP events can be monitored and corroborated in real-time and alerts sent out when the situation warrants it.</p>
<p>CEP is an incredibly powerful technology, and with increasing data rates it is a technology that should be watched carefully in the next couple of years.</p>
<p>Go check out RTI Event Processing at http://www.rti.com/products/rtievent_processing/ for an integration between RTI Data Distribution Service and Complex Event Processing.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rtidds.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rtidds.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rtidds.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rtidds.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rtidds.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rtidds.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rtidds.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rtidds.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rtidds.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rtidds.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rtidds.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rtidds.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rtidds.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rtidds.wordpress.com/143/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=143&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.rti.com/2009/05/27/complex-event-processing-%e2%80%93-making-sense-of-all-your-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e00128a3acff96b6109e5eb199b039a6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jens</media:title>
		</media:content>
	</item>
		<item>
		<title>Getting Started:  The Easy Way</title>
		<link>http://blogs.rti.com/2009/05/21/getting-started-the-easy-way/</link>
		<comments>http://blogs.rti.com/2009/05/21/getting-started-the-easy-way/#comments</comments>
		<pubDate>Thu, 21 May 2009 20:21:07 +0000</pubDate>
		<dc:creator>Bert Farabaugh</dc:creator>
				<category><![CDATA[Best practices]]></category>
		<category><![CDATA[Getting Started]]></category>

		<guid isPermaLink="false">http://blogs.rti.com/?p=135</guid>
		<description><![CDATA[Here at RTI, we take the concept of "Getting Started" to a new level with our Data Distribution Service (DDS) product.  With the use of a code generation tool called "rtiddsgen", new developers can actually create applications that will publish and subscribe their own data types.  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=135&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><!--StartFragment-->Anyone who has obtained a software product knows that there will be a learning curve that needs to be traversed before they can become proficient at using that software.  This is also sometimes called the &#8220;Out of box experience&#8221;.  And different software products have very different &#8220;Getting Started&#8221; practices for their software.</p>
<p>For infrastructure software, this &#8220;Out of box experience&#8221; can be a challenging task because a developer has to learn how to take this generic software that can do many things and apply it to solving his/her problems.  For software products that provide access through an Application Programming Interface (API), this usually occurs with a general program called &#8220;HelloWorld&#8221;.</p>
<p>In the realm of a distributed infrastructure this &#8220;HelloWorld&#8221; basically shows how to publish and receive a simple text message that contains &#8220;Hello World!&#8221;.  Using an application like this is very useful because it shows a developer what the basic minimum steps are to getting an application that can communicate.  And this does provide a little context on how to use their new API.  What this doesn&#8217;t do, however, is that it doesn&#8217;t show them how to get their application specific messages</p>
<p>Here at RTI, we take the concept of &#8220;Getting Started&#8221; to a new level with our Data Distribution Service (DDS) product.  <span id="more-135"></span>With the use of a code generation tool called &#8220;rtiddsgen&#8221;, new developers can actually create applications that will publish and subscribe their own data types.  This utility, rtiddsgen, provides an option called: &#8220;-example &lt;platform_architecture&gt;&#8221;, and it enables the developer to specify a target architecture.  The target architecture can be Windows, Linux, Solaris, Java or a whole set of other Real Time Operating Systems.</p>
<p>Once the correct platform is selected the output from the utility is two applications with all the supporting code files needed to compile and run those applications.  The two applications are a Publication application and a Subscription application that are created specifically to the message type that is fed into the rtiddsgen utility.  Therefore instead of having just a simple &#8220;HelloWorld&#8221; application to start with, they now have an application that is created for any message type they can think of.  The resulting code is generated with lots of inline comments detailing the individual procedure steps, and also showing where in the code the developer can make changes to affect behavior.  If they want to increase the publication rate, it shows where to do that.  If they want to change or modify the data being published, it shows where to add that code.  If they want to act on the data instead of just printing it to the screen, it shows them where to add code.  Basically, it provides all the basic building blocks they will need to really make the applications part of their custom distributed framework.</p>
<p>With this &#8220;Easier&#8221; getting started capability, application developers can literally reduce hours and days off of their projected development time.  Therefore, the net result is that more time is spent on developing application specific &#8220;Business Logic&#8221; as opposed to infrastructure building blocks.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rtidds.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rtidds.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rtidds.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rtidds.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rtidds.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rtidds.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rtidds.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rtidds.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rtidds.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rtidds.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rtidds.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rtidds.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rtidds.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rtidds.wordpress.com/135/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=135&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.rti.com/2009/05/21/getting-started-the-easy-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f128c6677336639a4ae1d77dac023639?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bert F.</media:title>
		</media:content>
	</item>
		<item>
		<title>Tim &#8211; the network tool man &#8211; Taylor</title>
		<link>http://blogs.rti.com/2009/05/14/tim-the-network-tool-man-taylor/</link>
		<comments>http://blogs.rti.com/2009/05/14/tim-the-network-tool-man-taylor/#comments</comments>
		<pubDate>Thu, 14 May 2009 14:00:38 +0000</pubDate>
		<dc:creator>Jan Van Bruaene</dc:creator>
				<category><![CDATA[Best practices]]></category>
		<category><![CDATA[Debugging]]></category>

		<guid isPermaLink="false">http://blogs.rti.com/?p=116</guid>
		<description><![CDATA[When I moved to the US a decade ago, Home Improvement was a popular television sitcom, starring Tim Allen as Tim the tool man Taylor, a host of a made up home improvement show. Among the support team, when we learn about a new debugging tool, we frequently joke about &#8216;our network debugging tool belt&#8217;. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=116&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When I moved to the US a decade ago, <a href="http://en.wikipedia.org/wiki/Home_Improvement">Home Improvement</a> was a popular television sitcom, starring Tim Allen as Tim the tool man Taylor, a host of a made up home improvement show.</p>
<p>Among the support team, when we learn about a new debugging tool, we frequently joke about &#8216;our network debugging tool belt&#8217;. Over the years, this tool belt has grown to a nice variety of debugging tools, especially when you include platform specific debugging tools. We currently support a great variety of platforms: from the enterprise platforms (Linux, Solaris, Windows) to various embedded platforms, (including VxWorks, LynxOS and Integrity).</p>
<p>Below is a list of the tools we frequently use on support. I am leaving out platform specific tools, tools to monitor how a particular network stack is processing network traffic (e.g <a href="http://en.wikipedia.org/wiki/netsta">netstat</a>) and general operating system debugging tools (<a href="http://en.wikipedia.org/wiki/Vmstat">vmstat</a>, cpustat, <a href="http://en.wikipedia.org/wiki/Lsof">lsof</a>, <a href="http://en.wikipedia.org/wiki/Gdb">gdb</a>, <a href="http://en.wikipedia.org/wiki/Strace">strace</a> etc.).</p>
<p><span id="more-116"></span>One of the most common questions on support is: <em>why are my two DDS applications not communicating?</em> The answer to this question falls into two categories: it is either a general networking / connectivity problem, or it is a configuration problem. Let&#8217;s take a look at the various tools we use to debug.</p>
<p><strong>Tools to verify connectivity</strong><br />
1. <a href="http://en.wikipedia.org/wiki/Ping"><em>ping</em></a> verifies whether you have basic connectivity between two hosts. Not commonly known is that ping can also be used to generate multicast data. This is especially useful when your DDS discovery is using multicast and you are suspecting a multicast or <a href="http://en.wikipedia.org/wiki/Time_to_live">time-to-live (ttl)</a> problem.</p>
<p>For example, you can try to ping 224.0.0.1 which is the all-hosts group. If you ping that group, all multicast capable hosts on the network should answer, as every multicast capable host must join that group at start-up on all it&#8217;s multicast capable interfaces. There is one gotcha, by default when running a Linux kernel 2.6, the capability of ICMP to reply to broadcast/multicast ping message is disabled. Whereas, it is enabled by default in Linux kernel 2.4. You can enable it by disabling <em>icmp_echo_ignore_broadcasts</em> (reference: <a href="http://kerneltrap.org/node/16225">http://kerneltrap.org/node/16225</a>)</p>
<p>If you want to experiment with the time-to-live value many ping implementations allow you to configure this via -t or -T.</p>
<p>2. <a href="http://en.wikipedia.org/wiki/Traceroute"><em>traceroute</em></a> (unix) or <a href="http://en.wikipedia.org/wiki/Tracert"><em>tracert</em></a> (Windows) is a tool to visualize packet path used when sending a packet. It shows you the different hops / routers a packet traverses.</p>
<p>3. <em>rtiddsping</em> is a command line utility found in the scripts directory of your RTI Data Distribution Service installation. It basically does the same thing as ping, but not by using the ICMP protocol, but by using DDS. If you were able to ping the hosts and wonder whether the issue is a problem in how your DDS application is configured, then <em>rtiddsping</em> is a neutral application to verify whether the DDS ping /pong topic is working. Take a look at the various flags to modify the peerlist, ttl, multicast and reliability qos parameters.</p>
<p><strong>Tools to analyze the data on the wire</strong><br />
4. One of my favorite network tools is probably <a href="http://www.wireshark.org">Wireshark</a>. Wireshark, previously called Ethereal, is a free packet sniffer and allows you to inspect the data on the wire. It will decode the packets based upon various protocol dissectors. The DDS wire protocol is commonly known as RTPS &#8211; real-time publish subscribe wire protocol. RTPS dissectors in earlier versions of Wireshark supported an early non-standard version of the protocol. RTPS2 is the dissector which supports the <a href="http://www.omg.org/technology/documents/dds_spec_catalog.htm">OMG standard</a> of the wire protocol. RTI contributed the source of this dissector to the Wireshark community. We also offer it as part of our <a href="http://www.rti.com/products/developer_platform/#PROTOCOL.">RTI Protocol Analyzer</a> product. If you are using RTI Data Distribution Service 4.2 or later, use the RTPS2 dissector.</p>
<p>We use RTI Protocol Analyzer to debug discovery misconfiguration. You can observe which IP addresses are used during discovery announcements or which ports a particular node is contacting. You can also look at whether the reliability protocol needs to repair samples and how many. You are able to filter on Hearthbeats as well as corresponding ACK/NACK packets. Lastly the nice thing about it is that you can save it to a file to share with the RTI support team. We can partake in the analysis of why something isn&#8217;t working as expected.</p>
<p>Make sure you are monitoring the data both at the send and receive side. RTI Protocol Analyzer can only capture what is on its wire. If you can not install RTI Protocol Analyzer on the publisher or subscriber, hooking up a simple hub is a good option. A switch, unless you enable port mirroring, won&#8217;t do the job. (Doh, where did I leave my old hub now?)</p>
<p>5. <a href="http://en.wikipedia.org/wiki/Snoop_(software)"><em>snoop</em></a><em> </em> (Solaris) is a packet sniffer for Solaris. Unfortunately it does not dissect the RTPS protocol.</p>
<p>6. <em>rtiddsspy</em> is a command line utility, found in the scripts directory of your RTI Data Distribution Service installation, which allows you to automatically subscribe to publications in a specific DDS domain. You can observe both the discovery data as well as the user data. Take a look at some of the command line options to filter out particular topics.</p>
<p>7. <a href="http://www.rti.com/products/data_distribution/rtirecorder.html">RTI Recorder</a> is a more complete data recorder. It can be configured to record specific topics and fields to a database which lateron can be queried using sql commands, or can be converted into XML, HTML or Excel. Since we often do not have access to your data source, this is best used in your test lab. You can then share the database file or converted file with us. The nice thing of recorder is that it records a lot more that the user data: also meta information such as time stamps are recorded.</p>
<p><strong>Tools to analyzer the state or configuration of the system</strong></p>
<p>8. We use  <a href="http://www.rti.com/products/developer_platform/#ANALYZER">RTI Analyzer</a> when we suspect a configuration issue: e.g. a quality of service (QoS) mismatch. Another good use case is when you have typo in the topicname. DDS will consider this a different topic. Analyzer will quickly show you all the topics in your system, as well as the qos parameters used by the different DDS entities (reader, writer, publisher, subscriber). The match analysis shows you in one screen which reader/writers are compatible.</p>
<p>One common misunderstanding is that Analyzer can not show you all quality of service paramters of a specific entity. For example resource limits or batching configuration are not shown. This is because those are local configuration parameters and are not sent out during discovery. If the configuration is not sent out during discovery, RTI Analyzer does not know about it.</p>
<p>If you want to want to verify whether you configured your batching correctly, I recommend to use RTI Protocol Analyzer as it will distinguish between regular data and batched data samples. It will even show the indivual batched samples.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rtidds.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rtidds.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rtidds.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rtidds.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rtidds.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rtidds.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rtidds.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rtidds.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rtidds.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rtidds.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rtidds.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rtidds.wordpress.com/116/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rtidds.wordpress.com/116/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rtidds.wordpress.com/116/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.rti.com&amp;blog=7350090&amp;post=116&amp;subd=rtidds&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.rti.com/2009/05/14/tim-the-network-tool-man-taylor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/eb610b28dc42df2074783aa867fca9d3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Jan</media:title>
		</media:content>
	</item>
	</channel>
</rss>
