Skip to content

Commit 6854f0e

Browse files
committed
Primeiro commit
0 parents  commit 6854f0e

File tree

227 files changed

+8269
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

227 files changed

+8269
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
name: asciidoctor-ghpages
2+
3+
# Controls when the action will run. Triggers the workflow on push or pull request
4+
# events but only for the master branch
5+
on:
6+
push:
7+
branches: [ master ]
8+
pull_request:
9+
branches: [ master ]
10+
11+
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
12+
jobs:
13+
# This workflow contains a single job called "build"
14+
build:
15+
# The type of runner that the job will run on
16+
runs-on: ubuntu-latest
17+
18+
# Steps represent a sequence of tasks that will be executed as part of the job
19+
steps:
20+
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
21+
- uses: actions/checkout@v2
22+
23+
- name: asciidoctor-ghpages
24+
uses: manoelcampos/asciidoctor-ghpages-action@v2

.gitignore

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
*~$*
2+
package-lock.json
3+
referencias
4+
.bundle
5+
Gemfile.lock
6+
*.html
7+
*.pdf
8+
build/
9+
html/
10+
node_modules
11+
12+
#Java Projects
13+
*.class
14+
target/
15+
test/
16+
.idea
17+
*.iml
18+
19+
nbproject/private/
20+
/aulas/
21+
projects/varios/random-words
22+
projects/sistemas-viagens
23+
projects/03-exemplo-nodejs-cluster
24+
projects/05-nodejs-redis
25+
provas
26+
27+
#MacOS Files
28+
.DS_Store
29+
30+
#Backup Moodle
31+
*.mbz
32+
*telegram.adoc
33+
*.xlsx

.gitmodules

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[submodule "projects/02-websockets"]
2+
path = projects/02-websockets
3+
url = https://github.com/manoelcampos/sd-websockets.git
4+
[submodule "projects/03-xmpp"]
5+
path = projects/03-xmpp
6+
url = https://github.com/manoelcampos/sd-xmpp-chat-client.git
7+
[submodule "projects/04-webservices"]
8+
path = projects/04-webservices
9+
url = https://github.com/manoelcampos/sd-webservices.git
10+
[submodule "projects/01-socket-chat"]
11+
path = projects/01-socket-chat
12+
url = https://github.com/manoelcampos/sd-java-socket-chat.git
13+
[submodule "projects/05-vendas-rest-quarkus"]
14+
path = projects/05-vendas-rest-quarkus
15+
url = https://github.com/manoelcampos/vendas-rest-quarkus.git

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
The MIT License (MIT)
2+
3+
Copyright (c) 2016 Manoel Campos da Silva Filho
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.adoc

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
:allow-uri-read:
2+
:source-highlighter: highlightjs
3+
:icons: font
4+
:numbered:
5+
:listing-caption: Listagem
6+
:figure-caption: Figura
7+
8+
ifdef::env-github[]
9+
:outfilesuffix: .adoc
10+
:caution-caption: :fire:
11+
:important-caption: :exclamation:
12+
:note-caption: :paperclip:
13+
:tip-caption: :bulb:
14+
:warning-caption: :warning:
15+
endif::[]
16+
17+
= Introdução aos Sistemas Distribuídos
18+
Prof. Manoel Campos da Silva Filho <https://about.me/manoelcampos>
19+
20+
ifdef::env-github[]
21+
[IMPORTANT]
22+
====
23+
- A interface do GitHub **NÃO** exibe **vídeos** 🖥 nem facilita a navegação entre capítulos. Acesse o e-book a partir do link abaixo.
24+
- Se você não pretende fazer alterações neste repositório, não faça fork. Se fizer, sempre que o projeto for atualizado, sua cópia vai ficar absoleta. Se você quer apenas baixar para navegar localmente, faça um clone no botão `Code` acima.
25+
- Se você quer apenas salvar o projeto para consulta posterior, use o botão `Star` ⭐️ acima. Isto ainda ajuda a divulgar o material.
26+
====
27+
28+
Este repositório disponibiliza:
29+
30+
1. https://manoelcampos.com/sistemas-distribuidos/[E-Book multimídia com conceitos e exemplos atuais de sistemas distribuídos].
31+
2. link:projects/[Projetos utilizando diferentes tecnologias e protocolos de sistemas distribuídos, desenvolvidos em Java e Node.js].
32+
3. https://drive.google.com/drive/folders/10JBPiANaV3jNtn29Ghc_qPwaFr2mE0xi?usp=sharing[Slides]
33+
endif::[]
34+
35+
//----------------------------------------------------------------------------------------------------------
36+
37+
ifndef::env-github[]
38+
39+
// <<comandos#,Um resumo dos comandos AsciiDoc está disponível aqui.>>
40+
41+
. <<book/chapter01.adoc#,Capítulo 1>>
42+
.. <<book/chapter01a-resource-sharing#,Compartilhamento de Recursos>>
43+
.. <<book/chapter01b-scalability#,Escalabilidade>>
44+
.. <<book/chapter01c-transparency#,Transparência>>
45+
.. <<book/chapter01d-availability#,Disponibilidade>>
46+
.. <<book/chapter01e-conclusion#,Conclusão>>
47+
. <<book/chapter02#,Capítulo 2>>
48+
. <<book/GLOSSARY#,Glossário>>
49+
50+
endif::[]

book/GLOSSARY.adoc

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
:imagesdir: ../images
2+
3+
## Mainframe
4+
5+
## Sockets
6+
7+
## RPC
8+
9+
## RMI
10+
11+
## DCOM
12+
13+
## COM+
14+
15+
## Corba
16+
17+
## Peer-to-Peer
18+
19+
## P2P
20+
21+
Ver Peer-to-Peer.
22+
23+
## Web Services
24+
25+
## SOAP
26+
27+
## REST
28+
29+
## GraphQL
30+
31+
## Swagger
32+
33+
## Middleware
34+
35+
## Service Discovery
36+
37+
## Microservices
38+
39+
ifndef::env-github[image:back.png[alt=Voltar, link=../]]

book/README.adoc

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
:imagesdir: ../images
2+
:allow-uri-read:
3+
:source-highlighter: highlightjs
4+
:icons: font
5+
:numbered:
6+
:listing-caption: Listagem
7+
:figure-caption: Figura
8+
9+
ifdef::env-github[]
10+
:outfilesuffix: .adoc
11+
:caution-caption: :fire:
12+
:important-caption: :exclamation:
13+
:note-caption: :paperclip:
14+
:tip-caption: :bulb:
15+
:warning-caption: :warning:
16+
endif::[]
17+
18+
= E-Book Introdução aos Sistemas Distribuídos
19+
20+
ifdef::env-github[]
21+
[IMPORTANT]
22+
====
23+
ACESSO O CURSO ONLINE https://manoelcampos.com/sistemas-distribuidos/[NESTE LINK].
24+
A INTERFACE DO GITHUB NÃO EXIBE VÍDEOS NEM FACILITA A NAVEGAÇÃO ENTRE CAPÍTULOS.
25+
====
26+
endif::[]

book/chapter01.adoc

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
:imagesdir: ../images
2+
:allow-uri-read:
3+
:source-highlighter: highlightjs
4+
:icons: font
5+
:numbered:
6+
:listing-caption: Listagem
7+
:figure-caption: Figura
8+
ifdef::env-github[:toc:]
9+
ifndef::env-github[:toc: left]
10+
:toc-title: Sumário
11+
:toclevels: 3
12+
13+
ifdef::env-github[:outfilesuffix: .adoc]
14+
15+
ifdef::env-github[]
16+
:outfilesuffix: .adoc
17+
:caution-caption: :fire:
18+
:important-caption: :exclamation:
19+
:note-caption: :paperclip:
20+
:tip-caption: :bulb:
21+
:warning-caption: :warning:
22+
endif::[]
23+
24+
== Introdução
25+
26+
ifdef::env-github[]
27+
IMPORTANT: Acesse o curso online https://manoelcampos.com/sistemas-distribuidos/[neste link].
28+
O acesso ao curso diretamente pelo GitHub não permite a exibição de vídeos nem a navegação facilitada entre capítulos.
29+
30+
O código fonte de projetos utilizando diferentes tecnologias de sistemas distribuídos, para
31+
as mais diversas finalidades, está disponível na pasta link:projects[projects].
32+
endif::[]
33+
34+
Nas últimas décadas, a computação tem evoluído muito rapidamente. Tal evolução seguida da popularização da informática tem feito a demanda por recursos computacionais crescer de forma acelerada. Até a década de 80, os chamados _mainframes_ (computadores utilizados como *servidores*) eram grandes, caros e dificilmente eram conectados em rede <<SDPP>>. Antes da era das redes de computadores e da Internet, os _mainframes_ funcionavam de forma isolada, sem possibilitar que múltiplos usuários remotamente pudessem utilizar sua capacidade computacional.
35+
36+
NOTE: Em sistemas centralizados que possuem terminais remotos conhecidos como https://www.hardware.com.br/termos/terminal-burro[terminais burros], tais terminais não tinham qualquer poder de processamento. Eles apenas serviam de monitor (tela) e enviaram comandos digitados no teclado para o servidor. Desta forma, eles não formavam de fato um sistema distribuído.
37+
38+
Os _mainframes_ eram utilizados para realizar tarefas que demandavam alto poder de processamento, normalmente processadas em lote (https://www.ibm.com/support/knowledgecenter/zosbasics/com.ibm.zos.zmainframe/zconc_batchproc.htm[batch processing]), como:
39+
40+
- folhas de pagamento de empresas;
41+
- declarações de imposto de renda;
42+
- computação científica com a realização de cálculos complexos;
43+
- análise estatística de grande volume de dados como no caso de um censo;
44+
- etc.
45+
46+
Processamento em lote é caracterizado pela execução de um conjunto de tarefas (_jobs_), que após iniciadas, são executadas até o fim, sem a intervenção humana. No entanto, este modelo de processamento centralizado e desconectado impedia que o poder computacional de diversos _mainframes_ pudesse ser combinado para permitir a execução de tarefas cada vez maiores e mais complexas. A abordagem de dividir uma tarefa grande em tarefas menores é chamada de _Divide and Conquer_ ("Dividir para Conquistar" ou "Divisão e Conquista") <<PA>>. Tal divisão permite que estas tarefas menores possam ser executadas simultaneamente em múltiplos computadores. Isto aumenta a eficiência, possibilitando que a tarefa original seja finalizada em menos tempo.
47+
48+
Com a popularização das redes, o advento da Internet e a crescente informatização, computadores começaram a ser inteligados e sistemas centralizados (monoprocessados) evoluíram para *sistemas distribuídos*. Estes são sistemas multiprocessados, que executam simultaneamente em diversos computadores.
49+
50+
Existem várias definições de sistemas distribuídos, como <<SDPP>>:
51+
52+
[quote, Tanenbaum e Steen 2008]
53+
Um sistema ditribuído é um conjunto de *computadores independentes* que se *apresenta a seus usuários como um sistema único* e coerente.
54+
55+
e <<SDCP>>:
56+
[quote, Coulouris et. al. 2008]
57+
Um sistema distribuído é aquele no qual os componentes localizados em *computadores interligados em rede* se *comunicam* e *coordenam* suas ações apenas passando *mensagens*.
58+
59+
NOTE: Redes de computadores conectadas por protocolos como TCP/IP são por si só um sistema distribuído básico. A web é de fato o maior sistema distribuído existente <<SDCP>>.
60+
61+
Observe que não é especificado o tipo de computadores, como são interligados ou como é essa comunicação/cooperação por troca de mensagens. Os computadores independentes representam partes de um sistema distribuído, que podem estar temporariamente indisponíveis ou defeituosas. Sendo independentes, elas podem ser reparadas ou substituídas sem que os usuários/programas percebam. Estas são questões essenciais no projeto de sistemas distribuídos. O mais importante é que tais características normalmente são ocultas dos usuários. Usuários podem ser pessoas ou programas que interagem com o sistema. A independência dos computadores e a ocultação de tais características viabiliza a expansão da escala de um sistema distribuído. <<SDPP>> Aumentar a escala de um sistema significa aumentar sua capacidade para atender a uma maior demanda de usuários/acessos. Este é um dos grandes desafios de sistemas distribuídos, que depende de como o sistema foi projetado.
62+
63+
IMPORTANT: Existem diferentes dimensões de escala, como veremos a seguir. O mais comum ao pensar em escala é em relação ao tamanho do sistema para atender a uma demanda de acessos. Podemos ter um sistema que está preparado para atender acessos em uma escala de milhares de requisições por minuto. No entanto, se a demanda aumentar da escala de milhares para centenas de milhares, o sistema pode não ser mais capaz de atender tal demanda.
64+
65+
A interligação de computadores e redes heterogêneas fornecendo uma visão de sistema única é normalmente feita por um middleware. Este é um software que fica entre o sistema operacional e as aplicações. Ele fornece uma interface de programação de aplicativos (Application Programming Interface, API) para o desenvolvimento das aplicações de forma que componentes de uma mesma aplicação distribuída entre vários computadores e diferentes aplicações possam se comunicar. <<SDPP>>
66+
67+
image::middleware.png[title=Camada de middleware em sistemas distribuídos (Adaptado de <<SDPP>>).]
68+
69+
== Características de um Sistema Distribuído
70+
71+
Tais definições de um sistema distribuído permitem que estes possuam características como:
72+
73+
- compartilhamento de recursos;
74+
- escalabilidade;
75+
- disponibilidade;
76+
- abertura;
77+
- transparência.
78+
79+
Tais características são apresentadas a seguir.
80+
81+
ifndef::env-github[image:back.png[alt=Voltar, link=../]]
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
:imagesdir: ../images
2+
:allow-uri-read:
3+
:source-highlighter: highlightjs
4+
:icons: font
5+
:numbered:
6+
:listing-caption: Listagem
7+
:figure-caption: Figura
8+
9+
ifdef::env-github[:outfilesuffix: .adoc]
10+
11+
ifdef::env-github[]
12+
:outfilesuffix: .adoc
13+
:caution-caption: :fire:
14+
:important-caption: :exclamation:
15+
:note-caption: :paperclip:
16+
:tip-caption: :bulb:
17+
:warning-caption: :warning:
18+
endif::[]
19+
20+
== Compartilhamento de Recursos
21+
22+
ifdef::env-github[]
23+
IMPORTANT: Acesse o curso online https://manoelcampos.com/sistemas-distribuidos/[neste link].
24+
O acesso ao curso diretamente pelo GitHub não permite a exibição de vídeos nem a navegação facilitada entre capítulos.
25+
26+
O código fonte de projetos utilizando diferentes tecnologias de sistemas distribuídos, para
27+
as mais diversas finalidades, está disponível na pasta link:projects[projects].
28+
endif::[]
29+
30+
Um dos principais objetivos de um sistema distribuído é o compartilhamento de recursos, tanto físicos quanto lógicos. O compartilhamento de dispositivos físicos como impressoras e discos é um exemplo. Um sistema operacional pode permitir que tais dispositivos sejam utilizados por múltiplos usuários, trazendo otimização no uso de recursos e redução de despesas com aquisição de equipamentos (estas são chamadas de despesas de capital ou https://www.investopedia.com/terms/c/capitalexpenditure.asp[Capital Expenditure, CAPEX] em inglês). <<SDPP>>
31+
32+
Uma vez que uma impressora não é utilizada o tempo todo por um usuário, ela pode ser compartilhada com outros e assim maximizar o uso de tal equipamento, melhorando a relação custo/benefício. <<SDPP>>
33+
34+
.https://developers.google.com/cloud-print/docs/overview[Google Cloud Print]
35+
image:google-cloud-print.png[]
36+
37+
Servidores com alta capacidade computacional também podem ser compartilhados entre vários usuários para: otimizar o uso de recursos, permitir o acesso à dados e aplicações a partir de diferentes locais, reduzir o tempo de execução de tarefas que demandem maiores recursos computacionais. O uso de um servidor por vários usuários também é mais eficiente em termos de consumo de energia, uma vez que https://doi.org/10.1016/j.jpdc.2017.08.010[pesquisas mostram que uma máquina ociosa consome cerca de 70% de energia].
38+
39+
Exemplos de sistemas distribuídos para compartilhamento de recursos incluem o http://g.co/cloudprint[Google Cloud Print], https://pt.wikipedia.org/wiki/Network_File_System[Network File System (NFS)] e https://www.samba.org[Samba]. Adicionalmente, usuários pensam em compartilhamento de aplicações, como no caso de serviços de busca e cotação de moedas disponibilizados na web <<SDCP>>.
40+
41+
O compartilhamento de recursos possibilita a colaboração <<SDPP>> e o trabalho remoto, como é o caso do uso de ferramentas como o https://gsuite.google.com.br[GSuite] da Google. No entanto, todas essas facilidades levantam questões de segurança que precisam ser tratadas pelos sistemas distribuídos. Alguns dos problemas comuns são a invasão de privacidade e o rastreamento da navegação do usuário para montar perfis utilizados para fornecimento de anúncios <<SDPP>>. Felizmente, muitos navegadores atuais como o https://developer.mozilla.org/pt-BR/docs/Mozilla/Firefox/Privacidade/Proteção_de_rastreamento[Firefox permitem bloquear este tipo de rastreamento].
42+
43+
Em <<SDPP>> é comentado que os sistemas oferecem pouca proteção de privacidade, o que não é mais uma realidade.
44+
Atualmente a maioria dos sites da internet usa HTTPS no lugar de HTTP para garantir que os dados trafegados são criptografados.
45+
Navegadores como o https://exame.abril.com.br/tecnologia/google-vai-avisar-quando-site-for-inseguro/[Chrome inclusive tem mudado a abordagem de mostrar quando um site é inseguro (se não usa HTTPS) no lugar de mostrar quando é seguro]. Isto parte da premissa que um site com HTTPS não significa que ele é de fato seguro. Por outro lado, um site que usa apenas HTTP é naturalmente inseguro por não criptografar os dados trafegados. Inclusive, no blog oficial da Google, é informado que a empresa https://webmasters.googleblog.com/2014/08/https-as-ranking-signal.html[tem priorizado sites HTTPS em resultados de busca desde 2014].
46+
47+
ifndef::env-github[image:back.png[alt=Voltar, link=../]]

0 commit comments

Comments
 (0)