Tag: Software Architecture
In the last few years, we see the advent of highly distributed systems. Systems that have clusters with lots of servers are no longer the sole realm of the googles’ and facebooks’ of the world and we begin to see multi-node and big data systems in enterprises. e.g. I don’t think a company such as Nice (the company I work for) would release an hadoop based analytics platform and solutions, something we did just last week, 5-6 years ago.
So now that large(r) clusters are more prevalent, I thought it would be a good time to reflect on the fallacies of distributed computing and how/if they are relevant; should they be changed.
If you don’t know about the fallacies you can see the list and read the article I wrote about them at the link mentioned above. In a few words … Read More »
My twitter feed spewed a very good list of distributed computing related papers (compiled by Dan Creswell). There are links to a lot of papers there. Few of my favorites include The fallacies of distributed computing by Peter Deutsch – you may also want to check out the paper I wrote explaining them; Life beyond distributed transactions an apostate’s opinion by Pat Helland and also “The Byzantine generals problem” by Leslie Lamport, Robert Shostak and Marshall Pease, “A note of distributed computing” by Samuel C. Kendall, Jim Waldo, Ann Wollrath and Geoff Wyant and “Harvest, yield, and scalable tolerant systems” by Armando Fox, Eric A. Brewer which I mentioned before in “10 papers every architect should read”
There are a also a few additional papers that are not in that list and that I found illuminating:
“Architectural Styles and the Design … Read More »
I recently answered this question in Stackoverflow :
What is an utility tree and what is it’s purpose in case of Architecture tradeoff analysis method(ATAM)?
I did answer the question there but here’s a better explanation with lots of examples base on the initial version for chapter 1 of SOA Patterns (which didn’t make it into the final version of the book).
There are two types of requirements for software projects: functional and non-functional requirements. Functional requirements are the requirements for what the solution must do (which are usually expressed as use cases or stories). The functional requirements are what the users (or systems) that interact with the system do with the system (fill in an order, update customer details, authorize a loan etc.).
Non-Functional requirements are attributes the system is expected to have or manifest. These usually include requirements in areas such as performance, … Read More »
I got a few request for a PDF version of the pattern so here it is : Composite Frontend Pattern
(This is part seven of a series. You might want to check the previous parts first)
Parallel and Simplification are the yin and yang of architecture evolution. Simplification, as mentioned previously, is about having foresight and thus provides for,relatively, easy evolution (i.e. architectural additions and not changes). Parallel is about reacting to changes in requirements as they come (no foresight) and making architectural changes.
But wait, architectural changes are hard by definition* – if we make a change to the architecture a lot of things are going to break – starting with the build (or the continuous deployment if you have one) and things will just deteriorate from there. An architectural change will take, relatively, a lot of time and there are a lot of risks in trying to put everything back together. Which is exactly why we need “parallel”.
As the name … Read More »
I’ve got a comment from a user calling himself “AzureBizAndTech” to my previous post . Unfortunately the comment was deleted in in DDJ’s move to a new blogging platform over the weekend. The person, who apparently works in Microsoft (per his first point- see below) posted the comment with the title “Many mistakes in this post”. Below are his points and my reply
1) VMRole is not IaaS. This is not my opinion. It is Microsoft’s (my employer) stated position.
Sorry however, whether an offering is IaaS or PaaS or anything is determined by its capabilities not by the label some marketing person put on it. The VM role is more IaaS than PaaS. It is true that it isn’t a realy IaaS since it has a limited support of VMs (e.g. you can’t run Linux on it)
2) Yes, it is a good … Read More »
Yesterday Alon Fliess and myself gave an open day @ Microsoft Israel on Azure cloud. Alon opened with an introduction to Azure Cloud and the bits and pieces that make it. The next presentation went into details on Azure storage. I had two presentations as well. In the first, I talked about Architectural aspects of moving to Azure (how does cloud in genreal/azure affect the Fallacies of distributed computing) and in the second I provided some tips from our (codevalue‘s) experience on moving applications to Azure.
I’ve uploaded the slides from my presentations to slideshare:
Things to think about while architecting azure solutions
View more presentations from Arnon Rotem-Gal-Oz.
View more presentations from Arnon Rotem-Gal-Oz.
[Edited: added explanation of the difference between upfront design with iterative implementation and Simplification]
The previous installment in the series talked about leaps as a technique to change the architecture. Leaps are more of a revolution than an evolution and even though they are sometimes needed evolving an architecture is the more interesting topic. This and the next post deal with the two types of evolution strategies Simplification and Parallel. In Part IV I provided the following definition for Simplification (where the base definition is Kent Beck’s and the projection on software architecture is mine):
Simplification – is when you don’t know what you want to do and it is too expansive to directly get to an end result. This is the basis of the iterative system. start small and gradually add features as you go. From an architecture perspective it is … Read More »
It all starts with a business requirement – as it always should. We have an ordering system (say the same one from the Knot anti-pattern) and the business says they only want to confirm an order to the user if the item is already secured for that order in the stock. From the technical point of view we have 2 separate services – one handles orders the other handles the stock – now what?
Figure 10.1 A vanilla ordering scenario. An Ordering service needs to confirm item in stock before confirming order for customer.
This sounds like a text book case for using transactions but in reality it isn’t. I am going to explain why in a short while but before we go there let’s do a (very) short recap on transactions and distributed transactions.
Transactions basically build on four basic tenets: … Read More »
I recently listened to Udi Dahan’s excellent “Avoiding a failed SOA” presentation from QCON London (it is about an hour long, but it is worth your time). I agree with most of what Udi says except two points. One is that pub/sub is not the only way to go (and you should minimize duplex message). Events and choreography are definitely my preferred way to go since they make it easier to do the right thing – i.e. model the solution correctly, but I believe orchestration based solution can also work. Maybe I’ll expand this in another post – but the point of this one is on the other point I disagree with
Udi presents services (which I usually call business services) which hold within them autonomous components (I usually call these services). The solution offered is based on pub/sub (Inversion of communications pattern) so … Read More »