Ветер Началось как простое пример приложения для Поток , но благодаря излиянию поддержки от нашего удивительного сообщества мы решили сосредоточиться больше времени и энергии на проекте. Первоначальный ответ вокруг ветров 2.0 превысил все наши ожидания. С момента запуска в середине мая приложение понравилось № 1 на хакерских новостях более дня, имеет 5500 звезд (и подсчета) на Github и стал приложением для трендов на охоте на продукт.
Вступая в это, не было никакого способа предвидеть, насколько народные ветры 2.0 станут – будет ли это абсолютный удар или эпический провал и трата времени ?? Команда пользуется примерным приложениям на здание, поэтому я знал, что это не будет общей убыткой, и она была награждена, чтобы увидеть эту новую итерацию настолько широко используемой в течение первого месяца после выпуска.
Технический стек для ветров совершенно отличается от потока. Возможно, вы видели сообщение в блоге, который StackShare писал о том, как потоковое включает в себя питание активности для 300 миллионов пользователей, используя GO, ROCKSDB и RAFT. Winds, однако, основан на Node.js, Mongodb Atlas, Express, PM2, Bull, Babel и React.
Чтобы начать с Winds 2.0, вы пробуете веб-версию или загрузите приложение здесь, или если вы чувствуете более авантюрную отправку к GitHub и раскрутите его на местном уровне. Давайте давайте немного поговорим о стеке Winds 2.0 и почему мы решили пойти с технологиями, которые мы сделали (и почему мы решили строить ветры в первую очередь!).
RSS – это сломанный опыт 😭
Мы понимаем, что многие пользователи RSS Power являются разработчиками, дизайнерами и журналистами. Одним из наших целей с ветрами является ответ на вопросы, которые мы задавали себе: что, если сообщество разработчиков и дизайнеров может создать опыт RSS, который упрощает и полируется? Может ли это обратить в обратную сторону нисходящей спирали меньшего пользователей, использующих преимущества технологии и дополнительных публикаций, снижающихся поддержку?
Будущее RSS не уверена в лучшем случае. Наша надежда с этим проектом заключается в том, чтобы внести вклад в #Reviverss.
Почему JavaScript/Node …? 🤔
Другая основная цель для ветров – включить широкий спектр разработчиков для внесения вклад. Мы хотим, чтобы кто-то был бы легко заметить, что им не нравится в своем опыте RSS/Podcast, и легко отправлять запрос на потяжку с помощью исправления или дополнения.
Если бы вы были достаточно смелы, чтобы исследовать CodeBase, вы, вероятно, заметили, что мы используем JavaScript для всего – как передней, так и б/у. Большая часть нашей команды переживается с Go и Python, поэтому узел не был очевидным выбором для этого приложения приложения. Что забавно о JavaScript, это сколько людей жалуется на это неадекватный язык. Конечно, у него есть свои quirks – однопоточные резьбы, обратный вызов ада и т. Д. – Но мы считаем, что можно построить отличное программное обеспечение на любом языке.
Для ветров JavaScript был отличным выбором, чтобы способствовать сообществу вокруг проекта. Что еще более важно, зрелость JavaScript начала сиять с добавленной поддержкой синтаксиса Async/en a enaiq.
Конечно … Будут ненавистники, которые отказываются признать, что есть что-то удаленно позитивное о JavaScript (есть четные рации на хакеровских новостях о Node.js.); Однако, не пишешь полностью в JavaScript, мы не могли бы видеть результаты, которые мы сделали. Вот быстрое разрушение некоторых причин, по которым мы выбрали JavaScript:
- Почти каждый разработчик знает или может, по крайней мере, прочитал JavaScript
- С ES6 и Node.js v10.x.x, он становится очень способным языком
- Async/a a a a a a a a a a a a a a enaiq – это мощное и простое в использовании (Async/await vs обещания)
- Babel позволяет нам поэкспериментировать с JavaScript следующего поколения (функции, которые не находятся в официальном Scape Spect)
Пряжа позволяет нам постоянно устанавливать пакеты (и заполнено тоннами новых трюков)
Devops 🖥️.
Редко, что вы слышите о том, как компания развертывает и управляет кодом. Будучи этим ветрами 2.0 – это открытый источник, мы хотели поделиться несколькими инструментами, которые мы используем, чтобы получить работу, когда речь идет о том, чтобы получить наш код с наших машин до сервера.
Веб-версия ветров статически размещена на S3 с Cloudfront. Во всем, это стоит нам несколько долларов в месяц на проведение. Каждая настольная версия приложения развернута внутри электрона, что позволяет нам преодолеть разрыв между веб и рабочим столом.
Что касается задней части API, это другая история. У нас довольно достойное развертывание потока, продолжается, чтобы обеспечить стабильность и ремонтопригодность. Вот подсветка:
- Все код хранится на Github
- Мы ручной выгнали сборки AWS, используя комбинацию ткани и бото
- Облачная информация Создание среды свежих ветров, состоящих из экземпляров EC2, групп масштабирования AUTO * AUTO * (ASG), балансировщик нагрузки на приложение (ELB) и экземпляр редис
- AWS CCM хранит и извлекает различные конфигурации, необходимые при загрузке (E.g. Текущая версия и т. Д.)
- Переменные дотенв и среды хранятся в кукольной и CCM
- После того, как все экземпляры EC2 доступны, скрипт марионетки работает и применяет конфигурацию на всех живых экземплярах (в режиме применения)
- Boots PM2, автоматически запускает различные процессы Node.js, которые нам нужно сохранить нашу приложение в живых (API и работников)
Для лесозаготовительных метрик мы используем комбинацию Statsd + Graphite + Grafana.
Понимание электронов ⚡.
Мы хотели поэкспериментировать с созданием электронного приложения с загрузками для каждого дистрибутива Linux, MacOS и Windows, в дополнение к сети. Принципиально это казалось довольно простым: мы пишем код, оберните его в электронную оболочку и выпустите в нашу желаемую операционную систему … оказывается, мы ошиблись.
Электрон, хотя и мощный, оказался более крупным зверям, чем мы ожидали. Строительство до разных дистрибутивов было особенно тяжело, даже с электронным строителем (предоставленным, у нас была неприятная удача, нуждающаяся в исправлении электронного строителя (и эта ошибка с тех пор была исправлена), но это только приходится только для некоторых болевых точек, которые мы попали в ). Меню MacOS BAR должна была быть вправа для хранения MacOS, чтобы принять наше приложение, и выполнять небольшие задачи с электронным API, например, открытие ссылки во внешнем браузере, оказалось довольно сложно. Несмотря на трудности, наша команда двинулась вперед с некоторыми пользовательскими инструментами (все видимые и открытые на Github), и мы освободились не только всем нашим целям выпуска, но и в Интернете.
Тестирование в JavaScript 🗳 ️
JavaScript все еще дикий запад до такой степени. Это довольно не-самоуверенно, особенно если вы используете Express, поэтому мы должны были откатить нашу собственную структуру тестирования, чтобы выполнить работу. Наш API, который построен с Express, использует комбинацию различных модулей Node.js. Вот список инструментов, которые мы используем для тестирования:
- Мокка как структура тестирования
- Чай как библиотека утверждения
- Синон как наша библиотека издевательства
- Nock как библиотека HTTP Mocking
- Mock-требуется как библиотека издевательства модулей
- Стамбул как наш тестовый инструмент покрытия
Сочетание тестовых модулей мы выбрали нашу команду для быстрого перемещения с несколькими разработчиками, работающими на различных множествах функций одновременно, не доставляя API.
Frontend 🛠️.
Реагирование является феноменальной структурой, и, по нашему мнению, выиграл битву против других структур, таких как угловой и эмубер. Учитывая его обновленную лицензию MIT, она идеально подходит для проекта Winds 2.0.
Основной стек, который мы используем для ветров 2.0, довольно просто:
Главный стек:
- Create-React-App
- Реагировать
- Redux (React-redux)
- React – маршрутизатор
- Электрон
Теперь давайте пообщаемся о некоторых из интерфейсных модулей, которые мы использовали, чтобы сделать ветер 2,0 реальности.
Интересные модули:
- React-Audio-Player – это хороший интерфейс реагирования на API Core Audio Element
- Водовая точка для прокрутки событий для обработки автоматической пагинации
- React-Downzone для удобного импорта файла OPML
- React-Image для безупречных формирований изображений в случае, если у нас нет хранимых изображений
Отдохнуть
Когда вы строите большое приложение, вы обычно полагаетесь на многие библиотеки и инструменты для повышения качества кода, время на рынок и т. Д. С этим сказанным, ветры тоже полагаются на многие библиотеки и инструменты. Ниже несколько, но не все, что мы используем:
FeedParser
FeedParser – это довольно сложный модуль Node.js, который по нашему мнению, является основой проекта. Он обрабатывает большинство несоответствий, найденных в RSS-каналах и выпивает «очищенную» версию корма. Без этого модуля мы будем писать много утверждений … и это не весело.
Франк-мин
Франк-мин – это модуль обнаружения языка, который мы используем для определения языка подачи. Это может звучать как небольшая задача; Однако это на самом деле, большая часть нашей персонализации двигателя. Например, мы рекомендуем только кормить на английском языке для пользователей, которые говорят по-английски. То же самое с другими языками.
Бык
Bull помогает сохранить очередь ветра 2,0 структурно звучать с помощью Redis. Он поставляется с Super Easy API и поддерживает несколько очередей, что идеально подходит для нашего использования. Кроме того, есть несколько инструментов мониторинга с открытым исходным кодом на их странице GitHub, которая обеспечивает понимание того, что происходит за кулисами.
ES6
JavaScript W/ES6 позволяет нашей команде писать минималистский код для широкого круга людей. Весь код на ветрах 2.0 – 100% JavaScript (за исключением нескольких сценариев Bash, чтобы помочь с развертыванием рабочих процессов). В настоящее время команда в настоящее время мигрирует большую часть функциональности в кодовой базе, чтобы использовать Async/ждать, чтобы уменьшить количество строк кода.
Пряжа
Пряжа абсолютно удивительна. Это невероятно быстрый менеджер упаковки, построен специально для JavaScript. Кроме того, это 100% источник с открытым исходным кодом и почти всегда доступно из-за его механизмов кэширования. Мы использовали NPM в прошлом, и хотя это работает просто хорошо, команда здесь, в потоке предпочитает пряжу.
Axios.
Axios – это клиент на основе обещания для браузера и Node.js. Мы на самом деле используем его как на переднем, так и на заднем плане для различных задач. Например, все интерфейсные HTTP-запросы проходят через обертку в Axios. И для заднего конца мы используем Axios для проверки размера файла перед отправкой их через процесс анализа, а затем в базу данных для хранения – это обеспечивает большие файлы, не спускающие наши рабочие процессы. Если вы не проверили Axios, вы определенно должны.
Командир
Командир – это еще один модуль Node.js, на этот раз обеспечивающий полную поддержку для создания интерфейсов командной строки. Да, вот вправо, есть CLI, которые мы используем для различных задач, таких как тестирование каналов, падение RSS-каналов и многое другое!
Варить
Babel «Позволяет нам использовать следующее поколение JavaScript, сегодня». По сути, если функция, такая как импорт, недоступна в определенном JavaScript (интерфейсный и/или задний конец), мы все еще можем использовать его, используя Babel.
выражать
Экспресс используется для питания нашего API. По сравнению с другими рамками, это действительно сияет, когда под напряжением. Честно говоря, наша команда имеет опыт работы с большинством, если не все, javaScript Frameworks, и мы найдем выражение, чтобы быть самым простым для работы. Он регулярно поддерживается, имеет компоненты с открытым исходным кодом, и он потрясающий. 😎
Сентиментальный
Sentry позволяет отчеты о сбое в реальном времени для нашего обратно и интерфейса. Что выдувает нам, насколько гранунтирован, вы можете получить с Sentry. Их функции помогают нам определить и отладки ошибок и дают нам представление о том, когда исправить или откат. Когда дело доходит до пожарного, этот инструмент определенно выигрывает рынок.
Альголия
Algolia обеспечивает быстрое (буквально) поиск нашего приложения. В возрасте до 2 мс наши пользователи могут обнаружить RSS-каналы и подкасты для чтения или прослушивания. У них даже есть компоненты для фреймворков, таких как реагирование и угловые, чтобы улучшить интеграцию. Это безусловно, один из наших любимых; Однако нам нравятся их все. 😛.
Поток
Поток – это ключевой ресурс для ветров 2.0, поскольку он предоставляет новостные каналы и потоки активности для наших пользователей и даже персонализацию на основе машины. Без потока мы не сможем служить предложенному контенту нашим пользователям, как мы в настоящее время делаем.
Монгодб Атлас
Mongodb Atlas – это феноменальные дбаас, позволяющие нам беспокоиться о приобретении пользователей, а монгодб заботятся о времени безотказной работы. Он идентичен для размещения вашего собственного кластера, кроме Mongodb предоставляет вам приборную панель и URI для подключения к. С Mongodb Atlas больше не беспокоит о здоровье кластера, мониторинга и т. Д.
Мангуста
Mongoose – это мощный ODM, который позволяет нам определять богатые модели в нашей среде MongoDB. Вообще говоря, базы данных NoSQL являются схемой (то есть они имеют или не требуют формы); Однако с MongoDB, всегда хорошая идея указать схему, чтобы вы могли правильно индексировать и организовать ваши данные. Это позволяет легко обновлять и эффективные запросы.
PM2.
PM2 – диспетчер процессов Node.js. Это позволяет нам обеспечить время работы и масштабировать процессы, поскольку нам нужно. CLI для проекта мертв простым, что позволило нашей команде забрать его на лету.
Окончательные мысли 😁.
Чтобы начать с Winds 2.0, вы можете попробовать веб-версию или загрузить приложение здесь. Если вы чувствуете себя более приключению к https://github.com/getStream/winds и раскрутите его на местном уровне.
RSS в порочном круге. Winds – это сообщество усилий, чтобы помочь превратить прилив и #reviverss. Взносы всегда очень ценятся.
Если вам интересно узнать немного о потоке и как работает наш API, у нас легко 5-минутный API Tour Это будет прогуляться по процессу кормления масштабируемой активности.
Оригинал: “https://dev.to/nickparsons/the-winds-20-stack-3ck4”