С развитием Интернета все больше и больше сервисов не только предоставляются одним узлом или одним языком, но, как правило, представляют собой многоязычную распределенную совместную разработку.Например, уровень доступа завершается Node.js, а уровень доступа уровни логики и данных разрабатываются реализацией C++/GO/Python и, таким образом, образуют крупномасштабную гетерогенную систему.
на основеTarsсистема разработанаTars.jsЧтобы пользователи могли быстро создавать и переносить службы Node.js без изменения общей архитектуры разнородных систем, а также могли легко разделить исходную единую службу на несколько логических подслужб и поддерживать сотни служб в миллиардном трафике Tencent.
Tars.js После более чем 5 лет осадок и итераций в Tencent (версия Node.js @ 0.10 обеспечивает поддержку), широко используется в десятках важных предприятий, таких как браузер Tencent QQ, настольный браузер Tencent, карта Tencent, сокровище приложений, мобильная экономка Tencent, Интернет +, медицинское обслуживание Tencent, Tencent Miying, страхование, лотерея и так далее.
Tars.js 2.0 Выпустите следующие 9 основных функций:
л 100% на Написан на JavaScript и не содержит кода C/C++.
l Балансировка нагрузки и управление несколькими процессами.
l Мониторинг исключений кода и перезапуск.
l Сбор и обработка журнала обслуживания.
l Мониторинг HTTP(s) и создание отчетов, а также поддержка настраиваемых отчетов.
l Совместимость с Tars IDL Спецификация кодека.
l Поддержка смол Вызовы RPC и функции раскраски.
l Поддерживает отправку команд управления и получение конфигураций службы.
л Оригинал Механизм отслеживания исключений LongStackTrace.
л ... доступно больше функций@tars/node-agentК пониманию
Tars.js 2.0 Три концепции дизайна:
» Высокие степени свободы:
l Совместимость со всеми (≥0.10) официальными версиями Node.js.
л да Исходный код Node.js является неинвазивным и немодифицируемым.
л Нижний уровень полностью прозрачен для верхнего уровня и поддерживает различные структуры верхнего уровня без изменений.
То есть:
Вы можете использовать любой фреймворк, с которым вы знакомы (например, Express.js/Koa.js и т. д., включая веб-фреймворки, но не ограничиваясь ими) без каких-либо изменений в фреймворке (без внедрения промежуточного программного обеспечения).. может пройти Запустите Tars.js и наслаждайтесь различными функциями мониторинга и управления, предоставляемыми платформой.
В то же время модули, предоставляемые Tars.js, также можно импортировать в соответствии с вашими потребностями (если они не используются, их нельзя импортировать).
» высокая производительность:
Tars.js разработан для обеспечения высокой производительности и большого параллелизма и использует множество методов оптимизации внешнего интерфейса (V8) (таких как FlattenString/FastProperties и т. д.), чтобы свести к минимуму влияние предоставляемых возможностей на производительность бизнеса.
После нашего теста (веб-сервер) влияние отчетов об обходе и мониторинга на производительность службы по умолчанию составляет ≤ 5%, а производительность общих модулей (RPC, журналы и т. д.) находится на переднем крае отрасли.
» Дифференциация:
Tars.js предоставляет дифференцированные операционные решения в зависимости от типа бизнеса:
l Службы с высоким трафиком: постарайтесь уменьшить влияние платформы на производительность службы.
л Бизнес с низким трафиком: максимально используйте аппаратные ресурсы для улучшения процесса разработки.
"Hello World"
Разверните свой код через Tars.js, вы можете напрямую получить все следующие функции:без изменения кода.
(даже официальный сайт Node.jsпример, можно запустить напрямую)
✓Управление процессом
Значение по умолчанию основано наclusterМодуль выполняет балансировку нагрузки, а количество процессов может быть настроено от 1 до max (количество ядер ЦП), а также может быть настроено как auto (то же количество физических ядер), чтобы уменьшить нехватку памяти и улучшить «цену-производительность».
В то же время одновременно запускается процесс обнаружения зомби для мониторинга бизнес-процессов в режиме реального времени.
» Описание случая
Сервис использует неоптимизированные регулярные выражения для фильтрации XSS-атак при преобразовании UBB-кода в HTML на форуме, однако из-за того, что пользователь публикует картинки в кодировке BASE64, время вычисления регулярных выражений слишком велико, а загрузка процессора достигает 100%:
После включения обнаружения зомби Tars.js автоматически перезапускает бизнес-процесс, когда он отслеживает, что бизнес-процесс мертв, тем самым сокращая время простоя бизнеса:
Tars.js Хотя проблема бизнес-кода (BUG) не может быть решена, мы сделаем все возможное, чтобы обеспечить доступность бизнеса.
✓сервисный мониторинг
Взяв имя службы и имя интерфейса (секция URL-PATH) в качестве широты, подсчитайте общий трафик, среднее потребление времени, частоту тайм-аутов и частоту исключений:
Код возврата больше 400 (настраиваемый) сообщается как исключение.
» Инструкции по мониторингу
Веб-сервисы, как правило, состоят из статических и динамических ресурсов (интерфейсов).Поскольку время запроса статических ресурсов (локальных файлов) намного меньше, чем у динамических ресурсов (бизнес-логика), объем запросов часто бывает высоким, что снижает общее обслуживание время.
На основании этого Tars.js запросит URL в Раздел PATH используется в качестве интерфейса, и каждый интерфейс может просматривать свой общий трафик, среднее потребление времени и частоту исключений, чтобы пользователи могли полностью понять производительность службы.
✓Мониторинг функций
Независимо от типа вашей службы, всегда сообщается о следующих функциях, чтобы упростить отслеживание проблем и оценку производительности:
l memUsage: использование памяти, которое будет отображаться как rss, heapUsed, heapTotal. Три использования (в байтах)
l cpuUsage: использование ЦП, будет сообщено об использовании ЦП, и данные будут объединены в логические отдельные ядра (единицы измерения - проценты)
l eventloopLag: (задача) задержка очереди, измеряемая каждые 2 секунды (в миллисекундах)
л libuv: использование ввода-вывода, будет сообщено Два варианта использования activeHandles и activeRequests
Каждая стратегия рассчитывается по узлам среднего (Avg), максимального значения (Max) и минимального значения (Min):
✓вывод журнала
Все журналы, выводимые модулем консоли (например, console.log), будут выводиться в локальный файл службы. И прикрепите соответствующую информацию (ниже), чтобы облегчить поиск проблемы.
Формат журнала: дата и время | PID процесса | уровень журнала | имя выходного файла и номер строки | содержимое журнала
2018-07-01 12:00:00|332|DEBUG|app.js:13|Server running at http://127.0.0.1:3000/
✓ LongStackTrace
из-за Node.js использует асинхронный механизм, и при возникновении исключения стек становится неполным, что приводит к сложным проблемам с позиционированием.
В связи с этим мы предоставляем технологию трассировки длинных ссылок для автоматического подключения стека вызовов предварительного заказа при генерации исключения, а также поддерживаем фильтрацию части пользовательского кода в стеке исключений.
Поскольку эта функция приведет к снижению производительности, по умолчанию она отключена, а нечувствительные к производительности службы, такие как платформа управления, могут быть включены непосредственно в конфигурации.
» Описание случая
Выполнение приведенного выше кода вызовет следующее исключение:
ReferenceError: ThisMayThrowError is not defined
at Timeout.setTimeout as _onTimeout
at ontimeout (timers.js:427:11)
at tryOnTimeout (timers.js:289:5)
at listOnTimeout (timers.js:252:5)
at Timer.processTimers (timers.js:212:10)
Стек предварительного заказа для setTimeout потерян, что затрудняет отслеживание проблемы.
Когда эта функция включена (и пользовательский код отфильтрован), исключение, созданное приведенным выше кодом (без изменений), будет автоматически присоединено к стеку вызовов предварительного заказа (следующим образом):
ReferenceError: ThisMayThrowError is not defined
at Timeout.setTimeout [as _onTimeout] (test.js:4:13)
at Promise.resolve.then.val (test.js:2:5)
at Object.<anonymous> (test.js:1:82)
Чтобы облегчить пользователям поиск проблем, это также отражает дифференцированную концепцию работы Tars.js.
Всеми вышеперечисленными функциями можно владеть без модификации бизнес-кода (без внедрения каких-либо модулей).
Из-за ограниченного пространства не все способности могут быть показаны.Если у вас есть дополнительные требования (например, вызовы RPC и т. д.), вы можете использовать модули, предоставляемые Tars.js (ниже), чтобы достичь:
l @tars/rpc: Модуль вызова Tars RPC.
l @tars/stream: Модуль кодека протокола Tars(Tup).
l @tars/logs: Компонент журнала, включая (по размеру, времени) скользящие и удаленные журналы.
l @tars/config: Используется для получения файлов конфигурации службы онлайн.
l @tars/monitor: Обеспечьте мониторинг услуг, мониторинг функций и поддержку отчетности по мониторингу PP.
l @tars/notify: используется для передачи служебных (тревожных) сообщений.
l @tars/utils: Набор вспомогательных инструментов, включая файлы конфигурации Tars и парсер Tars RPC Endpoint.
l @tars/dyeing: Тарс Модуль определения окраски RPC.
Каждый модуль (щелкните имя, чтобы перейти) имеет чрезвычайно подробную документацию (README), к которой вы можете обратиться в любое время.
в Tars.js , вам нужно сосредоточиться только на бизнес-коде, а Tars.js сделает все остальное.
Адрес с открытым исходным кодом Github:
об авторе
@SuperZheng, основной участник проекта с открытым исходным кодом Tencent Tars, в основном ответственный за разработку базовой операционной структуры языка Node.js в среде Tars, архитектор полного стека из браузера Tencent QQ [SuperTeam], знакомый с Web (3D), терминал , back-end Вычисления с большими данными.