tg-me.com/javatg/1810
Last Update:
## Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ:
ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π° Java ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ:
1. Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΡΠΎΠ±ΡΡΠΈΠΉ (`EventStream`).
2. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ (`Event`) ΠΈΠΌΠ΅Π΅Ρ ΡΡΡΡΠΊΡΡΡΡ:
class Event {
String entityId;
Instant timestamp;
String eventType;
Map<String, Object> payload;
}
3. Π ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ (`Entity`), ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ.
4. Π‘ΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΎΡΠΊΠ°Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ:
- ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΠΎΡΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π»ΡΠ±ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ Π½Π° Π»ΡΠ±ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΎΡΠΊΡ (`Instant timestamp`).
- ΠΠΎΡΠ»Π΅ ΠΎΡΠΊΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ Π±Π΅Π· ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ ΠΏΠΎΡΠ΅ΡΠΈ Π΄Π°Π½Π½ΡΡ .
## ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
- ΠΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° ΠΎΡΠΊΠ°Ρ.
- ΠΡΡΠΎΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ: ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ Π² ΠΌΠΈΠ½ΡΡΡ.
- ΠΡΡΡΡΡΠΉ ΠΎΡΠΊΠ°Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ (target: **< 100 ΠΌΡ**).
- Π’ΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Java (`java.util.concurrent`,
java.time
, ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΈ Ρ.Π΄.).- ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ ΡΠΎΠ±ΡΡΠΈΠΉ Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
## ΠΠΎΠ½ΡΡ:
- Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠ½ΠΈΠΌΠΊΠΎΠ² (`snapshot`) ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΎΡΠΊΠ°ΡΠΎΠ².
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ snapshot'ΠΎΠ² ΠΊΠ°ΠΆΠ΄ΡΠ΅ N ΡΠΎΠ±ΡΡΠΈΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΉ ΠΎΡΠΊΠ°ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΡΡΡΡΡΠΉ ΠΎΡΠΊΠ°Ρ ΠΏΠΎ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΌΡ snapshot + ΡΠΎΠ±ΡΡΠΈΡ, ΠΈΠ»ΠΈ ΡΠΈΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠΎΡΠΊΠ° Π²ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠΉ).
---
π Π§ΡΠΎ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ:
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°: Π§Π΅ΡΠΊΠ°Ρ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠ»ΠΎΡΠ², ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΡ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ Π±Π΅Π· ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
Π Π°Π±ΠΎΡΠ° Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡΡ: ΠΠ°ΡΠ°Π½ΡΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΠ±ΡΠΈΠΌ ΡΡΡΡΠΊΡΡΡΠ°ΠΌ Π΄Π°Π½Π½ΡΡ Π² ΡΡΠ»ΠΎΠ²ΠΈΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ.
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ: ΠΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΎΠ±ΡΡΠΌΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΡΠΊΠ»ΠΈΠΊΠ° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ².
Π§ΠΈΡΡΠΎΡΠ° ΠΊΠΎΠ΄Π°: ΠΠΎΠ½ΡΡΠ½ΡΠ΅ ΠΈ Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, ΡΠΈΡΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±Π΅Π· "Π³ΡΡΠ·Π½ΡΡ Ρ Π°ΠΊΠ°", Ρ ΠΎΡΠΎΡΠ°Ρ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΡΡΡ ΠΊΠΎΠ΄Π°.
Π‘ΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅ΡΡ ΡΠΈΡΠΊΠΈ: Π£ΠΌΠ΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ³ΡΠΎΠ·Ρ ΡΠΈΡΡΠ΅ΠΌΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ .
Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ: ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ snapshot'ΠΎΠ² ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π½Π°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ: Π£ΠΌΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π²Π΅Π»Π° ΡΠ΅Π±Ρ ΠΏΡΠΈ ΡΠ±ΠΎΡΡ , ΡΠ΅ΡΠ΅Π²ΡΡ ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΈ Π²ΡΡΠΎΠΊΠΈΡ Π½Π°Π³ΡΡΠ·ΠΊΠ°Ρ .
---
# ΠΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ:
- ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π³ΠΎΠ½ΠΊΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ: Π΅ΡΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΎΡΠΊΠ°Ρ β ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ?
- Π ΠΎΡΡ ΠΏΠ°ΠΌΡΡΠΈ: Π΅ΡΠ»ΠΈ Ρ ΡΠ°Π½ΠΈΡΡ Π²ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠ°ΠΊ Π½Π΅ "ΡΠ±ΠΈΡΡ" ΠΏΠ°ΠΌΡΡΡ?
- ΠΠ΅ΡΠ΅ΠΏΡΡΠ°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠΌΡΡΠ΅ΠΌΠΏΡ: ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΡ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ?
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ: ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ
eventType
Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π½ΠΈΡ Π²ΡΠ΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ?- ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈ ΠΎΡΠΊΠ°ΡΠ΅: ΠΊΠ°ΠΊ Π½Π΅ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ ΡΠΎΠ±ΡΡΠΈΠΉ Π·Π° Π³ΠΎΠ΄Ρ ΡΠ°Π±ΠΎΡΡ?
---
# Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΡ:
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ copy-on-write ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΄Π»Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ (`ConcurrentHashMap`,
ConcurrentSkipListMap
ΠΈ Ρ.Π΄.).- Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΡΠ΅ΡΠ½ "Event Handler" ΠΈΠ»ΠΈ "Command Handler".
- ΠΠ½Π΅Π΄ΡΠΈΡΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ snapshot'ΠΎΠ² ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠΉ.
@javatg