เบงเบฝเบเบ‡เบฒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบกเบฒเบเปˆเบฝเบงเบเบฑเบš Faust, เบžเบฒเบเบ—เบต I: เปเบ™เบฐเบ™เปเบฒ

เบงเบฝเบเบ‡เบฒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบกเบฒเบเปˆเบฝเบงเบเบฑเบš Faust, เบžเบฒเบเบ—เบต I: เปเบ™เบฐเบ™เปเบฒ

เบ‚เป‰เบญเบเบกเบฒเบขเบนเปˆเปเบšเบšเบ™เบตเป‰เป„เบ”เป‰เปเบ™เบงเปƒเบ”?

เบšเปเปˆเบ”เบปเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ backend เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เป‚เบซเบผเบ”เบชเบนเบ‡, เปƒเบ™เบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบˆเบฑเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ›เบปเบเบเบฐเบ•เบดเบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™เบžเบทเป‰เบ™เบซเบฅเบฑเบ‡เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™เปเบฅเบฐเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ‚เบญเบ‡เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบก. เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™ asynchronous เปเบฅเบฐเบเปˆเบญเบ™เบ—เบตเปˆเบ‚เป‰เบญเบเบˆเบฐเบกเบฒ, เบกเบฑเบ™เบกเบตเบเบปเบ™เป„เบเบ‡เปˆเบฒเบเป†เบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง cron: loop เบเบงเบ”เป€เบšเบดเปˆเบ‡เป€เบงเบฅเบฒเบ›เบฐเบˆเบธเบšเบฑเบ™เปเบฅเบฐเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบเบธเปˆเบก coroutines เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก - เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบเบญเบกเบฎเบฑเบšเบˆเบปเบ™เบเปˆเบงเบฒเบกเบตเบซเบฅเบฒเบเบชเบดเบšเปเบฅเบฐเบซเบผเบฒเบเบฎเป‰เบญเบ coroutines เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เป€เบกเบทเปˆเบญเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเป€เบเบตเบ™เบชเบญเบ‡เบžเบฑเบ™เบ„เบปเบ™, เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เปเบ–เบงเบงเบฝเบเบ›เบปเบเบเบฐเบ•เบดเบเบฑเบšเบ™เบฒเบเบซเบ™เป‰เบฒ, เบ„เบปเบ™เบ‡เบฒเบ™เบซเบผเบฒเบเบ„เบปเบ™, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบ—เปเบฒเบญเบดเบ”เบ‚เป‰เบญเบเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบปเบ”เบฅเบญเบ‡เปƒเบŠเป‰ Celery, เป€เบŠเบดเปˆเบ‡เบ‚เป‰เบญเบเป„เบ”เป‰เปƒเบŠเป‰เบเปˆเบญเบ™. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เปเบฒเบ–เบฒเบกเปเบฅเบฐเป„เบ”เป‰เป€เบซเบฑเบ™ เบšเบปเบ”เบ„เบงเบฒเบก, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš เป‚เบ„เบ‡เบเบฒเบ™, เบชเป‰เบฒเบ‡เป‚เบ”เบเบœเบนเป‰เบ‚เบฝเบ™เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบงเบปเป‰เบฒเบ™เบตเป‰, เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบญเบทเปˆเบ™เป†เบ‚เบญเบ‡เบ—เบตเบกเบ‡เบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เปเบฅเบฐเบœเบนเป‰เบ‚เบฝเบ™เป€เบญเบ‡เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบฅเบฒเบงเบชเบฒเบกเบฒเบ”เบกเป‰เบงเบ™เบกเบฑเบ™เบญเบญเบเปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”เป‚เบ”เบเปƒเบŠเป‰เบชเบฐเบ™เบธเบเป€เบเบต asynchronous. เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบกเบฑเบ™เบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบ‚เป‰เบญเบเปเบ—เป‰เป†, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบญเบญเบเบกเบฒ เบšเบฑเบ™เบซเบฒ เบ”เป‰เบงเบเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบเบธเปˆเบกเบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™ (เป€เบšเบดเปˆเบ‡. เบเบธเปˆเบก). เปƒเบ™เป€เบงเบฅเบฒเบ‚เบฝเบ™ เบšเบฑเบ™เบซเบฒ เป„เบ”เป‰เบ›เบดเบ”เปเบฅเป‰เบง, เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบงเบฝเบเบ‡เบฒเบ™เป„เบ”เป‰เบ”เปเบฒเป€เบ™เบตเบ™เป„เบ›เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบซเบ™เบถเปˆเบ‡เป€เบ”เบทเบญเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเปƒเบ”เบเปเปˆเบ•เบฒเบก, เป‚เบŠเบเบ”เบตเบเบฑเบšเบœเบนเป‰เบ‚เบฝเบ™เปเบฅเบฐเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบตเปเบฅเป‰เบงเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ lib ... เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบˆเบธเบ”เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบกเบทเป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบŠเบธเปˆเบกเบŠเบทเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบงเบฝเบเบ‡เบฒเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบกเบต 2-3 http เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ optimizing เบงเบฝเบเบ‡เบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ 4 เบžเบฑเบ™ TCP เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เบ›เบฐเบกเบฒเบ™เบ—เบธเบเป† 2 เบŠเบปเปˆเบงเป‚เบกเบ‡ - เบšเปเปˆเบ”เบตเบซเบผเบฒเบ ... เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบฒเบเบˆเบฐเบชเป‰เบฒเบ‡ session เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ”เบซเบ™เบถเปˆเบ‡. เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบ„เบปเบ™โ€‹เบ‡เบฒเบ™โ€‹. เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบฅเบฑเบเบ™เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเบœเปˆเบฒเบ™ aiohttp เบ—เบตเปˆเบ™เบตเป‰.

เปƒเบ™เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบŠเบญเบเบซเบฒ เบ—เบฒเบ‡เป€เบฅเบทเบญเบ เปเบฅเบฐเบžเบปเบšเบกเบฑเบ™! เบœเบนเป‰เบชเป‰เบฒเบ‡เบ‚เบญเบ‡ celery, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเบกเบฑเบ™ เบ–เบฒเบก Solem, เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™ Faust, เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ เบ„เบงเบฒเบกเบเป‰เบฒเบซเบฒเบ™. Faust เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ”เบปเบ™เปƒเบˆเป‚เบ”เบ Kafka Streams เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Kafka เป€เบ›เบฑเบ™เบ™เบฒเบเบซเบ™เป‰เบฒ, rocksdb เบเบฑเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ•เบปเบงเปเบ—เบ™, เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปเบกเปˆเบ™ asynchronous.

เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡ เบเบฒเบ™โ€‹เบ›เบฝเบšโ€‹เบ—เบฝเบšโ€‹เป„เบงโ€‹ celery เปเบฅเบฐ faust เบˆเบฒเบเบœเบนเป‰เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบเบธเบเบชเบธเบ”เบ—เป‰เบฒเบ: เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ™เบฒเบเบซเบ™เป‰เบฒ, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™เบ›เบฐเบ–เบปเบก. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ, เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ‡เบฒเบกเปƒเบ™ faust เบ”เบถเบ‡เบ”เบนเบ”เบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆ - typed data for transmission to the topic .

เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”?

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบŠเบธเบ”เบชเบฑเป‰เบ™เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก, เบ‚เป‰เบญเบเบˆเบฐเบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบซเบ™เป‰เบฒเบงเบฝเบเบžเบทเป‰เบ™เบ–เบฒเบ™เป‚เบ”เบเปƒเบŠเป‰ Faust. เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบ›เบฑเบ™, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบŠเบทเปˆเปเบ™เบฐเบ™เปเบฒ, alphavantage.co. เบ‚เป‰เบญเบเบˆเบฐเบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฝเบ™เบ•เบปเบงเปเบ—เบ™ (sink, เบซเบปเบงเบ‚เปเป‰, partitions), เบงเบดเบ—เบตเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบด (cron), เบ„เปเบฒเบชเบฑเปˆเบ‡ faust cli เบ—เบตเปˆเบชเบฐเบ”เบงเบเบ—เบตเปˆเบชเบธเบ” (a wrapper over click), clustering เบ‡เปˆเบฒเบเบ”เบฒเบ, เปเบฅเบฐเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เบดเบ” datadog (. เป€เบฎเบฑเบ”เบงเบฝเบเบญเบญเบเบˆเบฒเบเบเปˆเบญเบ‡) เปเบฅเบฐเบžเบฐเบเบฒเบเบฒเบกเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡. เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบเบฑเบšเบเปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰ mongodb เปเบฅเบฐ motor เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ.

PS เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เป‚เบ”เบเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เปƒเบˆเบ—เบตเปˆเบˆเบธเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒเป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒเบœเบนเป‰เบญเปˆเบฒเบ™เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบเบฑเบ‡เบˆเบฐเป€เบšเบดเปˆเบ‡เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

เบงเบฝเบเบ‡เบฒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบกเบฒเบเปˆเบฝเบงเบเบฑเบš Faust, เบžเบฒเบเบ—เบต I: เปเบ™เบฐเบ™เปเบฒ

เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบ„เบ‡เบเบฒเบ™

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบ‚เป‰เบญเบเป„เบ”เป‰เบชเบฑเบ™เบเบฒเป„เบงเป‰เปเบฅเป‰เบง, เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ™เป‰เบญเบเป†เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเบฅเบดเบเบฒเบ™เบ„เบงเบ™เบˆเบฐเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰:

  1. เบญเบฑเบšเป‚เบซเบผเบ”เบซเบผเบฑเบเบŠเบฑเบšเปเบฅเบฐเบžเบฒเบšเบฅเบงเบกเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ (เบฅเบงเบกเบ—เบฑเบ‡เบœเบปเบ™เบเปเบฒเป„เบฅเปเบฅเบฐเบเบฒเบ™เบชเบนเบ™เป€เบชเบ, เปƒเบšเบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡, เบเบฐเปเบชเป€เบ‡เบดเบ™เบชเบปเบ” - เบชเปเบฒเบฅเบฑเบšเบ›เบตเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ) - เป€เบ›เบฑเบ™เบ›เบฐเบˆเปเบฒ
  2. เบญเบฑเบšโ€‹เป‚เบซเบผเบ”โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ›เบฐโ€‹เบซเบงเบฑเบ”โ€‹เบชเบฒเบ” (เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบŠเบทเป‰โ€‹เบ‚เบฒเบโ€‹เปƒเบ™โ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบ›เบตโ€‹, เบŠเบญเบโ€‹เบซเบฒโ€‹เบกเบนเบ™โ€‹เบ„เปˆเบฒโ€‹เบ—เบตเปˆโ€‹เบฎเป‰เบฒเบโ€‹เปเบฎเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบฅเบฒโ€‹เบ„เบฒโ€‹เบ›เบดเบ”โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบŠเบทเป‰โ€‹เบ‚เบฒเบโ€‹) - เป€เบ›เบฑเบ™โ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบด
  3. เบญเบฑเบšเป‚เบซเบผเบ”เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบŠเบทเป‰เบ‚เบฒเบเบซเบผเป‰เบฒเบชเบธเบ” - เป€เบ›เบฑเบ™เบ›เบฐเบˆเปเบฒ
  4. เบญเบฑเบšโ€‹เป‚เบซเบผเบ”โ€‹เบฅเบฒเบโ€‹เบŠเบทเปˆโ€‹เบ•เบปเบงโ€‹เบŠเบตเป‰โ€‹เบงเบฑเบ”โ€‹เบ—เบตเปˆโ€‹เบ›เบฑเบšโ€‹เปเบ•เปˆเบ‡โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบ„เบงเบฒเบกโ€‹เบ›เบญเบ”โ€‹เป„เบž - เป€เบ›เบฑเบ™โ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ„เบฒเบ”เป„เบงเป‰, เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบทเบญเบเบŠเบทเปˆเบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™: เบชเบงเบ™เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ

เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบเบฐเบเบฝเบกเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™

เบซเบปเบงเบ‚เปเป‰เปเบกเปˆเบ™เปเบ™เปˆเบ™เบญเบ™เบ—เบตเปˆเป€เบ‚เบฑเป‰เบกเปเบ‚เบ‡, เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เปเบกเปˆเบ™เบ‚เบฝเบ™ config เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบชเปเบฒเบฅเบฑเบš docker-compose เบเบฑเบš kafka (เปเบฅเบฐ zookeeper - เปƒเบ™เบซเบ™เบถเปˆเบ‡ container), kafdrop (เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบšเบดเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™เบซเบปเบงเบ‚เปเป‰), mongodb. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš [docker-compose.yml](https://github.com/Egnod/horton/blob/562fa5ec14df952cd74760acf76e141707d2ef58/docker-compose.yml) เบ‚เบญเบ‡โ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

version: '3'

services:
  db:
    container_name: horton-mongodb-local
    image: mongo:4.2-bionic
    command: mongod --port 20017
    restart: always
    ports:
      - 20017:20017
    environment:
      - MONGO_INITDB_DATABASE=horton
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=admin_password

  kafka-service:
    container_name: horton-kafka-local
    image: obsidiandynamics/kafka
    restart: always
    ports:
      - "2181:2181"
      - "9092:9092"
    environment:
      KAFKA_LISTENERS: "INTERNAL://:29092,EXTERNAL://:9092"
      KAFKA_ADVERTISED_LISTENERS: "INTERNAL://kafka-service:29092,EXTERNAL://localhost:9092"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT"
      KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL"
      KAFKA_ZOOKEEPER_SESSION_TIMEOUT: "6000"
      KAFKA_RESTART_ATTEMPTS: "10"
      KAFKA_RESTART_DELAY: "5"
      ZOOKEEPER_AUTOPURGE_PURGE_INTERVAL: "0"

  kafdrop:
    container_name: horton-kafdrop-local
    image: 'obsidiandynamics/kafdrop:latest'
    restart: always
    ports:
      - '9000:9000'
    environment:
      KAFKA_BROKERCONNECT: kafka-service:29092
    depends_on:
      - kafka-service

เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบชเบฑเบšเบชเบปเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เบชเบญเบ‡เบœเบนเป‰เบŸเบฑเบ‡เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบฒเบ”เบชเปเบฒเบฅเบฑเบš kafka: เบซเบ™เบถเปˆเบ‡ (เบžเบฒเบเปƒเบ™) เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบžเบฒเบเปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™, เปเบฅเบฐเบ—เบตเบชเบญเบ‡ (เบžเบฒเบเบ™เบญเบ) เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบˆเบฒเบเบžเบฒเบเบ™เบญเบ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบชเบปเปˆเบ‡เบ•เปเปˆเบžเบฒเบเบ™เบญเบ. 2181 โ€” เบ—เบตเปˆ Port zookeeper. เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒ, เปเบกเปˆเบ™เบˆเบฐเปเบˆเป‰เบ‡.

เบเบฒเบ™เบเบฐเบเบฝเบกเป‚เบ„เบ‡เบเบฐเบ”เบนเบเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™

เปƒเบ™โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เบžเบทเป‰เบ™โ€‹เบ–เบฒเบ™โ€‹, เป‚เบ„เบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบเบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ„เบงเบ™โ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ™เบตเป‰โ€‹:

horton
โ”œโ”€โ”€ docker-compose.yml
โ””โ”€โ”€ horton
    โ”œโ”€โ”€ agents.py *
    โ”œโ”€โ”€ alphavantage.py *
    โ”œโ”€โ”€ app.py *
    โ”œโ”€โ”€ config.py
    โ”œโ”€โ”€ database
    โ”‚   โ”œโ”€โ”€ connect.py
    โ”‚   โ”œโ”€โ”€ cruds
    โ”‚   โ”‚   โ”œโ”€โ”€ base.py
    โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
    โ”‚   โ”‚   โ””โ”€โ”€ security.py *
    โ”‚   โ””โ”€โ”€ __init__.py
    โ”œโ”€โ”€ __init__.py
    โ”œโ”€โ”€ records.py *
    โ””โ”€โ”€ tasks.py *

*เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™ เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เปเบ•เบฐเบกเบฑเบ™เป€เบ—เบทเปˆเบญ, เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเป€เบ›เบปเปˆเบฒ.**

เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡. เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™, เบ‚เบฝเบ™ config เปเบฅเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš mongodb. เบ‚เป‰เบญเบเบˆเบฐเบšเปเปˆเบชเบฐเบซเบ™เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเป€เบ•เบฑเบกเบ‚เบญเบ‡เป„เบŸเบฅเปŒเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบก, เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบกเบฑเบ™เบŠเบฑเบเบŠเป‰เบฒ, เปเบ•เปˆเบ‚เป‰เบญเบเบˆเบฐเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™.

เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเปเบฅเบฐ meta เบเปˆเบฝเบงเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ - pyproject.toml

เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ dependencies เปเบฅเบฐเบชเป‰เบฒเบ‡ virtualenv (เบซเบผเบทเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป‚เบŸเบ™เป€เบ”เบต venv เบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡เปเบฅเบฐเบเบฐเบ•เบธเป‰เบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก):

pip3 install poetry (ะตัะปะธ ะตั‰ั‘ ะฝะต ัƒัั‚ะฐะฝะพะฒะปะตะฝะพ)
poetry install

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ config.yml - เบ‚เปเป‰เบกเบนเบ™เบ›เบฐเบˆเปเบฒเบ•เบปเบงเปเบฅเบฐเบšเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบฅเบปเบš. เบ—เปˆเบฒเบ™เบ—เบฑเบ™เบ—เบตเบชเบฒเบกเบฒเบ”เบงเบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบš alphavantage เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เปเบฅเป‰เบง, เปƒเบซเป‰เป€เบฎเบปเบฒเบเป‰เบฒเบงเบ•เปเปˆเป„เบ› config.py โ€” เป€เบญเบปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบˆเบฒเบ config เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹. เปเบกเปˆเบ™เปเบฅเป‰เบง, เบ‚เป‰เบญเบเบชเบฒเบฅเบฐเบžเบฒเบš, เบ‚เป‰เบญเบเปƒเบŠเป‰ lib เบ‚เบญเบ‡เบ‚เป‰เบญเบ - sitri.

เป€เบกเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš Mongo, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ. เบ›เบฐโ€‹เบเบฒเบ” เบซเป‰เบญเบ‡เบฎเบฝเบ™เบฅเบนเบเบ„เป‰เบฒ เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เปเบฅเบฐโ€‹ เบซเป‰เบญเบ‡เบฎเบฝเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™ เบชเปเบฒเบฅเบฑเบš cruds, เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบก.

เบˆเบฐเบกเบตเบซเบเบฑเบ‡เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบ•เปเปˆเป„เบ›?

เบšเบปเบ”เบ„เบงเบฒเบกเบšเปเปˆเบเบฒเบงเบซเบผเบฒเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเปเบฎเบ‡เบˆเบนเบ‡เปƒเบˆเปเบฅเบฐเบเบฒเบ™เบเบฐเบเบฝเบก, เบชเบฐเบ™เบฑเป‰เบ™เบขเปˆเบฒเบ•เปเบฒเบ™เบดเบ•เบดเบ•เบฝเบ™เบ‚เป‰เบญเบ - เบ‚เป‰เบญเบเบชเบฑเบ™เบเบฒเบงเปˆเบฒเบžเบฒเบเบ•เปเปˆเป„เบ›เบˆเบฐเบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเบฎเบนเบšเบžเบฒเบš.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบžเบฒเบเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒ:

  1. เปƒเบซเป‰เบ‚เบฝเบ™เบฅเบนเบเบ„เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบชเปเบฒเบฅเบฑเบš alphavantage เปƒเบ™ aiohttp เบ”เป‰เบงเบเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบชเปเบฒเบฅเบฑเบšเบˆเบธเบ”เบชเบดเป‰เบ™เบชเบธเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™.
  2. เปƒเบซเป‰เบชเป‰เบฒเบ‡เบ•เบปเบงเปเบ—เบ™เบœเบนเป‰เบ—เบตเปˆเบˆเบฐเป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบซเบผเบฑเบเบŠเบฑเบšเปเบฅเบฐเบฅเบฒเบ„เบฒเบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ.

เบฅเบฐเบซเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™

เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบชเปˆเบงเบ™เบ™เบตเป‰

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster