Examination assignment 2 – 2DV517
This text describes the second assignment in the course 2dv517. This assignment is a group assignment.
Purpose of this assignment
This assignment strive to give the student:
- Practical experience with a provisioning/configuration management tool for solving a defined scenario.
- Practical experience of analyzing a problem and define a infrastructure need for solving the problem.
- Practical experience of installing and configure a monitoring system for that infrastructure
- Practical experience working with the ideas of “Infrastructure as code” in a group project
- Experience and solving problems that occur in the context of the project
The problem to solve
The company ACME Corporation is having some problem with their website.
After releasing new products last months their website has been receiving much more traffic. In consequence, the site has come slow and sometimes it is even unresponsive. The site is built around the CMS system WordPress and today it is hosted on an single server running all of the required services and tools like database, static files, WordPress core code etc.
Another problem the company has with the website is how it is being configured over the years. Today, the server running the whole thing is like a snowflake server and they are afraid to upgrade WordPress to a newer, more secure, version. But now they have decided to add some resources to this problem.
The company has given your group the assignment to try to fix these problems. To be able to handle the load increment on the web site you must introduce a load balancer (hopefully with high availability) and also separate the different services and be able to scale these (ability to add more instances). You should redesign the infrastructure to support the DevOps mindset with configuration management when moving the old single instance solution to a more scalable one hosted on a OpenStack cloud using a configuration management tool.
Today the system look like this:
As shown in the figure, the service today includes three main components running on a Ubuntu 16.04 LTS:
- The WordPress code base (version 4.6 – this is an old version) and the code for plug-ins – This runs on an web server with support for PHP and only changes when you update/upgrade WordPress or one of the plugins.
- Database server, MySQL or MariaDB – This holds persistent data like user accounts, site pages, news, plugin data and so on.
- User files – Administrators of the site can upload images and other document to the platform, these are usually stored in a folder on the web server.
What the company want
The company wants more scalability. They want to be able to have at least three instances of the WordPress server but probably want to easy add more. The database should be split up to own instances and provide a master-server replication where the master has write/read and the slave are read only. The files should live on a own file server or maybe a volume if possible.
The company also wants a monitoring service so that they could easily monitor the servers as much and as reasonably as you think. There should be an easy way to get a visual view over the monitoring and also get some kind of alarm if something bad is happening (server going down, CPU panicking or something)
These are the companies wishes and your assignment is to address them a much as possible.
Data from the company
Here is a zip-file (containing the recent data) from the company: WordPress files and data
If you need more data or information be sure to ask for it on the iterative meetings where the teachers also will act as customers.
What is expected of you
As a student in the group you are expected to add at least 20 hours a week on this course. You are free to plan your time with the group.
The vision of the project is to solve the problem for the company but since this is a course project where the goal of learning is more important then the artefact provided you won’t fail the course even if the whole solution is not complete and you can show through commits, meetings with supervisor, assigned tickets/issues and the documentation of the project that you have spent the time needed and tried to solve the problem.
As a student you are expected to be active in the project and be contactable for the group during the project. If not you will be thrown out of the group and be failing this part of the course (meaning next time for this is next years course)
How to work in the group
You should follow the best practices and development guides that you have learn during the initial weeks of the course (IaC, DevOps, Cloud System Administration, Git, etc.).
The group is free to split the work between its members, decide which role each member has in the group and when you have your own meetings (an advice is to have daily stand-ups). We will meet weekly all the groups and then course coordinator to discuss the weekly progress. During this meetings you should describe what the group has done, the problems that the group has found, the decisions that have been taken about prioritizing/discarding activities, how the group has separated the work and how you will work until the next meeting.
The course managements role in this meetings is both coaching and play the role of customer. Peer-instruction and help is expected from the other groups. Help from group “X” towards members of group “Y” during our weekly meetings will be rewarded.
At the end of the course you will:
- Present your results (live online or using a prerecorded video). Show how you run your code to create and tear down your infrastructure, show how the monitoring works (what it measures and how it notifies) and also explain how the solution could handle changeability of the software.
- Submit a report that includes a description of the work done (in a PDF, Max. 10 pages) and the code developed.
Along with the code for creating your infrastructure the group should provide a video video recording showing how it works. The video should show how you run your code to create and tear down your infrastructure, show how the monitoring works (what it measures and how it notifies) and also explain how the solution could handle changeability of the software.
Of course the groups works should be visible in the Github repo (commits, issues, project board and so on)
At the end of the course, you will also provide:
- An individual reflection of the project. It should include the following parts:
- Your name
- Your personal reflection of the project
- What went good
- What went bad
- Core benefits of managing systems infrastructure using IaC and following DevOps principles
- Challenges and/or limitations of this IaC and DevOps approach
- Do you like to keep this group for the next course
- Points to your team members considering their contribution to the project. You have 20 points to distribute among all the member of your team (including yourself).
All the submissions will be through myMoodle platform
How to start
Make sure to have a initial group meeting discussing the project. You also have to decide what tools to use, your commit strategies and how to approach the problem. All of this point should be discussed before the first meeting with the course management. You also may have some questions about the project itself so collect these to this first meeting since all information isn’t in this text.
Then we take it from there…