Skip to content

Latest commit

 

History

History
74 lines (73 loc) · 8.86 KB

Technology.md

File metadata and controls

74 lines (73 loc) · 8.86 KB

Манифест технологического стека Метархия

  1. Простота: мы стремимся к простоте, однородности и унификации технологий, это единственный способ не утонуть в сложности систем.
  2. JavaScript: мы признаем центральную роль JavaScript для технологического стека Метархия, как языка, который поддерживается и может исполняться на максимальном количестве вычислительных и коммуникационных устройств. Одновременно он понятен максимальному количеству программистов. Несмотря на свои недостатки, JavaScript очень быстро развивается и не имеет альтернативы для написания прикладного кода и кода склейки в современном мире.
  3. Место других языков: отдельные алгоритмы могут быть написаны на C, C++, Rust. Например: парсеры, трансляторы, взаимодействие с ядром операционной системы и с устройствами ввода-вывода. Такие библиотеки могут быть вызваны из JavaScript, когда нужно обеспечить максимальную производительность, эффективность и надежность. Однако, нужно стараться снизить объем C++ кода, как явного, но необходимого древнего зла.
  4. Технологический стек: должен быть продуман во всех сложностях заранее. Любой полезный программный продукт должен сразу разрабатываться с учетом масштабирования на множество серверов, продуманной безопасности, мер обеспечения надежности, управления версиями и жизненным циклом, непрерывного обновления и т.д., потому, что эти вопросы не могут быть добавлены в код позже или обеспечены контейнерами. В готовую систему нельзя просто подключить масштабирование, безопасность и надежность без существенного изменения архитектуры, изменения структуры проекта и переписывания кода.
  5. Оптимизация: память гораздо дешевле вычислительных ресурсов и ввода/вывода (такая ситуация будет сохраняться еще долгое время) и нужно стараться максимально использовать ее для размещения заранее подготовленных данных, индексов и вспомогательных структур, минимизируя нагрузку на ввод-вывод и центральный процессор.
  6. Однородность узлов: для построения масштабируемого облачного сервиса необходима однородность узлов (нод) облака, построенных в бинарное дерево, обеспечение распределенного хранения и обработки данных в узлах дерева. То, что называлось раньше сервером баз данных и сервером приложений должно быть объединено в одном адресном пространстве и одном процессе. Таким образом, алгоритмам нужно будеть меньше запрашивать данные из других процессов, читать их с диска или из СУБД, что сократит межпроцессовое взаимодействие.
  7. Изоляция: для обеспечения надежности и безопасности нужна изоляция контекстов исполнения, для этого можно применить и тонкую изоляцию (потоки), и контейнеризацию (процессы), и сверх-тонкие способы, например, песочницы и программные абстракции.
  8. Состояние: любые серьезные приложения требуют наличия долгоживущего состояния в памяти сервера и способов управления этим состоянием. Причем, состояние не только для отдельных сервисов, не только для эндпоинтов, и не только для модулей и программных компонентов, а состояние на уровне всего приложения, с надежным хранением, реплицированием и масштабированием на множество серверов.
  9. Открытый код дает отсутствие привязки к вендору, возможность создавать на базе технологического стека приватные облака, как на физическом железе, так и на виртуальных серверах.
  10. Интерактивность в режиме времени, приближенном к реальному с поддержкой реактивных курсоров, многоуровневого кэширования, приближенного к месту обработки данных и двунаправленная синхронизация с оптимистическими алгоритмами разрешения конфликтов, а также эксклюзивной блокировкой ресурсов и очередью запросов на блокировку.
  11. Сквозная идентификация хранимых данных нужна для возможной последующей интеграции и обмена данными, между любыми приложениями, написанными на технологическом стеке, даже для приватных облачных кластеров необходимо использовать сквозную идентификацию, выдавая сегмент идентификаторов закрытой системе.
  12. Мультипарадигменность и метапрограммирование: Максимальное повторное использования кода достигается благодаря метапрограммированию, декларативному программированию, мультипарадигменному программированию, использованию схем для данных и контрактов.
  13. Слоеная архитектура. Прикладной код не должен быть привязан к сетевому транспорту, особенностям операционной системы, физическому хранению данных, а тем более, к фреймворкам и библиотекам. Прикладной код должен быть отделен и его абстракции должны быть изолированы, он должен содержать только понятия предметной области, опираться на API языка и контракты API облачной платформы.
  14. Кадры решают все. Для существования технологического стека необходима научная школа и массовая подготовка кадров, лекции, семинары, литература, видео, лабораторные работы с автоматической проверкой, постоянное общение и переосмысление знаний, уточнение и улучшение материалов для начинающих, примеры хорошего кода, доброжелательный перекрестный ревью, дух помощи начинающим контрибьютерам.