Desenvolvimento de Aplicações com Arquitetura Baseada em Microservices
Sistemas de Informação, Centro de Informática, (UFPE)
- Professor Vinicius Cardoso Garcia (vcg@cin.ufpe.br)
- Centro de Informática, horários: segunda (17:00-18:40) e quarta (18:50-20:30), sala E-112.
- Canal de comunicação oficial no Slack
- Aulas práticas, quando ocorrerem, serão no Lab G2 (preferencialmente).
Microservice é um estilo e padrão de arquitetura de software em que sistemas complexos são decompostos em serviços menores que trabalham em conjunto para formar serviços maiores. Os Microservices são serviços autônomos, independentes e independentemente implantáveis. No mundo de hoje, muitas empresas usam microservices como principal padrão para a construção de aplicativos corporativos grandes e orientados a serviços.
O framework Spring é um framework de programação popular com a comunidade de desenvolvedores por muitos anos. O Spring Boot removeu a necessidade de ter um conteiner leve de aplicação e forneceu um meio para implantar aplicativos leves e sem servidor. O Spring Cloud combina muitos componentes e junto com o OSS Netflix e fornece um ecossistema para executar e gerenciar microservices em grande escala. Ele fornece recursos como balanceamento de carga, registro de serviço, monitoramento, gateway de serviço e assim por diante.
No entanto, os microservices vêm com seus próprios desafios, como monitoramento, gerenciamento, distribuição, dimensionamento, descoberta, etc., especialmente quando se implanta em escala. A adoção de microservices sem abordar os desafios dos microservices comuns levaria a resultados catastróficos. A parte mais importante deste curso é discutir um modelo de capacidade de microservice agnóstico em termos de tecnologia que busca ajudar a resolver os desafios mais comuns do mundo de microservice.
Não há livro texto obrigatório. Entretanto, a seguir estão alguns livros que podem ser recomendados:
- Spring Microservices
- Spring Boot: Acelere o desenvolvimento de microsserviços
- Microservices for Java Developers A Hands-on Introduction to Frameworks and Containers
- Migrating to Cloud-Native Application Architectures
- Continous Integration
- Pattern: Monolithic Architecture
- Pattern: Microservice Architecture
- Introduction to Microservices, this is a seven‑part series of articles
- Spring IO
- Spring IO Website: http://www.spring.io
- Spring Boot: https://projects.spring.io/spring-boot/
- Spring Cloud: https://projects.spring.io/spring-cloud/
- Spring Projects: http://spring.io/projects
- Spring Guides: http://spring.io/guides
- Spring Document: http://spring.io/guides
- Spring Boot Docs: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
- Spring Boot API: http://docs.spring.io/spring-boot/docs/current/api/
- Stay Connected
- Twitter: http://twitter.com/springcentral
- YouTube: http://spring.io/video
- Questions: http://spring.io/questions
- JIRA: http://jira.spring.io
- Blog: http://spring.io/blog
- Help
- Stack Overflow: http://stackoverflow.com/questions/tagged/spring-boot
- Netflix Open Source Software Center
- The InfoQ eMag: Microservices vs. Monoliths - The Reality Beyond the Hype
- The cloud native application: Microservices with Spring Boot and Spring Cloud
- Production-Ready Microservices - Building Standardized Systems Across an Engineering Organization
- Microservices vs. Service-Oriented Architecture
- Canary deployments, A/B testing, and microservices with Ambassador
- Systems Performance: Enterprise and the Cloud
- Designing Data-Intensive Applications
- Continous Delivery
- The Evolution of DevSecOps Revisited
- Containers com Docker: Do desenvolvimento à produção
- Ansible: Up and Running
- Docker Tutorials and Labs (This repo contains Docker labs and tutorials authored both by Docker, and by members of the community)
- Entrega contínua em Android: Como automatizar a distribuição de apps
- Jenkins: Automatize tudo sem complicações
- Testes automatizados de software: Um guia prático
- Test-Driven Development: Teste e Design no Mundo Real
- Cloud Computing: Concepts, Technology & Architecture
- Four Layers of TCP/IP model, Comparison and Difference between TCP/IP and OSI models
- Travis CI, Test and Deploy with Confidence
- From open source to sustainable success: the Kubernetes graduation story
- Kubernetes Ingress: NodePort, Load Balancers, and Ingress Controllers
- Principles of Container-based Application Design
- Hands on Lab Overview: DevOps Cloud Native Microservices Development - YouTube
- Deploying Java Applications with Docker and Kubernetes & oreilly-docker-java-shopping
- Deploying Java Applications with Kubernetes and an API Gateway
- Microservices for Digital Transformation - case studies across ERP, Entertainment, Finance, Search, Auctions, and Cloud Industries
- Why Microservices Should Be Event Driven: Autonomy vs Authority
- 3 Easy Things to Do to Make Your Microservices More Resilient
- The Hardest Part About Microservices: Your Data
- Carving the Java EE Monolith Into Microservices: Prefer Verticals Not Layers
- Source code from "Learning Spring Boot" (original and upgrades)
- Microservices - Organizing Large Teams for Rapid Delivery
- The Journey from Monolith to Microservices - A Guided Adventure
- Simon Brown on the Role of the Software Architect in a Continuous Delivery Environment
- Microserviços na prática: o que aprendemos em 2 anos
- MicroProfile: uma nova forma de desenvolver aplicações corporativas na era dos microservices
- Desenvolvendo, expandindo e amadurecendo a prática de Engenharia de Caos
- Cinco coisas que todo desenvolvedor de software deve saber sobre Arquitetura de Software
- 9 perguntas frequentes sobre REST
- IF1006 - TÓPICOS AVANÇADOS EM SISTEMAS DE INFORMAÇÃO 3 (SERVIÇOS E INFRAESTRUTURA DE NUVEM) - 2017.1
- IF1004 - Seminários em Sistemas de Informação 3 (Desmistificando DevOps: Projetando Arquiteturas Efetivamente Escaláveis)
- Google Cloud Platform Blog
- DevOps | AWS Cloud | Cloud Tutorials for Beginners
- Microservices and Cloud-Native Applications with Spring 5.0
- Advanced Spring Boot
- Arquiteturas reativas e a experiência Mobile no Magazine Luiza
- Autorização de transações no Nubank: Consumindo serviços anos 80 com tecnologias atuais
- De monolítico a cloud native: uma jornada de erros e acertos na Wine.com.br
- Desenvolvendo, expandindo e amadurecendo a prática de Engenharia de Caos
- The Smart Parking story - Part 1, Part2 and Part 3
- Building Products at SoundCloud — Part I: Dealing with the Monolith, By Phil Calçado on June 11th, 2014
- Building Products at SoundCloud—Part II: Breaking the Monolith, By Phil Calçado on June 12th, 2014
- How we build microservices at Karma, Apr 4, 2016
- The Top 10 Adages in Continuous Deployment, by InfoQ on Sep 19, 2017
- Spotify Lessons: Learning to Let Go of Machines, by James Wen on Sep 19, 2017
- Preparing the Netflix API for Deployment, by Netflix Technology Blog on Nov 18, 2013
- XebiaLabs has a wide range of surveys and state of industry reports on DevOps-related topics that can be found at http://xebialabs.com/xl-resources/whitepapers/
- CA Technologies’ report gives some insights into business’ different understanding of DevOps and can be found at http://www.ca.com/us/collateral/white-papers/na/techinsights-report-what-smart-businesses-know-about-devops.aspx
- Continuous Deployment at IMVU: Doing the Impossible Fifty Times a Day, by Timothy Fitz on February 10, 2009
- M. Kassab, J. F. DeFranco and P. A. Laplante, "Software Testing: The State of the Practice," in IEEE Software, vol. 34, no. 5, pp. 46-52, 2017. doi: 10.1109/MS.2017.3571582
- R. Valerdi, "Why Software Is Like Baseball," in IEEE Software, vol. 34, no. 5, pp. 7-9, 2017. doi: 10.1109/MS.2017.3571583
- M. Kersten, "Value Stream Architecture," in IEEE Software, vol. 34, no. 5, pp. 10-12, 2017. doi: 10.1109/MS.2017.3571573
- E. Woods, "Should Architects Code?," in IEEE Software, vol. 34, no. 5, pp. 20-21, 2017. doi: 10.1109/MS.2017.3571574
- J. C. Carver, B. Penzenstadler, A. Serebrenik and A. Yamashita, "The Human Factor," in IEEE Software, vol. 34, no. 5, pp. 90-92, 2017. doi: 10.1109/MS.2017.3571580
- K. Carter, "Francois Raynaud on DevSecOps," in IEEE Software, vol. 34, no. 5, pp. 93-96, 2017. doi: 10.1109/MS.2017.3571578
Espera-se que os alunos vivenciem exposição prática a ferramentas, processos e princípios do desenvolvimento de aplicações baseadas na arquitetura de microservices, juntamente com as boas práticas e técnicas de implantação nos princípios de DevOps e as vantagens e desafios do uso e imersão na Computação em Nuvem através de projetos práticos, enquanto compreendem modelos e ideias de pesquisa por trás das ferramentas e processos. As aulas incluirão experiências de aprendizagem no estilo de workshops, onde os alunos irão trabalhar em um problema e receberão comentários do professor, colaboradores convidados e outros colegas de classe. Quando possível, palestras convidadas da indústria ajudarão a ilustrar exemplos de como a tecnologia é implantada na prática.
Na disciplina, será utilizada uma mistura de aulas tradicionais com atividades e workshops em sala de aula. Durante as aulas, abordaremos conceitos básicos relacionados aos tópicos a serem tratados na disciplina. Durante os workshops em sala de aula, realizaremos exemplos de exercícios com ferramentas relevantes que reforçam o material de aula. As avaliações serão baseadas nas aulas, exercícios dirigidos, workshops e o projeto final.
Para participar deste curso é desejável que os participantes tenham:
- Conhecimento básico de inglês técnico para leitura, estudo e acompanhamento das atividades propostas, uma vez que a maior parte do material disponível está em inglês.
- Conhecimento básico de arquitetura de computador, sistemas operacionais, redes, engenharia de software e banco de dados.
- Conhecimento de modelos de processo de desenvolvimento de software, em especial Metodologias Ágeis, testes de software. Conhecimento em TDD e BDD serão uma vantagem. Maiores informações podem ser consultadas no site da disciplina de Engenharia de Software (IF977).
- Experiência em sistemas de computação, armazenamento, infraestruturas de rede e computação em nuvem será uma vantagem.
- An empirical study on principles and practices of continuous delivery and deployment
- A biblioteca do Desenvolvedor de Software dos dias de hoje
- The Difference between SOA and Microservices?
- Projeto em equipe com até 3 membros [70%]
- Caráter puramente acadêmico e educacional. O projeto vai tratar de diversos aspectos do desenvolvimento de uma aplicação simples com arquitetura de microsserviços.
- Observações:
- Entrega fora do prazo: redutor de 1 ponto por dia de atraso.
- Atraso máximo: 1 (uma) semana. Após esse prazo, será dada nota zero para a respectiva atividade de avaliação.
- Trabalhos com referências bibliográficas inconsistentes terão um redutor no conteúdo técnico.
- Trabalhos “CTRL-C + CTRL-V” terão nota zero (vale tanto para cópia de colegas, como para trabalhos copiados da internet).
- Exercício Escolar Teórico Individual e/ou Atividades Práticas Individuais [30%]
- Exercício com questões objetivas
- Como atividade de recuperação é proposta a aplicação de um Exercício Escolar abordando os temas apresentados e discutidos em classe.
- Welcome, Methodology, Course Introduction (Core Topics)
- Introduction to Microservices Concepts
- Demystifying Microservices
- Building Microservices with Spring Boot
- Applying Microservices Concepts
- Microservices Evolution – A Case Study
- Scaling Microservices with Spring Cloud
- Autoscaling Microservices
- Logging and Monitoring Microservices
- Containerizing Microservices with Docker
- Managing Dockerized Microservices with Mesos and Marathon
- The Microservices Development Life Cycle