Subject description PG3402
Microservices
2024 Fall
Subject code
PG3402Version
1English name
MicroservicesSubject points
15Study level
First cycle degreeSemester
5th semester
Number of semesters
1Subject's supervisor
Bogdan MarculescuTeaching language
Norwegian / EnglishDecision
Translated version. The Norwegian version of this course description is approved by The Education Committee 15.05.2023 UU/EIT-case no. 40/23.
Introduction
As software systems grow in complexity, it becomes necessary to better handle their structure and interactions. One technique for managing complexity for online systems (e.g. REST, GraphQL, etc.) and for the communication protocols used (e.g. HTTP) is that of Microservices.
This course will introduce the concept of Microservices, and practical experience with the tools and methods that can be used to develop distributed systems, either from scratch or from existing monolithic systems. The students will learn how to use this type of software architecture, along with its benefits and drawbacks. The course will focus on Microservice Architectures, and topics that are essential to implementing those architectures (e.g. Load Balancers, Gateways, Circuit Breakers, message-oriented middleware, and auto-scaling). In addition, the students will gain a deeper understanding into the impact such architectural choices have on the software development process.
Learning Outcomes
Knowledge
The student...
- has good knowledge of the different benefits, drawbacks, and tradeoffs of monolithic and service oriented styles of software architecture
- understands and can discuss the tradeoffs of synchronous and asynchronous systems.
- understands and can discuss the impact of Microservice Architectures on essential system characteristics, like maintainability, flexibility, scalability
- understands and can discuss the impact of decision made regarding software architecture, selection of tools, and use pattens on the performance of the system they are developing
- understands and can discuss the changes that need to be made to the software development process as a result of adopting Microservice Architectures
- understands and can discuss continuous delivery, testing, and security in the context of distributed systems
Skills
The student...
- is able to design, implement, and deploy a system along the lines of Microservice Architectures
- is able to use the relevant tools to the development, deployment, and maintenance of distributed software systems
- can discuss, plan, and implement the re-design of a monolithic software system into a distributed system in line with Microservice Architectural concepts
- can plan and implement components specific to service-oriented systems (e.g. gateways, load balancing, containerisation and deployment with Docker, continuous delivery).
- can publish, present, and discuss their solution
General competence
The student...
- has broad understanding of the tools relevant to software development and communication within a software development context. This includes communication, version management and collaboration (git and GitHub), containerisation and deployment (Docker), testing of distributed systems (Cucumber)
- has an understanding of the wider software development process, and the impact that the choice of Microservice Architectures has on that process (e.g. requirement engineering, software verification and validation, and deployment and maintenance in the context of distributed systems)
- can design, present, and justify their solution to a given problem
- can successfully collaborate in the context of a software development team
- can successfully collaborate as a representative of a team with other teams
- can keep track of their work and contributions using software development processes like agile, and use them to manage their activities
Degree
Bachelor in IT - Computer Programming
Learning activities
Lectures, exercises, self-study, team-based project.
The students will work on a project, alone or in teams. New exercises and concepts will build on previous work, allowing the students to better understand those concepts, as well as understand the reasoning behind their adoption and their impact on software development work. Feedback with deal with functional issues (what does not work as intended), as well as discussing and presenting design choices, improving the quality and maintainability of code, and other improvements that are relevant to individual submissions.
Student work load
Participation in teaching and guidance - 96 hours
Self study - 200-250 hours
Execution and preparation for the exam - 100 hours
Recommended use of time in total - 400-450 hours
Tools
Selected IDE and frameworks and tools relevant to the topic (e.g. Docker, Git). These do not incur additional cost to the student.
Compulsory assignments
Verifiable coursework requirements: one or more assignments that must be collectively approved
Individual qualification: G/IG (approved/not approved)
Execution: individual
Verifiable (right of appeal): yes
Coursework requirements are to be handed in or conducted in accordance with information given by the lecturer and carried out within the duration of the course, as well as registered as approved/not approved at least two weeks before the exam/exam period.
Approved coursework requirements grant students permission to take exams. Unapproved coursework requirements result in the student’s withdrawal from the exam.
Examination
Exam: Individual portfolio assessment
Duration: 4 weeks
Grading scale: The Norwegian grading system uses the graded scale A - F, where A is the best grade, E is the lowest pass grade and F is fail
Weighting: 100 % of the overall grade
Support materials: All support materials are allowed
Re-sit examination
Re-sit coursework requirements: revise and resubmit the same coursework assignment
Re-sit exam: revise and resubmit an improved version of the individual portfolio assessment
Comments
The course will be delivered in English or Norwegian based on the lecturer(s) in the course. Recommended previous knowledge: Object oriented programming andfurther skills and knowledge obtained through the course "Backendprogramming" (or equivalent).