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
- Spring framework
- Spring Boot
- Spring Cloud
- Netflix Open Source Software Center
- The InfoQ eMag: Microservices vs. Monoliths - The Reality Beyond the Hype
- Production-Ready Microservices - Building Standardized Systems Across an Engineering Organization
- Microservices vs. Service-Oriented Architecture
- 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
- 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
- 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
# | Class | Topics | Resources | Assignments |
---|---|---|---|---|
01 | Feb-26 | Welcome, Methodology, Course Introduction (Core Topics) | ||
02 | Feb-28 | Introduction to Microservices Concepts | HW1 | |
03 | Mar-05 | Demystifying Microservices 1/2 | ||
04 | Mar-07 | Demystifying Microservices 2/2 | HW2 | |
05 | Mar-12 | Building Microservices with Spring Boot 1/2 | ||
06 | Mar-14 | Building Microservices with Spring Boot 2/2 | HW3 | |
07 | Mar-19 | Applying Microservices Concepts 1/2 | ||
08 | Mar-21 | Applying Microservices Concepts 1/2 | HW4 | |
09 | Mar-26 | Microservices Evolution – A Case Study 1/2 | ||
10 | Mar-28 | Microservices Evolution – A Case Study 2/2 | HW5 | |
11 | Apr-02 | Scaling Microservices with Spring Cloud 1/2 | ||
12 | Apr-04 | Scaling Microservices with Spring Cloud 1/2 | ||
13 | Apr-09 | Autoscaling Microservices 1/2 | ||
14 | Apr-11 | Autoscaling Microservices 2/2 | ||
15 | Apr-16 | Logging and Monitoring Microservices 1/2 | ||
16 | Apr-18 | Logging and Monitoring Microservices 2/2 | ||
17 | Apr-23 | Containerizing Microservices with Docker 1/2 | ||
18 | Apr-25 | Containerizing Microservices with Docker 2/2 | ||
19 | Apr-30 | Managing Dockerized Microservices with Mesos and Marathon 1/2 | ||
20 | May-02 | Managing Dockerized Microservices with Mesos and Marathon 2/2 | ||
21 | May-07 | The Microservices Development Life Cycle 1/2 | ||
22 | May-09 | The Microservices Development Life Cycle 2/2 | ||
23 | May-14 | |||
24 | May-16 | |||
25 | May-21 | |||
26 | May-23 | |||
27 | May-28 | |||
28 | May-30 | |||
29 | Jun-04 | |||
30 | Jun-06 | |||
31 | Jun-11 | |||
32 | Jun-13 | |||
33 | Jun-18 | |||
34 | Jun-20 | |||
35 | Jun-25 | |||
36 | Jun-27 | |||
37 | Jul-02 | |||
38 | Jul-04 | |||
39 | Jul-09 | |||
40 | Jul-11 |