Heim  >  Artikel  >  Verstehen Sie Strombegrenzungen und gängige Lösungen in zehn Minuten!

Verstehen Sie Strombegrenzungen und gängige Lösungen in zehn Minuten!

Java后端技术全栈
Java后端技术全栈nach vorne
2023-08-15 16:15:432008Durchsuche

Kürzlich erhielt ich Interview-Feedback von mehreren Internetnutzern, und allen wurden während des Interviews aktuelle BegrenzungsfragenFragen zur Strombegrenzung gestellt. Lassen Sie uns heute über verschiedene aktuelle Begrenzungslösungen in unserem Projekt sprechen.

Grundkonzept der Strombegrenzung

Für allgemeine Strombegrenzungsszenarien gibt es zwei Dimensionenvon Informationen:

  • Die zeitliche Strombegrenzung basiert auf einem bestimmten Zeitbereich oder einem bestimmten Zeitpunkt Dies ist das, was wir oft als „Zeitfenster“ bezeichnen, z. B. die Begrenzung des Zeitfensters pro Minute und Sekunde der verfügbaren Verbindungen
  • In Kombination der beiden oben genannten Dimensionen besteht die aktuelle Begrenzung darin, den Ressourcenzugriff innerhalb eines bestimmten Zeitfensters zu begrenzen, z. B. durch Festlegen von maximal 100 Zugriffsanforderungen pro Sekunde. In einem realen Szenario richten wir jedoch nicht nur eine Strombegrenzungsregel ein, sondern auch mehrere Strombegrenzungsregeln, die zusammenarbeiten. Die wichtigsten Strombegrenzungsregeln lauten wie folgt:
  • QPS und Verbindungsnummernsteuerung

Für (

Verbindungen Für Daten

und

QPS

) Strombegrenzung können wir die Strombegrenzung in der IP-Dimension festlegen, oder wir können die Strombegrenzung basierend auf einem einzelnen Server festlegen. Bilder

Verstehen Sie Strombegrenzungen und gängige Lösungen in zehn Minuten!In realen Umgebungen werden normalerweise Strombegrenzungsregeln in mehreren Dimensionen festgelegt, z. B. die Zugriffsfrequenz derselben IP auf weniger als 10 pro Sekunde, die Anzahl der Verbindungen auf weniger als 5 usw Wenn Sie die maximale Anzahl an Abfragen pro Sekunde für jede Maschine auf 1.000 festlegen, bleibt die maximale Anzahl von Verbindungen bei 200. Darüber hinaus können wir eine Servergruppe oder die Server im gesamten Computerraum als Ganzes behandeln und übergeordnete Strombegrenzungsregeln festlegen. Alle diese Strombegrenzungsregeln wirken bei der Verkehrskontrolle zusammen.
Übertragungsrate

Jeder kennt die „Übertragungsrate“, beispielsweise die Download-Geschwindigkeit von Ressourcen. Einige Websites verfügen in diesem Bereich über eine detailliertere aktuelle Begrenzungslogik. Beispielsweise beträgt die Download-Geschwindigkeit für normale registrierte Benutzer 100.000/s und nach dem Erwerb einer Mitgliedschaft 10 Mio./s. Dahinter steckt die aktuelle Begrenzungslogik, die auf Benutzergruppen basiert oder Benutzer-Tags.

Schwarze und weiße Listen

Schwarze und weiße Listen sind ein weit verbreitetes Mittel zur Begrenzung und Freigabe des Datenverkehrs in großen Unternehmensanwendungen, und schwarze und weiße Listen ändern sich oft dynamisch. Wenn beispielsweise eine IP in einem bestimmten Zeitraum zu häufig besucht wurde und vom System als Roboterbenutzer oder Verkehrsangriff identifiziert wird, wird die IP zur Blacklist hinzugefügt, wodurch ihr Zugriff auf Systemressourcen eingeschränkt wird was wir allgemein als „IP-Blockierung“ bezeichnen.

Die Crawler-Programme, die wir normalerweise sehen, wie das Crawlen von Bildern schöner Frauen auf Zhihu oder das Crawlen von Aktien-Timesharing-Informationen auf Brokerage-Systemen, müssen die Funktion zum Ändern der IP implementieren, um zu verhindern, dass sie zur schwarzen Liste hinzugefügt werden.

Manchmal stellen wir auch fest, dass das Netzwerk des Unternehmens nicht auf große öffentliche Websites wie 12306 zugreifen kann. Dies liegt auch daran, dass die ausgehenden IP-Adressen einiger Unternehmen dieselbe Adresse haben. Wenn die Anzahl der Besuche zu hoch ist, wird dies auch der Fall sein vom System identifiziert und dann zur Sperrliste hinzugefügt werden. Studenten, die Breitband zu Hause nutzen, sollten wissen, dass die meisten Netzwerkbetreiber Benutzer verschiedenen ausgehenden IP-Segmenten zuweisen oder die IP-Adresse des Benutzers von Zeit zu Zeit dynamisch ändern.

Die Whitelist ist einfacher zu verstehen. Sie ist gleichbedeutend mit einer Goldmedaille, die von der königlichen Familie verliehen wird. Sie können sich ungehindert durch verschiedene aktuelle Begrenzungsregeln bewegen. Einige E-Commerce-Unternehmen fügen beispielsweise die Konten sehr großer Verkäufer zur Whitelist hinzu, da diese Verkäufer häufig über eigene Betriebs- und Wartungssysteme verfügen und eine Schnittstelle zum IT-System des Unternehmens benötigen, um eine große Anzahl von Produktfreigaben und Nachbeständen durchzuführen , usw. Durchsuchen Sie außerdem das Backend des öffentlichen Kontos Programming Technology Circle und antworten Sie mit „Java“, um ein Überraschungsgeschenkpaket zu erhalten.

Verteilte Umgebung

Verteilt unterscheidet sich vom Strombegrenzungsszenario auf einer einzelnen Maschine. Es berücksichtigt alle Server in der gesamten verteilten Umgebung als Ganzes. Für die IP-Strombegrenzung begrenzen wir beispielsweise eine IP auf maximal 10 Besuche pro Sekunde. Unabhängig davon, auf welchen Computer die Anfrage von dieser IP gelangt, unterliegt sie nur dem Zugriff auf den Serviceknoten im Cluster Strombegrenzung. Durch Regeln eingeschränkt.

Wir sollten die Strombegrenzungsinformationen besser in einer „zentralen“ Komponente speichern, damit sie den Zugriffsstatus aller Maschinen im Cluster erhalten kann. Derzeit gibt es zwei gängige Strombegrenzungslösungen:

  • Gateway Layer Strombegrenzung wendet aktuelle Begrenzungsregeln auf den Eingang des gesamten Datenverkehrs an
  • Middleware-Strombegrenzung speichert die aktuellen Begrenzungsinformationen in einer Middleware in einer verteilten Umgebung (z. B. Redis-Cache), und jede Komponente kann von hier aus darauf zugreifen. Erhalten Sie die Verkehrsstatistiken am aktueller Moment, um zu entscheiden, ob der Dienst verweigert oder Verkehr zugelassen werden soll
  • Sentinel, eine vom Springcloud-Ökosystem maßgeschneiderte Komponente für Mikrodienste zur verteilten Strombegrenzung, Leistungsschalterverschlechterung und anderen Komponenten

Häufig verwendete Algorithmen zur Strombegrenzung Schemata

Token-Bucket-Algorithmus

Token-Bucket-Algorithmus Der Token-Bucket-Algorithmus ist derzeit der am weitesten verbreitete Strombegrenzungsalgorithmus und hat die folgenden zwei Schlüsselrollen:

  • Der Token wird erst verarbeitet, nachdem der Token erhalten wurde.
  • Der Bucket wird zum Speichern von Token aus diesem Bucket verwendet
  • Token-Generierung
Dieser Prozess umfasst den Token-Generator und den Token-Bucket. Wir haben bereits erwähnt, dass der Token-Bucket ein Platz für Token ist. Da es sich um einen Bucket handelt, muss eine Kapazität vorhanden sein dass die Anzahl der Token, die der Token-Bucket aufnehmen kann, ein fester Wert ist.

Der Token-Generator fügt dem Bucket entsprechend einer vorgegebenen Rate Token hinzu. Wir können ihn beispielsweise so konfigurieren, dass er Token mit einer Rate von 100 Anfragen pro Sekunde oder 50 pro Minute ausgibt. Beachten Sie, dass die Ausgabegeschwindigkeit hier einheitlich ist, was bedeutet, dass diese 50 Token nicht alle auf einmal zu Beginn jedes Zeitfensters ausgegeben werden, sondern innerhalb dieses Zeitfensters mit einer einheitlichen Geschwindigkeit ausgegeben werden.

Der Token-Spender ist ein Wasserhahn. Wenn der Eimer mit Wasser unten voll ist, fließt das Wasser (Token) auf natürliche Weise nach draußen. Das Gleiche gilt während des Token-Ausgabevorgangs. Die Kapazität des Token-Buckets ist begrenzt. Wenn die Token der Nennkapazität derzeit gefüllt sind, werden die neuen Token verworfen.

  • Token-Erwerb
Nachdem jede Zugriffsanforderung eintrifft, muss ein Token abgerufen werden, um die nachfolgende Logik auszuführen. Wenn die Anzahl der Token gering ist und viele Zugriffsanforderungen vorliegen, können einige Anforderungen natürlich keine Token erhalten. Zu diesem Zeitpunkt können wir eine „Pufferwarteschlange“ einrichten, um diese überschüssigen Token vorübergehend zu speichern.

Die Pufferwarteschlange ist eigentlich eine optionale Option und nicht alle Programme, die den Token-Bucket-Algorithmus anwenden, implementieren Warteschlangen. Wenn eine Cache-Warteschlange vorhanden ist, werden Anforderungen, die noch kein Token erhalten haben, in dieser Warteschlange in die Warteschlange gestellt, bis ein neues Token generiert wird. Anschließend wird eine Anforderung vom Kopf der Warteschlange entgegengenommen, um mit dem Token übereinzustimmen.

Wenn die Warteschlange voll ist, werden diese Zugriffsanfragen verworfen. In praktischen Anwendungen können wir dieser Warteschlange auch eine Reihe von Spezialeffekten hinzufügen, z. B. das Festlegen der Überlebenszeit von Anforderungen in der Warteschlange oder die Umwandlung der Warteschlange in eine PriorityQueue, bei der nach einer bestimmten Priorität statt nach dem Prinzip „First In, First Out“ sortiert wird .

Leaky-Bucket-Algorithmus

Leaky-Bucket-Algorithmus ist ein weiterer Bucket. Was ist also der Unterschied zwischen Leaky-Bucket und Token-Bucket? Allerdings sind die Operationsobjekte unterschiedlich. Der Token-Bucket legt Token in den Bucket, während der Leaky-Bucket das Zugriffsanforderungspaket in den Bucket legt. Wenn der Bucket voll ist, werden eingehende Pakete ebenfalls verworfen.

Die zweite Hälfte des Leaky-Bucket-Algorithmus zeichnet sich dadurch aus, dass Datenpakete immer mit einer konstanten Rate aus dem Bucket fließen. Wenn ich beispielsweise einen Leaky-Bucket zum Speichern von 100 Datenpaketen einrichte und die Abflussgeschwindigkeit dann eins pro Sekunde beträgt, dann spielt es keine Rolle, mit welcher Geschwindigkeit die Datenpakete in den Bucket fließen und wie viele Datenpakete sich im Bucket befinden , kann der Leaky Bucket garantieren, dass diese Datenpakete immer mit einer konstanten Rate von einer Sekunde verarbeitet werden. Durchsuchen Sie außerdem die Antwort „Saubere Architektur“ des Back-End-Architekten im öffentlichen Konto, um ein Überraschungsgeschenkpaket zu erhalten.

  • Der Unterschied zwischen Leaky Bucket und Token Bucket

Es ist nicht schwer, anhand ihrer jeweiligen Eigenschaften zu erkennen, dass beide Algorithmen eine „konstante“ Rate und eine „unbestimmte“ Rate haben. Der Token-Bucket erstellt Token mit einer konstanten Rate, aber die Rate, mit der Zugriffsanfragen Token erhalten, ist „nicht festgelegt“. Wie auch immer, es werden so viele Token ausgegeben, und wenn die Token weg sind, werden sie einfach warten. Der Leaky-Bucket verarbeitet Anfragen mit einer „konstanten“ Rate, aber die Rate, mit der diese Anfragen in den Bucket fließen, ist „variabel“.

Anhand dieser beiden Eigenschaften bestimmen die natürlichen Eigenschaften des Leaky-Buckets, dass er keinen Burst-Verkehr hat. Selbst wenn 1.000 Anfragen pro Sekunde eingehen, bleibt seine Zugriffsrate auf die Hintergrunddienstausgabe immer konstant. Der Token-Bucket ist anders. Seine Funktion kann eine bestimmte Menge an Token vorspeichern, wenn er plötzlichen Datenverkehr verarbeitet Bucket, aber es wird auch der Druck auf das Backend-System entsprechend erhöht.

Schiebefenster

Wenn wir beispielsweise 5 Benutzer pro Sekunde und 10 Benutzer innerhalb der 5. Sekunde haben, beträgt die Anzahl der Besuche im Zeitfenster von 0 bis 5 Sekunden 15. Wenn unsere Schnittstelle die Obergrenze des Zugriffs innerhalb des Zeitfensters auf 20 festlegt, beträgt die Gesamtzahl in diesem Zeitfenster 10, wenn die Zeit die sechste Sekunde erreicht, da das 1-Sekunden-Raster das Zeitfenster verlassen hat, also in Die Zahl der Besuche, die innerhalb der sechsten Sekunde empfangen werden können, beträgt 20-10=10.

Das Schiebefenster ist eigentlich ein Rechneralgorithmus. Es hat eine Besonderheit, wenn die Zeitspanne länger ist, wird der Strombegrenzungseffekt gleichmäßiger. Wenn das aktuelle Zeitfenster beispielsweise nur zwei Sekunden beträgt und sich alle Zugriffsanforderungen auf die erste Sekunde konzentrieren, kann sich die Anzahl der aktuellen Fenster erheblich ändern, wenn die Zeit um eine Sekunde zurückgeschoben wird. Eine Verlängerung des Zeitfensters kann die Wahrscheinlichkeit verringern davon

Häufig verwendete Strombegrenzungslösungen

Strombegrenzung zur Legalitätsüberprüfung

Wie Verifizierungscode, IP-Blacklist usw. Diese Mittel können böswillige Angriffe und Crawler-Erfassung wirksam verhindern;

Guawa-Strombegrenzung

Im Bereich der Strombegrenzung bietet Guava im Rahmen seines Multithreading-Moduls einen Anmeldedienst an, wenn ich beispielsweise den Datenverkehr der beiden steuern möchte Maschinen werden innerhalb von 20 pro Sekunde gesteuert. Wenn Sie Guava verwenden, können Sie nur die Anzahl der Besuche jeder Maschine unabhängig voneinander steuern RateLimiter为首的几个限流支持类,但是作用范围仅限于“当前”这台服务器,也就是说Guawa的限流是单机的限流,跨了机器或者jvm进程就无能为力了比如说,目前我有2台服务器[Server 1Server 2

Obwohl Guava keine Lösung für verteilte Systeme ist, ist es als einfache und leichte clientseitige Strombegrenzungskomponente sehr gut geeignet, den Strombegrenzungsalgorithmus zu erklären.

Strombegrenzung auf der Gateway-Ebene Die erste Ebene im Link verarbeitet alle Benutzeranfragen, daher ist die Begrenzung des Datenverkehrs auf der Gateway-Ebene ein guter Ausgangspunkt:

    Der Benutzerverkehr wird von der Gateway-Ebene an den Backend-Dienst weitergeleitet
  1. Der Hintergrunddienst akzeptiert Datenverkehr und ruft den Cache auf, um Daten abzurufen.
  2. Wenn sich keine Daten im Cache befinden, greifen Sie auf die Datenbank zu.
  3. Der Datenverkehr nimmt Schicht für Schicht von oben nach unten ab und wird am größten und dichtesten Der Datenverkehr wird auf der Gateway-Ebene gesammelt. Benutzerzugriffsanfragen, gefolgt von Hintergrunddiensten.
  4. Nachdem die Überprüfungslogik des Hintergrunddienstes bestanden wurde, werden einige fehlerhafte Anforderungen gelöscht und die verbleibenden Anforderungen fallen in den Cache. Wenn sich keine Daten im Cache befinden, wird die Datenbank am unteren Rand des Trichters angefordert Die Anzahl der Anforderungen auf Datenbankebene ist am geringsten (im Vergleich zu Bei anderen Komponenten ist die Datenbank häufig diejenige mit der schlechtesten Parallelitätskapazität. Auch wenn Alibabas MySQL viele Änderungen erfahren hat, ist die Parallelität auf einer Maschine nicht vergleichbar Komponenten wie Redis und Kafka). Proxy- und Routing-Weiterleitung sind als Gateway-Layer-Funktionen sehr wichtig. Aufgrund des inhärenten leichten und hervorragenden Designs von Nginx ist es für viele Unternehmen zur ersten Wahl geworden. Aus Sicht des Gateways kann Nginx als das Front-End-Gateway verwendet werden Hält dem meisten Netzwerkverkehr stand, daher ist Nginx auch eine gute Wahl. In Nginx werden auch häufig verwendete Richtlinienkonfigurationen für die Strombegrenzung bereitgestellt.

Nginx bietet zwei Methoden zur Strombegrenzung: eine zur Steuerung der Rate und Die andere besteht darin, die Anzahl gleichzeitiger Verbindungen zu steuern.

Kontrollieren Sie die Rate

Wir müssen verwenden, um die Anzahl der Anfragen pro Zeiteinheit zu begrenzen, d Konvertieren Sie es Das heißt, eine einzelne IP darf nur eine Anfrage innerhalb von 500 Millisekunden weiterleiten, und die zweite Anfrage darf erst ab 501 ms weitergegeben werden.

Optimierte Version der Ratenkontrolle

Obwohl die obige Ratenkontrolle sehr genau ist, ist sie in einer Produktionsumgebung zu streng. In tatsächlichen Situationen sollten wir die Gesamtzahl der Zugriffe in einer IP-Einheit kontrollieren Die Gesamtzeit ist nicht wie oben, sondern auf Millisekunden genau. Wir können das Schlüsselwort „burst“ verwenden, um diese Einstellung zu aktivieren

burst=4意思是每个IP最多允许4个突发请求

控制并发数

利用 limit_conn_zonelimit_conn 两个指令即可控制并发数

其中 limit_conn perip 10 表示限制单个 IP 同时最多能持有 10 个连接;limit_conn perserver 100

Kontrollieren Sie die Anzahl der Parallelität

Verwenden Sie limit_conn_zone und limit_conn perserver 100 bedeutet, dass der Server insgesamt 100 gleichzeitige Verbindungen gleichzeitig verarbeiten kann.

Hinweis: Diese Verbindung wird erst gezählt, nachdem der Anforderungsheader vom Backend verarbeitet wurde.

Middleware-Strombegrenzung

Für eine verteilte Umgebung ist es nichts anderes als ein zentraler knotenähnlicher Ort zum Speichern der strombegrenzten Daten. Wenn ich beispielsweise möchte, dass die Zugriffsrate der Steuerschnittstelle 100 Anfragen pro Sekunde beträgt, muss ich die Anzahl der innerhalb der aktuellen 1 Sekunden empfangenen Anfragen irgendwo speichern und allen Knoten in der Clusterumgebung den Zugriff ermöglichen. Mit welcher Technologie können wir diese temporären Daten speichern?

Daher muss jeder gedacht haben, dass es Redis sein muss. Mit der Ablaufzeitfunktion von Redis können wir ganz einfach die Zeitspanne des aktuellen Limits festlegen (z. B. 10 Anfragen pro Sekunde oder 10 Anfragen alle 10 Sekunden). Gleichzeitig verfügt Redis auch über eine besondere Fähigkeit – die Skriptprogrammierung. Wir können die aktuelle Begrenzungslogik in ein Skript einbetten. Dadurch ist die aktuelle Begrenzungsverantwortung vollständig von der Serviceschicht getrennt Leistungsstarke Parallelitätseigenschaften und hohe Die verfügbare Clusterarchitektur kann auch den aktuell begrenzten Zugriff auf große Cluster (

Reids + Lua

) gut unterstützen. 🎜🎜🎜Strombegrenzende Komponenten🎜🎜🎜Zusätzlich zu den oben vorgestellten Methoden gibt es derzeit einige Open-Source-Komponenten, die ähnliche Funktionen bereitstellen, wie z. B. Sentinel, was eine gute Wahl ist. Sentinel ist eine von Alibaba produzierte und in der Spring Cloud Alibaba-Komponentenbibliothek enthaltene Open-Source-Komponente. Sentinel bietet einen umfangreichen Satz an APIs und visuellen Verwaltungskonsolen für die Strombegrenzung, die uns bei der einfachen Verwaltung der Strombegrenzung helfen können

Betrachten Sie das strombegrenzende Design aus der architektonischen Dimension.

In realen Projekten wird häufig nur eine strombegrenzende Methode verwendet. Mehrere Methoden werden häufig in Verbindung miteinander verwendet, um der strombegrenzenden Strategie ein Gefühl der Hierarchie zu verleihen und das zu erreichen maximale Ausnutzung der Ressourcen. In diesem Prozess kann sich das Design der Strombegrenzungsstrategie auch auf das zuvor erwähnte Trichtermodell beziehen, das oben breit und unten eng ist. Auf das Design des Strombegrenzungsschemas für verschiedene Teile des Trichters sollte geachtet werden die hohe Verfügbarkeit der aktuellen Komponenten.

Nehmen Sie als Beispiel das tatsächliche Projekt, an dem ich teilgenommen habe. Durch die mobile Taobao-Umleitung werden Zugriffsanfragen zunächst über das MTOP-Gateway von Alibaba geleitet Unsere aktuelle Begrenzung erfolgt relativ locker. Warten Sie, bis die Anforderung über das Gateway den Back-End-Produktdetailseitendienst erreicht, und verwenden Sie dann eine Reihe von Middleware- und Strombegrenzungskomponenten, um eine detailliertere Strombegrenzungssteuerung für den Dienst durchzuführen

Spezifische Mittel zur Implementierung der Strombegrenzung

1) Tomcat verwendet maxThreads, um die Strombegrenzung zu implementieren.

2) Nginx's limit_req_zone和 burst来实现速率限流。

3)Nginx的limit_conn_zonelimit_conn两个指令控制并发连接的总数。

4)时间窗口算法借助 Redis的有序集合可以实现。

5)漏桶算法可以使用Redis-Cell来实现。

6)令牌算法可以解决Google的guava包来实现。

需要注意的是借助Redis实现的限流方案可用于分布式系统,而guava实现的限流只能应用于单机环境。如果你觉得服务器端限流麻烦,可以在不改任何代码的情况下直接使用容器限流(Nginx或Tomcat),但前提是能满足项目中的业务需求。

Tomcat限流

Tomcat 8.5 版本的最大线程数在 conf/server.xml

3) Nginx's limit_connDie beiden Anweisungen steuern die Gesamtzahl gleichzeitiger Verbindungen .

4) Der Zeitfensteralgorithmus kann mithilfe der geordneten Sammlung von Redis implementiert werden. 🎜🎜5) Der Leaky-Bucket-Algorithmus kann mit Redis-Cell implementiert werden. 🎜🎜6) Der Token-Algorithmus kann durch Lösen des Guava-Pakets von Google implementiert werden. 🎜

Es ist zu beachten, dass das aktuelle Begrenzungsschema mit Redis implementiert werden kann Verwendete verteilte Systeme, und die von guava implementierte Strombegrenzung kann nur auf eine eigenständige Umgebung angewendet werden. Wenn Sie die serverseitige Strombegrenzung als problematisch empfinden, können Sie die Container-Strombegrenzung (Nginx oder Tomcat) direkt verwenden, ohne Code zu ändern, aber nur, wenn sie die Geschäftsanforderungen des Projekts erfüllen kann. 🎜

Tomcat aktuelles Limit h4 >🎜Die maximale Anzahl von Threads in der Tomcat 8.5-Version beträgt

Der Wert von maxThreads kann standardmäßig auf 150 erhöht werden (Tomcat-Version 8.5), aber dieser Wert ist nicht größer, desto besser. Es ist zu beachten, dass jeder gestartete Thread 1 MB verbraucht. Der JVM-Speicherplatz wird als Thread-Stapel verwendet. Je mehr Threads vorhanden sind, desto höher ist die GC-Belastung.

Abschließend ist zu beachten, dass das Betriebssystem bestimmte Einschränkungen hinsichtlich der Anzahl der Threads in einem Prozess hat. Die Anzahl der Threads in jedem Prozess von Windows darf 2000 nicht überschreiten, und die Anzahl der Threads in jedem Prozess von Linux darf 1000 nicht überschreiten.

Das obige ist der detaillierte Inhalt vonVerstehen Sie Strombegrenzungen und gängige Lösungen in zehn Minuten!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:Java后端技术全栈. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen