A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Clusters de computadores (introdução, conceitos e implementação)

Apresentações semelhantes


Apresentação em tema: "Clusters de computadores (introdução, conceitos e implementação)"— Transcrição da apresentação:

1 Clusters de computadores (introdução, conceitos e implementação)
São Paulo, 2011 Universidade Paulista (UNIP) Clusters de computadores (introdução, conceitos e implementação) Prof. MSc. Vladimir Camelo 14/04/2017

2 Definição de Cluster Um cluster pode ser definido como um conjunto de nós (processadores) autônomos, que interligados comportam-se como um sistema único, do inglês, significa agrupamento, aglomerado ou concentração (Pitanga, 2004). Também chamado de Clustering (quando visto em um contexto mais abrangente); PITANGA, Marcos. Construindo supercomputadores com linux. 2ª edição. Rio de Janeiro: Brasport Livros e Multimídia Ltda, p. 14/04/2017

3 Definição de Cluster Um sistema único (paralelo ou distribuído) independente de ser composto por vários processadores ou recursos geograficamente distribuídos, deve comportar-se como um sistema centralizado do ponto de vista do usuário. Todos os aspectos relativos à distribuição de dados, tarefas, comunicação e sincronização entre tarefas e a organização física do sistema devem ser abstraídos do usuário. 14/04/2017 3

4 Definição de Cluster Está técnica de abstrair do usuário detalhes de implementação é conhecido como Imagem Única do Sistema ou SSI (Single System Image). Os Clusters de Computadores são máquinas construídas com a utilização de dois ou mais microcomputadores comuns interligados por uma rede de interconexão, que trabalham juntos para resolver um problema. 14/04/2017

5 Motivação para a construção de Cluster
Exigência cada vez maior por parte das empresas no poder de processamento; Somente supercomputadores possuíam grande poder de processamento no passado; Com a evolução da Tecnologia da Informação (TI) e das estruturas de redes locais isso hoje já é possível sem o uso de um supercomputador; 14/04/2017

6 Introdução Os clusters podem ser formados por computadores dedicados ou agrupados fisicamente em um ambiente ou formados ainda através de uma conexão virtual de computadores espalhados em uma rede. Devem ser utilizados softwares apropriados para auxiliar as estações distribuídas ao longo da rede para que possam servir a solicitações de terceiros como seus recursos computacionais (Dantas, 2006). Aplicativos agrupados foram desenvolvidos para gerenciar uma carga maior de dados. DANTAS, Mario. Ambientes Distribuídos de Alto Desempenho: Clusters e Grades Computacionais. [S.1:Portal Brasileiro sobre computação de alto desempenho, Disponível em: Acesso em: 25 Julho 2009. 14/04/2017

7 Introdução Conforme Bookman (2003), “a prática de distribuir atributos a partir de um único aplicativo por muitos computadores não apenas melhora o desempenho, mas também cria redundância, no caso de falhas”. BOOKMAN, Charles. Agrupamento de computadores em Linux: aprenda a construir e manter grupos de computadores com Linux. Rio de Janeiro: Ciência Moderna, p.

8 Especificação Os clusters podem ser divididos em 3 categorias básicas:
Alta Disponibilidade (High Availability - HA) Alta Desempenho de Computação (High Performance Computing - HPC) (Pitanga, 2004). Balanceamento de Carga (Horizontal Scaling – HS) PITANGA, Marcos. Construindo supercomputadores com linux. 2ª edição. Rio de Janeiro: Brasport Livros e Multimídia Ltda, p. 14/04/2017

9 Cluster de Alta Disponibilidade
É normalmente construído com a intenção de fornecer um ambiente seguro contra falhas (fail safe) utilizando-se da redundância de componentes (hardware, software, serviços de rede ou de interconectividade ou interoperabilidade). Em outras palavras, fornecer um ambiente computacional onde a falha de um ou mais componentes não irá afetar significativamente a disponibilidade do ambiente de computação ou aplicações que estejam sendo usadas. 14/04/2017

10 Cluster com Alta Desempenho computacional
É projetado para fornecer maior poder de computação para a solução de um problema. Está relacionado com aplicações científicas, de simulação ou de manipulação de imagens. O usuário interage com um nó específico para iniciar ou escalonar uma atividade que deverá ser executada. A aplicação, juntamente com as funções internas do cluster, irá determinar como a atividade será dividida e enviada para cada elemento que compõe o ambiente computacional, buscando extrair uma maior vantagem dos recursos disponíveis. 14/04/2017

11 Cluster de Balanceamento de Carga
É utilizado para fornecer uma interface simplificada para um conjunto de recursos que podem aumentar ou diminuir no balanceamento de carga com o passar do tempo e conforme a necessidade por processamento do cliente. Neste tipo de cluster, estão implícitos os conceitos da alta disponibilidade (com a redundância de componentes) e de alto desempenho de computação (com a distribuição das tarefas completas pelos vários componentes replicados). 14/04/2017

12 Cluster de Balanceamento de Carga
Este aumento ou diminuição de recursos no balanceamento de carga é mais que um simples redirecionamento do tráfego dos clientes para outros servidores. Existem 3 métodos básicos de balanceamento de carga, que são: Least Connections Round Robin Weighted Fair 14/04/2017

13 Cluster de Balanceamento de Carga
Least Connections No Balanceamento de carga Lest Connection as requisições são redirecionadas para o servidor baseado no menor número de requisições/conexões no momento. 14/04/2017

14 Cluster de Balanceamento de Carga
Round Robin No Balanceamento de carga Round Robin as requisições são sempre direcionadas para o próximo servidor disponível de uma forma circular; 14/04/2017

15 Cluster de Balanceamento de Carga
Weighted Fair No Balanceamento de carga Weighted Fair os pedidos são dirigidos para os servidores baseados na carga de requisições de cada um e na capacidade de resposta dos mesmos (performance do servidor disponível) 14/04/2017

16 Utilização de Clusters
Os clusters são utilizados em aplicações de missão crítica e costumam ter meios eficientes de proteção e de detecção de falhas. É muito usado na internet, em servidores web e de , comércio eletrônico e em bancos de dados distribuídos. ALECRIM, Emerson. Cluster: Principais conceitos. Info Wester, Disponível em: Acesso em: 25 julho de 2009. 14/04/2017

17 Principais características de um Clusters
Disponibilidade: tempo em que determinado sistema permanece ativo e em condições de uso. Alta disponibilidade: sistemas que praticamente não param de funcionar. Alta performance: distribuição equilibrada de processamento aos nós (computadores) do cluster. ALECRIM, Emerson. Cluster: Principais conceitos. Info Wester, Disponível em: Acesso em: 25 julho de 2009. 14/04/2017

18 Considerações de projeto
Algumas características devem ser observadas durante o processo de construção de um sistema distribuído, como pro exemplo: Características físicas: Salas apropriadas; Sistemas de refrigeração; Instalações elétricas; Espaço adequado;

19 Considerações de projeto
Algumas características devem ser observadas durante o processo de construção de um sistema distribuído, como pro exemplo: Arquitetura de hardware e software do sistema: Homogêneo versus heterogêneo; Arquitetura de rede para o sistema distribuído: Tipo de arquitetura de rede; Cabeamento.

20 Considerações de projeto
Algumas características devem ser observadas durante o processo de construção de um sistema distribuído, como pro exemplo: Sistema operacional: Plataforma aberta versus plataforma fechada; Middleware: Bibliotecas baseadas em troca de mensagens. Software de gerenciamento: Utilização de arquitetura aberta versus arquitetura fechada.

21 Funcionamento de Clusters
O princípio de funcionamento: Distribuição: O servidor divide as tarefas em suas partes independentes (ditas concorrentes) e distribuí para os clientes. O servidor envia e recebe mensagens (e dados) para os diversos clientes passando pelo switch. 14/04/2017

22 Funcionamento de Clusters
O princípio de funcionamento: Processamento e troca de mensagens entre clientes: Cada cliente recebe as mensagens e um conjunto de dados a serem processados. A seguir realiza o processamento solicitado. Podem ocorrer trocas de mensagens entre os diversos clientes.

23 Funcionamento de Clusters
O princípio de funcionamento: Conclusão: Concluído o processamento, os resultados são enviados para o servidor, que agrupa os resultados e finaliza o processamento

24 Aplicações para Clusters
Os clusters podem ser utilizados para uma infinidade de aplicações diferentes em diversas áreas. As principais aplicações que utilizam clusters são aquelas que precisam de processamento pesado. 14/04/2017

25 Aplicações para Clusters
Tipos de aplicações: Previsão meteorológica (previsão do tempo e condições climáticas); Simulações geotérmicas (ou seja, simulação de eventos no solo); Renderização de efeitos especiais (muito usado em filmes, games); Simulações financeiras; Distribuição de carga; Ouras.

26 Aplicações para Clusters
Aplicações críticas: são aplicações que não podem parar de funcionar ou não podem perder dados (por exemplo, sistemas de bancos), podem utilizar as tecnologias de cluster, desde que devidamente configurados para não serem sujeitas a falhas graves que acarretem em interrupção do sistema como um todo. O cluster deve contar com nobreaks ou geradores que garantam o funcionamento do sistema mesmo nos casos de queda de energia, além de meios de manutenção e detecção de falhas eficientes. 14/04/2017

27 Gerenciamento de Clusters
Gerenciamento de cluster pode ser considerado qualquer tarefa que disponibilize um bom aproveitamento dos recursos de um cluster; Deve prover mecanismos que auxiliem a administração dos nós de forma integrada.

28 Gerenciamento de Clusters
A instalação e configuração individual de cada sistema operacional para cada máquina pode levar muito tempo. No as máquinas utilizam o mesmo sistema operacional; Podem ser utilizadas ferramentas automáticas, tais como: Kickstart: sistema desenvolvido para RedHat Linux que possibilita colocar todas as seleções que o usuário faria na instalação manual. FAI (Fully Automatic Installation): é um conjunto de scripts e arquivos de configuração para instalação automatizada de sistema Debian Linux em um agregado com um grande número de nós. Claudio Schepke, Tiarajú A. Diverio, Marcelo V. Neves, Andrea S. Charão .Panorama de ferramentas para gerenciamento de clusters. - Acessado em 03 de fevereiro de 2011

29 Gerenciamento de Clusters
Podem ser utilizadas ferramentas automáticas, tais como: Replicator: outro recurso desenvolvido exclusivamente para sistemas Debian Linux, funcionando como um duplicador de instalação. ALICE: é um sistema para SuSE Linux que possibilita instalar e configurar várias máquinas automaticamente com o mínimo possível de interação humana. OSCAR (Open Source Cluster Application Resources): É um ambiente para a instalação, configuração e gerenciamento de clusters. Claudio Schepke, Tiarajú A. Diverio, Marcelo V. Neves, Andrea S. Charão .Panorama de ferramentas para gerenciamento de clusters. - Acessado em 03 de fevereiro de 2011

30 Gerenciamento de Clusters
Podem ser utilizadas ferramentas automáticas, tais como: Ka-deploy: é uma ferramenta que faz parte do Ka Clustering Tools, que possibilita replicar uma máquina Linux muitas vezes ao mesmo tempo. ClusterWorx: é outro exemplo de ferramenta para auxiliar o processo de carga remota. Ele foi desenvolvido pela Linux NetworX, possuindo também um gerenciador de imagens. Claudio Schepke, Tiarajú A. Diverio, Marcelo V. Neves, Andrea S. Charão .Panorama de ferramentas para gerenciamento de clusters. - Acessado em 03 de fevereiro de 2011

31 Tipos de Clusters Os principais são: Cluster Beowulf
Cluster de “workstations” 14/04/2017

32 Clusters Beowulf É uma tecnologia de cluster que agrupa computadores rodando Sistema Operacional baseado no GNU/Linux para formar um supercomputador virtual via processamento paralelo (distribuído). Daniel Ridge, Donald Becker, P. M. T. S. B. Merkey, P. Harnessing the power of parallelism in a pile-of-pcs. IEEE Aerospace Donald J. Becker, Thomas Sterling, D. S. B. F. K. O. Communication overhead for space science applications on the beowulf parallel workstation. High Performance Distributed Computing Radajewski, J. Eadline, D. Beowulf Howto SANTOS, L. O. E., 14/04/2017

33 Clusters Beowulf Requisitos necessários para a implementação de um Cluster do tipo Beowulf: Conjunto de computadores (sem teclado, sem monitor e sem mouse) conectados em rede para processamento paralelo (uso exclusivo). Requer o uso de uma biblioteca de troca de mensagens como PVM ou MPI, ou o uso de múltiplos processos com o OpenMosix. Daniel Ridge, Donald Becker, P. M. T. S. B. Merkey, P. Harnessing the power of parallelism in a pile-of-pcs. IEEE Aerospace Donald J. Becker, Thomas Sterling, D. S. B. F. K. O. Communication overhead for space science applications on the beowulf parallel workstation. High Performance Distributed Computing Radajewski, J. Eadline, D. Beowulf Howto SANTOS, L. O. E.,

34 Clusters Beowulf As principais vantagens na utilização de um Cluster Beowulf são: Manutenção facilitada; Redução do número de problemas ocasionados pela instalação de pacotes desnecessários; Menor custo das máquinas e de manutenção. As principais desvantagens são: As máquinas tem seu uso limitado ao processamento definido pelo servidor. Daniel Ridge, Donald Becker, P. M. T. S. B. Merkey, P. Harnessing the power of parallelism in a pile-of-pcs. IEEE Aerospace Donald J. Becker, Thomas Sterling, D. S. B. F. K. O. Communication overhead for space science applications on the beowulf parallel workstation. High Performance Distributed Computing Radajewski, J. Eadline, D. Beowulf Howto SANTOS, L. O. E.,

35 Exemplo de um Cluster Beowulf
14/04/2017

36 Exemplo de um Cluster Beowulf

37 Exemplo de um Cluster Beowulf

38 Exemplo de um Cluster Beowulf (PS3)

39 Exemplo de um Cluster Beowulf (PS3)
Unicamp usa PlayStation 3 para realizar pesquisas. Projeto de biologia tem 12 videogames que fazem cálculos científicos. Console da Sony tem melhor custo/benefício que servidores comuns, diz especialista. - acessado em 03 de fevereiro de 2011

40 Exemplo de um Cluster Beowulf (PS3)

41 Exemplo de um Cluster Beowulf
14/04/2017

42 Exemplo de um Cluster Beowulf
PPPL Scientific Computing Cluster 14/04/2017

43 Cluster Beowulf Além de proporcionar benefícios financeiros, os Clusters Beowulf possuem as seguintes características: Escalabilidade absoluta: É possível conseguir um clusters com poder de processamento superior à maior máquina individual existente hoje. 14/04/2017

44 Cluster Beowulf Além de proporcionar benefícios financeiros, os Clusters Beowulf possuem as seguintes características: Escalabilidade incremental: Mais máquinas podem ser adicionadas – acopladas ao cluster, se desejadas pelo usuário, para aumentar o poder de processamento como um todo. Este acoplamento pode ser feito de forma gradual não impactando no sistema.

45 Cluster Beowulf Além de proporcionar benefícios financeiros, os Clusters Beowulf possuem as seguintes características: Alta disponibilidade: Como cada computador do cluster é completo, a falha de um nó (computador) não compromete o funcionamento do cluster como um todo, basta apenas trocar este nó por outro.

46 Cluster Beowulf Além de proporcionar benefícios financeiros, os Clusters Beowulf possuem as seguintes características: Atualização com a tecnologia de ponta: Como seus nós são construídos com computadores comuns, pode-se aplicar os melhores tipos de material disponíveis hoje no mercado. 14/04/2017

47 Cluster Beowulf Além de proporcionar benefícios financeiros, os Clusters Beowulf possuem as seguintes características: Flexibilidade de configuração: Se a aplicação utilizar intensamente a rede para passagem de mensagens, parte do orçamento pode ser direcionada a oferecer uma infra-estrutura que melhore o meio de interconexão.

48 Cluster Workstations É um conjunto de computadores completos (com teclado, monitor, mouse), conectados em rede, e que cumprem duas funções: O uso diário, com diversos tipos de programas como processadores de texto e planilhas; e O uso para processamento paralelo pesado no final do dia e/ou nos fins de semana. 14/04/2017

49 Cluster Workstations Os requisitos necessários para montar um Cluster do tipo Workstation são: As máquinas devem ser completas e independentes. Requer o uso de uma biblioteca de troca de mensagens como PVM ou MPI, ou o uso de múltiplos processos com o OpenMosix.

50 Cluster Workstations As principais vantagens de um cluster workstation são: Possibilita o uso das máquinas por diferentes usuários para realização de suas tarefas rotineiras, não ficando dedicado apenas a uma tarefa.

51 Cluster Workstations As principais desvantagens são:
Como vários usuários estão utilizando os processadores para outras tarefas, o desempenho do sistema é reduzido. Na prática reduz o uso do cluster ao final do dia e nos fins de semana. Tem um custo maior por máquina e maiores problemas com a manutenção do sistema.

52 Cluster Workstations 14/04/2017

53 Cluster Mosix Multicomputer Operating System for UNIX (MOSIX)
Principal característica: Fazer com que o cluster se comporte como um grande e único supercomputador lançando mão da migração preemptiva de processos e balanceamento dinâmico de carga; Migração Preemptiva: Faz com que um processo em um nó com poucos recursos seja transportado para outro nó que tenha maior disponibilidade, melhorando, assim, o desempenho do sistema e utilizando assim o máximo de seu poder de processamento. 14/04/2017

54 Cluster Mosix No cluster Mosix não existe um nó mestre que controla os outros nós do cluster; Este tipo de cluster utiliza algoritmos descentralizados para gerenciar o processo de carga; A grande vantagem deste tipo de carga esta na possibilidade de incluir ou remover um computador do cluster sem que o desempenho seja afetado e nenhum distúrbio seja notado no conjunto. Possui ainda algoritmos que monitoram e identificam qual a velocidade dos nós, a memória livre disponível, a carga da CPU, a comunicação interprocessos (IPC) e a velocidade de acesso de cada processo. 14/04/2017

55 Arquiteturas Paralelas
São máquinas capazes de executar mais de uma tarefa ao mesmo tempo. Com o avanço do processamento paralelo, foram propostas inúmeras arquiteturas, cada uma apresentando características diferentes. A classificação de Flynn (1972), embora muito antiga, é amplamente adotada internacionalmente e baseia-se no fluxo de instruções e no fluxo de dados. FLYNN, M. J. Some Computer Organizations and Their Effectiveness, IEEE Transactions on Computers, 1972. 14/04/2017

56 Arquiteturas Paralelas
A classificação de Flynn (1972) divide em quatro as arquitetura, sendo estas: SISD (Single Instruction stream over a Single Data stream) SIMD (Single Instruction stream over a Multiple Data stream) MISD (Multiple Instruction over a Single Data stream) MIMD (Multiple Instruction over a Multiple Data stream) FLYNN, M. J. Some Computer Organizations and Their Effectiveness, IEEE Transactions on Computers, 1972.

57 Arquitetura SISD A categoria SISD (Única Instrução e Único Dado)
Possui um fluxo de instruções (da Unidade de controle para a Unidade de Processamento e da Memória para a Unidade de Controle) e um fluxo de dados (da Unidade de processamento para a Memória). 14/04/2017

58 Arquitetura SISD Nesta categoria estão as clássicas máquinas de Von Neumann. A execução é seqüencial, embora uma possível execução pipeline possa existir dentro do processador. Pode existir mais de uma unidade funcional (co-processadores), mas mesmo assim todos estão subordinados a uma única unidade de controle.

59 Arquitetura SISD 14/04/2017 vladimir.professor@gmail.com
PUC, Pontifica Universidade Católica, Computação Paralela e Plataformas Não Convencionais. Disponível em Acessado em 25 julho de 2009 14/04/2017

60 Arquitetura SIMD A categoria SIMD (Única Instrução e Múltiplos Dados) apresenta um único fluxo de instruções atuando sobre vários fluxos de dados diferentes. Esta arquitetura possui várias unidades de processamento supervisionadas por uma única unidade de controle. Isso faz com que todos os elementos de processamento executem as mesmas instruções sobre dados diferentes. CALÔNEGO, N., Parallel Programming Tool-Kit, Anais do I Workshop de Sistemas Distribuídos, Universidade Federal da Bahia, 1996. 14/04/2017

61 Arquitetura SIMD Processadores matriciais são exemplos dessa categoria (Calônego, ). A memória utilizada pode ser compartilhada, ou seja, pode ser comum a todas as unidades de processamento; ou distribuída, onde cada unidade de processamento possui o seu próprio espaço para endereçamento da memória. CALÔNEGO, N., Parallel Programming Tool-Kit, Anais do I Workshop de Sistemas Distribuídos, Universidade Federal da Bahia, 1996.

62 Arquitetura SIMD 14/04/2017 vladimir.professor@gmail.com
PUC, Pontifica Universidade Católica, Computação Paralela e Plataformas Não Convencionais. Disponível em Acessado em 25 julho de 2009 14/04/2017

63 Arquitetura MISD A categoria MISD (Múltiplas Instruções e Dado Simples) é caracterizada por representar múltiplos fluxos de instruções para um único fluxo de dados. O fluxo de dados passa por todas as unidades de processamento, sendo que o resultado proveniente de uma unidade de processamento seria a entrada para a próxima unidade. Não há, na literatura disponível, exemplos consolidados de máquinas MISD. 14/04/2017

64 Arquitetura MISD 14/04/2017 vladimir.professor@gmail.com
PUC, Pontifica Universidade Católica, Computação Paralela e Plataformas Não Convencionais. Disponível em Acessado em 25 julho de 2009 14/04/2017

65 Arquitetura MIMD A categoria MIMD (Múltiplas Instruções e Múltiplos Dados) é composta por múltiplos fluxos de instruções e múltiplos fluxos de dados. Cada unidade de processamento atua sobre um conjunto de dados diferente e possui uma unidade de controle que a supervisiona. Podem ser fraca ou fortemente acoplados, dependendo do grau de interação existente entre os processadores. 14/04/2017

66 Arquitetura MIMD Máquinas fortemente acopladas possuem baixa latência no envio de mensagens e alta taxa de transmissão, o oposto de máquinas fracamente acopladas. Sistemas fortemente acoplados são usados como sistemas paralelos, trabalhando em um único problema e são multiprocessadores. Sistemas fracamente acoplados são utilizados como um sistema distribuído, trabalhando em diversos problemas e são multicomputadores. 14/04/2017

67 Arquitetura MIMD 14/04/2017 vladimir.professor@gmail.com
PUC, Pontifica Universidade Católica, Computação Paralela e Plataformas Não Convencionais. Disponível em Acessado em 25 julho de 2009 14/04/2017

68 o reflexo na água implementado no Quake4
Aplicações para Clusters o reflexo na água implementado no Quake4 14/04/2017

69 Filme o senhor dos anéis
Aplicações para Clusters Filme o senhor dos anéis 14/04/2017

70 Imagem 3D de uma casa de campo
Aplicações para Clusters Imagem 3D de uma casa de campo 14/04/2017

71 Linux Cluster at Purdue Universitty. http://www. wordiq
14/04/2017

72 Exemplo de clusters Em diagrama de um cluster.
Em Cluster do Numerical Aerospace Simulation Facility NASA Ames. 14/04/2017

73 Exemplo de clusters O Avalon é um cluster de 140 máquinas Alpha 533 MHz, localizado no Laboratório Nacional de Los Alamos, nos Estados Unidos. Esse computador já foi o 113º no TOP500, a lista das 500 máquinas mais rápidas do mundo. O fato de o Avalon ter custado uma fração do preço de seus concorrentes próximos no ranking, mesmo usando máquinas de alta qualidade, é um testemunho da vantagem da solução de processamento pesado usando clusters. O Avalon é formado com Switch 3com superstack II portas- fast ethernet switch. 14/04/2017

74 Exemplo de clusters Inicialmente contava com 70 máquinas Alpha 533Mhz, obtendo o mesmo desempenho de um computador paralelo com 64 processadores a 195Mhz (que custava na época 1.8 milhões de dólares). Usa o GNU/Linux da Red Hat, o pacote de compilação egcs-1.1b e a biblioteca MPICH. Os autores indicam a necessidade de um sistema de cooling (resfriamento) de melhor qualidade em cada máquina, além de uma rede elétrica dedicada, adaptado de um cluster. 14/04/2017

75 Referências sobre Cluster
- Governo Eletrônico - IEEE Computer Society Task Force on Cluster Computing! 14/04/2017

76 Clusters de computadores (introdução, conceitos e implementação)
São Paulo, 2011 Universidade Paulista (UNIP) Clusters de computadores (introdução, conceitos e implementação) Prof. MSc. Vladimir Camelo 14/04/2017


Carregar ppt "Clusters de computadores (introdução, conceitos e implementação)"

Apresentações semelhantes


Anúncios Google