Напряженные дни всегда проходят очень быстро.Оглядываясь назад, я разрабатываю 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, пароль учетной записи пользователя снова используется для расшифровки.
написатьjenkins
сценарий, пишиDocker
Развертывание сценария, потому что раньше я не сталкивался с этими двумя вещами, поэтому сейчас изучаю и использую его.
Когда запускалась первая версия, она тоже наступала на множество ям, потому что некоторыеDocker
Переадресация сопутствующих услуг и причины, по которым вы не очень хорошо знакомы с контейнерами, обычно подходят для выхода в онлайн.
BFF
расширен доCBS
слой, тоже стал становиться по-настоящему ценным, и тоже стал наступать на яму
CBS customer business System
во время встречиleader
Вот как они называются, что я и предполагал
Вероятно, где-то в октябре мы получили новое задание взять на себя другую систему и интегрировать ее в нашу систему.App
, нам нужно писать с фронтенда на бэкенд (сервис C), в это время я начинаю видетьJava
код, сNode.js
Переписывание внутренней логики также стало требовать большего количества внутренних вещей,Mysql
,服务发现
,日志
,Redis
слой кэша,BFF
Аутентификация, также упомянутаяcmq
(очередь сообщений), на этих этапах я начал узнавать сумасшедшие вещи о бэкенде.
BFF вызывает промежуточную платформу для входа в систему. После входа в систему разрешения и информация о пользователе попадают вRedis
, также решить проблему распределенных разрешений,api
Из первоначальных 20 прозрачных передач примерно на 60 интерфейсов остается еще два интерфейса входа, которые необходимы для входа в две разные системы (P и C) соответственно и хранения всей информации об авторизации двух систем вRedis
, можно сказать, что проблема авторизации пользователя решается принудительно.На самом деле, здесь мы понимаем, что две системы нелегко интегрировать, поэтому мы рассматривалиSSO
Проблема единого входа заняла много времени, чтобы рассмотреть единый вход, но в итоге это сделали не мы, люди из других групп открыли систему и поставили пароли учетных записей двух систем.mapping
Сохраните его в своей системе, а затем заходите в их систему каждый раз, когда вы входите в систему, чтобы найти его.mapping
Отношения, если есть сопоставление, он автоматически войдет в другую систему, что можно рассматривать как принудительное решение разницы в входе между двумя системами.Здесь также разработана таблица записей входа, и каждая информация для входа хранится в таблице.
из-заRedis
,Mysql
,иmq
Я не знаком с очередями сообщений, так что это жалкий опыт во время разработки: я каждый день работаю сверхурочно по делам, езжу с работы на метро, а когда прихожу домой, лихорадочно изучаю нужные знания и использую их.Redis
когда вы окажетесь правы数据结构
У меня слишком мало понимания, потому что я не компьютерщик, и мои знания о структурах данных толькоJS数据类型
Так много, что я также потратил время на изучение структур данных и алгоритмов, в основном数据结构
аспект вещей. Я никогда раньше не слышал об очередях сообщений, я скоро буду использовать их, но мне еще нужно научиться.数据库
Это тоже очень маленькая вещь, с которой я столкнулся.От грамматики до дерева B+, у меня есть краткое понимание этого, и я выучил грамматику.База данных все еще очень хороша, и ее нужно проверить, если это немного сложнее.
Это заняло три недели.Хотя я мало знал о бизнесе системы С, я поставилJava
Грамматика переводится какJS
Работа над грамматикой еще сделана.
Во время развертывания я наступил на бесчисленное количество ям.Например, нашу программу нужно развернуть в нескольких регионах, а зеркало в районе Пекина нельзя вытащить из региона Шэньчжэнь.Наконец, я попросил эксплуатацию и техническое обслуживание помочь мне скопировать зеркало к зеркалу Шэньчжэня, и сказал мне, что это должно быть в будущем.Другая платформа, чтобы подтолкнуть зеркало. Сейчас это нарушение процесса. Есть и другие ямы, и я побеспокоил архитектора, чтобы он помог нам увидеть проблему (спасибо архитектору.
РеархитектураBFF
Этаж,CBS
иBFF
Разделились и начали расширять бизнес-системы
Какое-то время итерация была относительно стабильной.В это время архитектор начал требовать нашу группу.Все логи должны быть полными, а также должен быть стандартизирован доступ к публичным компонентам.При этом мой код начал блокироваться .code Review
, когда я рецензировал, мне пожаловались, что я не хочу этого. Конкретные вопросы:Синтаксис слишком лаконичен, процессно-ориентированная разработка, привыкшая кfunction
Метод разработки (ориентированный на процесс), более стандартизированный объектно-ориентированный и все асинхронные, которые я в основном используюtry catch
Пакет, с одной стороны, слишком некрасивый синтаксис, с другой стороны, не способствует сбору логов (тут я обсуждал с архитектором, а также итерировал внутренний фреймворк, вызывал напрямую, а фреймворк будет фиксировать ошибки , и не будет сообщать о некоторых ошибках английского языка/кода. слово).
Другой важный вопрос заключается в том,BFF
Стыковка двух двух систем, а также некоторых с другой стороныapi
, все в单体系统
, архитектура должна быть разделена, поэтому архитектор, наконец, дал метод, сначала разделенный на три службы, одна из которыхBFF代理服务
, два других, один прикладP
обслуживание, стыковкаC
Служить
Итак, в конце 2019 года, за две недели до праздника, я начал путь преображения.Проделывая преображение, я одновременно итерировал.В группе было не так много людей.BFF
Я пишу, а другие коллеги занимаются микро-фронтальной трансформацией (ощущение, что я пропустил 100 миллионов очков опыта), так что эти дела задолжены и очень загружены.
В феврале 2020 года, а именно в середине прошлого месяца, эти три системы были запущены в онлайн.Онлайн-процесс не был гладким.Контейнер можно было успешно запустить за полминуты, а переадресацию можно было переключить за две минуты, потому что некоторые другие конфигурации , через два часа...
Преимущества реархитектуры
Объектно-ориентированное программирование, код более краткий и простой для понимания, и его легче поддерживать.
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