Rumah > Artikel > tutorial komputer > Aliran acara dan sumber acara
Penstriman acara dan penyumberan acara ialah dua konsep yang berkaitan tetapi berbeza dalam seni bina dipacu acara.
Penstriman acara ialah proses menangkap dan merakam peristiwa secara berterusan yang berlaku dalam sistem. Peristiwa ini boleh diproses dan dianalisis serta-merta atau disimpan untuk analisis kemudian. Penstriman acara biasanya digunakan dalam sistem yang perlu memproses sejumlah besar data masa nyata, seperti transaksi kewangan atau platform media sosial.
Berikut ialah contoh ringkas penstriman acara dalam Go menggunakan sistem pemesejan Kafka yang popular:
package main import ( "context" "fmt" "github.com/segmentio/kafka-go" ) func main() { // 设置Kafka生产者以将事件发送到主题 writer := kafka.NewWriter(kafka.WriterConfig{ Brokers: []string{"localhost:9092"}, Topic: "my-topic", }) // 发送一些事件到主题 writer.WriteMessages(context.Background(), kafka.Message{ Key: []byte("key1"), Value: []byte("value1"), }, kafka.Message{ Key: []byte("key2"), Value: []byte("value2"), }, ) // 设置Kafka消费者以从主题读取事件 reader := kafka.NewReader(kafka.ReaderConfig{ Brokers: []string{"localhost:9092"}, Topic: "my-topic", }) // 从主题读取事件 for { msg, err := reader.ReadMessage(context.Background()) if err != nil { break } fmt.Printf("Received message: key=%s, value=%sn", string(msg.Key), string(msg.Value)) } }
Sumber acara ialah corak untuk membina sistem yang menyimpan semua perubahan dalam keadaan aplikasi sebagai urutan peristiwa. Peristiwa ini kemudiannya boleh digunakan untuk membina semula keadaan aplikasi pada bila-bila masa. Penyumberan acara sering digunakan dalam sistem yang memerlukan kebolehauditan, kebolehkesanan atau pematuhan, seperti sistem kewangan atau sistem penjagaan kesihatan.
Berikut ialah contoh mudah menggunakan storan acara dalam memori untuk sumber acara dalam Go:
package main import ( "fmt" ) type Event struct { Type string Data interface{} } type EventStore struct { events []Event } func (store *EventStore) Append(event Event) { store.events = append(store.events, event) } func (store *EventStore) GetEvents() []Event { return store.events } type Account struct { idstring balance int store *EventStore } func NewAccount(id string, store *EventStore) *Account { return &Account{ id:id, balance: 0, store: store, } } func (account *Account) Deposit(amount int) { event := Event{ Type: "deposit", Data: amount, } account.store.Append(event) account.balance += amount } func (account *Account) Withdraw(amount int) { if account.balance >= amount { event := Event{ Type: "withdraw", Data: amount, } account.store.Append(event) account.balance -= amount } } func (account *Account) GetBalance() int { return account.balance } func main() { store := &EventStore{} account := NewAccount("123", store) account.Deposit(100) account.Withdraw(50) account.Deposit(25) events := store.GetEvents() for _, event := range events { switch event.Type { case "deposit": amount := event.Data.(int) fmt.Printf("Deposited %dn", amount) case "withdraw": amount := event.Data.(int) fmt.Printf("Withdrew %dn", amount) } } fmt.Printf("Final balance: %dn", account.GetBalance()) }
Sumber acara ialah kaedah dengan merekodkan setiap pengubahsuaian kepada agregat sebagai acara dan menambahkannya pada aliran berterusan. Untuk membina semula keadaan akhir agregat, peristiwa ini perlu dibaca dalam urutan dan kemudian digunakan pada agregat. Ini berbeza dengan pengubahsuaian segera yang dilakukan dalam sistem cipta, baca, kemas kini dan padam (CRUD). Dalam sistem CRUD, sebarang perubahan kepada keadaan rekod disimpan dalam pangkalan data, pada asasnya mengatasi perkara yang sama
Koleksi versi terdahulu.
Selepas perubahan harga telah disimpan ke jadual Produk, hanya harga akan dikemas kini, manakala bahagian lain akan kekal tidak berubah. Walau bagaimanapun, pendekatan ini boleh mengakibatkan kehilangan harga sebelumnya dan konteks di sebalik perubahan, seperti yang ditunjukkan dalam Rajah 5.1.
Untuk mengekalkan maklumat termasuk harga baharu dan metadata utama (seperti sebab pelarasan), rekod perubahan akan disimpan sebagai acara dalam jadual Acara. Harga sebelumnya akan kekal tidak berubah untuk memastikan ia boleh diambil semula jika perlu.
Untuk mencapai sumber acara yang berkesan, adalah disyorkan untuk menggunakan kedai acara yang memberikan jaminan konsistensi yang kukuh dan menggunakan kawalan serentak yang optimistik. Dalam amalan, ini bermakna apabila berbilang pengubahsuaian berlaku serentak, hanya pengubahsuaian awal boleh dilampirkan pada strim. Pengubahsuaian seterusnya mungkin perlu dicuba semula atau mungkin gagal.
Atas ialah kandungan terperinci Aliran acara dan sumber acara. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!