NGINX, 클라우드 네이티브로 진화, All in OpenNJet
1. 소개
NJet은 오픈소스 커뮤니티에서 제공하는 STS 모듈(https://github.com/vozlt/nginx-module-sts)을 수정 및 적용한 후 Stream Server의 표시기 정보를 출력하는 데 사용되며 json 반환을 지원합니다. html 및 prometheus 형식.
2. 구성 지침
데이터 플레인 구성 지침
server_traffic_status_zone
문법 | server_traffic_status_zone [공유:이름:크기] |
기본값 | 공유:stream_server_traffic_status:1m |
구성 위치 | 개울 |
설명: 스트림 서버의 실행 상태를 저장하는 공유 메모리 영역을 구성합니다.
서버_트래픽_상태
문법 | server_traffic_status<on |
기본값 | 끄다 |
구성 위치 | 스트림,서버 |
설명: 스트림 서버 표시기를 기록할지 여부입니다. server_traffic_status_zone 명령이 구성된 경우 표시기 수집이 자동으로 활성화됩니다.
server_traffic_status_filter_by_set_key
문법 | server_traffic_status_filter_by_set_key 키 [이름] |
기본값 | - |
구성 위치 | 스트림,서버 |
설명: 그룹(이름) 및 하위 그룹(키) Stream의 트래픽 통계를 $server_addr, $server_port 등과 같은 변수를 사용할 수 있습니다. 매개변수 이름이 지정되지 않은 경우 기본값은 streamFilterZones입니다.
제어 영역 구성 지침
stream_server_traffic_status_display
문법 | stream_server_traffic_status_display |
기본값 | - |
구성 위치 | 위치 |
설명: 이 명령은 스트림 서버의 표시기 정보를 얻는 데 사용됩니다. 기본 출력 형식은 stream_server_traffic_status_display 명령에 의해 설정됩니다.
stream_server_traffic_status_display_format
문법 | stream_server_traffic_status_display_format <json |
기본값 | JSON |
구성 위치 | 위치 |
설명: 이 명령은 표시기의 기본 반환 형식을 구성하는 데 사용됩니다.
3. 구성 파일 예시
njet.conf njt_stream_stsc_module 모듈은 정적으로 컴파일되므로 별도로 로드할 필요가 없습니다.
worker_processes auto;
cluster_name njet;
node_name node1;
error_log logs/error.log error;
helper ctrl /usr/local/njet/modules/njt_helper_ctrl_module.so /usr/local/njet/conf/njet_ctrl.conf;
helper broker /usr/local/njet/modules/njt_helper_broker_module.so;
events {
worker_connections 1024;
}
http {
}
stream {
server_traffic_status_zone shared:aabbcc:2m;
upstream tcpa {
server 127.0.0.1:1234;
}
server {
listen 1234;
server_traffic_status off;
server_traffic_status_filter_by_set_key * $server_addr;
return "aa\n";
}
server {
listen 1235;
server_traffic_status on;
proxy_pass tcpa;
}
}
njet_ctrl.conf는 동적 모듈 njt_stream_stsd_module.so를 로드해야 합니다.
load_module /usr/local/njet/modules/njt_http_sendmsg_module.so;
load_module /usr/local/njet/modules/njt_ctrl_config_api_module.so;
load_module /usr/local/njet/modules/njt_helper_health_check_module.so;
load_module /usr/local/njet/modules/njt_http_upstream_api_module.so;
load_module /usr/local/njet/modules/njt_http_location_api_module.so;
load_module /usr/local/njet/modules/njt_doc_module.so;
load_module /usr/local/njet/modules/njt_http_vtsd_module.so;
load_module /usr/local/njet/modules/njt_stream_stsd_module.so;
error_log logs/error_ctrl.log error;
events {
worker_connections 1024;
}
http {
include mime.types;
access_log off;
server {
listen 8081;
location / {
return 200 "njet control panel\n";
}
location /api {
dyn_module_api;
}
location /doc {
doc_api;
}
location /metrics {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
location /stream_metrics {
stream_server_traffic_status_display;
stream_server_traffic_status_display_format html;
}
}
}
4.4.동적 구성
NJet은 스트림 서버가 지표를 수집하는지 여부를 동적으로 구성할 수 있습니다.
동적 구성 기능을 사용하려면 njet.conf에 sts 동적 구성 모듈을 로드해야 합니다.
load_module /usr/local/njet/modules/njt_stream_dyn_sts_module.so;
동적 구성 API 메시지의 스키마는 다음과 같이 정의됩니다.
{
"$id": "dynsts",
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"type": "object",
"required": ["servers"],
"properties": {
"servers": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["listens", "server_traffic_status"],
"properties": {
"listens": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"server_traffic_status": {
"type": "boolean"
},
"server_traffic_status_filter_by_set_key": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
}
}
}
}
}
}
메시지 샘플:
{
"servers": [
{
"listens": [
"0.0.0.0:18082"
],
"server_traffic_status": true,
"server_traffic_status_filter_by_set_key":
[
"* $server_addr"
]
}
]
}
GET을 사용하여 현재 구성 쿼리
curl localhost:8081/api/v1/config/stream_dyn_sts
PUT을 사용하여 구성 업데이트
curl -X PUT -d
'{"servers":[{"listens":["0.0.0.0:1234"],"server_traffic_status":false,"server_traffic_status_filter_by_set_key":["\"*\" \"$server_addr\""]},{"listens":["0.0.0.0:1235"],"server_traffic_status":true,"server_traffic_status_filter_by_set_key":[]}]}'
localhost:8081/api/v1/config/stream_dyn_sts
Linus는 커널 개발자가 탭을 공백으로 대체하는 것을 막기 위해 문제를 직접 해결했습니다. 그의 아버지는 코드를 작성할 수 있는 몇 안 되는 리더 중 한 명이고, 둘째 아들은 오픈 소스 기술 부서의 책임자이며, 막내 아들은 핵심입니다. Huawei: 일반적으로 사용되는 모바일 애플리케이션 5,000개를 변환하는 데 1년이 걸렸습니다. Hongmeng으로의 포괄적인 마이그레이션 Java는 타사 취약점에 가장 취약한 언어입니다. Hongmeng의 아버지인 Wang Chenglu: 오픈 소스 Hongmeng은 유일한 아키텍처 혁신입니다. 중국 기초 소프트웨어 분야의 마화텅(Ma Huateng)과 저우홍이(Zhou Hongyi)가 악수를 하며 "원한을 풀다" 전 마이크로소프트 개발자: 윈도우 11 성능은 "터무니없을 정도로 나쁘다" 라오샹지가 오픈소스인 것은 코드는 아니지만 그 이유는 다음과 같다. Google이 대규모 구조 조정을 발표 했습니다 .NJet 애플리케이션 엔진은 커널 재구성을 통해 고유한 런타임 동적 구성 로딩 기능을 달성하며 차세대 고성능 웹 애플리케이션 엔진 입니다 . NJet은 고성능 데이터 플레인 처리 기능을 갖추고 있으며 NJet의 고유한 부조종사 CoPilot 서비스 프레임워크를 통해 클러스터링, 고가용성, 활성 상태 확인 및 선언적 API와 같은 여러 보조 기능을 예약하여 기능 확장을 촉진하고 관리/제어 기능 쌍을 분리합니다. 데이터 플레인에 미치는 영향까지 NJet 애플리케이션 엔진의 성능은 CNCF에서 권장하는 Envoy 애플리케이션 엔진의 3배를 초과합니다. 메일 그룹 공식 홈페이지