1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/megaease-easemesh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
user-manual.md 27 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 10:39 f4897ce

EaseMesh Manual

  • EaseMesh Manual
    • Introduction EaseMesh разделяет основные компоненты на две части: одна — это Control plane, другая — Data plane. В плоскости управления EaseMesh использует кластер Easegress для формирования надёжной единицы доставки и сохранения решений. Плоскость данных состоит из каждой mesh-службы с бизнес-логикой пользователя и модулей расширения EaseMesh, включая EaseAgent и Easegress-sidecar. Также существует блок Mesh Ingress для маршрутизации и обработки трафика в направлении «юг-север».

      Architecture

    • Установка Пожалуйста, ознакомьтесь с install.md, чтобы установить EaseMesh.

    • Клиентский командный инструмент Клиентский командный инструмент EaseMesh — emctl, пожалуйста, ознакомьтесь с emctl.md для использования.

    • Mesh-служба Службы являются основными элементами EaseMesh. Разработчикам необходимо разбить свою бизнес-логику на небольшие модули и реализовать её как службы.

      В отличие от K8s-служб, EaseMesh управляет приложением через службу, служба имеет логическое имя, связанное с одним или несколькими развёртываниями K8s. Служба имеет собственную спецификацию и должна принадлежать к арендатору.

      Служба может иметь несколько версий, версия службы представляет собой MeshDeployment или собственное K8s-развёртывание, которое привязывается к ресурсу Kubernetes Deployment.

Арендатор Spec

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

Примечание: Все спецификации в EaseMesh написаны в формате Yaml.

Создайте арендатора для служб. Вы можете развернуть новую mesh-службу в существующем арендаторе или создать новый для неё. Измените пример содержимого YAML ниже и примените его:

name: ${your-tenant-name}
description: "This is a test tenant for EaseMesh demoing"

Пожалуйста, не забудьте изменить заполнители YAML, такие как ${your-tenant-name}, на реальное название службы перед применением. Ссылка на спецификацию арендатора: https://github.com/megaease/easemesh-api/blob/master/v1alpha1/meshmodel.md#easemesh.v1alpha1.Tenant

MeshService Spec

Создайте службу и укажите, к какому арендатору принадлежит служба. Создайте свою mesh-службу в EaseMesh. Обратите внимание, что сейчас нам нужно добавить только эту новую сущность логики службы. Реальная бизнес-логика и способ развёртывания будут представлены позже. Измените пример содержимого YAML ниже и примените его.

name: ${your-service-name} registerTenant: ${your-tenant-name}
loadBalance:
  policy: roundRobin
  HeaderHashKey:
sidecar:
  discoveryType: eureka
  address: "127.0.0.1"
  ingressPort: 13001
  ingressProtocol: http
  egressPort: 13002
  egressProtocol: http

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

Для регистрации/обнаружения сервисов EaseMesh поддерживает три основных решения: Eureka/Consul/Nacos. Ознакомьтесь с соответствующей конфигурацией ниже:
| Имя | URL в конфигурации развёртывания сетки |
| --- | ------------------------------------- |
| Eureka | http://127.0.0.1:13009/mesh/eureka |
| Consul | http://127.0.0.1:13009 |
| Nacos | http://127.0.0.1:13009/nacos/v1 |

Взаимодействие между внутренними сервисами сетки может осуществляться через рекомендованные Spring Cloud клиенты, такие как `WebClient`, `RestTemplate` и `FeignClient`. Исходный RPC на основе HTTP домена остаётся неизменным. Обратите внимание, что EaseMesh будет размещать трафик по маршруту Ease-West по имени сервиса сетки, поэтому необходимо сохранить имя сервиса сетки таким же, как исходное имя приложения Spring Cloud для RPC на основе HTTP домена.

## Нативное развёртывание

Помимо пользовательского ресурса [MeshDeployment](#meshdeployment), мы поддерживаем нативный ресурс развёртывания K8s для автоматического внедрения JavaAgent и sidecar.

Если вы хотите, чтобы EaseMesh управлял приложениями, вам необходимо выполнить следующие предварительные условия:
1. Создайте пространство имён с указанной меткой.
2. Аннотируйте спецификацию развёртывания соответствующими аннотациями.
3. Разверните приложения через K8s Deployments.

### Создайте конкретное (заинтересованное) пространство имён
EaseMesh следит только за операциями создания/обновления, происходящими в заинтересованном пространстве имён. Заинтересованным пространством имён является пространство имён с определённой меткой. Поэтому, если вы хотите, чтобы EaseMesh автоматически внедрил sidecar и JavaAgent для развёртывания в пространстве имён, вам нужно создать пространство имён с меткой ключа: `mesh.megaease.com/mesh-service`.

Например:
```yaml
apiVersion: v1
kind: Namespace
metadata:
  name: spring-petclinic
  labels:
    mesh.megaease.com/mesh-service: "true"

Независимо от того, какое значение установлено для mesh.megaease.com/mesh-service, EaseMesh будет рассматривать пространство имён как заинтересованное пространство имён, в котором будут инструментированы операции создания/обновления развёртываний.

Разверните аннотированное развёртывание

Как упоминалось ранее, EaseMesh будет инструментировать операции создания/обновления развёртываний в указанном пространстве имён, но внедрение EaseMesh не всегда будет применяться ко всем развёртываниям в пространстве имён, оно будет влиять только на развёртывание, аннотированное указанной аннотацией.

EaseMesh предоставляет следующие аннотации пользователям, которые помогут EaseMesh эффективно управлять приложениями пользователей:

  • mesh.megaease.com/service-name: Обязательная аннотация, это имя MeshService.
  • mesh.megaease.com/service-labels: Необязательная аннотация, если вам нужна канареечная версия приложений, вы можете указать её в форме «ключ=значение». Эти метки будут прикреплены к экземплярам, зарегистрированным в реестре служб.
  • mesh.megaease.com/app-container-name: Необязательная аннотация, Если ваши развёртывания содержат несколько контейнеров, вам необходимо указать, какой контейнер является вашим контейнером приложения. Если он опущен, EaseMesh предполагает, что первый контейнер является контейнером приложения.
  • mesh.megaease.com/application-port: Необязательная аннотация, Если контейнер приложения прослушивает несколько портов, вы должны указать порт в качестве порта приложения, с которого предоставляются услуги. Если он опущен, первый порт считается портом приложения.
  • mesh.megaease.com/alive-probe-url: Необязательная аннотация, sidecar должен знать, жив или мёртв контейнер приложения. Если она опущена, по умолчанию используется: http://localhost:9900/health, JavaAgent откроет порт для прослушивания. Mesh.megaease.com/init-container-image: Необязательная аннотация, имя образа initContainer, который содержит jar JavaAgent, обеспечивающий наблюдаемость сервиса. Если опущено, будет использоваться образ контейнера по умолчанию.

Mesh.megaease.com/sidecar-image: Необязательная аннотация, образ sidecar для управления трафиком сервиса. Если опущено, будет использован образ sidecar по умолчанию.

Например:

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: ${your-ns-name}
  name: ${your_service-name}-canary
  annotations:
    mesh.megaease.com/service-name: ${your_service-name}
spec:
  replicas: 0
  selector:
    matchLabels:
      app: app1    #Note! service name should remain the same with the origin mesh service
  template:
    metadata:
      labels:
        app: app1
    spec:
      containers:
...

MeshDeployment

Будет устаревшим в версии 1.4.0. Мы не рекомендуем его использовать. Предпочитайте использовать собственное развёртывание с выделенной аннотацией, см. Native deployment.

EaseMesh полагается на Kubernetes для управления экземплярами сервисов и требуемыми ресурсами. Например, мы можем масштабировать количество экземпляров с помощью Kubernetes. Фактически EaseMesh использует механизм, называемый Kubernetes Custom Resource Define (CRD), чтобы объединить метаданные сервиса, используемые EaseMesh, и оригинальное развёртывание Kubernetes. MeshDeployment можно использовать не только для развёртывания и управления экземплярами сервиса, но и для реализации канареечного развёртывания.

MeshDeployment оборачивает собственные ресурсы K8s Deployment спецификации. Содержимое раздела spec.deploy в спецификации MeshDeployment полностью соответствует определению спецификации развёртываний K8s.

apiVersion: mesh.megaease.com/v1beta1
kind: MeshDeployment
metadata:
  namespace: ${your-ns-name}
  name: ${your_service-name}-canary
spec:
  service:
    name: ${your-service-name}
    labels:
      version: canary       # Эти карты используются для маркировки этих канареечных экземпляров
  deploy:                   # Содержимое спецификации собственного развёртывания K8s
    replicas: 2
    selector:
      matchLabels:
        app: ${your-service-name}   #Note! service name должно совпадать с именем исходного сервиса mesh
    template:
      metadata:
        labels:
          app: ${your-service-name}
      spec:
        containers:
...

Sidecar Traffic

В EaseMesh мы используем EaseMeshController на основе Easegress для выполнения роли Sidecar. В качестве сайдкара контроллер сетки будет обрабатывать входящий и исходящий трафик. Входящий трафик означает бизнес-трафик извне в сайдкар, а исходящий — бизнес-трафик из сайдкара наружу. Мы представляем их простой диаграммой:

Входящий трафик

inbound traffic

Входящий

MeshController создаст выделенный конвейер для обработки входящего трафика:

  1. Принимает бизнес-трафик снаружи через один порт.
  2. Использует RateLimiter (см. ниже) для ограничения скорости.
  3. Передаёт трафик сервису.

Исходящий трафик

outbound traffic

Исходящий

MeshController создаёт выделенные конвейеры для обработки исходящего трафика:

  1. Принимает бизнес-трафик от сервиса через один порт.
  2. Использует CircuitBreaker, Retryer, TimeLimiter для защиты приёма сервисов в соответствии с их собственной конфигурацией.
  3. Использует балансировку нагрузки для выбора экземпляра сервиса.
  4. Передаёт трафик выбранному экземпляру сервиса.

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

Обратите внимание, что сайдкар обрабатывает только бизнес-запросы, то есть он не перехватывает трафик:

  1. На промежуточное ПО, такое как Redis, Kafka, Mysql и т. д.
  2. На любой другой управляющий уровень, такой как пилот Istio.

Но мы хорошо совместимы с экосистемой Java, поэтому адаптируем основные реестры обнаружения служб, такие как Eureka, Nacos и др. HTTP based RPC

Информация о взаимодействии между mesh-сервисами через протокол HTTP, такая как задержка, код состояния, путь запроса и так далее. В настоящее время EaseMesh поддерживает трассировку для WebClient, RestTemplate и FeignClient. Вскоре будет поддерживаться больше библиотек HTTP RPC.

JDBC

Информация о задержке выполнения SQL-запросов MySQL, операторах, результатах и так далее.

Redis

Информация о задержках команд Redis, ключах и так далее.

RabbitMQ

Информация о задержках команд RabbitMQ, топиках, рутинах ключей и так далее.

Kafka

Информация о задержках топиков Kafka и так далее.

EaseMesh использует EaseAgent для ненавязчивого сбора данных о промежутках времени и Kafka для хранения всех собранных данных трассировки.

Включение трассировки

  1. Настройте ObservabilityOutputServer mesh-сервиса, чтобы включить вывод данных трассировки EaseMesh в Kafka. Измените пример YAML ниже и примените его:
outputServer:
  enabled: true
  bootstrapServer: ${your_kafka_host_one}:9093,${your_kafka_host_two}:9093,${your_kafka_host_three}:9093
  timeout: 30000

Спецификация OutputServer: https://github.com/megaease/easemesh-api/blob/master/v1alpha1/meshmodel.md#easemesh.v1alpha1.ObservabilityOutputServer

  1. Найдите желаемый сервис протокола включения трассировки в структуре ObservabilityTracings (https://github.com/megaease/easemesh-api/blob/master/v1alpha1/meshmodel.md#easemesh.v1alpha1.ObservabilityTracings). Например, включение переключателя в ObservabilityTracings.remoteInvoke позволяет записывать данные трассировки HTTP RPC mesh-сервисов. Также EaseMesh позволяет пользователям настраивать способ, которым Java Agent должен сообщать данные трассировки, такие как частота выборки, количество потоков в JavaAgent и так далее. Примечание: конфигурация отчётов является глобальной внутри одного сервиса mesh. Измените пример YAML ниже и примените его:
tracings:
  enabled: true              # Глобальный переключатель включения
  sampleByQPS: 30            # Данные выше QPS 30 будут игнорироваться
  output:
    enabled: true            # Включение отчётности Kafka
    reportThread: 1          # Использование одного потока для отчёта в JavaAgent
    topic: log-tracing       # Название темы отчёта Kafka
    messageMaxBytes: 999900  #
    queuedMaxSpans: 1000
    queuedMaxSize: 1000000
    messageTimeout: 1000
  request:
    enabled: false
    servicePrefix: httpRequest
  remoteInvoke:
    enabled: true                # Включение этого переключателя только для трассировки RPC
    servicePrefix: remoteInvoke
  kafka:
    enabled: false
    servicePrefix: kafka
  jdbc:
    enabled: false
    servicePrefix: jdbc
  redis:
    enabled: false
    servicePrefix: redis
  rabbit:
    enabled: false
    servicePrefix: rabbit

Спецификации ObservabilityTracings: https://github.com/megaease/easemesh-api/blob/master/v1alpha1/meshmodel.md#easemesh.v1alpha1.ObservabilityTracings

  1. Данные трассировки организованы в виде промежутков времени, каждый из которых хранится в бэкенд-хранилище, которое обеспечивает онлайн-анализ. Функции вычислений и мониторинга.

MegaEase предоставляет сложный инструмент для быстрой диагностики проблем пользователями.

Проверка веб-консоли на предмет информации трассировки RPC для вашего mesh-сервиса:

трассировка

Отключение трассировки

  1. Если вы хотите отключить трассировку для одного mesh-сервиса, установите переключатель трассировки этого mesh-сервиса в положение «off». Например, вы можете подготовить YAML следующим образом и применить его:
tracings:
  enabled: false             # Глобальный переключатель включения
  sampleByQPS: 30            # Данные выше QPS 30 будут игнорироваться
  output:
    enabled: true

    ......
  1. Чтобы отключить только одну функцию трассировки для одного mesh-сервиса, найдите соответствующий раздел и отключите его переключатель. Например, чтобы отключить функцию трассировки Redis для одного mesh-сервиса, вы можете подготовить YAML следующим образом и применить его:
tracings:
  enabled: true
  sampleByQPS: 30
  output:
    enabled: true
    reportThread: 1
    topic: log-tracing
    messageMaxBytes: 999900
    queuedMaxSpans: 1000
    queuedMaxSize: 1000000
    messageTimeout: 1000
  request:
    enabled: true
    servicePrefix: httpRequest
  remoteInvoke:
    enabled: true
    servicePrefix: remoteInvoke
  kafka:
    enabled: true
    servicePrefix: kafka
  jdbc:
    enabled: true
    servicePrefix: jdbc
  redis:
    enabled: false               # Отключаем этот переключатель, чтобы не отслеживать вызовы Redis
    servicePrefix: redis

Метрики

  • EaseMesh использует EaseAgent (JavaAgent на основе технологии Java Byte buddy) для сбора метрик приложений mesh-сервисов ненавязчивым способом. Он будет собирать данные с точки зрения сервиса с очень низким потреблением ресурсов ЦП, памяти, ввода-вывода. Поддерживаемые типы метрик включают:

Для получения подробной информации о каждой метрике ознакомьтесь с руководством по разработке EaseAgent develop-guide.md.

Вот некоторые из метрик, которые уже поддерживаются EaseMesh:

Название Описание
HTTP-запрос Метрики HTTP API mesh-сервиса, такие как m1/m5/m15 rate (m1 указывает на выполнение HTTP-запросов в секунду экспоненциально взвешенное скользящее среднее за последнюю минуту), URL, общее количество, количество ошибок, p99 (длительность выполнения HTTP-запроса в миллисекундах для 99% пользователей) и так далее.
JDBC Statement Метрики операторов JDBC mesh-сервиса, такие как сигнатура (используется для полного сопоставления предложений SQL), общее количество JDBC, скорость m1 JDBC (выполнение методов JDBC в секунду экспоненциальное взвешенное скользящее среднее за последнюю минуту.), максимальная ошибка скорости JDBC M1, длительность выполнения JDBC P99 и так далее.
Соединение JDBC Метрики соединения JDBC mesh-сервиса, такие как URL, общее количество соединений JDBC, скорость соединения JDBC M1, минимальная длительность выполнения соединения JDBC, минимальная длительность выполнения соединения JDBC, длительность выполнения соединения JDBC P99 и так далее.
Память JVM Связанные с памятью JVM метрики mesh-сервиса, такие как начальная память JVM, используемая память JVM, зафиксированная память JVM и максимальная память JVM.
Сборщик мусора JVM Метрики сборщика мусора JVM mesh-сервиса.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/megaease-easemesh.git
git@api.gitlife.ru:oschina-mirror/megaease-easemesh.git
oschina-mirror
megaease-easemesh
megaease-easemesh
main