0

According to this answer layers and tiers are different things.

I see a practical reason of using the term layer i.e. it logically divides code so it becomes more maintainable. It's just helps ti

But I don't see any practical reason of using the term tier. Following this conclusion I understand why people tend to use tier and layer interchangeably

I still have a hope that the word tier has its own meaning not for nothing. So, could you give me any practical example it use in development?

Roman Roman
  • 807
  • 9
  • 26
  • I don't know what you're asking or what kind of answer you expect. The linked answer explains one possible differentiation, the "practical reason" is implicit in that explanation, regardless if anyone agrees with it or not. IMO this question isn't a good fit for SO. – Dave Newton Sep 05 '19 at 00:06
  • 2
    @DaveNewton While I was writing the question I found one probable example, maybe it can help understand my question's logic. When developers are asked to create 3-tier applications it literally means that the app should be run on 3 different machines i.e. the app should have monolith architecture with distributed load (hope it makes sense) – Roman Roman Sep 05 '19 at 00:14
  • That's an interpretation of the linked definition, yes (although you're assuming the monolithic part). But didn't really make the question any more suitable. – Dave Newton Sep 05 '19 at 00:36

1 Answers1

0

In Mythical Man Month, packaging is identified as an early sin. Tiers are part of packaging.

You have designed your system well. Your components have nice interface boundaries, and each component could be deployed upon a different computer, with a different architecture, in a different location, and your system would work just fine. If you followed this far enough, many of these components could be deployed not just remotely, but also redundantly and concurrently to permit greater scalability and resiliency.

The micro-service architecture actually demands this. Your system needs to decompose into in(ter)?dependent services that can be deployed outside your layer of control to permit scaling, etc. A modern version of JCL(*) is employed in ugly named things like k8s and faas to grant scaling and redundancy to your system.

Regardless of these clever configuration mechanisms; some basics from traditional systems theory reign. For example, if two modules inordinately communicate/share, they need to be relatively co-located. The JCL needs to be able to express this, and the assertions of the component linkage becomes a definition of the tiers.

(*)Job Control Language; a rightly maligned mechanism used by IBM to allocate and deploy resources on mainframes in the 1970-2014; when it was suddenly replaced by an even harder to understand set of json & yaml files under the banner of k8s. Those that don't learn from the past are doomed to repeat it; badly.

mevets
  • 10,070
  • 1
  • 21
  • 33