summaryrefslogtreecommitdiff
path: root/wiki/12factor/7-port-binding.md
blob: a7564960b19b90ca715067c970f144136db1fd10 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# Factor 7: Port Binding

[This](http://www.12factor.net/port-binding) is the exact point where the
Heroku-specific features of the approach overwhelm the general features.

Factor 7 is over-specific:

* It presupposes the existence of a front-end routing layer, without providing
  any insight into how to deploy, configure, provision, or manage one.

* It demands HTTP (by name) rather than a more flexible “any well-standardized
  protocol,” without explaining why. (Web apps can have non-HTTP internal
  components.)

* It dismisses the value of “pre-existing” container ecosystems that don't
  work the way Heroku does. Have a giant, well-managed
  [Glassfish](http://glassfish.org) cluster that you deploy components to? TOO
  BAD, not Heroku-like enough for these guys even though many aspects run
  along similar philosophical lines.

* It dismisses the value of unix-as-a-container. Unix domain sockets with
  controlled permissions? Psh, let's go through the network stack instead.
  SysV IPC? (Yeah, I know.) Network. Pipes? Network. There's an implicit
  exception for “intra-process” communication, but it's never really
  identified or reasoned about.

* Have you _seen_ the kinds of process control interfaces developers invent,
  when left to their own devices? Signals and PID files are well-established
  conventions, and smart, competent people still fuck those up all the time.
  Command-line arguments are another frequent case of NIH stupidity. Do you
  really want every app to have its own startup API?