Bampary Sampler на основе openzipkin - PullRequest
0 голосов
/ 02 февраля 2020

Я адаптирую граничный пробоотборник для моего варианта использования. В моем случае входными данными является не длинное значение traceid, а список alphanumeri c Strings (UUIDs). Я реализовал следующее, это правильный способ для выборки запросов?

public boolean isSampled(List<String> samplingStrings) {
    if (samplingStrings.isEmpty()) {
        return random.nextDouble() > probability;
    }
    long hashId = Math.abs(Objects.hash(samplingStrings.toArray()));
    return hashId % 10000 <= boundary;
}

Исходная реализация из https://github.com/openzipkin/brave/blob/master/brave/src/main/java/brave/sampler/BoundarySampler.java

  public boolean isSampled(long traceId) {
    long t = Math.abs(traceId ^ SALT);
    return t % 10000 <= boundary;
  }

границы определяется следующим образом :

final long boundary = (long) (probability * 10000);

probability должно быть в диапазоне от 0.0001 до 1.0

Я также требую, чтобы выборка была идемпотентной. Для одного и того же набора строк требуется постоянно один и тот же результат.

Предоставит ли моя реализация надлежащую выборку на основе вероятности. Есть ли лучший способ добиться этого?

...