Inhaltsverzeichnis
In Nicht-Java-Sprachen gibt es außer DTM keinen ausgereiften verteilten Transaktionsmanager, daher hier ein Vergleich zwischen DTM und Seata, dem ausgereiftesten Open-Source-Projekt in Java: " >Vergleich In Nicht-Java-Sprachen gibt es außer DTM keinen ausgereiften verteilten Transaktionsmanager, daher hier ein Vergleich zwischen DTM und Seata, dem ausgereiftesten Open-Source-Projekt in Java:
配置中间件
" >Informationen zur Middleware-Konfiguration in Hyperf finden Sie im Kapitel Hyperf-Dokumentation – Middleware.
" >Bevor Sie diese Komponente verwenden, wird außerdem dringend empfohlen, die offizielle DTM-Dokumentation zu lesen, um ein detaillierteres Verständnis zu erhalten.
Wenn wir ein Geschäft ähnlich einer Interbank-Überweisung durchführen möchten, befinden sich die Überweisung (TransOut) und die Überweisung (TransIn) in unterschiedlichen Microservices. Das typische Sequenzdiagramm einer erfolgreich abgeschlossenen TCC-Transaktion sieht wie folgt aus: " >Der TCC-Modus ist eine sehr beliebte flexible Transaktionslösung. Das Konzept von TCC besteht aus den Akronymen Try-Confirm-Cancel. Es wurde erstmals 2007 von Pat Helland veröffentlicht. Vorgeschlagen in einem Artikel mit dem Titel „Life über verteilte Transaktionen hinaus: die Meinung eines Abtrünnigen“. 3 Phasen von TCC Stufe bestätigen. Bestätigen führt das Geschäft tatsächlich ohne Geschäftsprüfungen aus und verwendet nur die in der Versuchsphase reservierten Geschäftsressourcen. Abbruchphase: Wenn einer der Versuche aller Zweige fehlschlägt, geht es zur Abbruchphase über. Abbrechen gibt die während der Testphase reservierten Geschäftsressourcen frei. Wenn wir ein Geschäft ähnlich einer Interbank-Überweisung durchführen möchten, befinden sich die Überweisung (TransOut) und die Überweisung (TransIn) in unterschiedlichen Microservices. Das typische Sequenzdiagramm einer erfolgreich abgeschlossenen TCC-Transaktion sieht wie folgt aus:
" >Saga ist eine schließlich konsistente Transaktion und eine flexible Transaktion, die auch als Langzeittransaktion bezeichnet wird und aus einer Reihe lokaler Transaktionen besteht. Nachdem jede lokale Transaktion die Datenbank aktualisiert, veröffentlicht sie eine Nachricht oder ein Ereignis, um die Ausführung der nächsten lokalen Transaktion in der globalen Saga-Transaktion auszulösen. Wenn eine lokale Transaktion fehlschlägt, weil einige Geschäftsregeln nicht erfüllt werden können, führt Saga Ausgleichsvorgänge für alle Transaktionen durch, die vor der fehlgeschlagenen Transaktion erfolgreich festgeschrieben wurden. Daher wird es beim Vergleich des Saga-Modus mit dem TCC-Modus oft schwieriger, eine Rollback-Logik zu implementieren, da keine Schritte zur Ressourcenreservierung vorhanden sind.
Zum Beispiel möchten wir ein Geschäft ähnlich einer Interbank-Überweisung durchführen und 30 Yuan von Konto A auf Konto B überweisen. Nach dem Prinzip der Saga-Transaktionen teilen wir das Ganze auf globale Transaktion Für die folgenden Dienste:
Transferservice, hier wird das B-Konto um 30 Yuan erhöht " > Transferservice, hier wird das B-Konto um 30 Yuan erhöht
代码示例" >代码示例
Heim Backend-Entwicklung PHP-Tutorial [DTM] Die Betaversion des PHP-Coroutine-Clients v0.1 ist veröffentlicht!

[DTM] Die Betaversion des PHP-Coroutine-Clients v0.1 ist veröffentlicht!

Feb 15, 2022 pm 03:19 PM

Gute Neuigkeiten! DTM Distributed Transaction Manager PHP Coroutine Client v0.1 Betaversion veröffentlicht! ! !
→ github.com/dtm-php/dtm-client

Einführung

dtm/dtm-client ist der PHP-Client des Distributed Transaction Manager DTM, der bereits den TCC-Modus, Saga und zweiphasige Nachrichten unterstützt Modus. Verteilter Transaktionsmodus und realisiert die Kommunikation mit dem DTM-Server über das HTTP-Protokoll bzw. das gRPC-Protokoll. Der Client kann sicher in PHP-FPM- und Swoole-Coroutine-Umgebungen ausgeführt werden und bietet außerdem benutzerfreundlichere funktionale Unterstützung für Hyperf. [Empfohlen: PHP-Video-Tutorial]

Über DTM

DTM ist ein verteilter Open-Source-Transaktionsmanager, der auf der Go-Sprache basiert und leistungsstarke Funktionen zum Kombinieren von Transaktionen über Sprachen und Speicher-Engines hinweg bietet. DTM löst auf elegante Weise verteilte Transaktionsprobleme wie Idempotenz, Nullkompensation und Aussetzung und bietet außerdem eine einfach zu verwendende, leistungsstarke und einfach horizontal erweiterbare Lösung für verteilte Transaktionen.

Highlights

  • Einfacher Einstieg
    • Startdienst ohne Konfiguration, der eine sehr einfache HTTP-Schnittstelle bietet und die Schwierigkeit beim Einstieg in verteilte Transaktionen erheblich reduziert
  • Sprachübergreifend
    • Geeignet für Unternehmen mit mehreren -Sprachstapel. Bequeme Verwendung von Go, Python, PHP, NodeJs, Ruby, C# und anderen Sprachen.
  • Einfach zu verwenden
    • Entwickler müssen sich keine Sorgen mehr über verschiedene Probleme wie Hängenbleiben, Nullkompensation, Potenzierung usw. machen. Die erste Subtransaktionsbarriere-Technologie erledigt das für Sie
  • Einfach bereitzustellen und zu erweitern
    • Nur basiert auf MySQL/Redis, einfache Bereitstellung, einfach zu gruppieren, einfach horizontal zu erweitern
  • Unterstützung mehrerer verteilter Transaktionsprotokolle
    • TCC, SAGA,
Komplexe ZustandsmaschineAnzahl der Sterne

Den oben verglichenen Merkmalen nach zu urteilen, hat DTM in vielerlei Hinsicht große Vorteile. Wenn Sie mehrsprachige Unterstützung und Multi-Storage-Engine-Unterstützung in Betracht ziehen, ist DTM zweifellos Ihre erste Wahl.

Installation

Die Installation des DTM-Clients über Composer ist sehr praktisch der DTM-Server, wenn er verwendet wird Oh

Konfiguration

Konfigurationsdatei

Wenn Sie ihn im Hyperf-Framework verwenden, können Sie nach der Installation der Komponente den folgenden vendor:publishverwenden > Befehl zum Veröffentlichen der Konfigurationsdatei in einem Stück ./config/autoload/dtm.php
composer require dtm/dtm-client
Nach dem Login kopieren

Wenn Sie es in einem Nicht-Hyperf-Framework verwenden, können Sie ./vendor kopieren /dtm/dtm-client/publish/dtm.php Datei in das entsprechende Konfigurationsverzeichnis. <p></p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">php bin/hyperf.php vendor:publish dtm/dtm-client</pre><div class="contentsignin">Nach dem Login kopieren</div></div> <code>vendor:publish 命令一件发布配置文件于 ./config/autoload/dtm.php
use DtmClient\Constants\Protocol;
use DtmClient\Constants\DbType;

return [
    // 客户端与 DTM Server 通讯的协议,支持 Protocol::HTTP 和 Protocol::GRPC 两种
    &#39;protocol&#39; => Protocol::HTTP,
    // DTM Server 的地址
    &#39;server&#39; => &#39;127.0.0.1&#39;,
    // DTM Server 的端口
    &#39;port&#39; => [
        &#39;http&#39; => 36789,
        &#39;grpc&#39; => 36790,
    ],
    // 子事务屏障配置
    &#39;barrier&#39; => [
        // DB 模式下的子事务屏障配置
        &#39;db&#39; => [
            &#39;type&#39; => DbType::MySQL
        ],
        // Redis 模式下的子事务屏障配置
        &#39;redis&#39; => [
            // 子事务屏障记录的超时时间
            &#39;expire_seconds&#39; => 7 * 86400,
        ],
        // 非 Hyperf 框架下应用子事务屏障的类
        &#39;apply&#39; => [],
    ],
    // HTTP 协议下 Guzzle 客户端的通用配置
    &#39;guzzle&#39; => [
        &#39;options&#39; => [],
    ],
];
Nach dem Login kopieren

如果您是在非 Hyperf 框架中使用,可复制 ./vendor/dtm/dtm-client/publish/dtm.php 文件到对应的配置目录中。

<?php
namespace App\Controller;

use DtmClient\TCC;
use DtmClient\TransContext;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;
use Throwable;

#[Controller(prefix: &#39;/tcc&#39;)]
class TccController
{

    protected string $serviceUri = &#39;http://127.0.0.1:9501&#39;;

    #[Inject]
    protected TCC $tcc;

    #[GetMapping(path: &#39;successCase&#39;)]
    public function successCase()
    {
        try {

            $this->tcc->globalTransaction(function (TCC $tcc) {
                // 创建子事务 A 的调用数据
                $tcc->callBranch(
                    // 调用 Try 方法的参数
                    [&#39;amount&#39; => 30],
                    // Try 方法的 URL
                    $this->serviceUri . &#39;/tcc/transA/try&#39;,
                    // Confirm 方法的 URL
                    $this->serviceUri . &#39;/tcc/transA/confirm&#39;,
                    // Cancel 方法的 URL
                    $this->serviceUri . &#39;/tcc/transA/cancel&#39;
                );
                // 创建子事务 B 的调用数据,以此类推
                $tcc->callBranch(
                    [&#39;amount&#39; => 30],
                    $this->serviceUri . &#39;/tcc/transB/try&#39;,
                    $this->serviceUri . &#39;/tcc/transB/confirm&#39;,
                    $this->serviceUri . &#39;/tcc/transB/cancel&#39;
                );
            });
        } catch (Throwable $e) {
            var_dump($e->getMessage(), $e->getTraceAsString());
        }
        // 通过 TransContext::getGid() 获得 全局事务ID 并返回
        return TransContext::getGid();
    }
}
Nach dem Login kopieren

配置中间件

在使用之前,需要配置 DtmClientMiddlewareDtmMiddlewareMiddleware konfigurieren

Vor der Verwendung müssen Sie die Middleware DtmClientMiddlewareDtmMiddleware als globale Middleware des Servers konfigurieren und kann auf verschiedene Frameworks angewendet werden, die dies unterstützen Spezifikation.

Informationen zur Middleware-Konfiguration in Hyperf finden Sie im Kapitel Hyperf-Dokumentation – Middleware.

Verwendung

dtm-client ist sehr einfach zu verwenden. Wir stellen ein Beispielprojekt dtm-php/dtm-sample zur Verfügung, damit Sie es besser verstehen und debuggen können.

TCC-Modus



Codebeispiele

[DTM] Die Betaversion des PHP-Coroutine-Clients v0.1 ist veröffentlicht!Das Folgende zeigt, wie man es im Hyperf-Framework verwendet. Andere Frameworks sind ähnlich beliebt in wichtigen Systemen, erschien erstmals 1987 in der Veröffentlichung SAGAS von Hector Garcaa-Molrna und Kenneth Salem.

Saga-Untertransaktionsaufteilung

Zum Beispiel möchten wir ein Geschäft ähnlich einer Interbank-Überweisung durchführen und 30 Yuan von Konto A auf Konto B überweisen. Nach dem Prinzip der Saga-Transaktionen teilen wir das Ganze auf globale Transaktion Für die folgenden Dienste:

TransOut-Dienst, bei dem der Vorgang durchgeführt wird, um 30 Yuan von Konto A abzubuchen

TransOutCompensate-Dienst, Rollback des oben genannten Überweisungsvorgangs, d. h. Konto A wird um 30 Yuan erhöhtÜbertragungskompensationsdienst (TransInCompensate), der den obigen Transfervorgang rückgängig macht, das heißt, das B-Konto wird um 30 Yuan reduziert

    Die Logik der gesamten Transaktion ist:
  • Überweisung erfolgreich ausführen => Übertragung erfolgreich ausführen => Die globale Transaktion ist abgeschlossen
  • Wenn in der Mitte ein Fehler auftritt, z. B. ein Fehler bei der Übertragung auf Konto B, wird die Kompensationsoperation der ausgeführten Verzweigung aufgerufen :
  • Transfer erfolgreich ausführen => Transfer in konnte nicht ausgeführt werden => Erfolgreich ausgeführter Transfer in Kompensation => Erfolgreich ausgeführter Transfer in Kompensation => Globales Transaktions-Rollback abgeschlossen
  • Das Folgende ist ein typisches Zeitdiagramm einer erfolgreich abgeschlossenen SAGA-Transaktion:

[DTM] Die Betaversion des PHP-Coroutine-Clients v0.1 ist veröffentlicht!

以下展示在 Hyperf 框架中的使用方法,其它框架类似

namespace App\Controller;

use DtmClient\Saga;
use DtmClient\TransContext;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;

#[Controller(prefix: &#39;/saga&#39;)]
class SagaController
{

    protected string $serviceUri = &#39;http://127.0.0.1:9501&#39;;

    #[Inject]
    protected Saga $saga;

    #[GetMapping(path: &#39;successCase&#39;)]
    public function successCase(): string
    {
        $payload = [&#39;amount&#39; => 50];
        // 初始化 Saga 事务
        $this->saga->init();
        // 增加转出子事务
        $this->saga->add(
            $this->serviceUri . &#39;/saga/transOut&#39;, 
            $this->serviceUri . &#39;/saga/transOutCompensate&#39;, 
            $payload
        );
        // 增加转入子事务
        $this->saga->add(
            $this->serviceUri . &#39;/saga/transIn&#39;, 
            $this->serviceUri . &#39;/saga/transInCompensate&#39;, 
            $payload
        );
        // 提交 Saga 事务
        $this->saga->submit();
        // 通过 TransContext::getGid() 获得 全局事务ID 并返回
        return TransContext::getGid();
    }
}
Nach dem Login kopieren
Funktionen DTM SEATA Bemerkungen
Unterstützte Sprachen Go, C#, Java, Python, PHP... Java DTM kann sein einfach mit einer Tür verbunden. Neue Sprache Barrieren
Manuelle Verarbeitung DTM löst das Problem von Idempotenz, Aussetzung und Nullkompensation SAGA-Transaktionen Extrem einfach zu bedienen
Zweitens -Phasen-Nachricht
XA-Transaktionen Dubbo und andere Protokolle DTM ist cloudfreundlicher native
DTM veröffentlicht 0 vom 04.06.2021 .1 Version, schnelle Entwicklung

Das obige ist der detaillierte Inhalt von[DTM] Die Betaversion des PHP-Coroutine-Clients v0.1 ist veröffentlicht!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Mar 31, 2025 pm 11:54 PM

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Mar 28, 2025 pm 05:11 PM

In Artikel werden wichtige Sicherheitsfunktionen in Frameworks erörtert, um vor Schwachstellen zu schützen, einschließlich Eingabevalidierung, Authentifizierung und regelmäßigen Aktualisierungen.

Wie debugge ich den CLI -Modus in PhpStorm? Wie debugge ich den CLI -Modus in PhpStorm? Apr 01, 2025 pm 02:57 PM

Wie debugge ich den CLI -Modus in PhpStorm? Bei der Entwicklung mit PHPSTORM müssen wir manchmal den PHP im CLI -Modus (COMS -Zeilenschnittstellen) debuggen ...

See all articles