Pas toujours une solution plus productive - une solution qui nécessite moins de ressources pour s'exécuter - est la meilleure. Souvent, les facteurs concomitants sont plus significatifs: prévisibilité du comportement en cas de panne, vitesse de récupération après panne, etc. Considérons cela sur l'exemple des systèmes d'interaction interservices.
Le courrier a livré la commande. Lorsque le statut de la commande change, il est nécessaire d'informer les parties intéressées de ces événements.
Le client envoie un message au chat d'assistance. Il est nécessaire d'informer les services d'assistance des données reçues du client.
. . .
/ . () .
:
- . , . ..
- "-". . , . , , ..
?
, -, . . HTTP- .
: Websocket. .
,
TCP/HTTP- . ? ? ? , ?
:
-
( ) HTTP (
500
,502
,504
, ..)
(
4xx
)
, . , , , , , " ", . , .
, . " ?" " ".
.
:
-
500-
500-
- X. 500- . ?
:
- - (, ). .
, 500. , , .
, :
, (, 500-).
, , , ( 500-).
, ( 40x-).
, , :
?
"" , ?
"", - TCP- (
iptables DROP
)?
, , .
:
, , ,
:
;
:
,
: , () ,
TCP (
iptables -j DROP
)
DDoS .
:
, - ( : , ), .
-
, . .
- . , , ( " ") . TCP , . DDoS .
, -
, ( ), -
.
,
, . , , .
, : .
( ), , - . ?
,
TCP
/ .
? , 1 , - 1RPS . , ( )? . , , , .
, " ; , ?". ( , ) :
, .
, BTREE , " ?", , . .
.
.
index := 0
.index
- , .
limit
index
.
index := index + 1
2
, , index
, .
, , ... : index
. .
? API . .
, , , . , - :
SELECT
*
FROM
"table"
WHERE
"somefield" = $1
LIMIT
100
OFFSET
$2
, index
($2
). ( index
).
? :
SELECT
*
FROM
"table"
WHERE
"id" > $1
ORDER BY
"id"
LIMIT
100
, index
, . :
.
index := 0
limit
,index
index
,id
,
2
, , ( ).
. ?
, , /.
index
. , .
. index
state
:
.
state := null
.
limit
,state
, ,
new_state
.state := new_state
-
2
? .
state
. JSON .
"" (
index
, ?). ,state
.
state
, , , , . :
.
cursor := null, filters = _
.
limit
,cursor
,filters
.
, ,
cursor
.cursor := response.cursor
, 2
-
2
, , , , , .
:
, . , ( ).
, , . .
- , . JSON, base64- ( ) .
. .
B
. , .
, , ( ) : , , , .
, limit , , . limit' . , id
, .
, , , ( ). , , .
, , .
, , .
.
/ . . A. B.
, .
- , "". , PostgreSQL. :
SERIAL/BIGSERIAL
users
,lsn
(Last sequence number).
,
lsn
lsn
() BTREE .
:
UPDATE
"users"
SET
"name" = $1,
...
"lsn" = DEFAULT /* */
WHERE
"user_id" = $21
- :
SELECT
*
FROM
"users"
WHERE
"lsn" > $1
ORDER BY
"lsn"
LIMIT
$2
lsn
. .
, , .
, , TCP-
/. .