Oct 02

Multifarious v2

While at a DevOps Birds of a Feather session at Ohio Linux Fest today I was describing to John Willis (@botchagalupe) my experiments with Docker and the Pi Swarm. Along the way, I mentioned that I’d gotten heterogenous docker swarms working using Powerstrip — aka Multifarious, first described in Heterogenous Docker Swarms Teaser.

In so doing, I had a flash of insight of how I might go about creating a heterogenous swarm without using Powerstrip or other tools. It’s just slightly subversive.

Read the rest of this entry »

Oct 02

Looking Inside a JVM: -XX:+PrintFlagsFinal

Java’s twenty years old now — next year Duke can have Irish Coffee! Seriously, though, in that time there’s been a lot of changes to the Java Virtual Machine (JVM). What once was true may no longer be the case. In digging into an issue I discovered a nice feature of the JVM which enables being able to definitively state the effects of a particular switch as well as decisions made by JVM heuristics on a JVM/Host pair — just because something might be true on a particular host doesn’t mean it’s true everywhere!

Read the rest of this entry »

Oct 01

Sales Technique or Economic Indicator?

Recently I have been getting emails from sales people saying “I’m following up again” or “In case you didn’t see my email”.

Is it a sales technique?

Is it indicating that the economy is slowing?

Or just people desperate to meet quotas?

If the first, I find it really annoying.

Sep 30

I’m Speaking at CodeMash!

CodeMash is a conference held yearly in Sandusky, OH bringing together developers and geeks of all flavours. I’m speaking about algorithms: Great Galloping Cuckoos: Algorithms Faster than log(n):

Algorithms are the foundation of Computer Science. However, over the past two decades they have, for many, taken a back seat to Design Patterns. Without strong algorithms, programs are weak and inefficient. Stronger programs kick sand in their face. In recent years there have been a number of new discoveries and advancements in algorithms, driven in part by Big Data, Machine Learning, and Analysis. These algorithms are a vast improvement over their “classical” predecessors as presented by Knuth and others. Galloping searches that can defeat binary, set intersections in O(n) or less, and Cuckoo hashes which work in constant time despite collisions are a few examples. Through case studies and demonstrations this session provides an atlas to advances in algorithms and how you can leverage them for fun and profit!

Sep 30

From the vaults…. on Parentheses

To paren, or not to paren: that is the question:

Whether ’tis nobler in the mind to suffer

The bugs and errors of maintenance programs,

Or to take arms against a host of typos,

And by debugging end them? To hack: to slash;

No more; and by a slash to say we end

The heart-ache and the thousand natural shocks

Of cut and paste code, ’tis a maturation

Devoutly to be wished. To hack, not slash;

Not slash: perchance to code: ay, there’s the rub;

For in that new programme what code may come

When we have shuffled off this unix box,

Must give us pause: there’s the respect

That makes wuffy of so long life;

— Not William Shakespeare

The preceeding doggerel is excerpted from To Paren, or not to Paren

Sep 25

Thoughts on Writing a Guest Post

I recently wrote a guest post for Open Source Delivers entitled Containers and Open Source Vulnerabilities. I feel very privileged to do so.

Here are some initial thoughts on writing a guest post:

  • Constraints breed Creativity — the guidelines for a blog, while constraints, can bring out the best in you. I find that having a constraint, say, on the number of words available, makes me far more cognizant of not only what I am saying, but how I am saying it — and the resulting prose shows the difference.

  • Being a representative impacts behaviour — when young, there was the expectation that when you were a guest you’d be on your absolute best behaviour. Not to say that you weren’t expected to behave when at home, but that different rules applied when you were in someone else’s home. On a personal blog it’s generally considered ok to kick off the shoes and let the hair down. When a guest, however, what might be acceptable at home is generally frowned upon.

  • Editors matter. I believe that everyone benefits from editing — it is no longer the Age of Dickens where writers are paid by the word. I have read both the cut and uncut versions of Heinlein’s Stranger in a Strange Land. I find the edited to be a better read — Heinlein’s prose is tighter as well as the phrasing. The process of editing produced a much better story. When writing for others I think that I tend to be more thoughtful about what I’m saying and take more time, both in the writing and the personal editing. Having someone else edit as well makes the prose tighter and more effective. Editing cuts down on rambling and produces a better and more professional work.

I think that the these initial thoughts could be condensed to “Respect both the people whom you are representing and their audience” — I think I have some definite thought and takeaways from this. While there are times where it might be appropriate to quickly dash off something, such as a ‘gotcha’ or an aid to memory, I can definitely think of places where I could and should respect both my audience and my craft far more than dashing off a quick blog post might represent.

Sep 25

Containers and Open Source Vulnerabilities

I have a guest article on BlackDuck’s OpenSource Delivers Blog — Containers and Open Source Vulnerabilities.

Sep 23

Step Away from the Computer

Step away from the computer and spend time in the “real world” looking at things around you — there are many examples of great design if you just open your eyes and look around. You will often find inspiration and solutions in the least likely place.

Sep 22

Filter All the Things!

“In the Information Age, the first step to sanity is FILTERING. Filter the information: extract for knowledge.
Filter first for substance. Filter second for significance. These filters protect against advertising.
Filter third for reliability. This filter protects against politicians.
Filter fourth for completeness. This filter protects against the media.”
— Marc Stiegler, David’s Sling

I first read this book in 1988 after reading excerpts from it in Analog Magazine. In a lot of ways it has shaped my thinking as an adult and how I approach information. This quote came up in a conversation at the house the other evening so I found and re-read it.

Over twenty-five years have elapsed since these words were penned, yet I think that they’re just as true now as they were then. The thought that struck me, however, as I read the quote was that the ideas apply to other endeavors as well. These ideas could also be used as a benchmark for data centers and DevOps.

1732879

Measuring all the things is an ideal for which to strive — it can be hard to predict or know what is important to monitor in a system. Moreover it is often hard to predict ahead of time what is actually valuable — some patterns emerge after the fact and unless there is a sufficient amount of data, the pattern is lost.

By the same token, too much data is indistinguishable from noise. And it takes a lot of space, time, and energy to store. Not to mention the costs in making it accessible to search.

In reading the quote above it strikes me as being similar to the DIKW pyramid:

DIKW Pyramid

Data becomes Information. Information becomes Knowledge. Knowledge becomes Wisdom. Subsequent filtering and manipulations are required to achieve the final desired form — it’s possible that stopping in the middle is perfectly acceptable, too!

A different view of the DIKW pyramid was proposed by Milan Zeleny in 1987 [Zeleny], mapping the knowledge hierarchy to:

  • know-nothing
  • know-what
  • know-how
  • know-why

I really like this explanation — it stands on its own better than the DIKW pyramid — the terms are self-explanatory. It definitely describes stages in operational maturity, too!

In mapping Stiegler’s filters to IT/DevOps I would reverse their order:

  1. Completeness
  2. Reliability
  3. Significance
  4. Substance

Completeness ties directly into the “Monitor all the Things!” (as opposed to Big Brother’s “Monitor all the Thinks!”) It is difficult to achieve an accurate picture of a system without completeness. Granted, when there are many variables, some pieces need to be fixed in order to understand and draw conclusions, but that is what the other filters will provide.

Reliability cuts across a number of areas. Can we reliably capture and store the right metrics? Are the metrics being masked by some other event? Are we causing a Heisenburg issue where the very act of monitoring a system skews it badly. I’ve been doing some work recently with building out an infrastructure on a Raspberry Pi cluster. One tool for monitoring the behavior of the machine takes ten percent of the CPU. It is, perhaps, reliably capturing and transmitting the metrics as it sees them, but it’s placing a large load on the system to do so. That load, in turn, is likely affecting the behavior of the other parts of the system.

Significance is that which differentiates the needle from the haystack. However, there are many types and sizes of needles; just because a metric happens to fit a hypothesis does not mean that it is the root cause or even involved in an issue. Humans are very good at seeing patterns, especially those which do not exist.

Statistics can be made to prove anything – even the truth. — Author Unknown

Substance goes hand-in-hand with significance. It refers to “[the actual matter of a thing, as opposed to the appearance or shadow; reality.]”(http://dictionary.reference.com/browse/substance). The conclusions which we draw from analysis of metrics need to be substantive; they need worth and meaning. The combination of the
substance and significance will help remove the causative/correlative fallacy.

Re-evaluating beliefs and viewing ideas in a different framework/light is something which is very useful. Taking the original quote and examining how it maps to other systems — namely DevOps metrics and measuring has been a very useful exercise for me. It has me wondering what should be the next one to visit!

[Zeleny]: Zeleny,It Milan (1987). “Management Support Systems: Towards Integrated Knowledge Management”. Human Systems Management 7 (1): 59–70.

Sep 21

F5 LTM Monitoring and Wildfly

TL;DR

The F5 BigPipe LTM uses HTTP/0.9 to send its HTTP monitoring requests by default. Wildfly 9.0 does not like this; moving to a monitor request of HTTP/1.1 fixed the problem.

Caution: LTM 10.2.x and 11.x do not append a CR/LF to the end unless you are using Basic Authentication. This is contrary to previous behavior. SOL2167: Constructing HTTP requests for use with the HTTP or HTTPS application health monitor (requires registration)

This information is current as of September, 2015. For potential updates please see: SOL3224: HTTP health checks may fail even though the node is responding correctly (registration required).

Background

Upon upgrading to Wildfly 9 from an existing JBoss installation, the existing http monitor on the F5 LTM ceased to work; it marked the hosts in the pool down despite their being active when tested outside of the LTM.

Solution

  • The root cause is that Wildfly does not like the HTTP/0.9 request.

  • Per the HTTP/1.1 specification, a request consists of a:

Note the trailing \r\n; this is important. Without it the server will wait on the client to complete the request until the request times out.

  • The set of headers which the solution sends are almost assuredly overkill. However, it’s working, and they should not hurt anything except as noted below:
Header Notes
Host: Specifies an empty host; this might be better expressed as the name or address of the LTM. This was included as a ‘Cargo Cult’ parameter; the examples from F5 include the header. In my opinion it should be populated *or* left out.
Accept: text/html This specifies to the server that we can accept text/html and assumes that the backend is able to send that. If the backend does not send text/html then either the proper MIME type needs to be specified *or* *.* sent which allows any sort of data. The LTM does the equivalent of a grep looking for the string specified in the recv.
Connection: close This specifies that the server needs to close the connection rather than keeping it alive for re-use.

HTTP/1.1 specifies that connections are persistent by [default](http://tools.ietf.org/html/rfc7230#section-6.3). If you do not *explicitly* close the connection it will remain open, tying up connections on the backend. The amount of time it remains open is variable — the spec does not dictate how long it is to remain open. It may be closed at either end *or* [either end can add this header to either the request or response](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.10). Once received, the connection should not be considered persistent.

  • The text of the monitor:

Note the send; prior to LTM 10.2.x a trailing \r\n would be appended. This is no longer the case. Within the send the entire request is specified, including headers. An “empty” line is appended at the end.

recv specifies the string for which to grep the response. If the string is not within the response or if the request times out then the check failed.

Older posts «

» Newer posts