8-месячное ментальное путешествие по разработке Node.js BFF

Node.js
8-месячное ментальное путешествие по разработке Node.js BFF

Напряженные дни всегда проходят очень быстро.Оглядываясь назад, я разрабатываю node.js BFF в течение 8 месяцев, и я практически никогда не писал о веб-интерфейсе.Пол года пути.

предварительное планированиеBFF

На самом деле, когда я впервые пришел в компанию, я занимался фронтенд-разработкой, фронтенд-разработкой на стороне B и использовал реакцию для рисования страниц. и имеет более 100 модулей.После 2-х месяцев отрисовки, Звонок сотрудников проекта, я вхожу в мобильную группу, участвую в разработке мобильного терминала, переразрабатываюHybrid App, а потом подумал, что былиh5,小程序,поэтому когда я рисовал схему архитектуры в то время я тоже учитывал многоконцевость.На тот момент руководитель предложил что надо сделатьBFFДоступ к средней платформе до конца, но в то время не ожидается мультиконца, только растущий и растущийBFF.

первоначальное использованиеnode.js, начальная точка BFF

В июле 2019 года была построена передняя частьVueПроектируйте, пишите публичные методы, другие коллеги все это делаютIOSиAndroidразработан, поэтому не используетсяVue, настроить каркас библиотеки проекта, запаковатьrequest,utils, подождите каких-нибудь публичных методов и стилей, напишите две страницы и пусть они сначала разработают остальные страницы.

Также в июле 2019 года построеноBFFПервый проект (устаревший),BFFВ компании есть внутренний самодельный фреймворк, я не первый, кто использует компаниюnode.jsДа (но у других нет фронтенда как у меня, все делают по несколько месяцев подрядnode.js BFFразработка).

Первая версия была очень простой, чистой прозрачной передачей, а способ записи в то время был любым.apiопределяетrouter, а потом перенаправить на другой сервис (пока называется Р сервис, первая буква аббревиатуры), данные все приходят со мидл платформы, Р система получит через 20 минут после того как клиент не запрашиваетSessionСрок действия истек, поэтому здесь вы можете ввести только пароль пользователяsession, когда происходит прозрачная передача 401, пароль учетной записи пользователя снова используется для расшифровки.

crazy_coding

написатьjenkinsсценарий, пишиDockerРазвертывание сценария, потому что раньше я не сталкивался с этими двумя вещами, поэтому сейчас изучаю и использую его.

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

BFFрасширен доCBSслой, тоже стал становиться по-настоящему ценным, и тоже стал наступать на яму

CBS customer business System
во время встречиleaderВот как они называются, что я и предполагал

Вероятно, где-то в октябре мы получили новое задание взять на себя другую систему и интегрировать ее в нашу систему.App, нам нужно писать с фронтенда на бэкенд (сервис C), в это время я начинаю видетьJavaкод, сNode.jsПереписывание внутренней логики также стало требовать большего количества внутренних вещей,Mysql,服务发现,日志,Redisслой кэша,BFFАутентификация, также упомянутаяcmq(очередь сообщений), на этих этапах я начал узнавать сумасшедшие вещи о бэкенде.

study

BFF вызывает промежуточную платформу для входа в систему. После входа в систему разрешения и информация о пользователе попадают вRedis, также решить проблему распределенных разрешений,apiИз первоначальных 20 прозрачных передач примерно на 60 интерфейсов остается еще два интерфейса входа, которые необходимы для входа в две разные системы (P и C) соответственно и хранения всей информации об авторизации двух систем вRedis, можно сказать, что проблема авторизации пользователя решается принудительно.На самом деле, здесь мы понимаем, что две системы нелегко интегрировать, поэтому мы рассматривалиSSOПроблема единого входа заняла много времени, чтобы рассмотреть единый вход, но в итоге это сделали не мы, люди из других групп открыли систему и поставили пароли учетных записей двух систем.mappingСохраните его в своей системе, а затем заходите в их систему каждый раз, когда вы входите в систему, чтобы найти его.mappingОтношения, если есть сопоставление, он автоматически войдет в другую систему, что можно рассматривать как принудительное решение разницы в входе между двумя системами.Здесь также разработана таблица записей входа, и каждая информация для входа хранится в таблице.

из-заRedis,MysqlmqЯ не знаком с очередями сообщений, так что это жалкий опыт во время разработки: я каждый день работаю сверхурочно по делам, езжу с работы на метро, ​​а когда прихожу домой, лихорадочно изучаю нужные знания и использую их.Redisкогда вы окажетесь правы数据结构У меня слишком мало понимания, потому что я не компьютерщик, и мои знания о структурах данных толькоJS数据类型Так много, что я также потратил время на изучение структур данных и алгоритмов, в основном数据结构аспект вещей. Я никогда раньше не слышал об очередях сообщений, я скоро буду использовать их, но мне еще нужно научиться.数据库Это тоже очень маленькая вещь, с которой я столкнулся.От грамматики до дерева B+, у меня есть краткое понимание этого, и я выучил грамматику.База данных все еще очень хороша, и ее нужно проверить, если это немного сложнее.

Это заняло три недели.Хотя я мало знал о бизнесе системы С, я поставилJavaГрамматика переводится какJSРабота над грамматикой еще сделана.

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

РеархитектураBFFЭтаж,CBSиBFFРазделились и начали расширять бизнес-системы

Какое-то время итерация была относительно стабильной.В это время архитектор начал требовать нашу группу.Все логи должны быть полными, а также должен быть стандартизирован доступ к публичным компонентам.При этом мой код начал блокироваться .code Review, когда я рецензировал, мне пожаловались, что я не хочу этого. Конкретные вопросы:Синтаксис слишком лаконичен, процессно-ориентированная разработка, привыкшая кfunctionМетод разработки (ориентированный на процесс), более стандартизированный объектно-ориентированный и все асинхронные, которые я в основном используюtry catchПакет, с одной стороны, слишком некрасивый синтаксис, с другой стороны, не способствует сбору логов (тут я обсуждал с архитектором, а также итерировал внутренний фреймворк, вызывал напрямую, а фреймворк будет фиксировать ошибки , и не будет сообщать о некоторых ошибках английского языка/кода. слово).

Другой важный вопрос заключается в том,BFFСтыковка двух двух систем, а также некоторых с другой стороныapi, все в单体系统, архитектура должна быть разделена, поэтому архитектор, наконец, дал метод, сначала разделенный на три службы, одна из которыхBFF代理服务, два других, один прикладPобслуживание, стыковкаCСлужить Итак, в конце 2019 года, за две недели до праздника, я начал путь преображения.Проделывая преображение, я одновременно итерировал.В группе было не так много людей.BFFЯ пишу, а другие коллеги занимаются микро-фронтальной трансформацией (ощущение, что я пропустил 100 миллионов очков опыта), так что эти дела задолжены и очень загружены.

2020

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

dehiscence

Преимущества реархитектуры

Объектно-ориентированное программирование, код более краткий и простой для понимания, и его легче поддерживать. 100% подлинныйAirbnb规范. Он разделен на три службы.Итеративная разработка трех служб не влияет друг на друга, а выпуск и развертывание трех служб не влияют друг на друга. После новой итерации фреймворка журнал стал более полным,rpc调用日志,db操作日志,三方调用日志,api访问日志, больше не паникуйте по поводу записей об ошибках. Многопроцессный режим используется при обнаружении служб новой платформы, и обнаружение служб не повлияет на логическую обработку основного потока.

Проблемы с аутентификацией, с которыми я столкнулся после изменения архитектуры

Как аутентифицировать клиентские запросы между разными сервисами.Например я сейчас запустил новый точечный сервис.Логика этого точечного сервиса сложнее,и меньше взаимодействия со средней платформой и больше взаимодействия с базой данных.Данные Доступ к нему осуществляется сам по себе, то есть интерфейс предоставляется не толькоApp, также необходимо предоставитьB端管理平台В настоящее время аутентификация платформы управления отличается от аутентификации приложения. Для аутентификации платформы управления необходимо вызвать систему B-end. После прохождения аутентификации я могу предоставить данные.APP(Хотя аутентификация APP тоже написана мной, но не в этом сервисе, мне все равно нужно вызывать другой сервис для достижения цели аутентификации), я думаю, что это немного громоздко, я думаю, что на крупных заводах сотни систем Должна быть невозможна аутентификация таким образом, и подключение будет утомительным. В этом вопросе нет хорошего решения.

Преимущества нодовой разработки

Первое преимущество, конечноJSПреимущества языка, стоимость начала работы с грамматикой очень мала. Ранее мы рассматривали сценарий с несколькими терминалами, здесь мультитерминал по-прежнему является преимуществом, промежуточная станция должна отдавать только один фрагмент данных, а BFF может отдавать разные данные в зависимости от разных концов. Быть применимымnodejsОн очень подходит для уровня доступа с быстрой разработкой, удобным развертыванием и чрезвычайно низкой стоимостью. При разработке интерфейса всегда необходимо общаться с сервером по поводу полевых проблем.CBSДанный интерфейс в основном основан на странице, и в принципе нет необходимости общаться со мной по поводу поля.С одной стороны, BFF может делать агрегацию интерфейсов, и данные нескольких интерфейсов размещаются на одном интерфейсе, а клиент уменьшает количество запросов. Это направление становится все более популярным, например,小程序云开发,ServerlessСверхлегкие сервисы по-прежнему очень применимы в некоторых бизнес-сценариях.

слот

Учебных ресурсов по Node.js по-прежнему слишком мало, например, я изучаюRedisКогда собственно боевой туториал можно только смотретьJavaверсия, обучениеRabbitMqтакже когдаJavaиз. я понимаю数据结构和算法教程СлишкомJavaДа, конечно, каждый может читать C, но я не знаю C, поэтому я очень беспомощен.Конечно, есть книги.JavaScriptВерсия, если интересно, можете посмотреть сами.
Я также наступал на множество ловушек в реальном бою, таких как использованиеnodeОбработка изображения, я также ступил на яму в течение двух дней, чтобы начать.node-canvas генерирует маркетинговую карту.

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

Суммировать

В течение этого периода разработки node.js я столкнулся со многими вещами, помимо фронтенда. За это время я также вкратце изучил некоторые знания о бэкэнде. гораздо больше, чем я упомянул. Понимание асинхронного программирования также глубже, т.к.nodejsпонимание уже не тодемонстрационный уровень. Хотя ресурсов для обучения относительно немного, это не влияетnode.js性价比убедительный факт, что использование памяти минимально,CPUПрофессия тоже очень маленькая, что тоже очень важно для предприятий.Ресурсы-деньги.

Соотношение цена-качество видноУзел + промежуточный итог ограничения тока MQ, хотя это и не отражает конечную производительность, но все же можно увидеть некоторые эффекты.

Дорога длинна и длинна, я буду ходить вверх и вниз искать


Другие ссылки:

Блог github: добро пожаловать, звезда, учитесь вместе, растите вместе

Механизм и реализация промежуточного программного обеспечения KOA

Быстрый старт операции Nodejs RabbitMq

666