Загрузка...

Загрузка...

Вниз

Блог

Техническая статья

Категории

Теги

Архив

Поиск

Назад

Техническая статья

1 неделю, 2 дня назад Увидели 5

Категория

Техническая статья

Решительно приветствую всех заинтересованных в проекте трезвый.рус!

Вынужден сразу разочаровать людей с девизом «и так сойдёт» — стратегическая борьба за очень быструю, крайне надёжную и сверх безопасную соцсеть продолжается. За этот отчётный период были затрачены немыслимые усилия в этом направлении, которые едва не стоили мне рассудка, потому есть чем удивить. Правда, я занимался не только этим, но в общем ключе опыт накапливается большой. Но давайте по логическому порядку.

П. 1. Служународу рус.

Наконец-то наши старания по этому проекту увенчались развязкой — мы просто не могли улучшать и дорабатывать код до задуманного уровня бесконечно. Александра скомандовала «в бой» и сайт открылся, чтобы стать доработанным уже в процессе его освоения.

К делу причастны трое: муж Александры как человек невероятно подкованный и идейный, один дизайнер, сделавший цвета, логотип и подсказавший шрифт, и я, как разработчик всех приложений.

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

В принципе, я могу выделить ключевые моменты этого события и всех сопутствующих хлопот в интересном для нас контексте.

Первое. С гордостью сообщаю, что мои программы не зря шлифовались и ускорялись. Всё работает, как часы, нагрузку держит в пределах 1000 человек в секунду, и сможет, судя по расчётам, выдержать и в 6 раз больше.

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

Второе. Выяснились моменты, которые и в голову не приходили, так как таких мощных проектов я еще не делал. Помните, как у Кузьмы Пруткова — «некоторые понятия нам не понятны не потому, что наши понятия слабы, а потому, что они не входят в круг наших понятий». Полученный опыт пригодится, как воздух.

Третье. Уже грустное. Я увидел узкие места в работе большого проекта, написанного на человекоориентированных языках программирования. Причём этих проблем и близко нет для даже больших порталов. Ребята, на Django, с добавлением javascript (желательно чистого) можно делать очень крутые, надёжные проекты!

П. 2. Проблемы.

 встретятся в том случае, если вам придёт в голову безумная идея делать более мощные проекты. И вот они (проблемы):

Скорость. Да, разумеется, это скорость. Скриптовые языки медленные. Это можно решить дорогущим оборудованием. Например, созданием десятка серверов, связанного еще одним в виде балансировщика нагрузки. Но и это грозит постоянным нервным мельтешением у мониторинговых дисплеев. Ведь большой скачок активности (тех же ботов) уронит всю систему и нужно на это реагировать поскорее. Ведь нехорошо, когда сайт не работает.

И можно хоть голову сломать, делая программы эффективнее. Читать кучу статей, где с гордостью заявляют, что на питоне тоже можно быстро, только уметь надо. А вот и нет. Чисто физически скриптовые языки проигрывают в эффективности своим суровым компилируемым собратьям. Притом, по скорости, например, в 1000 раз. Это в среднем.

Моб. приложения. Очень значимые ресурсы. Это: плавность работы, экономия трафика, почти полное отсутствие «тормозов». Конечно, и десктопные версии было бы хорошо сделать по таким же принципам, но и об этом я упомяну ниже.

Вот тут-то и начинаются проблемы дополнительные. Я изучал вскользь создание моб. приложений на react native, детище фейсбука. И, опять-таки, для малых и средних проектов это находка замечательная. Любой вменяемый программист за пару недель сможет научиться на этой технологии писать. Вот только пользователи такой соцсети застрелятся, пытаясь писать сообщения и ждать секундами, пока система очухается.

Потому только так и не иначе:

— для android: вырвиглазный язык банков и платежек java. Так сразу не научитесь, тем более для целой соцсети;

— для ios: не менее сложный язык swift. Он быстрый, очень. Вот почему на слабых айфонах проги работают — уверенно. Тоже полгодика пострадать придётся, для создания качественного кода сети.

Сказать, с какой радостью в нашей соцсети люди будут, к примеру, переписываться с друзьями, да с телефонного браузера? Тут надежность Django не спасёт. Я тестировал и понял, что это всё долго. Хотите сравнить? Перейдите в моб версию vk в браузере и попробуйте там полазить. Разница будет видна сразу, и огромная. Потому не нужно уверять меня, что мало причастные люди станут с удовольствием радоваться нашей благостной сети и меняться к лучшему. Не станут. Без них же мы будем изолированы сами на себя, а нужно менять мир к лучшему.

Особенно прошу подумать о подрастающем поколении. Вот эти-то уж точно сеть не полюбят. Мало для этого просто сделать крутой сайт.

Мобилизационная надёжность. Здесь мрака побольше. Скриптовые серверные языки с лёгкостью роняют сайт, если ты накосячишь хоть в какой-либо мелочи. Это я прочувствовал на портале депутатов. Особенно питон, с его приятной структурированностью кода в виде отступов в 4 пробела и очень неприятной склонностью не считать иной раз, что 4 — это 4. Вот делаешь ты табуляцию, а он ругается и роняет всё запросто. Красота!

Потому менять проект наживую, когда там уже куча народа (а это я делаю каждый день), приходится с некоторым нервяком. В соцсети же стройка будет продолжаться стремительно и постоянно, грозя самыми весёлыми сюрпризами. Что, к слову, со словом «надёжный» не пересекается никак.

Десктопная версия. Это та, которая работает на компьютере, скачиваясь на него как приложение. Кому любопытно, скачайте тот же телеграм. Роскошная, удобная, быстрая штука. Можно и не делать таковую, это же еще один стек технологий знать надо (в идеале, начинающийся с C#). Можно сделать и в браузерном варианте. Вон сколько там… ах да, большинство движков пользовательского интерфейса на том же скриптовом языке javascript. А его минусы пользователи уровня миддл знают хорошо:

— он кушает оперативку, как голодающий Поволжья. Всё тормозит и кряхтит;

— он капризный и иногда может не работать. В том же ВК нажимаешь на ссылку… и ничего. Скрипт решил отдохнуть;

— он медленный. Даже новый движок V8 не сделает язык подобающим для большого проекта. Любопытные видели хоть раз на сайте фейсбука любимый и сверхпопулярный движок React. Который на такие масштабы в принципе не способен.

Ну, и как же мне сделать нечто подобное для нашей сети? Ведь в таком подходе плюсов еще больше!

Плюсы:

  1. Плавная работа и общие принципы работы делают интерфейс похожим на мобильное приложение.
  2. Сервер получает хорошую экономию, когда отдает такому движку только нужные данные, которые последний отрисовывает по шаблону.
  3. Все внутренности и процессы закрываются от лишних глаз. Увидеть то, что для тебя не предназначено, становится всё труднее и труднее.
  4. Главное! С помощью таких технологий можно забыть о приложениях. А зачем они, если всё работает плавно, экономно, реактивно, удобно, без тормозов?

Чуете, к чему я клоню?

П. 3. Пользовательский интерфейс.

Эта тема затрагивалась пару раз ранее. И содержала в себе одни предположения, вопросы, проблемы.

Рассуждения сводились к суровому, но правильному выбору. Я хотел изучить достаточно java и swift для отличных моб приложений соцсети.

Прикидывая время, которое на это нужно было, глаза закатывались и мозг бастовал, отказываясь столько всего сдавать экстерном. Это при условии, что я делаю портал депутатов, строю разделы соцсети, дописываю статистику (а там, как я писал, десятки тысяч правок).

Создавать приложения потом, через год после старта соцсети, также не хотелось, так как люди этот год не выдержат. Ну неудобно с телефона в браузере сидеть! Мы избалованы соцсетями, которые имеют все условия для обеспечения отличными сервисами всех нас.

В плане интерфейса для компа приглядывались движки типа React, Vue, Angular, но суть одно — js. Было ясно -они не потянут. Еще и с наскока их не возьмёшь, почти готовую сеть протащить через игольное ушко jsx можно легко, да только за год.

Нет, ну есть же C++ и готовые даже решения! Конечно, есть, да только я в нём не силён. И одного меня, учитывая суровость языка, не хватит, а рассчитывать мне не на кого. Потому -мимо.

И вот, исследуя разные возможности и наработки языка rust, я набрел на скудные в тех плане фреймворки (движки). Оказывается, есть и на этом языке таковые, о чудо.

Ясное дело, я взял в оборот Yew. Он самый развитый, даже имеет демо-примеры. Открыл один из них, и у меня так раскрылись глаза, что чуть не выпали. Знаете, как у глубоководного краба, они прыгнули на 10см вперед :-D.

Этот пример показал, с какой скоростью может работать сайт на таком движке. Всякие React'ы могут плакать горькими слезами, это просто сказка. Мечта. Это React здорового человека, если хотите.

Странички отрисовываются за несколько миллисекунд. Я, может, запишу видео того примера для вас.

И вот что получается в итоге!

П. 4. Нужны два фреймворка.

На одном языке. Один — сервер, второй — пользовательский.

Плюсы очевидны:

  1. Мне не нужно изучать другие языки, которые сложные, с многочисленными нюансами. Потому я экономлю кучу времени, которое даже в месяцах не оценить.
  2. Проект с самого начала избавляется от целой мешанины технологий и языков программирования. Тот же VK имеет под капотом php, js, c++, c, go. Это только что я слышал. У нас же будет только два решения — rust и wasm (аналог js). Будет полное единство в процедурах, программах, модулях и так далее. Это гигантское преимущество, притом работающее на уровне титанов типа C.
  3. Скорость, надёжность, безопасность как озвученные принципы решаются на ура языком rust, его движки всему этому соответствуют. Пожалуй, долгий и сложный стратегический путь в техническом плане подходит к концу, ведь более подходящего решения не сыскать. я этим занимаюсь уже два года и заявляю решительно. Слияние Rust Actix и Yew Framework сделают нашу сеть вне конкуренции. На таком уровне никто не работает, я проверял.
  4. Замена wasm придумана как аналог языку javascript. Это не язык, а технология, превращающая скрипты в бинарный файл, который работает куда резче, особенно в случае сложного, большого кода. А у нас будет именно такой.
  5. Угадайте, на какой платформе с удовольствием общались бы дети? На самой лучшей. Куда пошли бы нейтрально настроенный люди? Туда, где круче.

Остаётся пустяк. Освоить всё вышесказанное.

П. 4. Жесть.

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

Сначала я по утрам и вечерам читал книгу по rust. Надо отдать должное, книга отличная и доступная, особенно если читать не по тому порядку, какой предлагают авторы. Я бы рекомендовал 1,2,3,4,5,4,6,4,7,4… ну вы поняли.

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

Затем я приступил к изучению Actix и Yew, особенно в той части, которая касается их совместной работы.

Вот тут пошли лютые приколы:

  1. Ставил программное окружение для своего примера Yew я аж 4 дня. Это время прошло как в тумане, так как я упорный и почти не спал даже, пробуя разные идеи. Язык-то не такой старый и найти иной раз стоящие и, главное, рабочие примеры, сложно. Как выяснилось, поставщик облачных серверов обманывал в обещаниях, что они от VPS XEN не отличаются. Отличаются!
  2. Обновления библиотек языка делают примеры нерабочими. Приходится плясать с бубном и призывать на помощь всех святых. Например, роутер интерфейса не ставился, пока я не выдрал его прямо из рабочего примера.
  3. Компилирующая программа строгая, как три наставника Шаолинь из фильмов 90-х годов. Основной девиз «Врешь — не соберёшь».
  4. Даже для простого вытягивания данных со своего же сервера для отрисовки нужно три раза вспотеть, настоящая история.

Достиг я вот чего:

— в роли сервера собран полностью рабочий пример на Actix. Он настолько лучше подходит для работы сети, что движок джанго воспринимается как пионер против Шварценеггера (не к ночи будет упомянут).

— освоен принцип обслуживания базы данных. Получены примеры различных работ с ней. Скорость прекрасна, просто мечта;

— С 18ой попытки налажена работа интерфейса Yew, способного получать данные от сервера.

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

Если времени нужно будет много, то продолжится джанговский вариант и сеть откроется на нём. Однако параллельно я всё равно сделаю программу-максимум, так как без неё затея похожа на очень крутой блог с самыми разными возможностями, или на соцсеть уровня «детский садик» в моём строгом понимании.

В случае успеха, один сервер сможет лихо раздавать сеть огромной толпе тысяч на 100 в секунду. И сломать её или уронить будет просто нереально.

П. 5. Долгая, долгая сказка.

Друзья, как видите, работа всё идёт и идёт, и конца пока не видно. Что поделать, нужно реализовать план, который в принципе невозможен.

Однако я всё равно сделаю хорошую, надежную соцсеть. Вот увидите.

Удачи и счастья!

П.С. Прошу прощения за некоторый сумбур в изложении. Я так сильно бросился в язык rust, что до сих пор еще не отошёл, хотя и работаю аккуратнее уже третий день.



Последние статьи

Вверх