-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpython-na-cloud.html
311 lines (304 loc) · 11.3 KB
/
python-na-cloud.html
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
<!--- # Python na Cloud: Serverless, containers, o que escolher? -->
<html>
<head>
<meta charset="UTF-8" />
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.5.0/css/reveal.min.css"
/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.5.0/css/theme/black.css"
/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/styles/zenburn.min.css"
/>
</head>
<body>
<div class="reveal">
<div class="slides">
<section>
<h1>Python na Cloud</h1>
<span>Serverless, containers, o que escolher?</span>
</section>
<section>
<h1>Bianca Rosa</h1>
<h3>tech lead @ stone</h3>
<p><a href="https://biancarosa.com.br">biancarosa.com.br</a> | <a href="http://twitter.com/__biancarosa">@__biancarosa</a></p>
<ul>
<li class="fragment">Python & Go</li>
<li class="fragment">Docker & Kubernetes & Cloud</li>
<li class="fragment">PythOnRio & Pyladies</li>
</ul>
</section>
<section>
<h1>O que esperar</h1>
<ul>
<li class="fragment">Um overview das possibilidades.</li>
<li class="fragment">Mais munição pra escolher a melhor opção.</li>
<li class="fragment">Exemplos. Muita coisa prática.</li>
</ul>
</section>
<section>
<h1>Cloud</h1>
<p class="fragment">There is no cloud. It's just someone else's computer.</p>
<p class="fragment">#sóquenão</p>
<p class="fragment">Cloud computing não é apenas sobre servidores remotos.
É também sobre abstrações que tornam a vida dos desenvolvedores mais fácil e ajuda a
construir sistemas e arquiteturas com alta qualidade.</p>
</section>
<section>
<h1>Exemplos de abstrações</h1>
<p class="fragment">Bancos de dados gerenciados</p>
<p class="fragment">Servidores de arquivos</p>
<p class="fragment">Serverless</p>
</section>
<section>
<h1>Vamos falar sobre...</h1>
<ul>
<li class="fragment">PaaS</li>
<li class="fragment">VMs</li>
<li class="fragment">Serverless Functions</li>
<li class="fragment">Containers</li>
<li class="fragment">Kubernetes</li>
<li class="fragment">Containers Serverless</li>
</ul>
</section>
<section>
<h1>SHOW ME THE CODE!</h1>
<p>
<a href="http://github.com/biancarosa/python-na-cloud">
github.com/biancarosa/python-na-cloud
</a>
</p>
</section>
<section><pre class="highlight"><code>from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def hello_world():
return jsonify({
"message": "Hello, World!"
})
</code></pre>
</section>
<section><pre class="highlight"><code>pipenv shell
pipenv install
FLASK_APP=hello_world flask run</code></pre>
</section>
<section>
<p>Legal! Quero colocar esse código em produção!</p>
</section>
<section>
<h1>PaaS - Platform as a Service</h1>
<p class="fragment">Geralmente a forma mais simples de subir sua aplicação.</p>
<ul>
<li class="fragment">Heroku</li>
<li class="fragment">Google App Engine</li>
<li class="fragment">Azure App Service</li>
<li class="fragment">Red Hat OpenShift</li>
<li class="fragment">Tsuru</li>
</ul>
</section>
<section>
<h1>PaaS</h1>
<ul>
<li class="fragment">Custo inicial pode ser baixo.</li>
<li class="fragment">Escalabilidade.</li>
<li class="fragment">Simplicidade para o time de desenvolvimento.</li>
<li class="fragment">Pouco controle e autonomia sobre o ambiente.</li>
</ul>
</section>
<section>
<h2>Heroku - Hands on!</h2>
<h3>Procfile</h3>
<pre class="highlight"><code>web: gunicorn hello_world:app --workers=4</code></pre>
</section>
<section>
<h2>Heroku - Hands on!</h2>
<h3>Setup</h3>
<pre class="highlight"><code>heroku git:remote -a python-na-cloud</code></pre>
</section>
<section>
<h2>Heroku - Hands on!</h2>
<h3>Scale</h3>
<pre class="highlight"><code>heroku ps:scale web=1</code></pre>
</section>
<section>
<h2>Heroku - Hands on!</h2>
<h3>Deploy</h3>
<pre class="highlight"><code>git push heroku master</code></pre>
</section>
<section>
<h1>VMs - Máquinas Virtuais / Virtual Machines</h1>
<p class="fragment"></p>
<ul>
<li class="fragment">Digital Ocean</li>
<li class="fragment">AWS</li>
<li class="fragment">Google Cloud Platform</li>
<li class="fragment">Azure</li>
<li class="fragment">... e praticamente qualquer plataforma de cloud.</li>
</ul>
</section>
<section>
<h1>VMs</h1>
<ul>
<li class="fragment">Controle e autonomia sobre o ambiente.</li>
<li class="fragment">Precisa ser configurado do zero.</li>
<li class="fragment">Maior preocupação com segurança, redes, infraestrutura em geral.</li>
</ul>
</section>
<section>
<h1>Serverless</h1>
<p class="fragment">Como assim serverless? Não tem servidor?!</p>
<p class="fragment">Calma.</p>
<p class="fragment">Arquiteturas serverless provêem uma abstração em cima do servidor em que seu código é executado.</p>
<p class="fragment"><a href="https://www. martinfowler.com/articles/serverless.html">martinfowler.com/articles/serverless.html</a></p>
</section>
<section>
<h1>Serverless</h1>
<ul>
<li class="fragment">Simplicidade.</li>
<li class="fragment">Custo por tempo de execução.</li>
<li class="fragment">Escalável.</li>
<li class="fragment">Maior latência nos primeiros requests.</li>
</ul>
</section>
<section>
<h1>Serverless - Hands On!</h1>
<pre class="highlight"><code>gcloud beta functions deploy hello_world --trigger-http --runtime python37</code></pre>
</section>
<section>
<h1>Containers</h1>
<p class="fragment">Unidade de software que contém o código e todas as suas dependências para que uma aplicação rode bem e de forma confiável em qualquer ambiente.</p>
<p class="fragment"><a href="https://docker.com/resources/what-container">docker.com/resources/what-container</a></p>
</section>
<!-- <section>
<h2>Containers vs Máquinas Virtuais</h2>
Deep dive explanation about hypervisors and kernel processes
</section> !-->
<section>
<h2>Docker</h2>
<p class="fragment">
Tecnologia de containers open-source.
</p>
</section>
<section>
<h2>Dockerfile</h2>
<pre class="highlight"><code>FROM python:3.7.2-alpine3.7
RUN apk add --no-cache --update git make gcc python3-dev musl-dev && \
set -ex && \
pip install --no-cache-dir pipenv==10.1.2
WORKDIR /app
ADD . .
RUN set -ex && \
pipenv install --system --deploy
CMD exec gunicorn --bind :$PORT hello_world:app</code></pre>
</section>
<section>
<h2>Rodando com Docker</h2>
<pre class="highlight"><code>docker build . -t python-na-cloud
docker run -e PORT=8000 -p 5000:8000 python-na-cloud</code></pre>
</section>
<section>
<h2>Docker Compose</h2>
<pre class="highlight"><code>version: "3"
services:
web:
build:
context: .
command: gunicorn hello_world:app --workers=4 --bind 0.0.0.0:5000 --reload
volumes:
- .:/app
ports:
- "5000:5000"</code></pre>
</section>
<section>
<h2>Docker Compose</h2>
<pre class="highlight"><code>docker-compose up</code></pre>
</section>
<section>
<h1>Kubernetes</h1>
<p class="fragment">
É um orquestrador de containers. Ajuda a gerenciar aplicações que rodam em containers em múltiplos nós, provendo mecanismos básicos pra deploy, manutenção e escalabilidade.
</p>
</section>
<section>
<h2>Minikube</h2>
<p>Ferramenta para facilitar o teste e desenvolvimento baseado em Kubernetes. Cria uma VM localmente com um cluster de apenas um nó.</p>
<pre class="fragment"><code>minikube start
eval $(minikube docker-env)
kubectl config current-context</code></pre>
</section>
<section>
<h2>Kubernetes - Deployments</h2>
<pre class="fragment"><code>kubectl apply -f kubernetes/deployment.yaml</code></pre>
</section>
<section>
<h2>Kubernetes - Pods</h2>
<pre class="fragment"><code>watch kubectl get pods</code></pre>
</section>
<section>
<h2>Kubernetes - Services</h2>
<pre class="fragment"><code>kubectl get services
minikube service python-na-cloud</code></pre>
</section>
<section>
<h1>Serverless Containers</h1>
</section>
<section>
<p>demo!</p>
</section>
<section>
<h1>Mas como escolhe, então?</h1>
</section>
<section>
<h2>Leve em consideração...</h2>
<ul>
<li class="fragment">Custo (do serviço, do time de infraestrutura...)</li>
<li class="fragment">Sua arquitetura</li>
<li class="fragment">Tamanho da sua aplicação</li>
<li class="fragment">Tecnologia</li>
</ul>
</section>
<section>
<p>
twitter: <a href="http://twitter.com/__biancarosa">@__biancarosa</a>
</p>
<p>
slides:
<a href="http://biancarosa.com.br/slides/python-na-cloud.html">
biancarosa.com.br/slides/python-na-cloud.html
</a>
</p>
<p>
codigos:
<a href="http://github.com/biancarosa/python-na-cloud">
github.com/biancarosa/python-na-cloud
</a>
</p>
<p>tks :)</p>
</section>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/headjs/1.0.3/head.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.5.0/js/reveal.min.js"></script>
<script>
Reveal.initialize({
dependencies: [
{
src:
"https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.5.0/plugin/notes/notes.js"
},
{
src:
"https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.5.0/plugin/highlight/highlight.js",
callback: function() {
hljs.initHighlightingOnLoad();
}
}
]
});
</script>
</body>
</html>