Предыстория проста. В нашем банке существует множество продуктов, контент которых нуждается в едином способе управления. Одни продукты построены на классических CMS, другие вовсе требуют усилий разработчиков для обновления информации на портале. Ситуация усугубляется требованием миграции всех продуктов в банковскую облачную платформу, построенную по принципу PaaS. Это означает, что поддержка какого то определённого сервиса (Kafka, Elasticsearch, PorstreSQL, и т. д.) или, тем более, системы (WordPress, Magento, Drupal, и т. д.) требует согласования и разработки в рамках платформы. И если абсолютно всех и в долгосрочной перспективе устраивает пресловутый WordPress, то с учетом прочих приоритетов его поддержка будет реализована со временем.
В силу этих сложностей было принято решение углубиться в тему Систем Управления Контентом. И найти легковесные альтернативы, которые бы не требовали ни от банковской платформы, ни от имеющихся продуктов существенных доработок. Данная статья являясь, по большей части, обзором различных архитектур Систем Управления Контентом может служить подспорьем в выборе подходящего под конкретные требования варианта.
При этом подход Контент как Код, выгодно отличающийся минимальными требования к инфраструктуре, стоит особняком, а первая половина статьи нацелена на создание интуиции в отношении этого подхода. Методологическая составляющая и глубокие технические аспекты остаются предметом для последующих статей. Ну а пока обсудим следующие вопросы:
Что такое контент?
Как готовить?
Где хранить?
Как управлять?
Как поставлять?
Если вы хорошо знакомы с терминами Headless CMS, Content as Code, SSG, SSR, CDN и прочими трёхбуквенные аббревиатуры, то листайте сразу в комментарии, чтобы поделиться опытом.
Код
Один мой хороший товарищ в детстве мечтал стать программистом и представлял себе этот процесс как диалог с компьютером. Описываешь желаемое, отвечаешь на уточняющие вопросы и вуаля — приложение готово. Каково же было его «удивление», когда ему, в результате, пришлось программировать микроконтроллеры семейства 8051 на языке C51 и ассемблере.
С тех пор многое изменилось. Нейросети нашли широкое применение после стольких лет «забвения», стат. анализ претерпел ребрендинг и обрёл популярность в виде data science, визуальное программирование постепенно возрождается в новом качестве... Диалог с PC (и не только), хоть и не в контексте программирования, стал привычным/массовым явлением. Параллельно с этими процессами эволюционировало и понимание того, что именно можно называть «кодом», и это название теперь применимо к очень разным вещам.
Так каким может быть «код» сегодня?
Гипотетический сайт (React/JSX):
export const MainPage = () => (
<TilesList>
<Tile link="/products" back={productsImage}>Цифровые <em>продукты</em></Tile>
<Tile link="/startups" secondary back={startupImage}>Стартапы</Tile>
<Tile link="/come-with-us" secondary>Стать частью <em>команды</em></Tile>
</TilesList>
)AWS CDK декларация SQS очереди, лямбда функции для отправки сообщений в очередь и REST API «вокруг» этой функции. По сути это конфигурация, которая может быть преобразована в YAML формат:
const myVpc = new ec2.Vpc(this, "MyVPC");
const myCluster = new ecs.Cluster(this, "MyCluster", { vpc: myVpc });
const myQueueProcessingService = new ecs_patterns.QueueProcessingFargateService(this, "MyQueueProcessingService", {
cluster: myCluster,
image: ecs.ContainerImage.fromAsset("my-queue-consumer")
});
const myFunction = new lambda.Function(this, "MyFrontendFunction", {
runtime: lambda.Runtime.NODEJS_14_X,
handler: "index.handler",
code: lambda.Code.asset("my-front-end"),
environment: {
QUEUE_NAME: myQueueProcessingService.sqsQueue.queueName
}
});
myQueueProcessingService.sqsQueue.grantSendMessages(myFunction);
const myApi = new apigateway.LambdaRestApi(this, "MyFrontendApi", {
handler: myFunction
});Термостат (нечеткая логика):
ЕСЛИ Температура ЕСТЬ Очень_Холодно ТО Мощность ЕСТЬ Максимум
ЕСЛИ Температура ЕСТЬ Холодно ТО Мощность ЕСТЬ Норма
ЕСЛИ Температура ЕСТЬ Норма ТО Мощность ЕСТЬ Минимум
ЕСЛИ Температура ЕСТЬ Тепло ТО Мощность ЕСТЬ ВыключеноВсё это примеры кода, призванные показать многогранность этого понятия. Многое можно обозначить ёмким термином код, в самых разных областях.
Контент
