Часть 1. Введение
Модули предприятия
SYNRC Предприятие является комплексом библиотек (N2O.DEV) и подсистем приложений (N2O.SPACE), которые используют общую шину и общую распределенную базу данных.
LDAP — Сервер аутентификации, хранение ключей и директория предприятия.
ERP — Этот модуль хранит основную иерархическую структуру предприятия, ее схему, записи о персонале, инвентаре, компаниях предприятия, их офисах.
FIN — Финансовый модуль предприятия, который хранит бизнес процессы, представляющие собой счета учасников системы: персонал (для начисления зарплат), счета и субсчета предприятия (для совершения экономической деятельности), и внешние счета в платежных системах.
ACC — Система управления персоналом: зарплатные ведомости, календарь предприятия, отпуска, декреты, другие календари.
SCM — Система управления цепочкой поставок: главный БП системы — экспедиционный процесс доставки товаров цепочке получателей с помощью транспортных компаний.
CRM — Система управления клиентами: является расширением более абстрактного приложения CHAT.
PLM — Система управления жизненным циклом проектов и продуктов. Содержит также CashFlow и P&L отчёты.
PM — Система управления проектами предприятия, с детализацией времени и протоколов приема-передачи (принятые коммиты в гитхабе).
WMS — Система управления складом.
TMS — Система управления транспортом предприятия.
Модуль PLM
В этом документе описана система управления жизненным циклом продуктов и проектов — Product Lifecycle Managenent (PLM). На базе PLM модуля мы разработали систему управления аутсорсинговым предприятием Quanterall с возможностью инвестирования и учётом опционов для программистов.
Цели проекта:
— Повышение прозрачности ведения бизнеса;
— Выдача опционов с прибыли;
— Автоматизация предприятия.
Задачи проекта:
— Создание панели управления директора, работников и инвесторов;
— Попроектная отчетность (СashFlow, P&L);
— Управление опционами программистов;
— Инвестирование в проекты другими инвесторами (со страхованием).
Бизнес процесы:
— Бизнес-процесс счет участника проекта (FIN);
— Главный бизнес-процесс модуля — долгоживущий проект-продукт (PLM);
— Создание проекта с привлечением инвестиций под залог прибыли от других проектов (Pre-PLM);
— Ежемесячный процесс распределения прибыли (PLM-Calc):
после вычитания свёртки выплаченых зарплат из свёртки оплаченных счетов клиентам
по CashFlow мы формируем список статей:
1) страховой фонд (который откусывается, если мы используем этот проект
как залог для кредита на другой проект;
2) опционы программистов —
автоматически выдаются людям, которые работают на этом проекте;
другие люди тоже могут учавствовать;
3) наш заработок (свободный пул или резервация);
4) R&D отчисления (обязательные).
Руководство разработчика PLM
Руководство разработчика PLM включает пошаговое описание процесса создания подсистемы PLM с использованием библиотек SYNRC: 1) Административная часть: KVS, BPE, FORM; 2) Модули конфигурации PLM: PLM, FIN, LDAP.
Система PLM также зависит от других модулей предпрития: FIN — финансовый модуль управления персональными счетами и счетами предприятия; ACC — модуль управления персоналом и контрагентами; ERP — модуль инкапсуляции организационной структуры предприятия; LDAP — система управление идентификаторами и ключами. Кроме модулей предприятия здесь также рассматриваются библиотеки, зависимости модуля PLM: BPE — система управления бизнес процессами предприятия; KVS — система хранения данных; FORM — система генерации форм. PLM зависит и от других библиотек, которые в этом документе не рассматриваются: N2O — система управления соединениями и протоколами; NITRO — система генерации HTML5.
Управление ресурсами
Главным образом информационная структура нашего предприятия состоит из вычислительных ресурсов (приложения, запущенные в шине) и накопительных ресурсов (данные, сохраненные в базе данных).
SOA архитектура в качестве модели управления вычислительными ресурсами предлагает асинхронный протокол удаленного вызова на шинах. С N2O можно использовать MQTT и другие шины посредством следующих протоколов: TCP, WebSocket. Эти асинхронные протоколы часто называют протоколами реального времени, так как у них функции посылки сообщений всегда мгновенно возвращают результат. Что касается протоколов для публикации и доступа к данным, то тут может оказаться уместным использование синхронного HTTP протокола.
Вычислительные ресурсы
Для SOA архитектуры традиционно используются асинхронные протоколы доступа к вычислительным ресурсам. Обычно это серверные воркеры, подключённые к шине, и обслуживающие API определённого приложения. Каждое приложение имеет свое консистентное хеш-кольцо воркеров. В сети работает одновременно множество колец-приложений.
С помощью config.exs файла можно сконфигурировать необходимую конфигурацию серии консистентных колец, каждое из которых работает на своем транспортном протоколе. В данном примере показана карта Erlang серверов, обслуживающих очереди приложений в шине:
Благодаря такой детализации можно проектировать гетерогенные системы, включая необходимый набор протоколов на портах нужных машин. Эта же система позволяет добиться балансировки нагрузки, подключая физические ресурсы к определённым очередям шины данных.
В нашей модели асинхронные протоколы используются для управления вычислительными ресурсами предприятия.
Накопительные ресурсы
Распределённые хеш-кольца используются не только для распределения вычислений, но и для хранения данных. Некоторые базы данных, например RocksDB и Cassandra используют глобальное пространство ключей для данных (в отличии от таблично-ориентированных баз). Именно для таких баз и создана библиотека KVS, где в качестве синхронного транзакционного интерфейса — API цепочек c гарантией консистентности. Ниже приводится пример структуры цепочек экземпляра системы PLM:
В нашей модели синхронные протоколы используются для управления накопительными ресурсами предприятия и транзакционного процессинга.
Типовые спецификации
Протоколы определяются типовыми спецификациями и генерируются для следующих языков: Java, Swift, JavaScript, Google Protobuf V3, ASN.1. Также мы генерируем валидаторы данных по этим типовым аннотациям, и встраиваем эти валидаторы в тракт наших распределенных протоколов, поэтому мы никогда не позволим клиентам испортить сторадж. Для веб приложений у нас развитая система валидации, как для JavaScript, так и на стороне сервера. Бизнес логика полностью изолирована в нашей системе управления бизнес процессами, где каждый бизнес процесс является процессом виртуальной машины. Все цепочки модифицируются атомарным образом, поддерживают flake адресацию, и не требуют дополнительной изоляции в своём принимитивном использовании. Поэтому вы можете трактовать базу как распределенный кэш и использвать её из фронт приложений для примитивных случаев.