Домашний веб-сервер на солнечных батареях отработал 15 месяцев: аптайм 95,26%
Первый прототип солнечного сервера с контроллером заряда. Фото: solar.lowtechmagazine.com
В сентябре 2018 году энтузиаст из Low-tech Magazine запустил проект «низкотехнологичного» веб-сервера. Задача была снизить энергопотребление настолько, чтобы домашнему self-hosted серверу хватало одной солнечной панели. Это непросто, ведь сайт должен работать 24 часа в сутки. Посмотрим, что получилось в итоге.
Можете зайти на сервер solar.lowtechmagazine.com, проверить текущее энергопотребление и уровень заряда аккумулятора. Сайт оптимизирован на минимальное количество запросов со страницы и минимальный трафик, так что должен выдержать скачок посещаемости с Хабра. По расчётам разработчика, расход энергии на одного уникального посетителя составляет 0,021 Вт⋅ч.
Незадолго до рассвета 31 января 2020 года у него оставалось 42% заряда батареи. Рассвет в Барселоне в 8:04 по местному времени, после этого должен пойти ток с солнечной панели.
Десять лет назад эксперты прогнозировали, что развитие интернета способствует «дематериализации» общества, всеобщей цифровизации — и, как следствие, снижению общего энергопотребления. Они ошиблись. На самом деле интернет сам потребовал огромных объёмов энергопитания, и эти объёмы продолжают расти.
IT-компании запустили инициативы по переходу на альтернативные источники питания, но это сейчас невозможно. Все дата-центры потребляют в три раза больше энергии, чем генерируют все солнечные и ветряные установки в мире. Хуже того, производство и регулярная замена солнечных панелей и ветряков тоже требует энергии, поэтому отказаться от ископаемого топлифа (нефть, газ, уран) сегодня просто невозможно. Но этих запасов надолго не хватит, поэтому нам неизбежно придётся думать, как жить на возобновляемых источниках. Включая работу компьютерной инфраструктуры, в том числе веб-серверов.
Low-tech Magazine считает проблемой слишком быстрое раздувание веб-страниц. С 2010 по 2018 годы средний размер страницы увеличился с 0,45 МБ до 1,7 МБ, а у мобильных сайтов — с 0,15 МБ до 1,6 МБ, по консервативной оценке.
Увеличение объёмов трафика обгоняет прогресс в энергоэффективности (энергия, необходимая для передачи 1 мегабайта информации), что вызывает постоянный рост энергопотребления интернета. Более тяжёлые и нагруженные сайты не только увеличивают нагрузку на сетевую инфраструктуру, но также сокращают «жизненный цикл» компьютеров и смартфонов, которые приходится чаще выбрасывать и производить новые, что тоже весьма энергоёмкий процесс.
Ну и конечно, повышение нагрузки создаётся самим образом жизни: люди почти всё время проводят в интернете и во многом полагаются на различные веб-сервисы. Современное общество уже сложно представить без облачной IT-инфраструктуры (социальные сети, мессенджеры, почта и т.д.)
В этой статье подробно описана аппаратная конфигурация и программный стек веб-сервера.
Одноплатный компьютер Olimex Olinuxino A20 Lime 2 выбран за низкое энергопотребление и полезные дополнительные функции, такие как наличие микросхемы управления энергопитанием AXP209. Она позволяет запрашивать статистику по текущему напряжению и силе тока с платы и с батареи. Микросхема автоматически переключает питание между аккумулятором и разъёмом DC, куда течёт ток с солнечной панели. Таким образом, возможно бесперебойное питание сервера с поддержкой аккумулятора.
Olimex Olinuxino A20 Lime 2
Изначально в качестве аккумулятора выбрали литий-полимерную батарею ёмкостью 6600 мА⋅ч (около 24 Вт⋅ч), потом поставили кислотно-свинцовый аккумулятор на 84,4 Вт⋅ч.
Операционная система загружается с SD-карты. Хотя ОС занимает не более 1 ГБ, а статический веб-сайт около 30 МБ, но не было экономического смысла покупать карту меньше, чем Class 10 16 ГБ.
Сервер подключается к Сети через 100-мегабитное домашнее соединение в Барселоне и стандартный потребительский маршрутизатор. Для него зарезервирован статический IP-адрес. Практически каждый может поднять такой сайт у себя в квартире, нужно слегка изменить настройка файрвола для форвардинга портов на локальный IP:
Port 80 to 80 for HTTP Port 443 to 443 for HTTPS Port 22 to 22 for SSH
Операционная система Armbian Stretch на базе дистрибутива Debian и ядра SUNXI, которое разработано для одноплатников с чипами AllWinner.
50-ваттная солнечная панель для веб-сервера и 10-ваттная панель для освещения гостиной в квартире автора
Статический сайт сгенерирован системой Pelican (генератор сайтов на Python). Статические сайты загружаются быстрее и не создают нагрузки на CPU, поэтому они гораздо эффективнее, чем динамически генерируемые страницы, с точки энергопотребления. Исходный код темы оформления см. здесь.
Очень важный момент — сжатие изображений, поскольку без этой оптимизации практически невозможно сделать веб-страницы меньше 1 мегабайта. Для оптимизации было решено перевести фотографии в полутоновые изображения. Для примера, вот фотография девушек-телефонисток на коммутаторе в прошлом веке, 253 КБ.
А вот оптимизированное полутоновое изображение размером 36,5 КБ с тремя цветами (чёрный, белый, серый). За счёт оптической иллюзии зрителю кажется, что количество цветов больше трёх.
Полутоновые фотографии выбрали не только для оптимизации размера (решение довольно сомнительное), но и по эстетическим соображениям. Эта старая техника обработки изображений обладает определёнными стилевыми особенностями, так что у сайта получился в каком-то смысле уникальный дизайн.
623 иллюстрации на сайте журнала Low-tech Magazine после оптимизации уменьшились в размере со 194,2 МБ до 21,3 МБ, то есть на 89%.
Все старые статьи конвертировали в Markdown для простоты написания новых статей, а также для простоты резервного копирования через git. С сайта удалили все скрипты и трекеры, а также логотипы. Используется шрифт по умолчанию в браузере клиента. В качестве «логотипа» — название журнала прописными буквами со стрелкой влево: LOW←TECH MAGAZINE. Всего 16 байт вместо картинки.
На случай даунтайма организована возможность «офлайнового чтения»: тексты и картинки экспортируются в RSS-фид. Включено кэширование 100% контента, включая HTML.
Ещё одна оптимизация — включение настройки HTTP2 в nginx, что немного уменьшает трафик и сокращает время загрузки страниц, по сравнению с HTTP/1.1. В таблице сравниваются результаты для пяти разных страниц.
| | FP | WE | HS | FW | CW | |----------|-------|-------|-------|-------|-------| | HTTP/1.1 | 1.46s | 1.87s | 1.54s | 1.86s | 1.89s | | HTTP2 | 1.30s | 1.49s | 1.54s | 1.79s | 1.55s | | Images | 9 | 21 | 11 | 19 | 23 | | savings | 11% | 21% | 0% | 4% | 18% |
Полная конфигурация nginx:
root@solarserver:/var/log/nginx# cat /etc/nginx/sites-enabled/solar.lowtechmagazine.com
# Expires map
map $sent_http_content_type $expires {
default off;
text/html 7d;
text/css max;
application/javascript max;
~image/ max;
}
server {
listen 80;
server_name solar.lowtechmagazine.com;
location / {
return 301 https://$server_name$request_uri;
}
}
server{
listen 443 ssl http2;
server_name solar.lowtechmagazine.com;
charset UTF-8; #improve page speed by sending the charset with the first response.
location / {
root /var/www/html/;
index index.html;
autoindex off;
}
#Caching (save html pages for 7 days, rest as long as possible, no caching on frontpage)
expires $expires;
location @index {
add_header Last-Modified $date_gmt;
add_header Cache-Control 'no-cache, no-store';
etag off;
expires off;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root /var/www/;
#}
#Compression
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
#Caching (save html page for 7 days, rest as long as possible)
expires $expires;
# Logs
access_log /var/log/nginx/solar.lowtechmagazine.com_ssl.access.log;
error_log /var/log/nginx/solar.lowtechmagazine.com_ssl.error.log;
# SSL Settings:
ssl_certificate /etc/letsencrypt/live/solar.lowtechmagazine.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/solar.lowtechmagazine.com/privkey.pem;
# Improve HTTPS performance with session resumption
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
# Enable server-side protection against BEAST attacks
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
# Disable SSLv3
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# Lower the buffer size to increase TTFB
ssl_buffer_size 4k;
# Diffie-Hellman parameter for DHE ciphersuites
# $ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Enable HSTS (https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security)
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
# Enable OCSP stapling (http://blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox)
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/solar.lowtechmagazine.com/fullchain.pem;
resolver 87.98.175.85 193.183.98.66 valid=300s;
resolver_timeout 5s;
}
За период с 12 декабря 2018 года по 28 ноября 2019 года сервер показал аптайм 95,26%. Это означает, что из-за плохой погоды даунтайм за год составил 399 часов.
Но если не принимать во внимание последние два месяца, то время безотказной работы составило 98,2%, а время простоя — всего 152 часа, пишут разработчики. Время безотказной работы упало до 80% в течение последних двух месяцев, когда потребление энергии увеличилось из-за обновления программного обеспечения. Каждую ночь сайт отключался на несколько часов.
По статистике, за год (с 3 декабря 2018 года по 24 ноября 2019 года) потребление электроэнергии сервером составило 9,53 кВт⋅ч. Зафиксированы значительные потери в фотоэлектрической системе из-за преобразования напряжения и разряда батареи. Солнечный контроллер показал годовое потребление 18,10 кВт⋅ч, что означает эффективность системы порядка 50%.
Упрощённая схема. На ней не показаны преобразователь напряжения с 12 на 5 вольт и батарейный счётчик ампер-часов
За исследуемый период на сайт зашли 865 000 уникальных посетителей. Включая все потери энергии в солнечной установке, расход энергии на одного уникального посетителя составил 0,021 Вт⋅ч. Таким образом, одного киловатт-часа вырабатываемой солнечной энергии хватает на обслуживание почти 50 000 уникальных посетителей.
За время эксперимента испытывались солнечные панели разного размера. В таблице приведены расчёты, за какой время зарядятся аккумуляторы разной ёмкости при использовании солнечных панелей разного размера.
Средняя потребляемая мощность веб-сервера в течение первого года, включая все потери энергии, составила 1,97 Вт. Расчёт показывает, что для поддержания веб-сайта ночью в самую короткую ночь года (8 часов 50 минут, 21 июня) нужно 17,40 ватт-часа мощности хранения, а в самую длинную ночь (14 часов 49 минут, 21 декабря) нужно 29,19 Вт⋅ч.
Поскольку свинцово-кислотные батареи не должны разряжаться ниже половины ёмкости, серверу требуется батарея на 60 Вт⋅ч, чтобы пережить самую длинную ночь при оптимальной освещённости днём (2×29,19 Вт⋅ч). Бóльшую часть года система работала с аккумулятором 86,4 Вт⋅ч и 50-ваттной солнечной панелью, тогда и было достигнут вышеупомянутый аптайм 95–98%.
Для аптайма 100% требуется увеличить ёмкость аккумуляторов. Чтобы компенсировать один день очень плохой погоды (без значительной генерации электроэнергии), нужно 47,28 ватт-часа (24 часа × 1,97 ватта) хранилища.
С 1 декабря 2019 года по 12 января 2020 года в систему поставили 168-ваттную батарею, у которой практическая ёмкость хранения 84 ватт-часа. Этого хранилища достаточно, чтобы поддерживать работу сайта в течение двух ночей и одного дня. Конфигурацию тестировали в самый тёмный период года, но погода была относительно хорошей — и за указанный период время безотказной работы составило 100%.
Но чтобы гарантировать аптайм 100% в течение нескольких лет, придётся предусмотреть и самый худший сценарий, когда плохая погода сохраняется несколько дней. Расчёт показывает: чтобы поддерживать сайт в онлайне в течение четырёх дней с низкой или нулевой генерацией энергии, понадобится свинцово-кислотная батарея ёмкостью 440 ватт-часов, то есть размером с автомобильный аккумулятор.
На практике при хорошей погоде свинцово-кислотная батарея ёмкостью 48 Вт⋅ч будет поддерживать работу сервера в течение ночи с марта по сентябрь. Батарея на 24 Вт⋅ч продержит сервер максимум 6 часов, то есть он будет отключаться каждую ночь, хотя и в разное время, в зависимости от месяца.
По большому счёту, некоторым сайтам необязательно работать по ночам, когда количество посетителей минимально, считают ребята из Low-tech Magazine. Например, если это региональное городское издание, куда не заходят посетители из других часовых поясов, а только местные жители.
То есть для сайтов с разной посещаемостью и разным аптаймом нужны аккумуляторы разной ёмкости и солнечные батареи разного размера.
Автор приводит расчёт, сколько энергии требуется для производства самих солнечных панелей (embodied energy) и сколько получается, если поделить это количество на ожидаемый срок службы в 10 лет.
Таким образом, можно рассчитать аналог ископаемого топлива, которое израсходовано на производство и эксплуатацию панелей. У Low-tech Magazine получилось, что за первый год работы их система (панель 50 Вт, батарея 86,4 Вт⋅ч) «сгенерировала» примерно 9 кг выбросов или эквивалент сжигания 3 л бензина: примерно столько же, сколько легковой автомобиль за 50 км хода.
Если запитывать сервер не от солнечных батарей, а от общей энергосети, то эквивалент выбросов вроде получается в шесть раз ниже: 1,54 кг (в испанской энергетике высока доля альтернативной энергетики и АЭС). Но это не совсем корректное сравнение, пишет автор, потому что оно учитывает embodied energy солнечной инфраструктуры, но не учитывает этот показатель для общей энергосети, то есть затраты на её строительство и поддержку.
За прошедшее время проведён ряд оптимизаций, которые снизили энергопотребление сервера. Например, в какой-то момент разработчик заметил, что 6,63 ТБ из общего объёма 11,15 ТБ трафика генерирует одна некорректная реализация RSS-фида, которая вытягивает контент каждые несколько минут. После исправления этого бага энергопотребление сервера (без учета потерь энергии) снизилось с 1,14 Вт до примерно 0,95 Вт. Выигрыш может показаться небольшим, но разница в 0,19 Вт означает 4,56 ватт-часа за сутки, что соответствует более 2,5 часов автономной работы сервера.
В течение первого года кпд составил всего 50%. Потери наблюдались при зарядке и разрядке аккумулятора (22%), а также при преобразовании напряжения с 12 В (солнечная фотоэлектрическая система) на 5 В (USB), где потери составляют до 28%. Разработчик признаёт, что у него неоптимальный преобразователь напряжения (контроллер без встроенного USB), поэтому можно оптимизировать этот момент или перейти на солнечную установку 5V.
Для повышения эффективности хранения энергии можно заменить свинцово-кислотные аккумуляторы более дорогими литий-ионными батареями, у которых меньшие потери заряда/разряда (<10%). Сейчас конструктор рассматривает компактную систему хранения электроэнергии в виде сжатого воздуха (CAES), у которой срок службы десятки лет, что означает меньший «углеродный отпечаток» на её производство.
Компактный аккумулятор энергии на сжатом воздухе, источник
Рассматривается установка дополнительной ветряной турбины (её можно изготовить из дерева) и установка солнечного трекера для поворота панелей к солнцу. Трекер позволяет увеличить выработку электроэнергии на 30%.
Ещё один способ повышения эффективности системы — её масштабирование. Поднимать на сервере больше веб-сайтов и запускать больше серверов. Тогда уменьшится расход энергии в расчёте на каждый сайт.
Компания солнечного хостинга. Иллюстрация: Диего Мармолехо
Если покрыть солнечными панелями весь балкон квартиры и открыть компанию солнечного веб-хостинга, то затраты на каждого клиента будут существенно ниже, чем на единственный веб-сайт: экономия от масштаба.
В целом, этот эксперимент демонстрирует, что при определённых ограничениях компьютерная инфраструктура вполне может работать на возобновляемых источниках энергии.
Теоретически, такой сервер может даже обойтись без аккумулятора, если зеркалировать его в других частях света. Например, поставить зеркала в Новой Зеландии и Чили. Там солнечные панели будут работать, когда в Барселоне ночь.