Демистификация: как проверить внешний интерфейс Node.js и технические возможности

Node.js внешний интерфейс

Конференция раннего чата по интерфейсу, новая отправная точка для развития интерфейса, была проведена совместно с Nuggets. Добавьте WeChat codingdreamer в эксклюзивную группу участников конференции и выиграйте на новом стартовом рубеже.


25-е ​​| Фронтенд-дебрифинг, продвижение/дебрифинг/отчетность/подведение итогов года - фронт-энд должен проходить каждый год, 5-9 прямых трансляций весь день, 7 лекторов (ant/youzan/byte/startup company, и т.д.),Нажмите на меня, чтобы сесть в машину 👉 (Адрес регистрации):

image.png

Ключевые слова:

  • Как вам нужно упаковать себя для предварительного разбора полетов?
  • Почему фронтенд-продвижение не может дать хороших результатов?
  • На какие результаты нужно ориентироваться при продвижении переднего плана на работе?
  • Существует ли лучшая методология отчетности о работе на переднем крае?

Все предыдущие выпуски имеют полную запись и трансляцию, можно начинатьгод проходитРазблокировать все видео и лекции сразу,👉Больше мероприятий


Текст выглядит следующим образом

Эта статья является 22-й сессией интервью в утреннем чате, а также 161-й сессией в утреннем чате, из графической речи, предоставленной командой Alibaba Cloud High Availability Architecture — Сюэ Цзун.

интервью в чате

Говоря об интервью, на самом деле у каждого интервьюера свой набор.Методология.

Я помню, когда я впервые присоединился к Али, я подтолкнул кандидата в команду, а затем еще один высокопоставленный член моей команды прошел собеседование.После собеседования я спросил его, как кандидат. Может быть, потому что он был занят, он не говорил много подробностей, поэтому он ответил мне тремя словами, он сказал, что вкус не тот, и я совсем запутался, то есть, что не так.

На самом деле, я думаю, что после стольких лет интервью у интервьюера есть свои критерии рассмотрения, а затем он проверяет кандидата на основе его результатов.соответствует ли это его вкусу.

Так что интервью на самом деле оченьсубъективныйОдна из вещей, которая часто может случиться, заключается в том, что эта команда чувствует себя неуместной, но присоединяется к другой команде в той же компании.Все это связано с интервьюером.его область и его опыт работы,И его критерии для интервьюСвязанный.

Какой Node.js может сделать

image.png

Поле Node.js очень большое, экология очень большая. Это язык,За ним фактически представляет собой весь инженерный инструмент,Есть также услуги,и целое большое поле.

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

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

Исследуйте фокус кандидата

image.png

парадигма программирования

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

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

системное мышление

Второе — это системное мышление, которое на самом делеВаш дизайн всей услуги,У вас есть всестороннее рассмотрение? Это способность, которой должны обладать общие архитекторы.

Инженерные возможности

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

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

Суммировать

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

Сначала тыПарадигма программирования со стандартами программирования, а затем, когда вы делаете систему,Постепенно развивайте свою методологию, и, наконец, выКак внедрить и внедрить эту систему.

парадигма программирования

image.png

Я только что говорил о парадигм, но мое понимание в том, что у вас есть определенный уровень Node.jsТехнические характеристикииз.

Например, стандартный собственный API Node.js, мы все знаем, что его стиль API — это стиль обратного вызова, его первый входной параметр — ошибка, а второй входной параметр — обратный вызов. Тогда эта форма API является стилем API или спецификацией, уникальной для Node.js.

модельМожно понять, что достижение — это когда ты решаешь задачи и думаешь, сформируешь какие-томодель программирования, илиспособ мышления, илиШаблоны проектирования.

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

На картинке выше я хочу показать, что все дороги ведут в Рим У вас может быть 4 решения ABCD для проблемы, верно? возможноОдно из решений меня устраиваетто я к тебедоброжелательность увеличится,такИнтервью — вещь субъективная..

кейс

Вопрос: В каталоге на диске есть 100 файлов JSON, объедините их в один файл JSON.

Решение первое

Эта проблема на самом деле довольно проста, первая мысль - JSON требуется, тосливаться воедино. (Как показано ниже)

image.png

Решение второе

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

image.png

Избегает ли проблема использования памяти чтение 20 файлов за раз, а затем их объединение?

Выглядит так, но есть еще одна яма базовых знаний, то есть require находится в системе модулей Node.js, он будет кешироваться,require памяти является резидентным.

Таким образом, приведенное выше решение на самом делеНе решает проблему использования памяти, но твойИдея правильная, а тут яма с базовыми знаниями. Поэтому мы изменили способ записи на require и читаем его напрямую с помощью модуля fs.На этот раз он больше не будет находиться в памяти. (Как показано ниже)

image.png

Решение третье

На данный момент решение этой проблемы почти такое же Обычно я снова спрашиваю кандидатов: у вас есть другие решения?

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

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

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

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

image.png

На приведенном выше рисунке есть два параметра: первый — objectMode, а второй — highWatermark.

Когда objectMode имеет значение true, в программе ему присваивается значение 20, что означает, что одноразовый поток обработки может вместить 20 задач обработки.параллелизмЗначение , которое вы можете испытать в водопроводе, может вместить 20 потоков обработки или потоков задач.

Возвращаясь к теме только что, этот одноклассник может спросить вас, что этот код слишком много.Если вы решаете такую ​​простую задачу и делаете так много кода, моего предыдущего решения достаточно.

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

системное мышление

image.png

Система на самом деле являетсяв общем и целом, в то время как у него многочасть(Иликомпоненты,модуль), эти детали должны быть очень точными, и эти точные деталищелкать вместе, как шестеренки, это может сделать систему очень эффективной и стабильной в работе.

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

кейс

Вопрос. Используйте собственный API Node.js для реализации службы источника статических ресурсов.

Что такое служба источника статических ресурсов? Возможно, все использовали cdn. Если вы не использовали cdn, возможно, вы использовали nginx. Если это не очень хорошо, возможно, вы использовали промежуточное программное обеспечение в Express или koa, которое является статическим промежуточным программным обеспечением, которое может предоставлять статические ресурсы в качестве службы. Выйдите и сделайте запрос на нашу веб-страницуcss,js,htmlэти ресурсы.

Требование здесь состоит в том, чтобы использовать нативные API, зачем использовать нативную API? Поскольку если вы используете рамки, вы действительно можете сделать это только с несколькими строками кода.

При внедрении сервиса происхождения, какое мышление у нас обычно есть? Вот несколько очков:

Идеи - проверить файлы

Сначала мы проверим файлон существует?Это файл? вместо каталога.

const http = require('http');
const { join } = require('path');
const { lstatSync } = require('fs');
const { URL } = require('url')
// 约定目录
const rootDir = join(require('os').homedir(), 'assets');

http.createServer((req, res) => {
  const { pathname } = new URL(req.url);
  
  // 检查文件是否存在
  try {
  	const stats = lstatSync(join(rootDir, pathname));
    if (!stats.isFile()) {
    	throw new Error('Not Found');
    }
  } catch (e) {
  	res.statusCode = 404;
    return;
  }
});

Предполагая, что на нашем сервере есть согласованный каталог rootDir, все мои статические ресурсы находятся здесь, и все запросы URL приходят, я могуСопоставление с файлом в каталоге соглашения.

Сначала проверьтесуществует ли этот файл. Если файл не существует, он вернет 404 Not Found, что является первой проблемой, которая приходит на ум. Тогда мы могли бы пойти искать файл, этоЭто файл,а такжене каталог, вот некоторые необходимые поисковые запросы.

Идеи - Легитимность ресурсов

тогдаПроверить легитимность ресурса, включая суффикс файла, находится ли он в каталоге соглашений и т. д.

const { extname, join, realPathSync } = require('fs');
const validExts - [ '.js', '.css', '.png', /*...*/ ];
const fileExt = extname(pathname);

// 文件后缀是否合法
if(!validExts.includes(fileExt)) {
  res.statusCode = 404;
  return;
}

// 文件路径是否合法
const filePath = realPathSync(join(rootDir, pathname));
if (!filePath.startsWith(rootDir)) {
	res.statusCode = 404;
  return;
}

Давайте проверимсуффикс файла, он заканчивается на .js, .css? Если нет, я не думаю, что он запросил законный статический ресурс, и я также верну 404 или 500 или другие коды, которые вы считаете более семантическими.

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

В это время мне, возможно, придется проверить, существует ли файл в корневом каталоге. Если следующее не существует, я не разрешу доступ.

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

Идеи - 304

Сразу же после этого проверяется, понимает ли кандидат базовый протокол HTTP. Когда мы договариваемся о кеше, все знают, что можно использовать протокол 304. If-Modified-Since или Etag для реализации логики 304. Пропустите это здесь.

// 实现 304,这里使用 If-Modified-Since,用 Etag 也是可以的
const clientModifiledTimeStamp = req.headers['if-modified-since'];
const expectedModifiedTimeStamp = new Date(stats.mtime).getTime();
if (clientModifiledTimeStamp && clientModifiledTimeStamp === expectedModifiedTimeStamp) {
	res.statusCode = 304;
  res.setHeader('Last-Modified', new Date(expectedModifiedTimeStamp).toGMTString());
}

Идеи - 200

const fs = require('fs');
const CONTENT_TYPE_MAP = {
	'.js': 'application/javascript',
	'.html': 'text/html',
	'.css': 'text/css',
  // ...
};

const MAX_AGE_MAP = {
	'.js': 86400,
  '.html': 3600,
};

// 200 输出
res.statusCode = 200;
res.setHeader('Content-Type', CONTENT_TYPE_MAP[extname]);
res.setHeader('Cache-Control', `max-age=${MAX_AGE_MAP[extname]}`);
res.setHeader('Last-Modified', new Date(expectedModifiedTimeStamp).toGMTString());

Наконец, мы хотим вывести, мы сначала установим код ответа200, тогда мы установим еготип носителя,Тип содержимогоа затем также обратите внимание на то, чтобы настроить его по-разному для разных типов ресурсов, у вас разныеСтратегия управления кэшем, который легко игнорировать.

Обычно html, js, css будут кешироваться относительно долго Это место не обязательно основано на этом значении в коде, но оно отражает некоторые вашидумать, даже если значения разные.

// 此处省略 chatset 检测,假设是 utf-8
const charset = 'utf-8';
if (extname ==== '.html'/* ... */) {
	// 提高 TTFB
  fs.createReadableStream(filePath, { encoding: charset }).pipe(res);
} else {
	res.end(fs.readFileSync(filePath, { encoding: charset }));
}

Далее мы вернем этот файл.В настоящее время мы можем улучшить его из-за некоторых ресурсов.первый байт ответа,улучшатьTTFB, на этот раз, например, html, я могу использоватьПуть потокаЧтобы ответить на это, это также отражение вашего собственного по этому вопросу.

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

Идеи - Другое

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

  • дизайн кэша
  • URL Combo
  • Gzip-сжатие
  • Определение типа изображения
  • ......

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

Мы собираемся разработать некоторыетайник, с помощью этих кешей, будь то временный кеш или постоянное эластичное хранилище кеша, мы можем разработать некоторые, такие как кеш памяти, сначала сделать часть файла какКэш-память LRU, если память бьет, вернись сразу, если нет, поехалиНайти файлы на диске, если диск попал в отдачу, если нет хита идём на удалённый, напримерredisИли АлиossТакая эластичность, наконец, ищет этот файл, оба увеличивают высокую доступность и повышает эффективность реагирования на производительность.

второйURL Comboиспользуется в качестве источника CDN. В настоящее время это относительно базовая возможность, например, сплайсинг после url1.js,2.jsВ это время используйте запрос, чтобы вернуть все содержимое 1.js и 2.js.

ТретийGzip, gzip обычно настраивается в nginx, можно еще упомянуть это место, потому что мы не упомянули, что в начале этого вопроса стоит nginx, но он лучший по промышленным стандартам, или по генеральной линии На практике мы будем не выполнять логику Gzip на стороне узла, потому что это будет потреблять много ресурсов ЦП,Это не то, в чем Node хорош. Затем вы можете проверить тип изображения ниже, который может отражать ваше восприятие текущих возможностей CDN.

Например, у нашего CDN на Али есть такая услуга, то есть мы реально можем вернуть картинкам формат webp. Как раз для png эти картинки мы. После обнаружения пользовательским агентом браузера он может более разумно вернуться к webp, что снижает пропускную способность.

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

Инженерные возможности

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

image.png

Например, если у вас есть проектные чертежи, это проект вашей системы, а затем вы строите этот дом. Дом, который вы строите, не означает, что его снесут после того, как он будет построен, но вы должны ввести свойство, правильно?

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

кейс

Вопрос. Решение для развертывания Java и Node.js на одном и том же компьютере в гетерогенных системах.

фон 0.0

image.pngВышеупомянутый вопрос на самом деле вопрос, с которым я столкнулся несколько лет назад, и тогда я составил план.Я не буду задавать этот вопрос во время интервью, потому чтоЭто уникальная проблема Али сцены, я просто беру это решение в качестве примера, с какими трудностями оно может столкнуться при проектировании?

Итак, на этот раз давайте сначала поговорим о предыстории, потому что, как и все остальные несколько лет назад, мы все являемся фронтендом React, особенно React Alibaba, затем наш React будет быстро внедрен в бизнес-линию в 2015 и 2016 годах. .

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

Фон 1.0

Каждая бизнес-система — это Java, затем реакция выполняется на стороне клиента, а CSR — на стороне браузера.рендеринг на стороне клиента, Поработав некоторое время, мы обнаружили, что у нас действительно есть определенные требования в нашем бизнесе.

Допустим, у нас есть несколько предприятий, которыетребования к сео, если у нас чисто клиентский рендеринг, то он недостаточно дружелюбен к поисковикам, а там еще какая-то наша реклама, да? Также необходимо полагаться на способности сео. Так что мы также учитываем коммерческую точку зрения, нам нужен спрос на рендеринг на стороне сервера.image.png

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

Итак, в начале я говорил о гетерогенных системах. Гетерогенными системами здесь стали Java и Node.js. Это два разных стека технологий, и они изоморфны в реакции, а не противоположном понятии.

Неоднородность здесь относится только к разнице в стеке технологий, тогда как в нашем решении 1.0 мы развернули чрезвычайно большой набор сервисов ssr, которыйssr5.

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

Сначала нашОтветы на запросы становятся все медленнее и медленнее, Это легко понять. С ростом количества предприятий и расширением доступа к Java наши услуги Node постепенно становятся недостаточными. Это легко сделать, поэтому мыДобавить мощность машины, после расширения обнаружилась проблема. Поскольку мы находимся в этой централизованной службе рендеринга, мы будем много работать над модулем реагирования в памяти для повышения производительности.тайник, если вы не кешируете, производительность определенно не идеальна.

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

Если возникают проблемы с рендером процессора, мы также можемРасширениеЕсли мы сможем решить эту проблему, то мы не сможем устранить узкое место, возникающее при разработке этого кэша памяти, путем увеличения емкости. Итак, в этом случае мы перешли к решению 2.0.

Фон 2.0

image.pngРешение 2.0 заключается в развертывании на одном уровне через разнородные системы, то есть Java и Node.одноранговое развертываниеДля решения этой проблемы. Тогда каждый из наших Node-сервисов будет тянуть только код соответствующей бизнес-системы, то есть я не буду включать код других предприятий, мне нужно только хорошо обслуживать свой собственный бизнес.

Затем в случае с той же машиной мы используем простой HTTP, потому что в тот же периодАдрес внутреннего кольцаВ случае со 127 его HTTP-производительность приемлема, а в случае длинных соединений, то по этой схеме наша схема сейчас устранена, а в то время была по этой схеме. Кажется, это лучший план на данный момент, лучший план или наиболее подходящий план.

Мы не будем обсуждать, есть ли еще возможности для оптимизации в этом решении, рассмотрим только проблему 2.0.децентрализацияНам нужно решить проблему невозможности горизонтального масштабирования прямо сейчас, и в то же время наша производительность в итоге значительно улучшилась.

По такому плану, в процессе посадки мы действительно столкнулись с массой проблем, особенно для студентов Java, ваш NodeпаразитическийВ его бизнес-контейнере Java, как вы убедите его поместить ваш код в свой контейнер и поделиться им с Java-приложениями?ОЗУ, занимать вместеCPUКонкуренция за системные ресурсы ресурсов.

Что делать, если ваш цикл Node.js не работает? Что мне делать, если мой ЦП переполнен? Мой бизнес застрял у вас? И так далее, как насчет вашего развертывания? Можно ли вызвать ваш код напрямую через получение какого-либо модуля в моем репозитории Java?

Я не принял его, и многие изучающие Java в то время не согласились.

Идеи — развертывание

image.png

Как мы ее решим в итоге? Сначала на стороне развертывания, потому что это DockerКонтейнерное развертывание, мы не стали напрямую встраивать код Node в репозиторий Java, мы окончательно принялиrpmпуть пакета.

Linux предоставляет rpm, который на самом деле представляет собой управление программными пакетами.Так же, как пакеты npm, мы можем фактически превратить наши сервисы в пакет RPM, а затем просто добавить строку в их Docker.установить пакет RPM,Затем подтяните время начала контейнера,Это также подтянет приложение Node., это первая проблема развертывания, которую мы решили в процессе развертывания.

Идеи - Безопасность

image.png

Тогда с точки зрения безопасности, наша безопасность здесь означает, что когда я выполняю бизнес-код в приложении Node, его бизнес-код может на самом деле писать какой-то очень странный код, который не подходит для сервера. на этот раз можетЗагрязнениев какую-то среду на стороне сервера.

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

по этому мыСоздайте песочницу, чтобы запустить ее через модуль vm, что может свести к минимуму вторжение этого бизнес-кода на сервер Node. В то же время в процессе нагрузочного тестирования мы обнаружили, что Node.js, скорее всего, будет вызывать бесконечный цикл, потому что бизнес-код не стандартизирован, что очень вероятно, и мы уже сталкивались с такой проблемой. Поэтому мы должны решить эту проблему.

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

Затем мы передаем этот плагин, чтобы убедиться, что мыКак только некоторый код бесконечного цикла рабочего входит,Мгновенно этот рабочий будет убит. Так что избегайте этого, верно? Это монопольная мера, то есть когда будет проблема с нашим кодом, мы его сплавим.

В это время Node зависнет.Ни в коем случае,потому что ваш код уже затронул это дело.Если вы его вовремя не убьете,то он затронет даже Java,и вся машина может быть затронута этим контейнером. убийство.

Идеи - Мониторинг

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

image.png

Мы следим за платформой, мы можем в реальном времени обнаруживать Node.js, и если мы обнаружим, что определенный Linux не работает, он отправит нам сообщение.Вызовите полицию, а также у нас есть инструкции по сбору ошибок.Мы можем указать каталог журнала узла журнала, а затем мы настраиваем ключевые слова, которые также могут быть оповещены.уведомлятьНАС.

Идеи - Производительность

image.pngЗатем, с точки зрения производительности, у нас есть платформа Alinode, которая представляет собой версию, основанную на среде выполнения узла, которая в основном обеспечиваетПлатформаИнструмент, инструмент белого экрана для наблюдения за индикатором занятости системы Node в реальном времени.

image.png

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

  • количество рабочих процессов: Обычно это то же самое, что и количество процессоров, но мы по-прежнему поддерживаем настраиваемый
  • уровень воды в памяти: Это пространство объектов нашего старого поколения Размер этого пространства будет иметь определенное отношение к частоте GC V8.
  • Стратегия кэширования модулей: Как долго я кэширую? Это все лру или что? Это конфигурация, которую мы предоставляем, которая может быть изменена в соответствии с ее конфигурацией различными предприятиями.

Идеи - Аварийное восстановление

image.png

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

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

То, что я сейчас сказал, на самом деле только часть. Из общей картины я сказал несколько моментов. На самом деле, мы тоже много чего сделали. Вот краткий ответ. Например, после нашего фронтенда код выпущен, как мыУмная синхронизация с сервером, нам нужно что-то сделать на стороне сервера, но нам это на самом деле не нужно.После того, как мы публикуем фронтенд, мы фактически открываем канал релиза. На стороне Node он автоматически определяет, что вытащит последний код и перезагрузит модуль.reloadи так далее для этих работ.

Суммировать

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

предложение

Итак, наконец, я хотел бы поделиться с вами некоторыми своими мыслями.

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

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

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

Вы, вероятно, медленно строите свойСистема знаний. Поэтому я думаю, что фронтенд-инжиниринг — это очень техническое дело, а не просто рутинная работа, не обязательно углубляться в нижний слой v8, чтобы оптимизировать эту среду выполнения, что такое техническое содержание, в основном для того, чтобы увидетьполе.

Статья 3:Узнайте больше об операционных системах, потому что Node в конце концов является серверным языком.Разрабатываете ли вы инструменты, настольные приложения с командной строкой или разрабатываете сервисы, он на самом деле тесно связан с операционной системой.

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

а

image.png

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

Я думаю дело не только в гонках,но и не обязательно в гоночной трассе.Когда создаешь очень отличный продукт в очень сложных условиях,так же как и наша инженерия,ты из ножа в огонь.Эпоха идет постепенно становится инструментальной, платформенной и даже интеллектуальной, а фронтенд-инжиниринг расширяет границы. Когда Talk to становится очень хорошим продуктом или платформой, это тоже очень, очень страстная вещь. Хорошо, тогда мой сегодняшний обмен заканчивается здесь.

Эта сессия интервью открыта на одну сессию, а другие неопубликованные материалы:

image.png