Реализация балансировки нагрузки в Django - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь implement Балансировка нагрузки в Django, используя метод Round Robin. Сначала я создал модель, в которой я сохранил все экземпляры и последовательность каждого экземпляра.

Моя модель:

class Load_Balancing(models.Model):
    id = models.AutoField(primary_key=True)
    instance = models.CharField(max_length=100)
    sequence = models.IntegerField()

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

Не зная о ваших намерениях получить экземпляр в вашем представлении и выполнить любые дальнейшие операции с ним, ниже может быть простой Po C для достижения этого.

Однако я настоятельно рекомендую вам go с помощью решения iklina c и пересмотрите свой архитектурный дизайн.

Вы можете создать модель, которая будет служить вам счетчиком. Обратите внимание, что это также может быть сделано с использованием постоянного решения, такого как pickle, но я предпочитаю делать это следующим образом.

Создать таблицу, которая будет действовать как счетчик

class InstanceSq(models.Model):
    sequence_id = models.IntegerField()

Таблица для этой модели всегда будет содержать только 1 строку.

Получите его в файле views.py, как показано ниже:

try:
    sequence_id = InstanceSq.objects.get(id=1).sequence_id
except InstanceSq.DoesNotExist:
    #This is when it runs first time
    instance_row = InstanceSq(sequence_id = 1)
    instance_row.save()
    sequence_id = 1

#..
#Here you get the current instance as:
instance_ip = Load_Balancing.objects.filter(sequence=sequence_id)
#Use your instance here and do whatever you want to do
#.. and then
# Rotation logic
new_id = sequence_id % 4 + 1
current = InstanceSq.objects.select_for_update().get(id=1) #to avoid race conditions
current.sequence_id = new_id
current.save()
0 голосов
/ 17 апреля 2020

Не пытайтесь реализовать балансировку нагрузки на уровне приложения, так как это не имеет смысла. Ваша база данных будет узким местом в вашем решении.

используйте надлежащий HTTP-сервер / обратный прокси-сервер, большинство из которых имеют хорошо налаженную поддержку балансировки нагрузки, например: nginx, apache

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...