Протоколы/Алгоритмы heartbeat или лучшие практики

Здесь мы идем, третьи разы очарование. Если Вы хотите что-то, что похоже на это.

Full Width TreeView

Этот берет немного больше работы. Я уверен, что существует много способов сделать это, но этот метод использует Преобразователь Длины и метод расширения TreeViewItem для получения Глубины. Оба из них сильно связываются к TreeViewItem визуальное дерево, поэтому если Вы начинаете смешивать с Шаблонами тогда, можно испытать затруднения. Снова, вот важная часть, и ниже полный код.


  
      
  
  
        
            

                
                    
                    
                
                

                
            
      
      
    
    

Расширение TreeViewDepth

public static class TreeViewItemExtensions
{
    public static int GetDepth(this TreeViewItem item)
    {
        TreeViewItem parent;
        while ((parent = GetParent(item)) != null)
        {
            return GetDepth(parent) + 1;
        }
        return 0;
    }

    private static TreeViewItem GetParent(TreeViewItem item)
    {
        var parent = VisualTreeHelper.GetParent(item);
        while (!(parent is TreeViewItem || parent is TreeView))
        {
            parent = VisualTreeHelper.GetParent(parent);
        }
        return parent as TreeViewItem;
    }
}

Управление LeftMarginMultiplierConverter

public class LeftMarginMultiplierConverter : IValueConverter
{
    public double Length { get; set; }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var item = value as TreeViewItem;
        if (item == null)
            return new Thickness(0);

        return new Thickness(Length * item.GetDepth(), 0, 0, 0);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new System.NotImplementedException();
    }
}


    
    
        
            
            
        
        
    
    

Полный Стиль TreeViewItem









19
задан Community 23 May 2017 в 11:54
поделиться

5 ответов

Распределенное интерактивное моделирование ( DIS), который определен в стандарте 1278 IEEE , по умолчанию используется тактовый сигнал 5 секунд через широковещательную рассылку UDP. Контрольное сообщение DIS - это, по сути, PDU состояния объекта, который полностью определяет состояние, включая положение, данного объекта. Из-за своего применения в сообществе моделирования, DIS также использует концепцию, называемую расчетом мертвых, чтобы обеспечить более высокие частоты пульса, когда фактическое положение, например, выходит за пределы заданного порогового значения его прогнозируемого положения.

В вашем случае, PDU состояния объекта DIS было бы излишним. Я упоминаю об этом только для того, чтобы отметить тот факт, что сердцебиение может меняться по частоте в зависимости от обстоятельств. Я не знаю, понадобится ли вам что-то подобное для описанного вами приложения, но вы никогда не знаете.

Для тактовых импульсов используйте UDP, а не TCP. Heartbeat по своей природе является приспособлением без установления соединения, так что UDP (без установления соединения) здесь более уместен, чем TCP (ориентированный на соединение).

При рассылке UDP следует помнить, что широковещательное сообщение ограничено. в широковещательный домен . Короче говоря, если у вас есть компьютеры, разделенные устройством уровня 3, например маршрутизатором, то широковещательные передачи не будут работать, потому что маршрутизатор не будет передавать широковещательные сообщения из одного широковещательного домена в другой. В этом случае я бы рекомендовал использовать многоадресную рассылку, поскольку она будет охватывать широковещательные домены, при условии, что значение времени жизни (TTL) установлено достаточно высоким. Это'

8
ответ дан 30 November 2019 в 04:59
поделиться

Широковещательная передача контрольного сигнала каждые t с использованием UDP; если вы не слышали о машине более k * t, значит, она отключена. Будьте осторожны, чтобы общая используемая пропускная способность не истощала ресурсы. Вы можете использовать широковещательные IP-адреса или вести список конкретных IP-адресов, с которыми вы работаете.

Убедитесь, что контрольный сигнал включает «счетчик перезагрузки», а также «идентификатор машины», чтобы вы знали, что предыдущее состояние сервера не соответствует t около.

Я бы рекомендовал использовать MapReduce , если он подходит. Это сэкономило бы много работы.

5
ответ дан 30 November 2019 в 04:59
поделиться

Я не уверен, что это ответит на вопрос, но вам может быть интересно, как кластеризация Weblogic Server работает под капотом. Из книги Освоение BEA WebLogic Server :

[...] Кластеризация WebLogic Server обеспечивает слабую связь серверов в кластере. Каждый сервер в кластере независим и не полагается ни на какой другой сервер для выполнения каких-либо основных операций. Даже если связь со всеми остальными серверами будет потеряна, каждый сервер продолжит работу и сможет обрабатывать полученные запросы. Каждый сервер в кластере поддерживает свой собственный список других серверов в кластере с помощью периодических контрольных сообщений. Каждые 10 секунд каждый сервер отправляет контрольное сообщение другим серверам в кластере, чтобы сообщить им, что он все еще жив. Сообщения Heartbeat отправляются с использованием технологии многоадресной IP-рассылки, встроенной в JVM, что делает этот механизм эффективным и масштабируемым по мере увеличения количества серверов в кластере. Каждый сервер получает эти контрольные сообщения от других серверов и использует их для поддержания своего текущего списка членства в кластере. Если сервер не получает три контрольных сообщения подряд от любого другого сервера, он исключает этот сервер из своего списка членства до тех пор, пока не получит еще одно контрольное сообщение от этого сервера. Эта технология тактового сигнала позволяет динамически добавлять и удалять серверы из кластера, не влияя на конфигурации существующих серверов.

2
ответ дан 30 November 2019 в 04:59
поделиться

В дополнение к аппаратным балансировщикам нагрузки вы также можете попробовать бесплатное программное обеспечение для балансировки нагрузки с открытым исходным кодом, такое как HAProxy , доступное для Linux и BSD. .

1
ответ дан 30 November 2019 в 04:59
поделиться

Коммутаторы содержимого Cisco - это аппаратное решение этой проблемы. Они реализуют виртуальный IP-адрес как интерфейс для нескольких реальных серверов, чьи реальные IP-адреса известны коммутатору. Коммутатор периодически отправляет HTTP-запросы HEAD веб-серверам, чтобы убедиться, что они все еще работают (программное обеспечение коммутатора называет это «keepalive», хотя это не поддерживает работу самого сервера). Коммутатор Cisco принимает трафик по виртуальному IP-адресу и перенаправляет его на реальные веб-серверы, используя настраиваемую балансировку нагрузки, такую ​​как циклический перебор или балансировку нагрузки, определяемую пользователем.

Эти коммутаторы продаются по цене от 3 до 10 тысяч долларов, хотя мои Деловой партнер купил один на eBay примерно за 300 долларов год назад. Если вы можете себе это позволить, они действительно представляют собой проверенное аппаратное решение для вопроса о том, как обеспечить прозрачное распространение услуги на нескольких серверах. Redhat включает встроенную конфигурацию портов, так что вы можете реализовать свой собственный коммутатор Cisco, используя дешевую коробку RedHat. Google для "виртуального IP-адреса" и "cisco content router" для получения дополнительной информации.

2
ответ дан 30 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: