Являются ли Varnish Hashtwo/Xkey и Fastly "Surrogate Keys" одинаковыми?
В настоящее время я решаю, управлять ли моими собственными серверами Varnish или использовать размещенный сервис, такой как Fastly. Одним из наиболее важных факторов принятия решения является эффективная аннулирование кэша на основе тегов, так как я планирую поставить Varnish перед нашим API, и нам нужно будет часто выдавать запросы на очистку, которые делают недействительными несколько связанных страниц.
Быстро предлагает суррогатные ключи, и Varnish предлагает отдельный модуль, который называется под разными именами, включая Hashtwo, Hashninja и XKey. Эти функции выглядят одинаково. Являются ли они на самом деле одинаковыми или есть какая-то ключевая техническая или экономическая разница между этими двумя функциями, что не ясно из сообщений в блоге о них?
2 ответа
Суррогатные ключи - это реализация Fastly этой функциональности. Я написал нашу текущую реализацию, но не использовал HashTwo/Hashninja/xkey, поэтому я не авторитет в отношении различий между реализациями. Xkey общедоступен как vmod на https://github.com/varnish/libvmod-xkey.
Суррогатные ключи являются стандартной частью сервиса Fastly, но, как CDN, мы предоставляем его как часть нашей размещенной платформы. Это не открытый исходный код по большей части без веской причины; Было несколько дискуссий о том, как это сделать, но это не является огромным приоритетом (частично потому, что наш Varnish - это форк из 2.1.4).
Отдельные ключи не могут превышать 1 КБ (почему?), А весь список ключей не может превышать 16 КБ. Мы подняли ограничение на эти значения (ранее оно составляло всего 1 КБ) по запросу клиента год назад. Количество клавиш не ограничено, если они вписываются в это пространство (хотя я понимаю, что это эффективно ограничивает пространство клавиш). Основанием для ограничения длины является то, что чистка ключа приводит к некоторому количеству операций с линейным временем, которые мы предпочитаем ограничивать. Я был бы удивлен, если бы была какая-либо практическая проблема с нашими текущими ограничениями.
Я хотел бы отметить, что xkey также ограничен по длине и количеству ключей в том смысле, что ключ также указывается через заголовок, а длина заголовка эффективно ограничена доступным рабочим пространством для потока, обслуживающего соединение. Эта длина настраивается, если вы используете свой собственный лак, и это может не быть практическим ограничением для вас, но оно существует.
Еще одно небольшое отличие, которое я заметил при сканировании кода, заключается в том, что xkey vmod поддерживает несколько заголовков xkey, а быстрые суррогатные ключи берутся из первого соответствующего заголовка. Существуют некоторые различия с точки зрения структур данных, используемых для достижения функциональности (частично из-за того, что мы используем мультитенантный Varnish), но в остальном функциональность кажется похожей.
Наконец, у нас (на данный момент) есть кластер из нескольких сотен установок Varnish по всему миру. Часть нашей инфраструктуры связана с надежным распределением чисток через нашу сеть и обеспечением их глобального применения. Если вы запускаете кластер узлов Varnish, вам, возможно, придется проделать некоторую дополнительную работу, чтобы сделать недействительным кэш на нескольких узлах (хотя это вряд ли будет серьезной проблемой для небольшого кластера).
xkey и hashtwo (hashninja в некоторых маркетинговых материалах) одинаковы.
Я думаю, что основное отличие от предложения Fastly заключается в том, что xkey не добавляет никаких ограничений по длине или количеству ключей на объект /URL. Насколько я знаю, оба работают довольно хорошо. (полное раскрытие: я работаю в Varnish Software)