LINUX.ORG.RU
ФорумTalks

Идея безумного проекта типа «Тильды». Клёпка дешёвых сайтов.

 


1

1

Кто мечтал чем-то заняться, что можно даже продать или хотя-бы впарить населению бесплатно на правах опенсурса для решения насущных мелких задач.

  1. Делаем простой веб-язык, сильно проще ПХП. Язык без тенденций развиться в многостраничные абстрактные мультипарадигменные фабрики гетерогенно-волосатых оперденей, а который ограничивался бы наивной шаблонизацией с ветвлением и походами в примитивную key=value базу, встроенную в него же. Пример:
<body>
<h1>Hello, your name is {{ db.get("sids/$SID/name") }}</h1>
{{ if (db.get("flags/$SID/admin") }}
<h2>YOU ARE ADMIN</h2>
{{}}
</body>

То есть, язык умеет ходить в некую базу и ветвить куски HTML шаблона. Да, ПХП начинался так же, скажете вы, но этот должен на этом и закончиться или быть ещё проще, чем тут написано.

  1. Делаем транслятор данного «исходника» в пачку C++ файлов + Makefile, компиляция которого порождает один бинарь с вкомпилённым в него простым http-серваком, всей бизнес-логикой и всеми шаблонами, встроенной примитивной key=value базой (пишущей бинлог и индексные файлы на диск, которые легко и просрать и бекапить) и готово. Юзер тупо запускает этот бинарь с параметрами
./hellobugagawowdoge --listen 80 --listen 443 --cert certificate.pmx /path/to/writeaheadlogs/

на самой дешёвой индусской виртуалке за полкопейки и у него всё летает.

Ключевое: простой язык, порождающий примитивный бинарь, жрущий крайне мало ресурсов.

Прорывная идея: общение с базой сделать более смузи-высокоуровнево. Чтобы не просто get/set для нердов, а прямо setLike, getLikesCount, addComment, removeComment, editComment, countVisit.

Важно: в идеале юзер вообще не кодит.



Последнее исправление: kilokolyan (всего исправлений: 7)
Ответ на: комментарий от kilokolyan

Блокировок нет, всё однопоточное.

Без этого - следующий клиент не подключится, пока твоя программа не закончит обработку логики, и не вернется к прослушиванию сокета. Это серьезно увеличит TTFB, 61-й посетитель твоего сайта будет ждать минуту, пока очередь остальных получит ответ.

windows10 ★★★★★
()
Последнее исправление: windows10 (всего исправлений: 1)
Ответ на: комментарий от kilokolyan

Какие то $SID итд сложно даже для меня. Для блондинок таскать виджеты на сайт, как в конструкторах. Ну и может создание своих компонентов если ты так хочешь.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от windows10

Ну вот запустился его «./hellobugagawowdoge –listen 80 –listen 443 –cert certificate.pmx /path/to/writeaheadlogs/», словил GET\POST с браузера, окей, обрабатывает. Второй клиент к его «примитивному бинарю» подключиться не сможет, потому что бинарь уже занят. Что дальше ?

Плохо шаришь в устройстве современных сетевых приложений. Чтобы дольше 100 микросекунд ответ клиенту герерить и быть настолько занятым - это надо чето сложное херануть в ходе обработки запросца.

kilokolyan
() автор топика
Ответ на: комментарий от windows10

Без этого - следующий клиент не подключится, пока твоя программа не закончится

Неверно. Гугли epoll например.

kilokolyan
() автор топика
Ответ на: комментарий от MOPKOBKA

Какие то $SID итд сложно даже для меня. Для блондинок таскать виджеты на сайт, как в конструкторах. Ну и может создание своих компонентов если ты так хочешь.

В идеале кодить не надо, да.

kilokolyan
() автор топика
Ответ на: комментарий от windows10

В итоге твой «примитивный бинарь» либо сегфолтнется, либо начнет жрать как ни в себя

Не, мы без сегфолтов всё сделаем, мы ж нормальные пацаны.

kilokolyan
() автор топика
Ответ на: комментарий от kilokolyan

Неверно. Гугли epoll например.

Ну epoll и что дальше ? Epoll возвратит тебе лишь дескриптор, а их обработку тебе придется осуществлять твоим «примитивным бинарем», который на этом этапе уже перестает быть примитивным.

windows10 ★★★★★
()
Ответ на: комментарий от windows10

Ну epoll и что дальше ? Epoll возвратит тебе лишь дескриптор, а их обработку тебе придется осуществлять твоим «примитивным бинарем», который на этом этапе уже перестает быть примитивным.

Чето сорян, не готов я тебе щас лекцию по устройству серверных софтин 21 века так сходу читать.

kilokolyan
() автор топика
Ответ на: комментарий от windows10

обработку

ок, я не понял где у тебя видится проблема в «обработке». Ты собрался что-то там обрабатывать дольше миллиона тактов проца?

kilokolyan
() автор топика
Ответ на: комментарий от kilokolyan

Вот смотри. Твоя программа, то есть бинарь, висит слушает сокет.

void loop {
if (кто_то подключился_к_сокету) {process($_GET, $_POST);}
}

void process(get,post) {
# Тут твои шаблоны бла бла бла, в общем обработка запроса
return или не return, пох
}

Так вот, когда у тебя начнет обрабатываться process, твой loop притормозится до тех пор, пока не будет завершен, соответственно следующие подключения к сокету обрабатываться не будут. Ну это я тебе в упрощенном виде показал.

В случае использования epoll, тебе придется обрабатывать то, что твой epoll насобирал, при чем в том порядке в котором насобирал, и с теми дескрипторами которые насобирал, иначе Вася получит респонс на реквест, который отправил Петя.

Epoll - это всего лишь инструмент, а не магическая кнопка «сделать все красиво».

windows10 ★★★★★
()
Последнее исправление: windows10 (всего исправлений: 1)
Ответ на: комментарий от windows10

соответственно следующие подключения к сокету обрабатываться не будут.

Эээ я не понял проблему, учитывая время на одного клиента микросекунд 50.

Это 20’000 запросов/сек.

kilokolyan
() автор топика

Как известно, мы веб макаки, ленивые.

А чтобы делать веб сайт все равно нужно знать JS.

А так как уже есть вэб серверы на JS, в том числе с шаблонами, то полезность вашей идеи устремляется к 0

grim ★☆☆☆
()

Делаем простой веб-язык, сильно проще ПХП

Хтмл оттуда тоже нахер. Пачку дефолтных шаблонов и в ide-вебню приделать, чтобы всё мышкой можно было.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)

не совсем понятно чем это отличается от похапе и прочих пистонов. ну а про you are an admin, без сессий не получится.

mrdeath ★★★★★
()
Ответ на: комментарий от tfeartx

А когда надо исправить один символ в шаблоне, компилять заново.

В .NET есть похожее.
Однажды нужно было через 3 года поправить один скрипт. Пришлось ставить старый фреймворк на старый комп с WinXP - иначе не собиралось.

Shadow ★★★★★
()

в таком решении много неотчуждаемого говнокодинга, один погроммист так из терминального клиента операционную систему напейсал, а для разворачивания конструктора сайтов у себя на сервере есть целый класс программного обеспечения называемый портальные системы. В них можно даже не программировать страницы и сокеты, но при необходимости создать навороченное приложение на нормальных языках программирования это тоже возможно сделать. Самый вменяемый к неофиту представитель из них называется Liferay, но есть еще много разных реализаций: образовательные, коммерческие ентерпрайзные и прочие.

Syncro ★★★★★
()

С первых предложений могу сказать - ты промазал в ЦА со своей идеей. Тильда и прочие нужны для того, чтобы не писать ни на каком язычке а быстренько человеку со вкусом сбахать лэндинг. Для других форматов - давное есть drupal, wordpress и т.п. где можно разделить контент и код, хостинг для этой хрени и так стоит пол-копейки и при желании оно поднимается на любом калькуляторе с теми-же трудозатратами по развёртыванию что и твоё решение.

В общем - имхо, не взлетит, и даже не подпрыгнет.

pon4ik ★★★★★
()
Ответ на: комментарий от XoFfiCEr

Да.

Ее вместо ПХП - потянуло бы.

Носйчас это лишняя сущность, как и ПХП.

grim ★☆☆☆
()
Ответ на: комментарий от kilokolyan

А если один из клиентов будет по Edge пытаться прогрузить твою страничку? Или с телефона загружать 10-меговую фоточку? Все остальные клиенты будут в очереди сидеть?

static_lab ★★★★★
()
Ответ на: комментарий от kilokolyan

Эээ я не понял проблему, учитывая время на одного клиента микросекунд 50.

То есть, ты еще и не замерял. Ну окай.

[ntfs@ntfs-a320mh ~]$ time curl 'http://192.168.1.100/test.html'
Hello World
real	0m0,008s
user	0m0,000s
sys	0m0,007s
[ntfs@ntfs-a320mh ~]$ 

Это - быстрый мультипоточный nginx с кешированием. Это - простой HTML с одной строкой. И это заняло 80 мкс.

Из-за того что следующие подключения к сокету обрабатываться не будут, ты в корне неверно экстраполировал количество запросов в секунду. Первый клиент подключился в 0:000, ответ он получит в 0:005, это правда. Только вот если оба клиента подключатся в 0:00, второй клиент получит ответ не в 0:005, как ты считаешь, а в 0:010. Если три клиента подключатся в 0:000, третий клиент получит ответ в 0:015. 10-й клиент получит ответ через 100мс. 100-й подключившийся - через 1с. 1000-й через 10с. Под клиентом само собой, я имею в виду не пользователя, а запрос :)

Далее. Своим «примитивным бинарем» тебе придется отдавать не только код шаблона, а еще и статические ресурсы наподобие JS, CSS JPG. Их ты забыл ? Время на их чтение и отправку браузеру - забыл ? Память необходимую для того чтобы прочитать содержимое и отправить в браузер - забыл ? Освобождать память занятую прочитанным файлом - догадаешься, или бинарь будет потреблять все более и более памяти с каждым запрошенным ресурсом ?

Твой профиль в ЛОРе занимает 15 реквестов. Это значит что если бы твой профиль генерился твоим бинарем, то грузиться он бы закончил через 150мс. Я имею в виду не время передачи, а TTFB. Иными словами, если в твой профиль зайдут одновременно всего лишь 10 человек - последний из них увидит его через полторы секунды.

windows10 ★★★★★
()
Последнее исправление: windows10 (всего исправлений: 1)
Ответ на: комментарий от grim

о том что в шаблонах порой встречаются ссылочки левые, неучтенные, без nofollow и т. д. неважно на какие страницы они ссылаются но часть средств на продвижение сайта будет потрачена зря.

XoFfiCEr ★★☆☆
()
Ответ на: комментарий от static_lab

А если один из клиентов будет по Edge пытаться прогрузить твою страничку? Или с телефона загружать 10-меговую фоточку? Все остальные клиенты будут в очереди сидеть?

Тебя epoll дергает на каждый пришедший пакет в этом случае.

kilokolyan
() автор топика
Ответ на: комментарий от windows10

Воткни в код nginx измерялку времени того, сколько он провел в себе и в ядре времени между первым полученным байтом входящего запроса и выходом из последнего write()/send(), в который он запихнул последний байт ответа. Что ты там намерял через time никому неизвестно. Как там curl у себя в жопе ковырялся, а не сколько у nginx ушло времени на обслуживание запроса от него.

kilokolyan
() автор топика
Последнее исправление: kilokolyan (всего исправлений: 2)
Ответ на: комментарий от windows10

Из-за того что следующие подключения к сокету обрабатываться не будут

Будут, причем даже не мной, а ядром (в сетевом коде и коде tcp стека), меня пнут предъявив готовый сокет с коннектом успешно.

kilokolyan
() автор топика
Ответ на: комментарий от windows10

Далее. Своим «примитивным бинарем» тебе придется отдавать не только код шаблона, а еще и статические ресурсы наподобие JS, CSS JPG.

Они лежат в памяти, их суммарный вес на нашем сайтике мегабайт 5…50 и их отправкой преимущественно занято ядро, мы даже не думаем.

kilokolyan
() автор топика
Ответ на: комментарий от windows10

Освобождать память занятую прочитанным файлом - догадаешься, или бинарь будет потреблять все более и более памяти с каждым запрошенным ресурсом ?

Физически никакого чтения с диска ни в какую память не будет (только 1 раз на старте), файлики всегда лежат в одной и той же памяти и ядру мы практически лишь кидаем указатели на неё.

kilokolyan
() автор топика
Последнее исправление: kilokolyan (всего исправлений: 1)
Ответ на: комментарий от windows10

Твой профиль в ЛОРе занимает 15 реквестов. Это значит что если бы твой профиль генерился твоим бинарем

Совершенно непонятна природа этого «значит»

kilokolyan
() автор топика
Ответ на: комментарий от pon4ik

Тильда и прочие нужны для того, чтобы не писать ни на каком язычке а быстренько человеку со вкусом сбахать лэндинг

Собственно, что и сказано в конце моего поста.

kilokolyan
() автор топика
Ответ на: комментарий от pon4ik

Не считывается, даже после того как ты это отдельно прокомментировал.

Не знаю как тебе помоч.

kilokolyan
() автор топика

Погугли Firebase. Там даже искать индусскую виртуалку не нужно и некоторая квота вообще бесплатна.

Секьюрити для веба и мобилок уже реализовано и без дыр, в отличие от твоего бинаря

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от kilokolyan

Тебя epoll дергает на каждый пришедший пакет в этом случае.

Ясно. Значит с ним тебе еще предстоит поработать. Потом будешь смотреть на мир критичнее.

Воткни в код nginx измерялку времени того

О, узнаю красноглазика:

Призвали линуксятника на военные учения. Стрельбище на полигоне.
 Офицер:
 - Линуксятник, да на мишени же ни одной твоей пули!
 - Тащ майор, ничего не знаю, с моей стороны все пули вылетели.

Пока ты не поймешь что производительность веб-сервера замеряется на стороне клиента - тебе рановато писать веб-серверы.

Будут, причем даже не мной, а ядром (в сетевом коде и коде tcp стека), меня пнут предъявив готовый сокет с коннектом успешно.

Ну, если ты осилишь написать этот алгоритм - вперед. После того как осилишь написать все алгоритмы необходимые моему браузеру для открытия страницы - изобретешь nginx :))

Они лежат в памяти, их суммарный вес на нашем сайтике мегабайт 5…50 и их отправкой преимущественно занято ядро, мы даже не думаем.

Их отправкой будет занят твой алгоритм, который будет должен принять GET, распарсить его, и понять что вернуть в ответ. Опять же, тебе нужно будет учесть, кто из клиентов тебе отправил тот или иной запрос, и вернуть именно то, что запросил клиент. Epoll тебе в этом не поможет, как и Kqueue. Придется ручками.

Физически никакого чтения с диска ни в какую память не будет (только 1 раз на старте), файлики всегда лежат в одной и той же памяти и ядру мы практически лишь кидаем указатели на неё.

Когда владелец поменяет цвет в CSS-ке - будешь заново перекомпилировать или перезапускать бинарник ?

Совершенно непонятна природа этого «значит»

Ну вот, а ты собрался писать веб-сервер :)

Когда ты открываешь страницу - это не один запрос к твоему веб-серверу.

windows10 ★★★★★
()
Ответ на: комментарий от windows10

Когда владелец поменяет цвет в CSS-ке - будешь заново перекомпилировать или перезапускать бинарник ?

Зачем ты так все усложняешь? Владельцам и прочим нельзя давать доступ к css, html.... Варианты есть.

XoFfiCEr ★★☆☆
()
Ответ на: комментарий от windows10

Пока ты не поймешь что производительность веб-сервера замеряется на стороне клиента - тебе рановато писать веб-серверы.

Ок, с логикой у тебя плохо.

kilokolyan
() автор топика
Ответ на: комментарий от XoFfiCEr

Зачем ты так все усложняешь? Владельцам и прочим нельзя давать доступ к css, html…. Варианты есть.

Неважно кто поменяет цвет шрифта, владелец ручками, или ЦМСка автоматически - все равно придется перезапускаться.

windows10 ★★★★★
()
Ответ на: комментарий от XoFfiCEr

Если шаблон будет писать не владелец ресурса, то какая ему разница будет, что там под капотом. Поставит нормальную CMS, готовый шаблон, плагины и будет сайтом пользоваться.

static_lab ★★★★★
()
Ответ на: комментарий от zemidius

Ты чо, я на Parser начал писать раньше чем на PHP.

Aceler ★★★★★
()

–listen 443

То есть если у тебя на одном IP несколько доменных имён, то всё, суши вёсла.

Не, я понимаю что ipv6 хватит всем.

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

То есть если у тебя на одном IP несколько доменных имён, то всё, суши вёсла.

Не, я понимаю что ipv6 хватит всем.

Разрешаю написать простой иф по содержимому хидера Host

kilokolyan
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.