AJ Papa’s Blog

Now All Natural with 70% content and 30% Grammatical Errors.

About

MeJust another geek with his own piece of the Internet and something to say.


This entry is one of many entries that I’m writing for a journal assignment in my Systems Integration course through Carnegie Mellon. The idea is to answer the question “Why is this particular concept important?” I decided to bring some Web 2.0 to this assignment and leverage my blog. Besides … journaling is for filesystems.

In one of the lectures, we discussed the idea of architectural mismatch that can occur between two applications; the gist of the idea being that sub-components or inner workings of applications/systems are sometimes too coupled or aligned differently to take apart and make a integrated application. If I could just offer up a favorite analogy of mine, it would better illustrate my point. As much as the inner child of a system integrator would like to, you can’t just take apart two applications like Legos and make an awesome new spaceship application.

This image further illustrates the point. In this image we see two applications, A and B, with overlapping functionality. The sub-components of A and B are represented by the different color regions. You can see that if you wanted to create and integrated application C using a mix of sub-components of A and B, it would not be easy because of the architectural mismatch.

Again academia tends to abstract things to primitive shapes — boxes, links, nodes etc. So perhaps a more concrete example is in order. As discussed in our lecture, one of the problems that can occur from integrating two applications is platform compatibility issues, specifically system calls on different platforms can be different. I am immediately reminded of two diagrams I saw on Slashdot.org that outlined the system calls of two web servers, Apache and IIS, running on different platforms, Windows and Linux.


System call mapping of Apache running on Linux

System call mapping for IIS running on Windows

Now imagine trying to take sub-components of these two web servers and creating a single integrated web server. To me, it almost looks like trying to integrate spaghetti with lasagna.

Of course it is still possible to make that ultimate pasta dish of Lasaghetti — an integrated mixture, or system if you’d like, of creamy sauce, cheese, noodles and pasta. The possible solutions for integrating applications with overlapping functionality still holds. You can certainly refactor — or along my favorite analogy you can file the components to fit like Legos — create APIs, write wrappers and marshaling objects, or just simply start from scratch. However, as you can imagine, sorting components out to fit or starting over can be quite costly and time consuming.

As you can see from the diagrams, it is very important to consider the sub-components or the “guts” — so to speak — of applications with overlapping functionality when trying to consolidate or integrate. As much as programmers are trained to document and keep things modular, it’s just not the case sometimes with legacy applications or systems. In a perfect world component code modules would be written like Lego blocks, both interchangeable and reusable, but alas we often live in a world of lost documentation and bad design.

Note to Dr. Butler: Feel free to leave my feedback and grade via the commenting system below. Good or bad, I don’t mind.

2 Responses to “Entry #2: Integration, Legos, And Pasta.”

  1. I agree, abstracting calls makes things easier but it still can cause problems. For example, I’m currently working on a project that requires me to write code that interfaces with a specific platform (the IBM iSeries) and with a specific application (our product). However, we plan to port our application to other platforms at some time in the future. This of course means that I have to abstract out the functionality of my application so that it can connect and interface with a variety of platforms, of which we have not yet chosen the target. It can be possible in some instances, but you have to be careful about making references to System calls, especially between 2 different applications on 2 totally different OSes. Windows is an OS providing huge array of various service calls that programmers don’t have to worry about coding themselves, so a large number of system calls is understandable. Linux on the other hand requires users, for the most part, to “bring-their-own-code.” More importantly, the disparity between Apache and IIS is huge because of the mere architecture of either. If you were to compare Apache on Linux to Apache on Windows, then it would be a bit more understandable (since their the same logical back-end, but their “interface” to the OS may be different - meaning they abstracted the inner-workings to work on either OS and have some client interface that bridges the OS to the Apache core). Abstracting works well, but only to a point, at which point you may end up with the same number of system calls, possibly even more, depending on the situation.

    Sean

  2. This blog was much improved, and more what I am looking for. I like the blog idea, btw.

    Shawn A. Butler, Ph.D.

Leave a Reply