Privacy policyContactsAbout siteOpinionsGitHubDonate
© EVILEG 2015-2018
Recommend hosting
TIMEWEB

Django - Tutorial 030. Opportunities VDS server for $ 5 for the project on Django

Ubuntu, Django, VDS

With the growth of site functionality, as well as attendance, it was possible to successfully test the capabilities of the current VDS server, which I currently use. I would like to describe my experience with VDS, as well as show how much this VDS keeps under certain conditions and sizes of the project.

I decided to tell about it right now, because a week ago I expanded the server's capacity by purchasing additional memory.

All the further narrative will be subjective, but I hope that it will make it possible to make a general picture, so that newcomers will be able to navigate in what server they need for their needs, and this will facilitate the choice of the server.

Server Configuration

Initially, the site worked on the minimum configuration that I managed to take. The fare is $5 per month. By the way, my ISP also has a cheaper tariff (190 rubles / month), but it is fixed, whereas my current tariff allows me to configure the configuration necessary for me and increase the server's capacity to one that is not available at fixed tariffs.

Configuration:

  1. Processor cores: 2 x 2,7 GHz
  2. RAM: 512 Mb
  3. SSD: 5Gb
  4. OS: Ubuntu 16.04
  5. Access to the Internet: 100 Mbit/s

All configuration of the server was done exclusively through the console, without any auxiliary tools like ISP Manager, which also absorbs some of the RAM, so this modest RAM was enough for me for a long time

Django project

The project itself has already grown quite strongly, and there are many data models responsible for such parts of the site as

To understand the whole scale, I will give the current structure of the data models of the site.

That is, the site is already a little more than a regular blog, and I make every effort to develop it in the framework of free time.

As the site grew and the code increased, there was a clear dependence on the increase in memory consumption. By the way ... it is possible to effectively reduce memory consumption by forcibly straightening the hands of the programmer by some methods of medieval torture. Seriously, in some cases it's enough to go through the program code of the project, find duplicate pieces of code and separate them into separate methods or subprojects; within Django, these will be applications (the Django structure of the site consists of applications). Therefore, periodic refactoring has become an integral part of website development for me.

If you take into account that in this configuration of the site there were three active instances of gunicorn , and also instances of celery, for the work of notifications, the memory consumption with such a project grew to 450 Mb in total, and some information began to be stored in the swap partition under which it was allocated 1Gb drive. As a result, the response of the site was 1.089 seconds according to Alexa Traffic Rank. After increasing the memory to 1 Gb and some optimization of the basic template, the response decreased to 0.857 seconds. I plan to work on the straightforwardness of the hands, the cleanliness of the code, and still enable the caching of the templates.

Site Attendance

In December 2017, the stable attendance of the site grew to 1,050-1150 unique visitors per day, which is very encouraging, and a new goal for me was (besides the development of functionality) to grow the site to 2,000 unique visitors.

The maximum attendance of the site was fixed on December 14, 2017 and amounted to 1,169 unique visitors per day.

But the load on the processor is not as great as you might think. The average daily load on the processor in this configuration is an example of 7 percent.

That is, there is actually no fundamental need to increase the number of processor cores in this server configuration.

Conclusions

In fact, Django on the minimum configuration of the VDS server, in my subjective opinion, can be at the level of 4000-5000 unique visitors with more modest functionality (about three times less). Which is quite good for a server for $5.

At the moment, I just increased the amount of RAM I needed.

If someone is interested in a hoster from whom I rent VDS, then this is TIMEWEB , which I recommend. During the time of using VDS-server there was not a single failure, the company warns about all preventive works and conducts them at night by MSK.

What I definitely would not recommend is to purchase virtual hosting. For Django it's a waste of money and time. Sooner or later you can start to grow and eventually you will need VDS, and there will begin problems with migration due to differences in the directory structure, etc.

For Django I recommend VDS-server of Timeweb hoster .

Comments

Only authorized users can post comments.
Please, Log in or Sign up
v
Jan. 17, 2019, 11:51 a.m.
vitalir12

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:20points,
  • Rating points-10
v
Jan. 17, 2019, 11:49 a.m.
vitalir12

C++ - Test 002. Constants

  • Result:50points,
  • Rating points-4
v
Jan. 17, 2019, 11:13 a.m.
vitalir12

C++ - Тест 003. Условия и циклы

  • Result:28points,
  • Rating points-10
Last comments
I
Jan. 16, 2019, 8:06 a.m.
IscanderChe

Заработало. Забыл model->select(); вписать.
I
Jan. 16, 2019, 8:02 a.m.
IscanderChe

Всё равно пусто, хотя строка с данными в базу добавляется.
Jan. 16, 2019, 7:51 a.m.
Евгений Легоцкой

потому, что нужно сохранять информацию для всех остальных ролей и столбцов через вызов переопределённого метода. Да к тому же вы ещё и зациклили вызов метода data. QVariant MySqlTableModel:...
I
Jan. 16, 2019, 7:43 a.m.
IscanderChe

Сделал вот так. В tableView ничего нет, кроме заголовка. QVariant MySqlTableModel::data(const QModelIndex &index, int role) const{ if (role == Qt::DisplayRole) { QTime ...
Now discuss on the forum
Jan. 18, 2019, 11:26 a.m.
nayk1982

Для Desktop делал так: void pause(int ms){ QTimer timer; timer.setInterval( qBound(1, ms, 3600000) ); timer.setSingleShot(true); QEventLoop loop; QObject::connect(&...
Jan. 17, 2019, 12:01 p.m.
Алексей Внуков

у меня просто есть отдельное поле с чекбоксамими какие колонки нужно отображать CheckBox { id: checkBox text: qsTr("some text") checked: true onC...
Jan. 15, 2019, 4:53 p.m.
Михаиллл

Спасибо, заработало.Но выдало обычный текст без форатирования HTML.Придется искать дальше
Jan. 15, 2019, 12:52 p.m.
BlinCT

Я же вам выше написал CLion умеет работать с ремоут машинами. И Qt так же собирает.
Join us in social networks

For registered users on the site there is a minimum amount of advertising