O documento apresenta uma introdução sobre sistemas distribuídos na nuvem AWS, incluindo como configurar o ambiente de programação e realizar testes de carga em uma aplicação implantada em uma instância EC2 usando o Apache Benchmark.
농심 그룹 메가마트 : 온프레미스 Exadata의 AWS 클라우드 환경 전환 사례 공유-김동현, NDS Cloud Innovation Ce...Amazon Web Services Korea
메가마트는 데이터 분석 환경 기반 마련과 비용 및 성능 효율을 위해서 온프레미스 환경의 Exadata에서 AWS 환경으로 전환을 성공적으로 수행하였습니다. 대용량 데이터베이스 마이그레이션 프로젝트의 경험을 기반으로 클라우드 환경에서의 데이터 베이스 성능 확보 및 운영 효율을 위한 모범 사례를 소개합니다.
O documento discute as vantagens e desvantagens dos sites responsivos. Os sites responsivos se adaptam automaticamente a diferentes telas como desktops e dispositivos móveis, melhorando a experiência do usuário. As vantagens incluem gestão simplificada, foco no conteúdo relevante para cada dispositivo e melhores posições em buscadores. As desvantagens podem ser desempenho lento e custos mais altos de desenvolvimento caso não sejam implementados corretamente.
Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017AWSKRUG - AWS한국사용자모임
AWS 자원을 효율적으로 이용하기 위해 Cognito를 사용하게 되었습니다. Cognito의 기능과 Cognito를 사용하면 좋은 점, 서비스를 개발하면서 생겼던 이슈 등을 발표합니다. 시연으로 Cognito + S3 + Lambda 를 이용한 서버리스 아키텍처 기반의 포토 갤러리 웹 서비스를 소개합니다.
롯데이커머스의 마이크로 서비스 아키텍처 진화와 비용 관점의 운영 노하우-나현길, 롯데이커머스 클라우드플랫폼 팀장::AWS 마이그레이션 A ...Amazon Web Services Korea
2015 년부터 진행한 실험적 퍼블릭클라우드 운영에 대한 최근 결과를 공유하며 그간 경험한 MSA Architecture 환경, Cost optimization, Operation 관련 내용을 공유합니다. 특히 대규모 운영 환경에서 경험한 다양한 관점의 경험과 비용절감에 대해 인사이트를 제공 예정입니다.
데이터 분석가를 위한 신규 분석 서비스 - 김기영, AWS 분석 솔루션즈 아키텍트 / 변규현, 당근마켓 소프트웨어 엔지니어 :: AWS r...Amazon Web Services Korea
AWS re:Invent에서는 다양한 고객들의 요구에 맞추어 새로운 분석 및 서버리스 서비스가 대거 출시되었습니다. 본 강연에서는 새롭게 출시된 핵심 분석 기능들과 함께, 누구나 손쉽게 사용할 수 있는 AWS의 분석 서버리스와 On-demand 기능들에 대한 심층적인 정보를 확인하실 수 있습니다.
[목차]
• 클라우드로 마이그레이션해야 하는 이유와 국내 현황
• 클라우드 마이그레이션의 기본 프로세스와 전략
• 마이크로소프트 애저 클라우드의 마이그레이션 관련 특징과 옵션
• 오비맥주 클라우드 마이그레이션 배경과 파트너 선정 기준
• 마이그레이션 일정과 아키텍처, 6R 전략
• 오비맥주 클라우드 마이그레이션의 비용 절감 효과와 향후 로드맵
Cloud Migration 과 Modernization 을 위한 30가지 아이디어-박기흥, AWS Migrations Specialist...Amazon Web Services Korea
규모의 경제에서 속도의 경제로 이동하고 있는 요즘, 기업의 경쟁우위를 위하여 클라우드 마이그레이션과 애플리케이션 및 프로세스 현대화는 생존을 위한 필수조건이 되었습니다. 본 세션에서는 마이그레이션과 현대화를 위한 30여 가지 아이디어를 살펴보고자 합니다. 제약 이론, 도요타 생산방식과 같이 개선을 위한 기반 사상에서 DevOps, FinOps, SRE 등의 프랙티스와 그를 구성하는 SLA, Loosely Couple Architecture, CI/CD 등의 메카니즘, 그리고 마이그레이션을 위한 Transitional Architecture, Data Migration Architecture 등 30여 가지 아이디어를 공유합니다.
발표영상 다시보기: https://youtu.be/-45noG3dQqo
데이터의 중요성은 더이상 반복할 필요가 없이 모두가 알고 있습니다. 비지니스에서 데이터를 활용하여 혁신하고 성장하는 사례는 전세계 모든 산업에서 확인 할 수 있습니다. AWS에서는 가장 빠르고 쉽게 데이터를 수집하고 분석할 수 있는 Data Lake 아키텍쳐를 가이드하고 직접 고객이 쉽게 빌드 할수 있도록 도와드립니다. 고객이 데이터에 대한 호기심만 가지고 있다면, AWS는 데이터를 통해 원하는 정형/비정형 데이터 분석, Data Warehouse, Machine Learning, Data Science 와 같은 거의 모든 방법을 제공합니다.
This document provides an overview of PowerApps and Flow. PowerApps allows users to create apps that access and manipulate data from external sources like Excel and SQL. Flow allows users to design automated workflows that can be triggered and run continuously in the cloud. The document discusses when to use PowerApps versus Flow, how to build solutions with them, best practices, and limitations. It also covers converting existing InfoPath forms and SharePoint workflows to the new platforms.
누가 내 엔터프라이즈 고객을 클라우드로 옮겼을까?-양승호, Head of Cloud Modernization,AWS::AWS 마이그레이션 ...Amazon Web Services Korea
마이그레이션처럼 새로운 일을 시작하기에 앞서 갖는 두려움, 익숙한 환경으로부터 변화하는 것에 대한 거부감, 다가올 변화를 감지하고도 과거의 경험과 기억 속에 갇혀 앞을 볼 수 없었기에 놓쳐버린 것에 대한 후회… 하지만 변화를 긍정적으로 받아들여 새로움에 적응하고 도전을 즐길 수 있을 때 진정한 가치를 찾을 수 있다. 대규모 마이그레이션, 즉 엔터프라이즈 고객이 클라우드로 옮겨가기 위해 필요한 진단 및 처방, 구체적인 준비 및 계획, 마이그레이션 및 현대화, 그리고 비용 최적화를 포함하는 단계별 접근법을 안내하고, AWS 마이그레이션 가속화 프로그램 (MAP)에서 제공하는 패키지화된 오퍼링을 소개하며, 마이그레이션 여정의 각 단계별 이정표에 따라 클라우드로 이전하는 체계적인 방법론과 모범 사례를 안내합니다.
대용량 데이터베이스의 클라우드 네이티브 DB로 전환 시 확인해야 하는 체크 포인트-김지훈, AWS Database Specialist SA...Amazon Web Services Korea
고객사 A는 하루 30억 트랜잭션과 연 750TB의 데이터베이스를 온프레미스 환경에서 상용 데이터베이스를 이용하여 운영 중입니다. 또한 매일 대용량의 배치가 발생하고 실시간으로 대량의 조회가 발생하는 미션 크리티컬 시스템입니다. 고객사 A와 함께 클라우드 환경에서 동일한 워크로드의 수행이 가능한지 여부를 검증하는 Feasiblity Pilot 프로젝트를 진행하였고 여기서의 레슨런을 공유합니다. 마이그레이션 도중 고객 IT팀은 On-premise 운영 모델에서 클라우드 운영 모델로 전환되어야 합니다. 전환 도중에 ITIL을 클라우드, 애자일, DevOps 기반 역량과 프로세스에 매핑해야 합니다. 해당 세션에서는 클라우드 운영 모델로 원활한 전환을 도와주는 CEE (Cloud Enablement Engine)의 작동 원리 및 적용 방식을 살펴보고자 합니다.
This document provides an overview of modernizing enterprise applications with Azure Platform-as-a-Service (PaaS). It discusses reasons why businesses modernize like reducing technical debt and optimizing costs. It also covers challenges of modernization like fragmented security and conflicting priorities. The document then presents different approaches to application migration and modernization on Azure including migrating to IaaS, replacing with SaaS, staying on-premises but connected to cloud, and modernizing directly on PaaS. Key benefits of a successful modernization are also listed like prioritizing security, resilience, and performance as well as innovating faster. The document concludes with case studies of companies successfully modernizing applications on Azure.
영상 다시보기: https://youtu.be/aoQOqhVtdGo
기존 온-프레미스 환경에서 운영 중인 서버들을 AWS 클라우드로 옮겨오기 위한 방법은 무엇일까요? 본 세션에서는 리눅스 서버, 윈도우 서버 그리고 VMWare 등에서 운영되는 기존 서버의 클라우드 이전 방법을 소개합니다. 이를 통해 AWS의 기업 고객이 대량 마이그레이션을 진행했는지 고객 사례도 함께 공유합니다. 뿐만 아니라 VMware on AWS 및 AWS Outpost 같은 하이브리드 옵션을 통해 클라우드 도입을 가속화 하는 신규 서비스 동향도 살펴봅니다.
There are options beyond a straight forward lift and shift into Azure IaaS. What are your options? Learn how Azure helps modernize applications faster with containers and how you can use serverless to add additional functionality while keeping your production codebase 'clean'. We'll also learn how to incorporate DevOps throughout your apps lifecycle and take advantage of data-driven intelligence. Demo intensive session integrating the likes of Service Fabric, AKS VSTS and more.
Slides from my presentation on the available automation options available in Microsoft 365. From the desktop apps right through to things like PowerShell.
This document provides an introduction to Amazon Web Services (AWS), including:
- AWS is a cloud provider that offers on-demand servers and services that can easily scale. It powers websites like Amazon and Netflix.
- AWS has a global infrastructure spanning 69 availability zones across 22 regions worldwide, with plans to expand to 3 more regions.
- AWS regions contain multiple, isolated availability zones to protect against disasters. Services are scoped to regions except for a few like S3.
- AWS offers a variety of computing, networking, database, storage and security services according to different responsibility models.
This document provides an overview of Azure App Services and demos how to use some of its features. It begins with instructions on creating an Azure account. It then defines App Services as a fully managed platform that allows building and hosting web, mobile, and API apps without managing infrastructure. Key features highlighted include auto-scaling, multiple language support, and continuous deployment. The remainder gives a deeper dive on Web Apps and includes demos of deploying .NET, Node.js, and React apps using the Azure CLI and deployment slots. It concludes by reminding attendees to remember some core Azure concepts covered.
Amazon Web Services or simply known as AWS has been continually expanding its services to support virtually any cloud workload, and it now has more than 40 services.
For more details - http://www.i2k2.com/services/amazon-web-services/aws/
What is Microsoft Azure?
What is Azure used for?
Why do businesses want to use someone else's hardware?
What are the advantages of virtualization?
Is Azure secure?
How does Azure stack up against the competition?
To help you make an informed decision about whether Azure is right for your business.
O documento introduz o AWS Auto Scaling, que permite escalar automaticamente a capacidade de processamento em resposta à demanda. Ele descreve como escalar verticalmente, melhorando os recursos de uma instância, e horizontalmente, adicionando ou removendo instâncias. Também explica como configurar o Auto Scaling usando ferramentas de linha de comando para criar grupos de escalabilidade automática e políticas de ajuste.
Cloud Migration 과 Modernization 을 위한 30가지 아이디어-박기흥, AWS Migrations Specialist...Amazon Web Services Korea
규모의 경제에서 속도의 경제로 이동하고 있는 요즘, 기업의 경쟁우위를 위하여 클라우드 마이그레이션과 애플리케이션 및 프로세스 현대화는 생존을 위한 필수조건이 되었습니다. 본 세션에서는 마이그레이션과 현대화를 위한 30여 가지 아이디어를 살펴보고자 합니다. 제약 이론, 도요타 생산방식과 같이 개선을 위한 기반 사상에서 DevOps, FinOps, SRE 등의 프랙티스와 그를 구성하는 SLA, Loosely Couple Architecture, CI/CD 등의 메카니즘, 그리고 마이그레이션을 위한 Transitional Architecture, Data Migration Architecture 등 30여 가지 아이디어를 공유합니다.
발표영상 다시보기: https://youtu.be/-45noG3dQqo
데이터의 중요성은 더이상 반복할 필요가 없이 모두가 알고 있습니다. 비지니스에서 데이터를 활용하여 혁신하고 성장하는 사례는 전세계 모든 산업에서 확인 할 수 있습니다. AWS에서는 가장 빠르고 쉽게 데이터를 수집하고 분석할 수 있는 Data Lake 아키텍쳐를 가이드하고 직접 고객이 쉽게 빌드 할수 있도록 도와드립니다. 고객이 데이터에 대한 호기심만 가지고 있다면, AWS는 데이터를 통해 원하는 정형/비정형 데이터 분석, Data Warehouse, Machine Learning, Data Science 와 같은 거의 모든 방법을 제공합니다.
This document provides an overview of PowerApps and Flow. PowerApps allows users to create apps that access and manipulate data from external sources like Excel and SQL. Flow allows users to design automated workflows that can be triggered and run continuously in the cloud. The document discusses when to use PowerApps versus Flow, how to build solutions with them, best practices, and limitations. It also covers converting existing InfoPath forms and SharePoint workflows to the new platforms.
누가 내 엔터프라이즈 고객을 클라우드로 옮겼을까?-양승호, Head of Cloud Modernization,AWS::AWS 마이그레이션 ...Amazon Web Services Korea
마이그레이션처럼 새로운 일을 시작하기에 앞서 갖는 두려움, 익숙한 환경으로부터 변화하는 것에 대한 거부감, 다가올 변화를 감지하고도 과거의 경험과 기억 속에 갇혀 앞을 볼 수 없었기에 놓쳐버린 것에 대한 후회… 하지만 변화를 긍정적으로 받아들여 새로움에 적응하고 도전을 즐길 수 있을 때 진정한 가치를 찾을 수 있다. 대규모 마이그레이션, 즉 엔터프라이즈 고객이 클라우드로 옮겨가기 위해 필요한 진단 및 처방, 구체적인 준비 및 계획, 마이그레이션 및 현대화, 그리고 비용 최적화를 포함하는 단계별 접근법을 안내하고, AWS 마이그레이션 가속화 프로그램 (MAP)에서 제공하는 패키지화된 오퍼링을 소개하며, 마이그레이션 여정의 각 단계별 이정표에 따라 클라우드로 이전하는 체계적인 방법론과 모범 사례를 안내합니다.
대용량 데이터베이스의 클라우드 네이티브 DB로 전환 시 확인해야 하는 체크 포인트-김지훈, AWS Database Specialist SA...Amazon Web Services Korea
고객사 A는 하루 30억 트랜잭션과 연 750TB의 데이터베이스를 온프레미스 환경에서 상용 데이터베이스를 이용하여 운영 중입니다. 또한 매일 대용량의 배치가 발생하고 실시간으로 대량의 조회가 발생하는 미션 크리티컬 시스템입니다. 고객사 A와 함께 클라우드 환경에서 동일한 워크로드의 수행이 가능한지 여부를 검증하는 Feasiblity Pilot 프로젝트를 진행하였고 여기서의 레슨런을 공유합니다. 마이그레이션 도중 고객 IT팀은 On-premise 운영 모델에서 클라우드 운영 모델로 전환되어야 합니다. 전환 도중에 ITIL을 클라우드, 애자일, DevOps 기반 역량과 프로세스에 매핑해야 합니다. 해당 세션에서는 클라우드 운영 모델로 원활한 전환을 도와주는 CEE (Cloud Enablement Engine)의 작동 원리 및 적용 방식을 살펴보고자 합니다.
This document provides an overview of modernizing enterprise applications with Azure Platform-as-a-Service (PaaS). It discusses reasons why businesses modernize like reducing technical debt and optimizing costs. It also covers challenges of modernization like fragmented security and conflicting priorities. The document then presents different approaches to application migration and modernization on Azure including migrating to IaaS, replacing with SaaS, staying on-premises but connected to cloud, and modernizing directly on PaaS. Key benefits of a successful modernization are also listed like prioritizing security, resilience, and performance as well as innovating faster. The document concludes with case studies of companies successfully modernizing applications on Azure.
영상 다시보기: https://youtu.be/aoQOqhVtdGo
기존 온-프레미스 환경에서 운영 중인 서버들을 AWS 클라우드로 옮겨오기 위한 방법은 무엇일까요? 본 세션에서는 리눅스 서버, 윈도우 서버 그리고 VMWare 등에서 운영되는 기존 서버의 클라우드 이전 방법을 소개합니다. 이를 통해 AWS의 기업 고객이 대량 마이그레이션을 진행했는지 고객 사례도 함께 공유합니다. 뿐만 아니라 VMware on AWS 및 AWS Outpost 같은 하이브리드 옵션을 통해 클라우드 도입을 가속화 하는 신규 서비스 동향도 살펴봅니다.
There are options beyond a straight forward lift and shift into Azure IaaS. What are your options? Learn how Azure helps modernize applications faster with containers and how you can use serverless to add additional functionality while keeping your production codebase 'clean'. We'll also learn how to incorporate DevOps throughout your apps lifecycle and take advantage of data-driven intelligence. Demo intensive session integrating the likes of Service Fabric, AKS VSTS and more.
Slides from my presentation on the available automation options available in Microsoft 365. From the desktop apps right through to things like PowerShell.
This document provides an introduction to Amazon Web Services (AWS), including:
- AWS is a cloud provider that offers on-demand servers and services that can easily scale. It powers websites like Amazon and Netflix.
- AWS has a global infrastructure spanning 69 availability zones across 22 regions worldwide, with plans to expand to 3 more regions.
- AWS regions contain multiple, isolated availability zones to protect against disasters. Services are scoped to regions except for a few like S3.
- AWS offers a variety of computing, networking, database, storage and security services according to different responsibility models.
This document provides an overview of Azure App Services and demos how to use some of its features. It begins with instructions on creating an Azure account. It then defines App Services as a fully managed platform that allows building and hosting web, mobile, and API apps without managing infrastructure. Key features highlighted include auto-scaling, multiple language support, and continuous deployment. The remainder gives a deeper dive on Web Apps and includes demos of deploying .NET, Node.js, and React apps using the Azure CLI and deployment slots. It concludes by reminding attendees to remember some core Azure concepts covered.
Amazon Web Services or simply known as AWS has been continually expanding its services to support virtually any cloud workload, and it now has more than 40 services.
For more details - http://www.i2k2.com/services/amazon-web-services/aws/
What is Microsoft Azure?
What is Azure used for?
Why do businesses want to use someone else's hardware?
What are the advantages of virtualization?
Is Azure secure?
How does Azure stack up against the competition?
To help you make an informed decision about whether Azure is right for your business.
O documento introduz o AWS Auto Scaling, que permite escalar automaticamente a capacidade de processamento em resposta à demanda. Ele descreve como escalar verticalmente, melhorando os recursos de uma instância, e horizontalmente, adicionando ou removendo instâncias. Também explica como configurar o Auto Scaling usando ferramentas de linha de comando para criar grupos de escalabilidade automática e políticas de ajuste.
This document proposes incentive mechanisms called Network of Favors (NoF) and its variants to encourage cooperation among selfish peers in a federated cloud computing environment. The baseline NoF approach uses a local credit system to prioritize peers that have provided more resources to others in the past. A Satisfaction-Driven NoF (SD-NoF) maximizes the resources provided to maximize peer satisfaction, while a Fairness-Driven NoF (FD-NoF) regulates the resources provided through a feedback control loop to achieve good fairness levels. Simulation results show FD-NoF can achieve similar satisfaction levels to SD-NoF in high resource contention scenarios, while improving fairness by 44% in low contention scenarios, suggesting
O documento discute a motivação e ideias para montar um datacenter pessoal, incluindo usar o sistema para backups automatizados, armazenar conteúdo digital como fotos e vídeos, hospedar serviços como servidor web e banco de dados, e explorar tecnologias como ZFS e controle de versão.
O documento apresenta o serviço AWS Elastic Beanstalk, descrevendo-o como a maneira mais simples de implantar e escalar aplicações na nuvem. Detalha os benefícios do Elastic Beanstalk, como foco no código ao invés de gerenciamento de infraestrutura, escalabilidade automática e controle total dos recursos. Também fornece instruções sobre como implantar aplicações via console ou linha de comando e melhores práticas como teste de carga e configuração de logs e métricas.
O documento apresenta os conceitos e serviços da computação em nuvem da AWS. É discutido o que é computação em nuvem, os tipos de nuvem, os pilares, modelos em camadas, virtualização, infraestrutura AWS, segurança, e vários serviços como EC2, S3, DynamoDB, Redshift, entre outros. O palestrante também apresenta suas credenciais e canais de contato.
Este documento apresenta o planejamento da implantação de um novo data center para a empresa Via Real Telecom, com foco no layout, climatização e organização do cabeamento. O data center será categorizado como Tier 2 de acordo com a norma ANSI/TIA-942 e terá 120m2. O layout segregará as áreas conforme a norma, com foco na separação da infraestrutura de entrada para provedores de telecom e da área de equipamentos críticos.
Paralelize seus testes web e mobile para ter feedbacks mais rápidosElias Nogueira
O documento discute estratégias para executar testes automatizados de forma paralela em web e mobile. Ele apresenta como usar grids com Selenium e Appium para distribuir testes em vários nós, reduzindo o tempo de execução. A solução proposta utiliza containers Docker para criar grids dinâmicas que escalam automaticamente com base na demanda de testes.
O documento discute o serviço AWS Elastic Beanstalk, que permite aos desenvolvedores implantar e gerenciar aplicações na nuvem da AWS de forma rápida e simples. O Elastic Beanstalk automatiza a configuração e provisionamento de infraestrutura necessária para rodar aplicações web, removendo a necessidade de gerenciar servidores, banco de dados e outros recursos manualmente. O documento também fornece instruções sobre como implantar aplicações no Elastic Beanstalk usando a linha de comando ou console da AWS.
AWS EC2 Container Service (ECS) In Action - iMasters Developer Week - VitoriaHeitor Vital
Docker permite empacotar aplicações e suas dependências em containers leves e portáteis. O Amazon ECS permite executar tarefas Docker em containers em clusters de instâncias EC2 de forma gerenciada e escalável na nuvem AWS. O documento explica como configurar e usar os principais componentes do ECS, como clusters, instâncias de container, definições de tarefa e execução de tarefas por linha de comando.
Containers PostgreSQL com a Crunchy Container SuiteRoberto Mello
Uma introdução à containers e à PostgreSQL em containers usando a Crunchy Container Suite, tocando na parte de Kubernetes. Suas funcionalidades são apresentadas, vantagens e desvantagens.
O documento apresenta o serviço AWS Elastic Beanstalk, que permite aos desenvolvedores implantar e gerenciar aplicações na nuvem da AWS de forma rápida e simples. O Elastic Beanstalk automatiza a configuração e provisionamento de infraestrutura necessária para rodar aplicações web e fornece recursos como balanceamento de carga, escalabilidade automática e versionamento de aplicações.
Conhecendo o ubuntu enterprise cloud - UECFabiano Weimar
Este documento fornece uma introdução ao Ubuntu Enterprise Cloud (UEC), explicando seus principais conceitos e componentes, além de instruções básicas para instalação. O UEC permite criar nuvens privadas e públicas baseadas no Eucalyptus, com API similar ao Amazon EC2. Sua arquitetura inclui controladores para cloud, armazenamento, clusters e nós, onde as máquinas virtuais rodam.
Docker Swarm - Sua aplicação pronta para escalargustavomtborges
Docker Swarm permite executar containers em múltiplos hosts em modo de cluster, gerenciando load balancing, escalabilidade e atualizações de forma integrada. Serviços e tasks definem as unidades de trabalho no cluster, podendo rodar em número fixo ou escalar automaticamente. A demonstração mostra como iniciar um cluster Swarm e implantar nele serviços e stacks com Docker Compose.
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
Interface de Usuário também é coisa de Programador, o objetivo deste treinamento é vivenciar um ambiente de desenvolvimento empregando estas tecnologias, abordando conceitos de testes unitários, integrados, padrões e boas práticas de desenvolvimento
Este documento descreve um laboratório prático no qual o estudante deve criar e configurar vários recursos na nuvem do Google Cloud, como instâncias, clusters Kubernetes e balanceadores de carga, para atender às necessidades de um projeto fictício. O estudante deve completar as tarefas dentro do tempo limite para obter a pontuação máxima.
Este documento descreve um laboratório prático no qual o estudante deve criar e configurar vários recursos na nuvem do Google Cloud, como instâncias, clusters Kubernetes e balanceadores de carga, para atender às necessidades de um projeto fictício. O estudante deve completar as tarefas dentro do tempo limite para obter a pontuação máxima.
Este documento fornece instruções para configurar balanceadores de carga HTTP e de rede no Google Cloud Platform. Ele explica como configurar pools de destino, regras de encaminhamento e verificações de integridade para distribuir tráfego entre instâncias de máquina virtual de forma balanceada.
O documento discute a ferramenta Cypress.io para automatizar testes de ponta a ponta. Cypress.io é uma ferramenta moderna, simples e eficaz para desenvolver testes E2E que simulam o ambiente real de aplicações. A ferramenta permite escrever testes rapidamente em JavaScript e oferece recursos como execução de testes no mesmo ciclo da aplicação.
Preparar o ambiente para desenvolvimento angularNize Costa
O documento explica os passos para configurar o ambiente de desenvolvimento Angular 4 com TypeScript, incluindo a instalação do Node.js, NPM e Angular CLI. Também mostra como criar um projeto Angular usando o comando "ng new" e iniciar o servidor local com "ng serve".
O documento discute técnicas de teste de unidade para códigos difíceis de testar, como códigos com dependências externas. Apresenta mocks como uma solução para remover dependências e tornar o código isolado e testável. Explica o framework PowerMock e como ele permite simular métodos estáticos e finais através de manipulação de bytecode, tornando mais códigos testáveis. Por fim, demonstra um exemplo prático de uso do PowerMock para simular uma classe final.
Este documento fornece instruções para configurar um servidor proxy Squid em Linux. Ele explica como instalar e configurar o Squid para fornecer acesso à Internet para uma rede interna, bloquear sites indesejados e gerar relatórios de uso. Também descreve funções adicionais como restringir acesso por horário e autenticar usuários.
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
A empresa 4linux é pioneira no ensino de Linux à distância no Brasil, com mais de 30.000 alunos satisfeitos. Ela possui experiência em missões críticas, é parceira de treinamento da IBM e foi a primeira empresa no Brasil a oferecer certificação LPI.
1) Docker é uma plataforma que permite empacotar aplicações e suas dependências para serem executadas de forma isolada em containers leves.
2) Os containers Docker podem rodar aplicações de forma consistente em diversos ambientes como desenvolvimento, teste, produção sem se preocupar com dependências.
3) Isso traz benefícios como facilidade de implantação, portabilidade entre plataformas, reprodutibilidade de ambientes e isolamento entre aplicações.
O documento discute práticas de engenharia de software aplicadas à infraestrutura, incluindo:
1) Testes automatizados de infraestrutura para garantir qualidade e permitir mudanças contínuas;
2) Ferramentas como Chef, InSpec e Test Kitchen para definir infraestrutura como código e testar provisionamento;
3) Exemplos de como escrever testes de unidade para Chef recipes e testes de integração/aceitação para infraestrutura.
Este documento descreve um projeto open source chamado EDW CENIPA que utiliza Pentaho e Docker para construir um data warehouse para análises dinâmicas de ocorrências aeronáuticas no Brasil de forma barata e escalável. Ele explica como o projeto usa ferramentas como Amazon Web Services, Docker, Pentaho e PostgreSQL para baixar dados do governo, armazená-los em um banco de dados e fornecer dashboards interativos utilizando containers Docker orquestrados.
Apresentação do artigo "Controlando a Contenção de Recursos para Promover Justiça em uma Federação Peer-to-Peer de Nuvens Privadas" no WCGA 2015 - SBRC 2015.
Este documento apresenta conceitos sobre serviços de computação em nuvem da AWS, incluindo: (1) EC2 para provisionamento de instâncias virtuais; (2) ELB para balanceamento de carga entre instâncias; (3) Auto Scaling para dimensionamento automático de instâncias; (4) CloudWatch para monitoramento de recursos. O documento descreve características e vocabulário desses serviços.
A AWS surgiu para resolver os problemas de escalabilidade do site da Amazon. Seus primeiros serviços foram SQS, S3 e EC2, permitindo comunicação entre componentes, armazenamento escalável na nuvem e computação elástica por hora. Posteriormente lançou outros serviços como RDS, ELB, Auto Scaling e CloudWatch para armazenamento de dados, balanceamento e monitoramento de carga.
Este documento apresenta os principais conceitos da computação em nuvem, incluindo: (1) os modelos de serviço como SaaS, PaaS e IaaS; (2) as cinco características essenciais da nuvem como auto-serviço sob demanda, amplo acesso, pooling de recursos, elasticidade rápida e serviço medido; e (3) os quatro modelos de implantação da nuvem.
Este documento introduz os sistemas distribuídos, definindo-os como um conjunto de computadores independentes que aparecem para os usuários como um único sistema coerente. Explora as motivações, características e tipos de sistemas distribuídos, incluindo clusters, supercomputadores, grids, sistemas pervasivos e nuvem.
Este documento apresenta uma introdução ao curso de Sistemas Distribuídos. Ele discute os objetivos do curso, os tópicos que serão abordados, como a avaliação será realizada e os resultados esperados ao final do curso. Os alunos aprenderão os conceitos fundamentais de sistemas distribuídos e como implantar um sistema escalável na nuvem AWS.
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...Eduardo de Lucena Falcão
- O documento discute o problema da otimização da multiplicação de cadeias de matrizes. Aborda possíveis soluções como programação dinâmica, minimização de cache miss e abordagens distribuídas com threads e OpenMP. Realiza análise comparativa do desempenho dessas abordagens no problema.
INFORMAÇÃO ARQUEOLÓGICA DE INGÁ: preservação, acesso e uso a partir de um amb...Eduardo de Lucena Falcão
Este documento discute a preservação do sítio arqueológico Itacoatiaras do Ingá, localizado em Ingá, Paraíba, através da criação de um ambiente virtual 3D. Uma equipe multidisciplinar coletou informações sobre o local e as categorizou para compor o ambiente virtual, permitindo a divulgação e acesso remoto ao sítio arqueológico.
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...Eduardo de Lucena Falcão
Este documento discute várias abordagens para resolver o problema da multiplicação de cadeias de matrizes de forma otimizada, incluindo: (1) programação dinâmica para encontrar a ordem ótima de multiplicação, (2) minimização de cache miss ao modificar a ordem de loops, e (3) uso de threads para explorar processadores multicore. O objetivo é analisar esses métodos e medir seu impacto no desempenho.
No ensino de arquitetura de computadores, um dos principais desafios é fazer com que os alunos compreendam com mais facilidade o funcionamento de um processador. Para auxiliar a esta tarefa, são utilizadas aplicações que simulam tais arquiteturas. A proposta do presente trabalho é desenvolver uma aplicação, disponibilizada na web, que simule visualmente as instruções de uma arquitetura didática e implementável. É possível visualizar a simulação de tais instruções com ou sem pipeline, o que facilita a compreensão das mesmas e do funcionamento de um processador enquanto as executam.
Seminário apresentado na disciplina de Teoria da Computação. Aborda o processo de tradução da língua portuguesa para a Libras, exemplificando as possíveis aplicações dos assuntos de Teoria da Computação, como autômatos.
A Lei de Moore prevê o aumento exponencial do número de transistores nos processadores a cada dois anos, porém os desafios da escala de tamanho dos transistores e o aumento do consumo de energia ameaçam essa lei.
A memória não consegue acompanhar o aumento de desempenho dos processadores multicore devido ao "problema da parede da memória", forçando novas abordagens como a hierarquização da memória.
A lei de Amdahl mostra que mesmo com processadores multicore
Este documento discute estilos de interação para auxiliar o processo fisioterápico, como o uso de luvas de dados, biofeedback e realidade virtual. Feedback preciso é essencial para avaliar exercícios, e diferentes dispositivos como sensores fornecem esse feedback de forma não invasiva.
O documento resume conceitos fundamentais de mineração de dados, incluindo: 1) Visão geral do processo KDD e das etapas de extração de informações dos dados; 2) Tarefas comuns de mineração de dados como classificação e associação; 3) Técnicas como árvores de decisão e redes neurais. O documento também discute ferramentas como o Weka e aplicações práticas de mineração de dados.
Ambiente de Simulação Gráfica 3D para Ensino da Arquitetura de ProcessadoresEduardo de Lucena Falcão
1. O documento descreve um simulador gráfico 3D para ensinar arquitetura de processadores.
2. O simulador permite visualizar instruções sendo executadas de forma passo-a-passo em um processador com e sem pipeline para facilitar a compreensão.
3. O simulador usa animações 3D para mostrar o fluxo de informações durante a execução de instruções de uma forma intuitiva.
Ambiente de Simulação Gráfica 3D para Ensino da Arquitetura de ProcessadoresEduardo de Lucena Falcão
Aula 7 - Hands On - Configurando nossa aplicação na AWS com EC2, Elastic Load Balancing e Auto Scaling
1. Introdução a Sistemas Distribuídos
Hands On Configurando nossa
aplicação na AWS com EC2,
Elastic Load Balancing e
AutoScaling
Eduardo de Lucena Falcão
Amazon CloudWatch
5. 25/05/2013 5
Configurando seu Ambiente
● Não é preciso muito, a AWS é 100% virtual:
– Um desktop ou notebook (com acesso a Internet, é claro);
– Um cartão de crédito (pra configurar uma conta AWS);
– Um telefone (para completar o processo de registro).
● Software:
– Java: para utilizar as ferramentas de linha de comando
e/ou como Linguagem de Programação da sua aplicação
(API Java p/ AWS);
– Eclipse (caso realmente for programar em Java).
6. 25/05/2013 6
Conta AWS
●
Sugiro fortemente que vocês criem suas próprias contas AWS.
– Possibilita o uso do AWS Management Console;
– Amazon Free Usage Tier por um ano para todos os serviços:
● Por exemplo, é possível utilizar uma instância micro por 750h/mês.
– S3: 5 GB de armazenamento padrão, 20.000 solicitações de Get,
2.000 solicitações de Put, 15 GB de transferência de dados para
fora a cada mês;
– SQS e SimpleDB também oferecem transferências de dados e
espaço grátis no primeiro ano.
● Lembre-se de parar as instâncias quando não estiver mais usando, e
isso lhe fará economizar;
● É possível criar alarmes: Amazon CloudWatch.
7. 25/05/2013 7
Conta AWS
● Para quem não quiser criar a conta:
– Fornecerei um par de chaves para acesso ;)
8. 25/05/2013 8
Eclipse e JVM e AWS sdk
● Opção 1
● $ sudo apt-get update
● $ sudo apt-get install openjdk-6-jdk
● Extrair pasta do eclipse juno em sua
home
– http://www.eclipse.org/downloads/
● Extrair pasta do AWS JDK em sua
home
– http://sdk-for-java.amazonwebservices.com/latest/aws-java-sdk.zip
● Iniciar um projeto Java e adicionar as
bibliotecas da pasta aws-java “libs” e
“thitrd-party” ao nosso classpath
● Opção 2 (mais fácil mas falha às vezes)
● $ sudo apt-get install eclipse
1. Abra "Help" (Ajuda) -> "Install New
Software." ;
2. Digite http://aws.amazon.com/eclipse
na caixa de texto rotulada “Work with”;
3. Selecione “AWS Toolkit for Eclipse” na
lista a seguir;
4. Clique em “Next”.
1. Escolha AWS SDK for Java
5. Next ==> Next...
9. 25/05/2013 9
Primeiro Teste
● Crie um novo Projeto Java;
– Na pasta aws-java-sdk-1.4.3/samples/AwsConsoleApp
● Copie o AWSConsoleApp.java e AwsCredentials.properties
para a pasta src do seu projeto
● Adicione os seguintes jars no buildpath:
– aws-java-sdk-1.4.3/lib/aws-java-sdk-1.4.3.jar
– Todos os jars da pasta third-party
● Peça a AwsCredentials.properties ao professor e atualize;
● Execute AWSConsoleApp.java
11. 25/05/2013 11
Gerenciador de das Instâncias EC2
● Peça a classe chamada EC2Manager ao professor:
– Nela teremos todos os nossos métodos para
criar/parar/terminar nossa instâncias EC2.
– É uma alternativa a vocês não terem acesso ao AWS
Console Manager.
12. 25/05/2013 12
Criando nossa 1ª instância EC2
● Peça seu par de chaves ao professor. (para criar a
instância acoplada à sua chave)
● Execute o método createNewInstance (uma única vez)
– Em seguida: execute getInstancePublicDns, e guarde o
DNS público que o método imprimirá na console.
● Checando se nossa instância está executando:
1.Conectar-se via ssh à mesma;
2.Checar via AWS Management Console.
13. 25/05/2013 13
Conectando à Instância EC2
1.Abra o terminal;
2.Localize sua chave privada (eduardo-falcao.pem);
3.Sua chave não pode estar publicamente visível para o
SSH funcionar:
1.$ chmod 400 eduardo-falcao.pem
4.Conecte-se a sua intância usando o DNS Público dela:
[ec2-54-235-27-45.compute-1.amazonaws.com]
5.
$ ssh -i eduardo-falcao.pem [email protected]
15. 25/05/2013 15
Testando a aplicação
● Primeiro testamos localmente – mais fácil de depurar
1.Gerar o WAR;
2.Instalar o Tomcat
3.Deploy do WAR no Tomcat
16. 25/05/2013 16
Para instalação do Tomcat c/
Eclipse no Ubuntu
1. $ sudo apt-get install tomcat7
$ sudo apt-get update (executar antes, caso ainda não o
tenha executado)
2. Para linkar ao Eclipse: (para testar durante o
desenvolvimento)
1. $ sudo ln -s /var/lib/tomcat7/conf /usr/share/tomcat7/conf
2. $ sudo ln -s /etc/tomcat7/policy.d/03catalina.policy
/usr/share/tomcat7/conf/catalina.policy
3. $ sudo ln -s /var/log/tomcat7 /usr/share/tomcat7/log
4. $ sudo chmod -R 777 /usr/share/tomcat7/conf
17. 25/05/2013 17
Deploy no Tomcat (local)
● cd /var/lib/tomcat7/webapps/ROOT
● sudo unzip -d . /home/eduardo/workspace/Quicksort-Restful.war
● http://localhost:8080 (Welcome Page)
● http://localhost:8080/requests (Página onde recebo minhas
requisições)
● $ curl -X POST -d @intArray.json http://localhost:8080/requests
--header "Content-Type:application/json"
19. 25/05/2013 19
Implantando a aplicação no EC2
1.Copiar o arquivo .WAR para a instância EC2
$ scp -i eduardo-falcao.pem
/home/eduardo/workspace/Quicksort-Restful.war ubuntu@ec2-50-
16-146-100.compute-1.amazonaws.com:/home/ubuntu
2.Conectar-se à sua instância via ssh
– ssh -i eduardo-falcao.pem [email protected]
1.amazonaws.com
3.Instalar o tomcat:
$ sudo apt-get update (se ainda não tiver executado antes)
$ sudo apt-get install tomcat7
20. 25/05/2013 20
Configurando o Tomcat no EC2
● Configurando as portas do Tomcat: o Tomcat7 roda na porta 8080
por padrão. Mas a porta padrão no Grupo de Segurança do EC2 é
80. Lembre-se de checar isso no Amazon EC2 Management Console.
– $ sudo vim /etc/tomcat7/server.xml
– $ sudo vim /etc/default/tomcat7
– $ sudo service tomcat7 restart
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="443" />
AUTHBIND=yes
21. 25/05/2013 21
Deploy do WAR no Tomcat
● $ cd /var/lib/tomcat7/webapps/ROOT/
● $ sudo rm -rf *
● Considerando que ainda estamos na pasta ROOT:
– $ sudo unzip -d . /home/ubuntu/Quicksort-Restful.war
● Checar se o WAR foi implantado via Web browser:
– DNS público: http://ec2-50-16-146-100.compute-1.amazonaws.com/
– Curl (POST):
● curl -X POST -d @intArray.json http://ec2-50-16-146-100.compute-
1.amazonaws.com/requests --header "Content-
Type:application/json"
22. 25/05/2013 22
Testando a aplicação
1º Teste de Carga: Sistema Convencional
Quantas requisições eu consigo atender em 5 minutos?
Hands On - 4
24. 25/05/2013 24
Wrong Way!
● Bash Script com requisições POST.
●
Bloqueante
#!/bin/bash
START=$(date +%s)
for i in {1..5}
do
curl -X POST -d @intArray-
5000.json http://ec2-50-16-146-
100.compute-
1.amazonaws.com/requests --header
"Content-Type:application/json"
done
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"
●
Não Bloqueante
#!/bin/bash
START=$(date +%s)
for i in {1..5}
do
curl -X POST -d @intArray-
5000.json http://ec2-50-16-146-
100.compute-
1.amazonaws.com/requests --header
"Content-Type:application/json" &
done
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"
25. 25/05/2013 25
Right Way! (Apache Benchmark)
● INSTALAR EM UMA INSTÂNCIA EC2 AWS
● $ sudo apt-get install apache2-utils
● Requisição HTTP/GET de uma página HTML
– Quantidade de requisições: 100
– Nível de concorrência: 10
– URL:
http://ec2-50-16-146-100.compute-1.amazonaws.com/
● ab -n 100 -c 10
http://ec2-50-16-146-100.compute-1.amazonaws.com/
27. 25/05/2013 27
Right Way! (Apache Benchmark)
http://httpd.apache.org/docs/2.2/programs/ab.html
28. 25/05/2013 28
Projetando nosso Teste
● Quicksort
● Quanto ao nível de concorrência?
● Quanto à heterogeneidade da carga?
– Nº de elementos de nosso array:
● Máximo e mínimo;
– Quantidades de requisições?
– Conteúdo das requisições?
● Pior e melhor caso do algoritmo.
● Objetivo: aproximar nosso teste da realidade!
29. 25/05/2013 29
Tipos de Teste
1.Em quanto tempo meu sistema
consegue atender N requisições?
2.Quantas requisições eu consigo
atender em N minutos?
30. 25/05/2013 30
Projetando nosso Teste
● Quicksort – qual a carga real desse sistema? o.O
● Quanto ao nível de concorrência? 100
● Quanto à heterogeneidade da carga?
– Nº de elementos de nosso array:
● Muito pouco: 10;
● Pouco: 100;
● Médio: 1000;
● Alto: 5000;
● Muito alto: 10000;
– Quanto tempo de medição? 20 minutos
– Conteúdo das requisições? (Não abordado)
● Pior e melhor caso do algoritmo.
32. 25/05/2013 32
Exemplo simples
● Array com 10 elementos (Meu PC)
– Time taken for tests: 300.035 seconds
– Complete requests: 1447
– Failed requests: 0
– Requests per second: 4.82 [#/sec] (mean)
– Time per request: 207.350 [ms] (mean, across all concurrent requests)
● Array com 10 elementos (EC2)
– Time taken for tests: 300.034 seconds
– Complete requests: 15461
– Failed requests: 0
– Requests per second: 51.53 [#/sec] (mean)
– Time per request: 19.406 [ms] (mean, across all concurrent requests)
33. 25/05/2013 33
Análise Geral dos Resultados
● Testado a partir de meu PC
● Quando o nosso sistema convencional é submetido a
uma carga variada (de 10 a 10000 elementos por
requisição) fornecida por 50 usuários simultâneos
durante 5 minutos nós temos os seguintes resultados:
– Complete requests: 4449 (1447+1422+1263+209+108 )
– Failed requests: 5
– Requests per second: 2,964 =
(4,82+4,74+4,21+0,69+0,36)/5
– Time per request (ms):
(1447*207.350)+(1422*211.070)+(1263*237.584)+(209*144
7.802)+(108*2786.235) = 1503749.58 / 4449 = 337.997 ms
● Testado a partir de uma instância EC2
● Quando o nosso sistema convencional é
submetido a uma carga variada (de 10 a
10000 elementos por requisição) fornecida
por 50 usuários simultâneos durante 5
minutos nós temos os seguintes resultados:
– Complete requests: 58539
(15461+14758+13196+10536+4588)
– Failed requests: 0
– Requests per second: 39,018 =
(51,53+49,19+43,98+35,10+15,29)/5
– Time per request (ms):
(15461*19.406)+(14758*20.330)+(13196*22.7
38)+(10536*28.487)+(4588*65.399) =
1500306,598 / 58539 = 25.629 ms
34. 25/05/2013 34
Projetando nosso Teste
● Quicksort – qual a carga real desse sistema? o.O
● Quanto ao nível de concorrência? 100
● Quanto à heterogeneidade da carga?
– Nº de elementos de nosso array:
● Muito pouco: 10;
● Pouco: 100;
● Médio: 1000;
● Alto: 5000;
● Muito alto: 10000;
– Quanto tempo de medição? 20 minutos
– Conteúdo das requisições? (Não abordado)
● Pior e melhor caso do algoritmo.
35. 25/05/2013 35
Projetando nosso Teste
#!/bin/bash
#20 minutos array com 10 números, -n 1000000 para que nao pare em 50K requisicoes
ab -t 1200 -n 1000000 -c 20 -p intArray-10.json -T Content-Type:application/json http://ec2-50-16-146-
100.compute-1.amazonaws.com/requests > resposta-arrays-com-tamanho-10.txt &
#20 minutos array com 100 números, -n 1000000 para que nao pare em 50K requisicoes
ab -t 1200 -n 1000000 -c 20 -p intArray-100.json -T Content-Type:application/json http://ec2-50-16-146-
100.compute-1.amazonaws.com/requests > resposta-arrays-com-tamanho-100.txt &
#20 minutos array com 1000 números, -n 1000000 para que nao pare em 50K requisicoes
ab -t 1200 -n 1000000 -c 20 -p intArray-1000.json -T Content-Type:application/json http://ec2-50-16-146-
100.compute-1.amazonaws.com/requests > resposta-arrays-com-tamanho-1000.txt &
#20 minutos array com 5000 números, -n 1000000 para que nao pare em 50K requisicoes
ab -t 1200 -n 1000000 -c 20 -p intArray-5000.json -T Content-Type:application/json http://ec2-50-16-146-
100.compute-1.amazonaws.com/requests > resposta-arrays-com-tamanho-5000.txt &
#20 minutos array com 10000 números, -n 1000000 para que nao pare em 50K requisicoes
ab -t 1200 -n 1000000 -c 20 -p intArray-10000.json -T Content-Type:application/json http://ec2-50-16-146-
100.compute-1.amazonaws.com/requests > resposta-arrays-com-tamanho-10000.txt &
36. 25/05/2013 36
Análise dos Resultados
● Array com 10 elementos
– Time taken for tests: 1200.056 seconds
– Complete requests: 70950
– Failed requests: 0
– Requests per second: 59.12 [#/sec] (mean)
– Time per request: 16.914 [ms] (mean, across all concurrent requests)
● Array com 100 elementos
– Time taken for tests: 1200.056 seconds
– Complete requests: 69535
– Failed requests: 0
– Requests per second: 57.94 [#/sec] (mean)
– Time per request: 17.258 [ms] (mean, across all concurrent requests)
37. 25/05/2013 37
Análise dos Resultados
● Array com 1000 elementos
– Time taken for tests: 1200.037 seconds
– Complete requests: 74929
– Failed requests: 0
– Requests per second: 62.44 [#/sec] (mean)
– Time per request: 16.016 [ms] (mean, across all concurrent requests)
● Array com 5000 elementos
– Time taken for tests: 1200.157 seconds
– Complete requests: 42301
– Failed requests: 0
– Requests per second: 35.25 [#/sec] (mean)
– Time per request: 28.372 [ms] (mean, across all concurrent requests)
38. 25/05/2013 38
Análise dos Resultados
● Array com 10000 elementos
– Time taken for tests: 1200.507 seconds
– Complete requests: 24050
– Failed requests: 0
– Requests per second: 20.03 [#/sec] (mean)
– Time per request: 49.923 [ms] (mean, across all concurrent requests)
39. 25/05/2013 39
Análise Geral dos Resultados
● Testado a partir de uma instância EC2
● Quando o nosso sistema convencional é submetido a uma carga
variada (de 10 a 10000 elementos por requisição) fornecida por 100
usuários simultâneos durante 20 minutos nós temos os seguintes
resultados:
– Complete requests: 281765 (70950+69535+74929+42301+24050)
– Failed requests: 0
– Requests per second: 46,956 = (59,12+57,94+62,44+35,25+20,03)/5
– Time per request (ms):
(70950*16,914)+(69535*17,258)+(74929*16,016)+(42301*28,372)+(24050*4
9,923) = 6000958,316 / 281765 = 21.297 ms
40. 25/05/2013 40
Como otimizar o nosso Sistema
via AWS?
● Utilizando instâncias EC2, com o AutoScale
para escalonar automaticamente, e o Elastic
Load Balancer para fazer um balanceamento
de carga automático entre essas instâncias.
42. 25/05/2013 42
Criando uma Imagem
● Se tudo tiver ocorrido perfeitamente até agora, já
podemos criar uma Imagem do nosso Sistema.
● Execute o método registerNewAmi (guarde a imageID)
● Execute o método createNewInstance, usando a nova
imageID como parâmetro
– Em seguida: execute getInstancePublicDns, e guarde o
DNS público que o método imprimirá na console;
– Verifique se sua instância iniciou, tentando acessar os
serviços fornecidos pela mesma.
43. 25/05/2013 43
Elastic Load Balancing
● Exemplo: criar um ELB com 5 máquinas, sem AutoScale, e rodarei nosso benchmark.
● Passo 1: criar novas instâncias EC2 com nossa AMI previamente gerada.
●
Passo 2: criar um ELB passando como instância os Ids dessas máquinas recém-
criadas, Zonas de Disponibilidade em que o ELB atuará, e seus Listeners.
– Passo 2.1: configure um Listener.
● Listener listener = new Listener("HTTP", 80, 80);
● Parâmetros;
– Protocol: TCP, HTTP, HTTPS;
– Load balancer port – porta na qual o ELB irá receber as requisições.
– Instance port – porta na qual o ELB usará para encaminhar requisições à
outras instâncias.
– createElasticLoadBalancer("elbSimples", listener, new String[] {"i-2edf554f","i-
b62006dd","i-76df5517"}, new String [] {"us-east-1b"});
44. 25/05/2013 44
Elastic Load Balancer
● Passo 3: configure o HealthCheck;
– Timeout: tempo limite pra receber uma resposta de um
“health check”;
– Interval: tempo entre uma checagem e outra;
– UnhealthyTreshold: número de checagens antes de declarar
uma instância como “Unhealthy”/não saudável;
– HealthyTreshold: número de checagens antes de declarar
uma instância como “Healthy”/saudável;
– Target: parte do sistema em que será checado a saúde.
46. 25/05/2013 46
Elastic Load Balancer
● Passo 4: requisite o DNS público de seu ELB;
– getLoadBalancerPublicDns("elbSimples")
● Passo 5: checando se nosso ELB está funcionando;
– Entre com o DNS no browser e verifique se o serviço
está sendo fornecido como esperado.
● Agora vamos projetar a nossa 2ª carga de teste!
47. 25/05/2013 47
Testando a aplicação
2º Teste de Carga: Sistema Distribuído Não Escalável
com 5 instâncias
Quantas requisições eu consigo atender em 20 minutos?
Hands On - 6
49. 25/05/2013 49
Projetando nosso 2º Teste
● Quicksort – qual a carga real desse sistema? o.O
● Quanto ao nível de concorrência? 100
● Quanto à heterogeneidade da carga?
– Nº de elementos de nosso array:
● Muito pouco: 10;
● Pouco: 100;
● Médio: 1000;
● Alto: 5000;
● Muito alto: 10000;
– Quanto tempo de medição? 20 minutos
– Conteúdo das requisições? (Não abordado)
● Pior e melhor caso do algoritmo.
50. 25/05/2013 50
Projetando nosso Teste
#!/bin/bash
#20 minutos array com 10 números, -n 1000000 para que nao pare em 50K requisicoes
ab -t 1200 -n 1000000 -c 20 -p intArray-10.json -T Content-Type:application/json http://elbsimples-286769172.us-
east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-10.txt &
#20 minutos array com 100 números, -n 1000000 para que nao pare em 50K requisicoes
ab -t 1200 -n 1000000 -c 20 -p intArray-100.json -T Content-Type:application/json http://elbsimples-286769172.us-
east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-100.txt &
#20 minutos array com 1000 números, -n 1000000 para que nao pare em 50K requisicoes
ab -t 1200 -n 1000000 -c 20 -p intArray-1000.json -T Content-Type:application/json http://elbsimples-
286769172.us-east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-1000.txt &
#20 minutos array com 5000 números, -n 1000000 para que nao pare em 50K requisicoes
ab -t 1200 -n 1000000 -c 20 -p intArray-5000.json -T Content-Type:application/json http://elbsimples-
286769172.us-east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-5000.txt &
#20 minutos array com 10000 números, -n 1000000 para que nao pare em 50K requisicoes
ab -t 1200 -n 1000000 -c 20 -p intArray-10000.json -T Content-Type:application/json http://elbsimples-
286769172.us-east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-10000.txt &
51. 25/05/2013 51
Análise dos Resultados
● Array com 10 elementos
– Time taken for tests: 1200.045 seconds
– Complete requests: 207013
– Failed requests: 0
– Requests per second: 172.50 [#/sec] (mean)
– Time per request: 5.797 [ms] (mean, across all concurrent requests)
● Array com 100 elementos
– Time taken for tests: 1200.487 seconds
– Complete requests: 195892
– Failed requests: 0
– Requests per second: 163.18 [#/sec] (mean)
– Time per request: 6.128 [ms] (mean, across all concurrent requests)
52. 25/05/2013 52
Análise dos Resultados
● Array com 1000 elementos
– Time taken for tests: 1200.271 seconds
– Complete requests: 183052
– Failed requests: 0
– Requests per second: 152.51 [#/sec] (mean)
– Time per request: 6.557 [ms] (mean, across all concurrent requests)
● Array com 5000 elementos
– Time taken for tests: 1200.148 seconds
– Complete requests: 39334
– Failed requests: 0
– Requests per second: 32.77 [#/sec] (mean)
– Time per request: 30.512 [ms] (mean, across all concurrent requests)
53. 25/05/2013 53
Análise dos Resultados
● Array com 10000 elementos
– Time taken for tests: 1201.065 seconds
– Complete requests: 28502
– Failed requests: 0
– Requests per second: 23.73 [#/sec] (mean)
– Time per request: 42.140 [ms] (mean, across all concurrent requests)
54. 25/05/2013 54
Análise Geral dos Resultados
● Quando o nosso sistema distribuído com ELB e 5 instâncias EC2 é
submetido a uma carga variada (de 10 a 10000 elementos por
requisição) fornecida por 100 usuários simultâneos durante 20
minutos nós temos os seguintes resultados:
– Complete requests: 653793 (207013+195892+183052+39334+28502)
– Failed requests: 0
– Requests per second: 108,938 =
(172,5+163,18+152,51+32,77+23,73)/5
– Time per request (ms):
(207013*5.797)+(195892*6.128)+(183052*6.557)+(39334*30.512)+(285
02*42.140) = 6001985,789/653793 = 9.18 ms
55. 25/05/2013 55
Comparativo: Sistema Convencional vs
Sistema Distribuído (ELB + 5 EC2)
● Quando o nosso sistema convencional é
submetido a uma carga variada (de 10 a 10000
elementos por requisição) fornecida por 100
usuários simultâneos durante 20 minutos nós
temos os seguintes resultados:
– Complete requests: 281765
(70950+69535+74929+42301+24050)
– Failed requests: 0
– Requests per second: 46,956 =
(59,12+57,94+62,44+35,25+20,03)/5
– Time per request (ms):
(70950*16,914)+(69535*17,258)+(74929*16,016)+(
42301*28,372)+(24050*49,923) = 6000958,316 /
281765 = 21.297 ms
● Quando o nosso sistema distribuído com ELB e 5
instâncias EC2 é submetido a uma carga variada
(de 10 a 10000 elementos por requisição)
fornecida por 100 usuários simultâneos durante
20 minutos nós temos os seguintes resultados:
– Complete requests: 653793
(207013+195892+183052+39334+28502)
– Failed requests: 0
– Requests per second: 108,938 =
(172,5+163,18+152,51+32,77+23,73)/5
– Time per request (ms):
(207013*5.797)+(195892*6.128)+(183052*6.557)+(3
9334*30.512)+(28502*42.140) =
6001985,789/653793 = 9.18 ms
56. 25/05/2013 56
Comparativo: Sistema Convencional vs
Sistema Distribuído (ELB + 5 EC2)
● Quando o nosso sistema convencional é
submetido a uma carga variada (de 10 a 10000
elementos por requisição) fornecida por 100
usuários simultâneos durante 20 minutos nós
temos os seguintes resultados:
● Quando o nosso sistema distribuído com ELB
e 5 instâncias EC2 é submetido a uma carga
variada (de 10 a 10000 elementos por
requisição) fornecida por 100 usuários
simultâneos durante 20 minutos nós temos os
seguintes resultados:
57. 25/05/2013 57
Comparativo: Sistema Convencional vs
Sistema Distribuído (ELB + 5 EC2)
● Quando o nosso sistema convencional é
submetido a uma carga variada (de 10 a 10000
elementos por requisição) fornecida por 100
usuários simultâneos durante 20 minutos nós
temos os seguintes resultados:
● Quando o nosso sistema distribuído com ELB
e 5 instâncias EC2 é submetido a uma carga
variada (de 10 a 10000 elementos por
requisição) fornecida por 100 usuários
simultâneos durante 20 minutos nós temos os
seguintes resultados:
58. 25/05/2013 58
Tipos de Teste
1.Em quanto tempo meu sistema
consegue atender N requisições?
2.Quantas requisições eu consigo atender
em N minutos?
59. 25/05/2013 59
Testando a aplicação
3º Teste de Carga: Sistema Convencional vs Sistema
Distribuído com ELB e 5 instâncias EC2
Em quanto tempo meu sistema consegue atender 5000000
requisições?
Hands On - 7
61. 25/05/2013 61
Projetando nosso 3º Teste
● Quicksort – qual a carga real desse sistema? o.O
● Quanto ao nível de concorrência? 100
● Quanto à heterogeneidade da carga?
– Nº de elementos de nosso array:
● Muito pouco: 10;
● Pouco: 100;
● Médio: 1000;
● Alto: 5000;
● Muito alto: 10000;
– Quantidade de requisições? 1000000
– Conteúdo das requisições? (Não abordado)
● Pior e melhor caso do algoritmo.
62. 25/05/2013 62
Testando o Sist. Convencional
#!/bin/bash
#100000 requisicoes com array com 10 números
ab -n 100000 -c 20 -p intArray-10.json -T Content-Type:application/json http://ec2-50-16-146-100.compute-
1.amazonaws.com/requests > resposta-arrays-com-tamanho-10.txt &
#100000 requisicoes com array com 100 números
ab -n 100000 -c 20 -p intArray-100.json -T Content-Type:application/json http://ec2-50-16-146-100.compute-
1.amazonaws.com/requests > resposta-arrays-com-tamanho-100.txt &
#100000 requisicoes com array com 1000 números
ab -n 100000 -c 20 -p intArray-1000.json -T Content-Type:application/json http://ec2-50-16-146-100.compute-
1.amazonaws.com/requests > resposta-arrays-com-tamanho-1000.txt &
#100000 requisicoes com array com 5000 números
ab -n 100000 -c 20 -p intArray-5000.json -T Content-Type:application/json http://ec2-50-16-146-100.compute-
1.amazonaws.com/requests > resposta-arrays-com-tamanho-5000.txt &
#100000 requisicoes com array com 10000 números
ab -n 100000 -c 20 -p intArray-10000.json -T Content-Type:application/json http://ec2-50-16-146-100.compute-
1.amazonaws.com/requests > resposta-arrays-com-tamanho-10000.txt &
63. 25/05/2013 63
Testando o Sist. Distribuído (ELB
+ 5 EC2)
#!/bin/bash
#100000 requisicoes com array com 10 números
ab -k -n 100000 -c 20 -p intArray-10.json -T Content-Type:application/json http://elbsimples-
286769172.us-east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-10.txt &
#100000 requisicoes com array com 100 números
ab -k -n 100000 -c 20 -p intArray-100.json -T Content-Type:application/json http://elbsimples-
286769172.us-east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-100.txt &
#100000 requisicoes com array com 1000 números
ab -k -n 100000 -c 20 -p intArray-1000.json -T Content-Type:application/json http://elbsimples-
286769172.us-east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-1000.txt &
#100000 requisicoes com array com 5000 números
ab -k -n 100000 -c 20 -p intArray-5000.json -T Content-Type:application/json http://elbsimples-
286769172.us-east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-5000.txt &
#100000 requisicoes com array com 10000 números
ab -k -n 100000 -c 20 -p intArray-10000.json -T Content-Type:application/json http://elbsimples-
286769172.us-east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-10000.txt &
64. 25/05/2013 64
Análise Geral dos Resultados
(ELB + 5 EC2) vs Sist. Convenc.
● Quando o nosso sistema convencional é
submetido a uma carga variada (de 10 a
10000 elementos por requisição)
fornecida por 100 usuários simultâneos
com 500000 requisições nós temos os
seguintes resultados:
– Complete requests: 499999
– Time taken for tests: 3784.8s =
63.08min
(1607.9+1551.9+1582.9+2457.5+3784.8)
– Failed requests: 1 (0+0+1+0+0)
– Requests per second: 51.38 =
(62.19+64.43+63.17+40.69+26.42)/5
– Time per request (ms): 21,964 ms
(16.07+15.52+15.82+24.57+37.84)/5=
109.82/5
● Quando o nosso sistema distribuído com
ELB e 5 instâncias EC2 é submetido a uma
carga variada (de 10 a 10000 elementos por
requisição) fornecida por 100 usuários
simultâneos com 500000 requisições nós
temos os seguintes resultados:
– Complete requests: 499996
– Time taken for tests: 1468.2s = 24.47min
(1466.3+1465.7+1461+1460+1468.2)
– Failed requests: 4 (0+2+1+1+0)
– Requests per second: 59.956 =
(68.20+68.22+68.45+68.49+26.42)/5
– Time per request (ms): 19,272 ms
(14.66+14.65+14.61+14.6+37.84)/5= 96.36/5
65. 25/05/2013 65
Comparativo: Sistema Convencional vs
Sistema Distribuído (ELB + 5 EC2)
● Quando o nosso sistema convencional é
submetido a uma carga variada (de 10 a 10000
elementos por requisição) fornecida por 100
usuários simultâneos com 500000 requisições
nós temos os seguintes resultados:
● Quando o nosso sistema distribuído com ELB
e 5 instâncias EC2 é submetido a uma carga
variada (de 10 a 10000 elementos por
requisição) fornecida por 100 usuários
simultâneos com 500000 requisições nós temos
os seguintes resultados:
66. 25/05/2013 66
Comparativo: Sistema Convencional vs
Sistema Distribuído (ELB + 5 EC2)
● Quando o nosso sistema convencional é
submetido a uma carga variada (de 10 a 10000
elementos por requisição) fornecida por 100
usuários simultâneos com 500000 requisições
nós temos os seguintes resultados:
● Quando o nosso sistema distribuído com ELB
e 5 instâncias EC2 é submetido a uma carga
variada (de 10 a 10000 elementos por
requisição) fornecida por 100 usuários
simultâneos com 500000 requisições nós temos
os seguintes resultados:
67. 25/05/2013 67
Análise Geral dos Resultados Parciais -
(ELB + 5 EC2) vs Sist. Convenc.
● Analisando o teste de quantas requisições os dois
sistemas conseguem atender em 20 minutos (slides 53,
54, 55):
– Conseguimos um speedup de 2,32 na quantidade de
requisições atendidas: de 281765 para 653793;
– Aumentamos a capacidade de atender requisições por segundo
de 46,956 para 108,938 (aumento de 61,982 req/s);
– Conseguimos diminuir 12,117 ms no tempo de processamento
de uma requisição de 21.297 ms para 9.18 ms.
● Resumindo: tornamos o nosso sistema 2,32 x mais rápido.
68. 25/05/2013 68
Análise Geral dos Resultados Parciais -
(ELB + 5 EC2) vs Sist. Convenc.
● Analisando o teste de em quanto tempo os dois sistemas
conseguem atender em 500000 requisições (slides 62,
63 e 64):
– Conseguimos um speedup de 2,57 no tempo de
processamento das requisições: de 63,08 minutos para 24,47
minutos
● Resumindo: tornamos o nosso sistema 2,57 x mais rápido.
69. 25/05/2013 69
Análise Geral dos Resultados Parciais -
(ELB + 5 EC2) vs Sist. Convenc.
● Agora analisemos os gráficos de uso da CPU (20 minutos):
– Ao passo em que uma instância não é suficiente para tal
processamento, é possível também constatar que 5 instância só
seria interessante no início, e talvez três instâncias fossem o
ideal para o processamento durante o restante do processo.
70. 25/05/2013 70
Análise Geral dos Resultados Parciais -
(ELB + 5 EC2) vs Sist. Convenc.
● Agora analisemos os gráficos de uso da CPU (500000 requisições):
– No início, talvez o ideal realmente seja 5 ou 6 instâncias, mas
com o tempo o ideal é que elas diminuíssem para 1 ou 2
instâncias.
71. 25/05/2013 71
Análise Geral dos Resultados
(ELB + 5 EC2) vs Sist. Convenc.
● Quais as vantagens de se ter incorporado o ELB e 5 novas instâncias ao
nosso sistema?
– Mais poder de processamento; Balanceamento de Carga com fácil
implantação; Capacidade de detectar instâncias disfuncionais e desviar
tráfego para instâncias saudáveis, consegue se recuperar
automaticamente de falhas (ainda que aconteçam), ...
● O ELB supriu todas as nossas expectativas?
– Desvantagens: o balanceamento não é ideal para cargas heterogêneas,
não previne o acontecimento de falhas, falta de auto-escalonamento
(proporcionando melhores resultados e melhor controle financeiro); ...
73. 25/05/2013 73
Configurando o nosso Sistema
com ELB e Auto Scaling
● Passo 1: crie uma nova instância e com a mesma crie
um novo ELB para o Auto Scaling
Listener listener = new Listener("HTTP", 80, 80);
createElasticLoadBalancer("elbSimples-for-auto-scaling", listener, new String[] {"i-ee9c3b86"},
new String [] {"us-east-1b"});
HealthCheck healthCheck = new HealthCheck();
healthCheck.setInterval(10); //intervalo de Checagem
healthCheck.setHealthyThreshold(2); //qtdade de checagens para declarar uma
healthCheck.setUnhealthyThreshold(2); //instancia como healthy ou unhealthy
healthCheck.setTarget("HTTP:80/requests");//a checagem será feita na url requests
healthCheck.setTimeout(5); //tempo limite pra responder um checkout
configureHealthCheck("elbSimples-for-auto-scaling", healthCheck);
P.s.:Pode remover a instância depois do ELB criado.
74. 25/05/2013 74
Configurando o nosso Sistema
com ELB e Auto Scaling
● Passo 2: na classe AutoScalingManager, crie o seu
serviço Auto Scaling
– Passo 2.1: crie seu LaunchConfiguration
CreateLaunchConfigurationRequest launchConfiguration = new CreateLaunchConfigurationRequest();
launchConfiguration.setLaunchConfigurationName("launch-configuration-eduardo-falcao");
launchConfiguration.setImageId("ami-7350391a"); //trocar por sua img pre-configurada
launchConfiguration.setInstanceType("t1.micro");
launchConfiguration.setKeyName("eduardo-falcao"); //trocar por sua chave
ArrayList<String> securityGroupList = new ArrayList <String>();
securityGroupList.add("ISD-Estacio"); //trocar pelo seu SecurityGroup
launchConfiguration.setSecurityGroups(securityGroupList);
autoScaling.createLaunchConfiguration(launchConfiguration);
75. 25/05/2013 75
Configurando o nosso Sistema
com ELB e Auto Scaling
● Passo 2: na classe AutoScalingManager, crie o seu
serviço Auto Scaling
– Passo 2.2: crie seu AutoScalingGroup
CreateAutoScalingGroupRequest autoScalingGroup = new CreateAutoScalingGroupRequest();
autoScalingGroup.setLaunchConfigurationName("launch-configuration-eduardo-falcao");
ArrayList<String> loadBalancersList = new ArrayList <String>();
loadBalancersList.add("elbSimples-for-auto-scaling"); //trocar pelo elb que vc criou pro AutoScaling
autoScalingGroup.setLoadBalancerNames(loadBalancersList);
autoScalingGroup.setAutoScalingGroupName("auto-scaling-group-eduardo-falcao");
ArrayList<String> avaiLabilityZonesList = new ArrayList <String>();
avaiLabilityZonesList.add("us-east-1a");
avaiLabilityZonesList.add("us-east-1b");
autoScalingGroup.setAvailabilityZones(avaiLabilityZonesList);
autoScalingGroup.setMaxSize(10);
autoScalingGroup.setMinSize(1);
autoScaling.createAutoScalingGroup(autoScalingGroup);
76. 25/05/2013 76
Configurando o nosso Sistema
com ELB e Auto Scaling
● Nosso Auto Scaling já está criado! Por enquanto não
definimos nenhuma política de escalonamento.
● Mas já temos a disponibilidade garantida!
● O ELB tenta equilibrar o nº de máquinas em cada
Zona de Disponibilidade.
...
autoScalingGroup.setMaxSize(10);
autoScalingGroup.setMinSize(1); //o ideal seria 2 para serviços mais importantes
autoScaling.createAutoScalingGroup(autoScalingGroup);
77. 25/05/2013 77
Escalonando nosso Sistema sob
Demanda
1.Eventos (proc. de CPU, I/O da rede, ...)
2.Monitoramento (CloudWatch)
3.Triggers
1.Horário (meu escalonamento acontecerá toda noite)
2.Manual (meu escalonamento mínimo é 5)
3.Métricas (quando alcançar 60% de processamento)
4.Políticas de Escalonamento
1.Adicionar/Remover capacidade (adicionar 1 instância EC2)
2.Capacidade exata (10 instâncias EC2)
3.Percentual (50% de minha capacidade atual)
78. 25/05/2013 78
Criando nossa 1ª Política de
Escalonamento – Scale Out
● Quando essa política for acionada: o auto scaling irá
aumentar em 1 instância pra atender aquela demanda. E
novas políticas só poderão se ativadas depois de 1
minuto.
PutScalingPolicyRequest scalingOutPolicy = new PutScalingPolicyRequest();
scalingOutPolicy.setAutoScalingGroupName("auto-scaling-group-eduardo-falcao");
scalingOutPolicy.setPolicyName("Scale_Out");
scalingOutPolicy.setAdjustmentType("ChangeInCapacity");
scalingOutPolicy.setScalingAdjustment(1);
scalingOutPolicy.setCooldown(60); //se escalonou, espera esse tempo antes de checar novas políticas
PutScalingPolicyResult scalingOutPolicyResult = autoScaling.putScalingPolicy(scalingOutPolicy);
79. 25/05/2013 79
Criando nosso 1º Trigger
My High CPU Alarm
● Esse é o Trigger utilizado para ativar a a política de
escalonamento Scale Out.
PutMetricAlarmRequest myHighCPUAlarm = new PutMetricAlarmRequest();
myHighCPUAlarm.setAlarmName("myHighCPUAlarm");
myHighCPUAlarm.setMetricName("CPUUtilization");
List<Dimension> dimensions = new ArrayList<Dimension>();
Dimension dimension = new Dimension();
dimension.setName("AutoScalingGroupName");
dimension.setValue("auto-scaling-group-eduardo-falcao"); //mudar para seu nome
myHighCPUAlarm.setDimensions(dimensions);
...
80. 25/05/2013 80
Criando nosso 1º Trigger
My High CPU Alarm
● Esse é o Trigger utilizado para ativar a a política de
escalonamento Scale Out.
...
myHighCPUAlarm.setNamespace("AWS/EC2");
myHighCPUAlarm.setComparisonOperator(ComparisonOperator.GreaterThanThreshold);
myHighCPUAlarm.setStatistic(Statistic.Average);
myHighCPUAlarm.setUnit(StandardUnit.Percent);
myHighCPUAlarm.setThreshold(60d);
myHighCPUAlarm.setPeriod(60);
myHighCPUAlarm.setEvaluationPeriods(1);
List<String> actions = new ArrayList<String>();
//Identifica que a ação a ser feita é a Política Scaling Out
actions.add(scalingOutPolicyResult.getPolicyARN());
myHighCPUAlarm.setAlarmActions(actions);
cloudWatch.putMetricAlarm(myHighCPUAlarm);
81. 25/05/2013 81
Criando nossa 2ª Política de
Escalonamento – Scale In
● Quando essa política for acionada: o auto scaling irá
aumentar em 1 instância pra atender aquela demanda. E
novas políticas só poderão se ativadas depois de 1
minuto.
PutScalingPolicyRequest scalingInPolicy = new PutScalingPolicyRequest();
scalingInPolicy.setAutoScalingGroupName("auto-scaling-group-eduardo-falcao");
scalingInPolicy.setPolicyName("Scale_In");
scalingInPolicy.setAdjustmentType("ChangeInCapacity");
scalingInPolicy.setScalingAdjustment(-1);
scalingInPolicy.setCooldown(60); //se escalonou, espera esse tempo antes de checar novas políticas
PutScalingPolicyResult scalingInPolicyResult = autoScaling.putScalingPolicy(scalingInPolicy);
82. 25/05/2013 82
Criando nosso 2º Trigger
My Down CPU Alarm
● Esse é o Trigger utilizado para ativar a a política de
escalonamento Scale In.
PutMetricAlarmRequest myDownCPUAlarm = new PutMetricAlarmRequest();
myDownCPUAlarm.setAlarmName("myDownCPUAlarm");
myDownCPUAlarm.setMetricName("CPUUtilization");
// List<Dimension> dimensions = new ArrayList<Dimension>();
// Dimension dimension = new Dimension();
// dimension.setName("AutoScalingGroupName");
// dimension.setValue("auto-scaling-group-eduardo-falcao");
myDownCPUAlarm.setDimensions(dimensions);
...
83. 25/05/2013 83
Criando nosso 2º Trigger
My Down CPU Alarm
● Esse é o Trigger utilizado para ativar a política de
escalonamento Scale In.
...
myDownCPUAlarm.setNamespace("AWS/EC2");
myDownCPUAlarm.setComparisonOperator(ComparisonOperator.LessThanThreshold);
myDownCPUAlarm.setStatistic(Statistic.Average); //média da utilização do CPU naquele tempo
myDownCPUAlarm.setUnit(StandardUnit.Percent);
myDownCPUAlarm.setThreshold(30d);
myDownCPUAlarm.setPeriod(60); //tempo em segundos para verificar o alarme
//quantas vezes consecutivas o alarme precisa ser ativado para executar a ação
myDownCPUAlarm.setEvaluationPeriods(2);
List<String> actions2 = new ArrayList<String>();
//Identifica que a ação a ser feita é a Política Scaling In
actions2.add(scalingInPolicyResult.getPolicyARN());
myDownCPUAlarm.setAlarmActions(actions2);
cloudWatch.putMetricAlarm(myDownCPUAlarm);
84. 25/05/2013 84
Testando o Sist. Distribuído
(Auto Scaling)
#!/bin/bash
#100000 requisicoes com array com 10 números
ab -k -n 100000 -c 20 -p intArray-10.json -T Content-Type:application/json http://elbsimples-for-auto-scaling-
1556089577.us-east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-10.txt &
#100000 requisicoes com array com 10 números
ab -k -n 100000 -c 20 -p intArray-100.json -T Content-Type:application/json http://elbsimples-for-auto-scaling-
1556089577.us-east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-100.txt &
#100000 requisicoes com array com 10 números
ab -k -n 100000 -c 20 -p intArray-1000.json -T Content-Type:application/json http://elbsimples-for-auto-scaling-
1556089577.us-east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-1000.txt &
#100000 requisicoes com array com 10 números
ab -k -n 100000 -c 20 -p intArray-5000.json -T Content-Type:application/json http://elbsimples-for-auto-scaling-
1556089577.us-east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-5000.txt &
#100000 requisicoes com array com 10 números
ab -k -n 100000 -c 20 -p intArray-10000.json -T Content-Type:application/json http://elbsimples-for-auto-scaling-
1556089577.us-east-1.elb.amazonaws.com/requests > resposta-arrays-com-tamanho-10000.txt &
85. 25/05/2013 85
Análise Geral dos Resultados
(ELB + 5 EC2) vs Sist. Convenc.
Quando o nosso sistema convencional
é submetido a uma carga variada (de
10 a 10000 elementos por requisição)
fornecida por 100 usuários
simultâneos com 500000 requisições
nós temos os seguintes resultados:
● Complete requests: 499999
● Time taken for tests: 3784.8s =
63.08min
(1607.9+1551.9+1582.9+2457.5+3784.
8)
● Failed requests: 1 (0+0+1+0+0)
● Requests per second: 51.38 =
(62.19+64.43+63.17+40.69+26.42)/5
● Time per request (ms): 21,964 ms
(16.07+15.52+15.82+24.57+37.84)/5=
109.82/5
Quando o nosso sistema distribuído
com ELB e 5 instâncias EC2 é
submetido a uma carga variada (de
10 a 10000 elementos por requisição)
fornecida por 100 usuários
simultâneos com 500000 requisições
nós temos os seguintes resultados:
● Complete requests: 499996
● Time taken for tests: 1468.2s =
24.47min
(1466.3+1465.7+1461+1460+1468.2)
● Failed requests: 4 (0+2+1+1+0)
● Requests per second: 59.956 =
(68.20+68.22+68.45+68.49+26.42)/5
● Time per request (ms): 19,272 ms
(14.66+14.65+14.61+14.6+37.84)/5=
96.36/5
Quando o nosso Sistema com
ELB e Auto Scaling é
submetido a uma carga
variada (de 10 a 10000
elementos por requisição)
fornecida por 100 usuários
simultâneos com 500000
requisições nós temos os
seguintes resultados:
● Complete requests: 49998
● Time taken for tests:
1605.923s = 26,76min
1605.923 = (1090,164;
1091.459; 1592.250;
1577.380; 1605.923)
● Failed requests: 2
● Requests per second: 74,36
=
(91,73+91,62+62,80+63,40+6
2,27)/5
● Time per request (ms):
87. 25/05/2013 87
Analisando o Gráfico do Sistema
com ELB e Auto Scaling
● Para esse teste específico é possível perceber que:
– precisamos tomar mais cuidado quando formos criar
mais instâncias;
● Ex.: é evidente que não há necessidade alguma de
criar as 3 últimas instâncias.
– Precisamos de uma política de terminação de
instâncias mais refinada.
● Percebemos que as instâncias cinza e verde
poderiam ter sido terminadas antes de atingir o
nível de processamento 0.
88. 25/05/2013 88
Breves Conclusões e Comparações
● Se por algum momento o Sistema com ELB e 5 EC2 lhe parecer ser
melhor (caso você compare apenas o tempo total do processamento de
todas as requisições), observe os seguintes pontos:
– A capacidade de processar requisições/segundo aumentou em 15
unidades;
– E o tempo por requisição diminuiu 6 ms. Essa diferença pode causar
grande impacto se o sistema recebe milhares de requisições/segundo;
– A configuração do nosso Auto Scaling não está refinada;
– Testes em curto período de tempo não são bons parâmetros;
– Em longos períodos de tempo há uma grande possibilidade dessa
infra (5 EC2) ser sub-utilizada ou insuficiente para nossa demanda. E
isso implica em muito dinheiro desperdiçado/perdido.
89. 25/05/2013 89
Conclusões
● Quando for aplicar definitivamente o Auto Scaling em seu
sistema, teste-o exaustivamente antes. Podem ser necessários
alguns ajustes nos Triggers e Scaling Policies.
● Ao testar:
– procure executar pela maior quantidade de tempo possível.
Algumas horas podem ser suficientes.
– Varie quantidade de requisições, Carga/Tamanho das
requisições, e número de requisições concorrentes,
procurando sempre se aproximar de um caso de teste real.
Sempre que possível, testar os piores casos possíveis.