Зачем может понадобиться создавать компонент
Компонент — это часть системы, которая решает подзадачу такого объёма, который разработчик может полностью понять и реализовать за разумное время и независимо от других разработчиков.
Одной из значимых причин существования компонентов является неспособность человека решать сложную задачу целиком. Основным способом снижения когнитивной нагрузки является её декомпозиция на подзадачи. Решение каждой подзадачи оформляется в виде изолированного блока с чётким интерфейсом взаимодействия — именно он и называется компонентом. Объединяя такие блоки в систему, разработчик решает всю задачу целиком.
Наличие в системе нескольких компонентов также позволяет вести разработку параллельно. Система разбивается на компоненты таким образом, чтобы каждый из них мог разрабатываться отдельной небольшой группой разработчиков. В таком случае чётко определённый интерфейс — одна из ключевых черт компонента — становится критически важным: с одной стороны, он задаёт контракт для разработчиков других компонентов, а с другой — ограничивает степень свободы внутри компонента: всё, что выходит за пределы текущего интерфейса, становится бессмысленным, поскольку недоступно другим компонентам.
Ещё одной причиной разделения системы на компоненты является наличие технических ограничений, таких как пропускная способность канала передачи данных, количество ядер процессора, объём памяти и т. п. В типичном приложении на одну операцию записи приходится около десяти операций чтения. Если число операций чтения резко возрастает, сервер может оказаться перегруженным, и операции записи будут вынуждены конкурировать за те же ресурсы. Когда потеря данных недопустима, эту проблему можно решить, разделив систему на два компонента: компонент записи и компонент чтения. Компонент записи разворачивается на отдельном сервере, поэтому даже выход из строя сервера, обслуживающего операции чтения, не повлияет на сохранность данных.