Мини-учебнег по распределенным системам/протоколам. Проблемы создания распределенных веб-систем

Sep 01, 2017 23:54

Сама по себе реализация распределенности на данный момент не представляет собой проблемы - есть целая куча библиотек и протоколов, для RPC, передачи сообщений по сети, сериализации/кодирования данных, обнаружения сервисов и проч. В случае веб-систем, увеличение производительности тоже не представляет собой принципиальной проблемы, в силу того, что запросы от разных пользователей можно обрабатывать более-менее независимо. Я бы сказал, что основная проблема это создание надежной, отказоустойчивой системы. Правда, бывает, что обработка запросов от разных пользователей имеет зависимости по данным, например, нужно учитывать запасы товара, которые могут зарезервировать покупатели. Или когда надо переводить деньги со счета на счет.

Отмечу, что в обоих случаях - как в создании отказоустойсивой системы, так и в случае задачи достижения высокой производительности запросов с серьезными зависимостями по данных, ключевой проблемой является репликация данных и протоколы консистентности. Действительно, в случае отказоустойчивой системы, нам нужно держать несколько копий везде где мы хотим избежать SPOF, а значит нам нужно заботиться о согласованности состояния в разных копиях. В случае же увеличения производительности при наличии зависимостей по данным, нам нужно уметь реплицировать данные по разным процессам, чтобы они могли обрабатывать запросы более-менее независимо, не лазая каждый раз по сети в память другого процесса. Но при наличии серьезных зависимостей по данным, нам нужно консистентно и с выской производительностью вносить изменения в копии.

Итого, я бы назвал ключевой проблемой в распределенных системах грамотную и эффективную репликацию данных. Репликация в частности подразумевает кэширование (кэш - частичная копия основныъ данных, расположенная в более быстрой памяти). Эффективность в частности подразумевает, что мы в определенных случаях жертвуем консистентностью с целью получения высокой производительности. Например, мы кэшируем какие-то запросы, так что пользователь может быстро получать ответ, но который возможно несколько устарел, что нередко бывает приемлимо. К примеру, новости на странице сайта могут обновляться раз в 15 минут или около того. Или там какая-то статистика может подсчитываться раз в час и проч. Некоторые системы к примеру даже сознательно идут на oversale - т.е. информация о резервировании товаром может распространяться с некоторой задержкой, и некоторые товары могут оказаться проданными в большем кол-ве, нежели есть в наличии. Все же, в моем понимании важно четко понимать требования и уметь их реализовывать. Т.е. если мы решили, что для таких-то данных приемлима некоторая несогласованность в копиях, то мы так и реализуем. А если решили, что для таких данных важно поддерживать согласованность, то нужно это тоже уметь реализовать.
Previous post Next post
Up