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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
<!DOCTYPE html>
<html>
<head>
<title>
The Codex »
Factor 7: Port Binding
</title>
<link
rel='stylesheet'
type='text/css'
href='http://fonts.googleapis.com/css?family=Buenard:400,700&subset=latin,latin-ext'>
<link
rel="stylesheet"
type="text/css"
href="../media/css/reset.css">
<link
rel="stylesheet"
type="text/css"
href="../media/css/grimoire.css">
</head>
<body>
<div id="shell">
<ol id="breadcrumbs">
<li class="crumb-0 not-last">
<a href="../">index</a>
</li>
<li class="crumb-1 not-last">
<a href="./">12factor</a>
</li>
<li class="crumb-2 last">
7-port-binding
</li>
</ol>
<div id="article">
<h1 id="factor-7-port-binding">Factor 7: Port Binding</h1>
<p><a href="http://www.12factor.net/port-binding">This</a> is the exact point where the
Heroku-specific features of the approach overwhelm the general features.</p>
<p>Factor 7 is over-specific:</p>
<ul>
<li>
<p>It presupposes the existence of a front-end routing layer, without providing
any insight into how to deploy, configure, provision, or manage one.</p>
</li>
<li>
<p>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.)</p>
</li>
<li>
<p>It dismisses the value of “pre-existing” container ecosystems that don't
work the way Heroku does. Have a giant, well-managed
<a href="http://glassfish.org">Glassfish</a> cluster that you deploy components to? TOO
BAD, not Heroku-like enough for these guys even though many aspects run
along similar philosophical lines.</p>
</li>
<li>
<p>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.</p>
</li>
<li>
<p>Have you <em>seen</em> 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?</p>
</li>
</ul>
</div>
<div id="comments">
<div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'grimoire'; // required: replace example with your forum shortname
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
</div>
<div id="footer">
<p>
The Codex —
Powered by <a href="http://markdoc.org/">Markdoc</a>.
<a href="https://bitbucket.org/ojacobson/grimoire.ca/src/master/wiki/12factor/7-port-binding.md">See this page on Bitbucket</a> (<a href="https://bitbucket.org/ojacobson/grimoire.ca/history-node/master/wiki/12factor/7-port-binding.md">history</a>).
</p>
</div>
</div>
</body>
</html>
|