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

OSCHINA-MIRROR/lizhifu-tomato-platform

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Агрегированные платежи, четвертая сторона платежа (только для учебных целей)

Только для учебных целей.

Микросервисная архитектура

  • API-шлюз (Api Gateway Pattern)
  • Открытие и регистрация сервисов (Service Registration and Discovery Pattern)
  • Отключение (Circuit Breaker Pattern)
  • Стенка (Bulkhead Pattern)
  • Разделение ответственности для команд и запросов (CQRS Pattern)
  • Событийная модель (Event Driven Pattern)
  • Модель Saga (Saga Pattern)
  • Модель удавки (Strangler Pattern)
  • Модель прицепа (Sidecar Pattern)
  • Модель BFF (Backend for Frontend Pattern)

API-шлюз

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

Прикладные сценарии1. Маршрутизация и балансировка нагрузки: API-шлюз может маршрутизировать запросы на основе URL-адреса, пути или других идентификаторов к соответствующим backend-микросервисам. Он также может выполнять балансировку нагрузки, распределяя запросы по различным экземплярам сервисов, чтобы обеспечить эффективное использование ресурсов и высокую доступность. 2. Аутентификация и авторизация: API-шлюз может выполнять операции аутентификации и авторизации до того, как запросы достигнут backend-сервисов, чтобы убедиться, что только авторизованные пользователи могут получить доступ к определенным API. Это помогает защитить приложение от несанкционированного доступа. 3. Преобразование запросов: API-шлюз может выполнять преобразование запросов и ответов, преобразуя данные в различных форматах в формат, подходящий для клиентов, что снижает нагрузку на backend-микросервисы и улучшает клиентский опыт. 4. Кэширование: API-шлюз может реализовывать стратегии кэширования, кэшируя ответы на часто запрашиваемые запросы, что снижает нагрузку на backend-сервисы, повышает производительность и уменьшает время отклика. 5. Безопасность: API-шлюз может централизованно обрабатывать вопросы безопасности, такие как защита от атак DDoS, защита чувствительных данных и внедрение брандмауэров и списков разрешений/запретов.Мониторинг и анализ: API-шлюз может собирать и мониторить данные запросов и ответов, предоставляя подробную информацию о использовании API, производительности и ошибках. Это помогает выявлять узкие места, корректировать распределение ресурсов и выполнять диагностику. 7. Упрощение для клиентов: API-шлюз может абстрагировать сложность множества микросервисов для клиентов, упрощая процесс вызова и взаимодействия. 8. Управление версиями: API-шлюз может поддерживать управление версиями API, позволяя существовать различным версиям API одновременно и обеспечивая плавный переход. ### Регистрация и обнаружение сервисовРегистрация и обнаружение сервисов — это важный концепт в микросервисной архитектуре, используемый для управления и локализации различных экземпляров микросервисов в распределенной системе. Он решает проблему того, как микросервисы могут обнаруживать друг друга и устанавливать связь в динамической среде.

  1. Регистрация сервисов: Когда микросервис запускается, он регистрирует свои метаданные (например, имя хоста, порт, пути API и т.д.) в централизованном реестре сервисов. Этот реестр может быть отдельным компонентом или службой, предоставляемой облаком или третьей стороной.
  2. Обнаружение сервисов: Другие микросервисы могут запрашивать реестр сервисов для получения информации о местоположении нужного сервиса. Эти запросы могут осуществляться через HTTP, DNS или другие протоколы.
  3. Динамическое адаптация: Когда количество экземпляров микросервиса изменяется (например, масштабирование, уменьшение или восстановление после сбоя), реестр сервисов автоматически обновляется, чтобы другие микросервисы могли воспринимать эти изменения, обеспечивая точность путей связи.

Отключатель (Circuit Breaker)Отключатель (Circuit Breaker) — это дизайн-паттерн, используемый для улучшения устойчивости и отказоустойчивости распределенных систем, особенно в микросервисной архитектуре. Его цель — предотвратить продолжение выполнения операций, которые могут завершиться неудачей, когда система столкнулась с сбоем или необычной ситуацией, тем самым снижая влияние на общую систему и повышая её доступность и надёжность.Основная идея паттерна отключателя аналогична электрическому отключателю в электрической цепи: когда система достигает определенного порога сбоев, отключатель переходит в открытое состояние, блокируя дальнейшие попытки выполнения операций и возвращая немедленный ответ об ошибке. Это предотвращает эффект цепной реакции, когда один сбой приводит к последовательным сбоям других сервисов.

  1. Закрытое состояние (Closed): В нормальных условиях отключатель находится в закрытом состоянии, позволяя запросам проходить и отслеживать время отклика и процент ошибок сервиса.
  2. Открытое состояние (Open): Когда процент ошибок или время отклика превышает заданный порог, отключатель переходит в открытое состояние, блокируя прохождение запросов. В этом состоянии система быстро возвращает ответ об ошибке, не пытаясь продолжить выполнение операций.
  3. Полуоткрытое состояние (Half-Open): Через некоторое время отключатель может автоматически или вручную перейти в полуоткрытое состояние, позволяя некоторым запросам проходить, чтобы проверить, восстановился ли сервис. Если запросы успешны, отключатель может снова закрыться; если нет, он снова откроется.

Модель разделения по принципу bulkheadМодель разделения по принципу bulkhead представляет собой дизайн-паттерн, используемый в распределённых системах для повышения стабильности и изоляции. Основная идея этого паттерна заключается в размещении различных компонентов или служб в независимых разделениях (bulkhead), чтобы предотвратить влияние сбоев одного компонента на другие, тем самым повышая общую доступность системы.В Resilience4j такие механизмы, как разрядчики и ограничители, помогают реализовать часть модели разделения по принципу bulkhead. Ниже приведены некоторые функции Resilience4j, которые помогают реализовать основную идею этого паттерна:

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

Разделение ответственности команд и запросов (CQRS)Разделение ответственности команд и запросов (CQRS, Command Query Responsibility Segregation) представляет собой принцип архитектуры программного обеспечения, который заключается в разделении операций чтения (запросы) и операций записи (команды) для оптимизации производительности, масштабируемости и поддержки.Основная идея CQRS заключается в том, чтобы обрабатывать чтение и запись отдельно, что позволяет оптимизировать каждую операцию по отдельности, тем самым обеспечивая лучшую производительность и пользовательский опыт. Это разделение помогает устранить сложности, возникающие при одновременном выполнении операций чтения и записи в одной модели.

Недостатки

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

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

  1. Событие (Event): Событие представляет собой отображение какого-либо события или изменения состояния в системе. Оно может быть простым уведомлением или содержать данные. Событие может быть опубликовано для уведомления других компонентов о произошедших изменениях.
  2. Публикация (Publisher): Публикация отвечает за создание и публикацию событий. Это источник событий, который может быть каким-либо компонентом, сервисом или модулем.
  3. Подписка (Subscriber): Подписка подписывается на интересующие события, чтобы быть уведомленной о них и выполнить соответствующие действия при их возникновении. Подписка может быть другим компонентом, сервисом или модулем.
  4. Событийная шина (Event Bus): Событийная шина является посредником для передачи событий. Она отвечает за распределение и уведомление событий, обеспечивая их передачу от публикации к подписке.### Модель Saga

Модель Saga представляет собой дизайн-паттерн для обработки длинных транзакций (Long-Running Transactions) в распределённых системах. Длинные транзакции — это последовательность связанных операций, которые требуют выполнения на протяжении достаточно длительного времени, обычно включающая несколько шагов и может включать несколько сервисов или компонентов.

Модель Saga направлена на решение проблем распределённых транзакций, поскольку традиционные транзакции ACID часто сталкиваются с проблемами производительности и масштабируемости в распределённых системах. Модель Saga разбивает длинные транзакции на последовательность коротких транзакций, каждый из которых называется шагом (Step), и каждый шаг может быть выполнен в отдельной транзакции. Каждый шаг отвечает за выполнение части работы и фиксирует своё состояние выполнения.

Антипаттерн "Удавка"

Антипаттерн "Удавка" (Antipattern) — это термин из области программирования, который описывает общие, широко принятые, но доказавшие свою неэффективность практики в области дизайна, разработки или архитектуры программного обеспечения. Антипаттерн "Удавка" описывает методы, которые могут привести к усложнению системы, затруднению её поддержки и расширения.

Основные характеристики антипаттерна "Удавка" включают:1. Сначала кажется правильным: Антипаттерн "Удавка" обычно выглядит разумным и эффективным решением на начальной стадии, но с течением времени и ростом системы начинают проявляться проблемы. 2. Краткосрочная выгода: Антипаттерн "Удавка" может обеспечить некоторые краткосрочные преимущества, но в долгосрочной перспективе может привести к нестабильности, низкой эффективности или затруднению поддержки системы. 3. Нарушение лучших практик: Антипаттерн "Удавка" обычно нарушает лучшие практики программирования, такие как модульность, слабая связанность, принцип единой ответственности и другие. 4. Повторное появление: Антипаттерн "Удавка" может повторно появляться в различных проектах, что указывает на то, что это общее заблуждение или неправильное использование. Некоторые распространенные антипаттерны включают:- Магические числа: В коде жестко закодированы константы или числа, что затрудняет понимание и поддержку кода.

  • Огромные модули: Создание одного большого модуля или класса, который выполняет слишком много функций, что приводит к высокой связанности, сложности тестирования и переиспользования.
  • Копирование и вставка кода: Копирование и вставка существующих фрагментов кода, что приводит к повторению, избыточности и сложности поддержки кода.
  • Игнорирование исключений: Неправильное игнорирование исключений или ошибок, что приводит к невозможности системы адаптироваться к нестандартным ситуациям.
  • Передовая оптимизация: Заранее проведенная оптимизация производительности, что может привести к усложнению кода, снижению его читаемости и ненужной сложности.
  • Глубокое вложение: Избыточное количество уровней вложения, что затрудняет чтение и понимание кода.### Паттерн Сайдкар

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

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

Паттерн BFF

Паттерн BFF (Backend for Frontend) представляет собой специализированный серверный слой, созданный для конкретного фронтенда. Паттерн BFF направлен на решение проблем несоответствия между требованиями и взаимодействием фронтенда и сервера в сложных фронтенд-приложениях.

В традиционной архитектуре с одним сервером фронтенд-приложение должно взаимодействовать с одним сервером, что может привести к следующим проблемам:1. Переизбыток и недостаток данных: Фронтенд может требовать больше или меньше данных, чем предоставляет сервер, что приводит к потере производительности и пропускной способности. 2. Частые изменения и поддержка: Фронтенд и сервер обычно имеют разные требования и циклы, что может привести к сложностям с согласованием и поддержкой. 3. Проблемы производительности: В условиях высокой конкуренции запросы фронтенда могут перегружать сервер, что снижает производительность системы.Паттерн BFF решает эти проблемы, создавая специализированный серверный слой для каждого фронтенд-приложения. Каждый фронтенд может иметь один или несколько BFF-серверов, которые отвечают за удовлетворение конкретных требований фронтенда, предоставляя точные данные и функции. Эти BFF-серверы могут объединять, агрегировать или преобразовывать данные из нескольких серверов, обеспечивая более эффективную и специализированную реакцию на запросы. Преимущества использования BFF-модели включают:

  • Персонализация: BFF может предоставлять каждому фронтенду персонализированные данные и функции, избегая избыточного или недостаточного получения данных.
  • Уменьшение藕合: BFF-сервисы разделяют требования фронтенда и бэкенда, снижая степень藕合, что позволяет каждой команде более независимо разрабатывать и изменять свои компоненты.
  • Оптимизация производительности: BFF может оптимизировать производительность в соответствии с требованиями фронтенда, обеспечивая более быстрый отклик и меньшее потребление полосы пропускания.
  • Улучшенная поддержка: BFF концентрирует логику взаимодействия фронтенда и бэкенда в одном месте, что делает изменения и поддержку более управляемыми и централизованными.

Преимущества использования BFF-модели включают:

  • Персонализация: BFF может предоставлять каждому фронтенду персонализированные данные и функции, избегая избыточного или недостаточного получения данных.
  • Уменьшение藕合: BFF-сервисы разделяют требования фронтенда и бэкенда, снижая степень藕合, что позволяет каждой команде более независимо разрабатывать и изменять свои компоненты.
  • Оптимизация производительности: BFF может оптимизировать производительность в соответствии с требованиями фронтенда, обеспечивая более быстрый отклик и меньшее потребление полосы пропускания.
  • Улучшенная поддержка: BFF концентрирует логику взаимодействия фронтенда и бэкенда в одном месте, что делает изменения и поддержку более управляемыми и централизованными.Важно отметить, что модель BFF требует дизайна и реализации в соответствии с конкретной ситуацией. Каждому фронтенду может потребоваться один или несколько BFF-сервисов, а бэкенд-сервисы могут потребоваться соответствующим образом разделить и настроить. Модель BFF обычно используется вместе с архитектурой микросервисов и API-шлюзом для достижения более гибкого и эффективного взаимодействия между фронтендом и бэкендом.### Официальная документация Spring

Spring | Главная страница

Справочная документация Spring Boot

Spring Cloud

Spring Cloud Gateway

Spring Cloud OpenFeign

Технические фреймворки

  • Фреймворк для долговременного хранения данных: Spring Data JPA & MyBatis
  • API-шлюз: Spring Cloud Gateway
  • Регистрация и обнаружение сервисов и центр конфигурации: Alibaba Nacos
  • Потребление сервисов: Spring Cloud OpenFeign & RestTemplate & OkHttp
  • Балансировка нагрузки: Spring Cloud LoadBalancer
  • Отключение сервисов и ограничение: Alibaba Sentinel, Spring Cloud CircuitBreaker Resilience4j
  • Мониторинг сервисов: Spring Boot Admin
  • Валидация параметров: Spring Validation
  • Фреймворк управления доступом: Spring Security
  • Очереди сообщений: RabbitMQ
  • Отслеживание трассировки: SkyWalking, Zipkin
  • Распределенные транзакции: Seata
  • Кэширование данных: JetCache (Redis + Caffeine) многоуровневое кэширование
  • База данных: MySQL
  • JSON-сериализация: Jackson
  • Сервисы файлов: Alibaba Cloud OSS/Minio
  • Отладка данных (TODO): p6spy
  • Центр логирования (TODO): ELK
  • Сбор логов (TODO): Logstash Logback Encoder
  • Синхронизация MySQL и ES (TODO): Canal (https://github.com/alibaba/canal), DolphinScheduler (https://github.com/apache/dolphinscheduler)

Скриншоты

spring-boot-admin.png

Основная документация

Многоокружная конфигурация.md## Описание модулей

tomato-platform
├── spring-boot-cli-demo -- на основе maven-archetype-plugin шаблона
├── tomato-bom -- управление версиями проекта POM
└── tomato-framework -- системные общие модули
├     ├── tomato-tracing-starter -- на основе Micrometer и Zipkin распределённый трейсинг
├     ├── tomato-cloud -- компоненты для cloud
├     ├── ├── tomato-cloud-alibaba-starter -- компоненты для Alibaba
├     ├── ├── tomato-cloud-feign-starter -- зависимости для Feign
├     ├── tomato-data -- зависимости для ORM
├     ├── ├── tomato-mybatis-starter -- на основе SqlProvider улучшенный MyBatis (упрощённый)
├     ├── ├── XXXXXX -- XXXXXX
├     ├── tomato-rabbitmq-starter -- конфигурация RabbitMQ, динамические очереди, динамические производители, динамические потребители
├     └── XXXXXX
├── tomato-gateway -- модуль шлюза
├     ├── tomato-gateway-core -- основные зависимости для шлюза
├		  ├── tomato-gateway-web -- система шлюза [9999]
├── XXXXXX -- XXXXXX
└── tomato-example -- примеры кода
├     └── spring-boot-tracing -- пример на основе Micrometer и Zipkin распределённого трейсинга
├     └── spring-modulith -- пример модульного приложения на Spring Boot
└── tomato-module -- бизнес-модули
├     └── tomato-module-account -- сервис учётных записей [9080]
├     ├── tomato-module-monitor -- мониторинг сервиса на основе Spring Boot Admin [9994]
├     ├── tomato-module-notice -- система уведомлений [9996]
├     ├── tomato-module-pay -- сервис платежных каналов [9998]
├     ├── tomato-module-pay-monitor -- мониторинг платежных каналов [9997]
├     └── tomato-module-reconciliation -- центр сопоставления [9995]
├     └── tomato-module-sys -- система управления сайтом (RABC) [8001]
```## Вовлечённые роли

1. Агрегатор платежей (платёжная платформа)
2. Магазин (обычный магазин, магазин-посредник)
3. Пользователь (потребитель)
4. Финансовые: третьи платежные системы (WeChat, Alipay и т.д.); банки; UnionPay

## Финансовый поток

Агрегация платежей:

![Покупка.png](doc%2Fimage%2FПокупка.png)
Платёжный процесс:![Финансовый поток.png](doc%2Fimage%2F%E8%B5%84%E9%87%91%E6%B5%81.png)

## Система сверки счетов (Центр сверки)

![Концепция системы сверки счетов.png](doc%2Fimage%2F%E5%8F%83%E8%B4%A6%E7%B3%BB%E7%BB%9F%E6%A6%82%E5%BF%B5.png)

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

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

## Система счетов

Пополнение счета:

![trade.png](doc%2Fimage%2Ftrade.png)

Задачи по расписанию:- [x] Расписание пополнения счета с асинхронной обработкой: AccountTradAsyncTimer
- [x] Расписание расчета счета: AccountSettleTimer
- [x] Расписание баланса вне периода риска: AccountOutReserveBalanceTimerОсновные операции со счетами:

- [ ] Создание счета
  - [x] Базовое создание
  - [ ] Изменение правила генерации номера счета accountNo
- [x] Закрытие счета
- [x] Заморозка счета для приема платежей
- [x] Заморозка счета для отправки платежей
- [x] Полная заморозка счета
- [x] Разморозка счета

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

- [x] Инициализация тарифов
- [ ] Изменение тарифов

Операции с транзакциями счетов:

- [x] Транзакция
- [x] Вывод средств
- [ ] Возврат средств
- [ ] Расчет
- [ ] Корректировка счета

## Система уведомлений

Основная система приема платежей:

- [x] Синхронное прием платежей, основанное на RestTemplate, повторная попытка на основе MQ
- [x] Асинхронное прием платежей, основанное на WebClient, повторная попытка на основе локальной системы.

## Система платежей
## Система агентов
## Система перевода средств
## Система заказов
## Система каналов
## Система управления рисками
## Система мерчантов
## Система распродаж
## Система товаров

Комментарии ( 0 )

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

Введение

агрегатная система платежей, четвертая сторона платежей, система платежей, система консолидации, система уведомлений Развернуть Свернуть
WTFPL
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/lizhifu-tomato-platform.git
git@api.gitlife.ru:oschina-mirror/lizhifu-tomato-platform.git
oschina-mirror
lizhifu-tomato-platform
lizhifu-tomato-platform
main