domingo, 16 de abril de 2017

Servidor? Que servidor?

Um colega da faculdade me perguntou se eu tinha algum material sobre configuração de servidores. Eu retruquei perguntando sobre de qual tipo de servidor ele queria informações. A resposta singela foi “Servidor, uai… Linux… Windows… Coisa desse tipo”. Foi então que me dei conta de que os conceitos de servidor não costumam ser apresentados de forma objetiva. Então vamos lá:

Servidor? Que servidor?

Numa definição simples, servidor é um computador rodando um ou mais softwares que disponibiliza(m) recurso(s) ou serviço(s) através de uma rede. Tendo isso em mente, pode-se perguntar: Qual serviço? Com qual protocolo? Com qual software? Com qual sistema operacional? Em que hardware? Like Jack, vamos por partes:

É possível criar servidores com praticamente qualquer computador, de um antigo micro 8-bit da década de 1970 até um poderoso cluster com múltiplas CPUs e hardware hot-swap, passando por smartphones, single board computers, notebooks, computadores desktop, até plataformas microcontroladas como Arduino e ESP8266. Tudo depende do que se pretende oferecer, a que custo e com quais níveis de requisitos não funcionais (desempenho, confiabilidade, disponibilidade, segurança etc.).

Claro, alguns serviços simplesmente exigem algum nível mínimo de requisito que pode não ser atendido por um hardware mais simples ou antigo como, por exemplo, não ser possível fazer um servidor web com JavaEE rodando num microcomputador da década de 1970.

Em outros casos, há serviços que podem ser feitos por hardware simples e dedicado (NAS, servidores de impressão, roteadores entre outros).

É interessante observar que, dependendo do caso, nem é necessário que um servidor seja um computador dedicado. No caso de redes ponto a ponto, o computador de qualquer um conectado a rede pode prover serviços como servidor de arquivos ou de impressão.

Mas quando o serviço exige níveis mais qualificados de requisitos não funcionais, o hardware começa a ser pensado como um equipamento ou um conjunto dedicado a esse tipo de tarefa. No ambiente profissional, com QoS e SLA exigentes, o hardware para servidores costuma ter características muito específicas como ser hot swap (poder ter partes substituídas sem precisar desligar o equipamento), ser redundante (ter múltiplos dispositivos iguais, que entram em funcionamento quando há falha no dispositivo em uso), ter sistemas de fornecimento de energia ininterrupta (no-breaks, grupos geradores), ter ambiente e instalações controladas (temperatura, fornecimento de energia, acesso físico, equipamento contra incêndio etc.).

Sistema Operacional

O mercado profissional atual é dominado por Windows Server e Linux, mas assim como no caso de hardware, pode-se montar servidores diversos a partir de praticamente qualquer sistema operacional, como CP/M, ProDOS, MS-DOS, FreeDOS, IBM-OS/2, BSDs, OS-X, Unixes, Android, iOS, entre muitos outros.

Uma vez determinado o sistema operacional, diversos detalhes (configurações de protocolo, aplicativos de gerenciamento, configurações de desempenho) passam a ser características muito específicas e seu domínio determina a qualificação do profissional que o administra. Vale notar que é comum que o software servidor (o aplicativo que disponibiliza determinado serviço ou recurso) seja específico para o sistema operacional, apesar de existirem muitos aplicativos multiplataforma.

Protocolo

Apesar de IP, TCP e UDP serem quase hegemônicos, configurá-los sobre a camada física e sob os serviços e aplicações, requer conhecimento específico e aprofundado.

Os serviços também possuem protocolos próprios, em camadas acima do IP/TCP/UDP, tais como compartilhamento de arquivos (SMB, FTP, FTPS, TFTP, NFS), e-mail (pop3, imap, smtp), web (http, https), terminal remoto (SSH, telnet) etc. A maioria exige configurações que se adequam a necessidades diversas.

Serviço

Existe uma quantidade razoavelmente grande de possíveis serviços a serem oferecidos por servidores: Servidor de arquivos, de impressão, de banco de dados, de web estática, de web dinâmica, de e-mail, de aplicação, de jogos, de mensagem instantânea, de comunicação (gateway, roteador, firewall), de processamento, de controle de versionamento, entre outros.

No ambiente profissional, normalmente usa-se uma CPU ou conjunto de CPUs (cluster) dedicados para cada serviço, com o intuito de que a disponibilidade e o desempenho se tornem maiores.

E, o que aparentemente pode parecer um único serviço, na verdade pode ser composto de diversos serviços interdependentes. Um exemplo é o servidor de web dinâmica, composto por servidor web propriamente dito, servidor de aplicações, servidor de banco de dados e servidor de arquivos.

Como escolher

Sendo que existe uma quantidade muito grande de serviços e tecnologias para servidores, é necessário definir os objetivos (qual serviço) e os meios (quais tecnologias – protocolo, aplicação, sistema operacional e hardware), para que se possa saber com o que será necessário lidar.

Para determinar serviços e tecnologias, basta responder as perguntas propostas no início deste artigo. A cada pergunta respondida, surge uma nova pesquisa para determinar quais as tecnologias disponíveis e que melhor se adequam as necessidades.

Em alguns casos, nem há pergunta. Você, com o conhecimento que já possui, o cliente, o chefe ou mesmo a tecnologia já adotada na empresa determina qual o conjunto a ser implantado ou utilizado.

Alguns exemplos (considerando apenas software), prover web dinâmica com:
  • Windows Server 2016 + ASP.NET + MS-SQLServer;
  • Windows + Apache + JavaEE com JBoss (EJB + Hibernate) + Oracle RDBMS;
  • Linux + Apache + Node.js (JavaScript) + PostgreSQL.

Na prática

Um conjunto servidor para web dinâmica muito comum para a disponibilização de sites é o pacote conhecido como LAMP (Linux + Apache + MySQL + PHP). O Linux como sistema operacional com o protocolo TCP/IP. O aplicativo Apache como servidor web (usando os protocolos HTTP e HTTPS), o MySQL como servidor de banco de dados e o PHP como servidor de aplicações.

É possível instalar tudo numa máquina virtual em um computador de uso pessoal. Ou simplesmente (mas pouco aconselhável) instalar tudo no sistema operacional do próprio computador pessoal.

Dependendo das exigências de desempenho, instala-se o pacote ou mesmo cada software num computador separado, Apache em um, PHP em outro, o MySQL em outro e até a base de dados (o arquivo controlado pelo MySQL) em um  computador próprio atuando como servidor de arquivos.

Conclusão

Enfim, um servidor não é apenas um computador rodando determinado sistema operacional, mas sim, um equipamento provendo algum serviço ou recurso através de rede e, para se estudar “servidores”, primeiro precisa-se saber “servidor de quê”. Uma vez determinados serviços e tecnologias, resta se aprofundar em cada um deles… E ai o assunto se torna longo.

domingo, 19 de março de 2017

Painel de LEDs e chaves para o projeto Sofia.

Um dos objetivos do projeto Sofia (em búlgaro, София) é evitar o uso de tecnologias atuais, especialmente emuladores e cross-compilers. A questão é: como colocar alguma coisa na memória de um computador sem ele ter software que permita editar sua memória?

A solução é construir um painel de LEDs e chaves controlado apenas com circuitos integrados discretos (nada de processadores, microcontroladores, PLDs ou FPGAs), que acessem a memória do computador, usando DMA de forma concorrente com o processador.

Vou documentar essa etapa do projeto Sofia no site hackaday.io como um projeto específico, uma vez que ele deve servir aos demais computadores homebrew que pretendo montar.

terça-feira, 9 de fevereiro de 2016

Arduino - Introdução: O que é para que serve.

Esse tipo de informação já foi publicado a exaustão em tudo quanto é site pela web, mas vou publicar a minha interpretação do assunto aqui, baseada nas aulas que tenho dado...

O Arduino é uma plataforma microcontrolada para computação física, provavelmente a que obteve o melhor êxito comercial no mundo.
Arduino Uno R3 da empresa Arduino.
Foi criada em 2005 no Instituto de Projetos Interativos de Ivrea, na Itália, visando ter baixo custo e uso simplificado, para ser facilmente utilizado por pessoas leigas nas áreas de programação e eletrônica.

Fisicamente o Arduino é uma placa de circuito eletrônico com um microcontrolador, alguns pouquíssimos componentes simples e, na maioria dos modelos mais comuns, um segundo circuito integrado para fazer a comunicação via porta USB.
Pouco maior que um cartão de crédito.
O microcontrolador, o componente central de plataformas microcontroladas, incluindo o Arduino, é um circuito integrado (um tipo de componente eletrônico) que tem diversas partes de um computador normal num único componente: Processador; Memória para armazenar programa e variáveis; Periféricos (controladores de comunicação, temporizadores, contadores etc); E, principalmente, conversores analógicos e pinos de entrada e saída, onde são conectados os sensores e atuadores.
Microcontrolador - múltiplas funções em um único componente.
Outra característica do microcontrolador é que ele é bem menos poderoso do que um computador típico e normalmente é utilizado no controle de pequenos processos específicos como, por exemplo, controlar a iluminação do cômodo de uma casa, o "vidro elétrico" da janela de um carro, um aparelho de ar condicionado, uma máquina de lavar roupas etc, enquanto um computador típico é usado em diversas tarefas, geralmente simultâneas, como navegar na internet, editar um texto ou uma imagem, tocar música ou um vídeo etc.

A aplicação típica do Arduino é a computação física, que consiste em obter informações do mundo físico através de chaves e sensores (se um acesso está aberto ou fechado, qual a temperatura, a umidade ou luminosidade de um ambiente, o fluxo de água através de um cano etc) e controlar essas características físicas através de atuadores (a trava de uma porta, um aquecedor, lâmpadas, um motor etc).
Computação física - sensores e atuadores.
Apesar dessa orientação a computação física, o Arduino também é utilizado em atividades que vão de um computador comum, como tocar MP3, a funções de vídeo game, rodando jogos.

quarta-feira, 3 de fevereiro de 2016

Minha retrospectiva 2015

2015 foi um ano duca!!! Estive presente em muitos eventos interessantes graças, tanto ao ABC Makerspace, quanto aos contatos acadêmicos.

Na verdade, o agito todo começou no finalzinho de 2014:
 
 
 
 
 

sexta-feira, 9 de outubro de 2015

Intel IoT Roadshow SP 2015 - 1ª Edição


Nos dias 19 e 20 de junho (sexta e sábado) foi realizado no Insper, o Intel IoT Roadshow SP 2015 - 1ª Edição, uma espécie de hackathon onde os participantes são convidados a desenvolver projetos ao longo dos dois dias do evento utilizando o kit disponibilizado.

Composto por um Intel Edison, uma Arduino Breakout Board e um Grove Base Shield v.2.0 da Seeed Studio, acompanhado de diversos módulo, o kit deveria ser usado como base para os projetos, preferencialmente voltados a IoT, que deveriam ser open-source e publicados na página da Intel no site Instructables.


Publiquei um álbum no Google Fotos (com cópia no Facebook) das brincadeiras feitas pela turma do ABC Makerspace durante o evento. As fotos vem de diversas fontes. Se alguém não gostar de vê-las publicadas, me avisem que eu retiro.

sexta-feira, 11 de setembro de 2015

Правец Микропроцесорни Системи: София

Pravetz Sistemas Microprocessados: Sofia
София

No começo de 2014 eu fiz uma publicação aqui no blog sobre minha intenção de construir um computador homebrew com tecnologia vintage... Finalmente a ideia tomou forma! Decidi começar com o microprocessador Motorola MC6800, um 8-bit de 1974, o primeiro da marca.

Navegando pelo eBay, descobri que houve um fabricante Búlgaro de clones desses chips, a Pravetz. Não bastasse os chips do leste europeu serem alguns centavos de dólar mais baratos que os chips originais da Motorola, ainda há o meu atual interesse em cultura Russa que, junto com os textos em alfabeto cirílico, me chamaram a atenção (depois descobri que, apesar do mesmo alfabeto, Russo e Búlgaro são dois idiomas razoavelmente diferentes).

Juntando dúzias de ideias, resolvi fazer uma homenagem ao país de origem dos chips, citando o fabricante e as cidades onde ficavam as fábricas, Pravetz e Sofia.

Uma mistureba lascada: Chips documentados em cirílico; Meu atual interesse em cultura Russa; A capital búlgara com nome de mulher, fornecendo um nome feminino para o computador, como fez a Quinn Dunki com "o" Veronica.

Apesar do nome e da tecnologia central estarem definidas, ainda não consigo ter uma visão clara de todos os milestones,
nem tão pouco do escopo total do projeto.

Sobre a publicação de 2014, mudei algumas ideias: A primeira, óbvia, é de começar pelo processador Motorola MC6800 ao invés do Intel 8085; A segunda é de não criar um blog próprio para o projeto, mantendo tudo aqui mesmo.







segunda-feira, 7 de setembro de 2015

Arduino Day 2015 na UFABC.


E mais um evento de 2015 que participei junto com o ABC Makerspace: O Arduino Day 2015, realizado no dia 28.03.2015 na UFABC (Universidade Federal do ABC), campus de Santo André, a convite do pessoal do RAS-IEEE, com direito a palestra sobre o PSG Shield para Arduino.


Organizei um álbum no Google Fotos (e outro álbum, no Facebook) com algumas fotos comigo, que colhi pela internet (aqui tem o álbum de fotos oficial, de onde peguei algumas fotos).