típus Response interfész {} típus Backend interfész { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr tartalmaz egy adott példány ip:port címét func NewBackend(addr string) *BackendImpl típus Balancer struktúra { // TODO backends []*BackendImpl index int mu sync.Mutex } var _ Backend = &Balancer{} func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { ha len(b.backends) == 0 { return nil, fmt.Errorf("A backends száma a szeletben 0") } b.mu.Lock() index := b.index ha b.index + 1 == len(b.backends) { b.index = 0 index = 0 } b.mu.Unlock() resp, err := b.backends[index].Invoke(ctx, req) return resp, err } // addrs tartalmazza az összes kiegyensúlyozott példány címét func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImpl, len(addrs))
Golang
Mit tud a Yandex MultiTrack programjáról?
API Gateway-hez egy Load Balancer, WebSocket-hez egy másik — összesen két LB a rendszerben?
Használta nyilvános felhőket? Ha igen, mely szolgáltatókkal és szolgáltatásokkal?
Hogyan dolgozik az architektúrán — van-e építész a csapatban, platforma, bizottság?
type Balancer struct { // TODO backends []*BackendImpl index int mu sync.Mutex N int K time.Duration } var _ Backend = &Balancer{} func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { if len(b.backends) == 0 { return nil, fmt.Errorf("Backends száma a slice-ben 0") } b.mu.Lock() index := b.index for b.backends[index].banned { b.index = (b.index + 1) % len(b.backends) index = b.index } b.index = (b.index + 1) % len(b.backends) b.mu.Unlock() backend := b.backends[index] resp, err := backend.Backend.Invoke(ctx, req) if err != nil && backend.countErrors < b.N { backend.mu.Lock() backend.countErrors += 1 if backend.countErrors == b.N { backend.banned = true go func() { time.Sleep(b.K) backend.mu.Lock() defer backend.mu.Unlock() backend.banned = false backend.countErrors = 0 }() } backend.mu.Unlock() } return resp, err } // addrs tartalmazza az összes kiegyensúlyozott példány címét func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImplF, len(addrs)) for _, addr := range addrs { implF := BackendImplF{ Backend: NewBackend(addr), } backends = append(backends, &implF) } }
Milyen gyorsan fog működni egy lineáris keresés az összes backenden magas RPS esetén (pl. 30 000 RPS és 10 backend)?
Hogyan ellenőrizhetjük gyorsan, hogy az ablakban minden karakter megtalálható-e (két térkép összehasonlítása)?
Mennyire aktívak a keresések? Lehet, hogy már vannak ajánlatok?
Hány ember vett részt a legnagyobb projektben, amin dolgoztál? Kevesebb mint tíz, tucat, száz?
/** :-))) :-(( "ab :-)" = "ab " "ab :-)))" = "ab " "ab :-)))(" = "ab (" "ab ):-)" = "ab )" ":-)" = "" **/ func deleteP(str string) string { n := len(str) res := make([]byte, 0, n) i := 0 for i < n { if str[i] == ':' && str[i+1] == '-' && (str[i+2] == ')' || str[i+2] == '(') { ch := str[i+2] i += 2 for i < n && str[i] == ch { i++ } } else { res = append(res, str[i]) } } return string(res) }
Mesélj részletesebben az első munkahelyedről 2019-től 2021-ig.
Mennyi hoszton futott a szolgáltatás, és hány példány indult el?
Mekkora volt az eddigi legnagyobb adatmennyiség, amellyel adatbázisokban dolgozott?
Vannak egyszerűbb és gyorsabb módszerek a terhelés kiegyensúlyozására, mint a legkevésbé terhelt backend kiválasztása?
Miért mennek a Message Service üzenetek közvetlenül a gRPC-n keresztül, nem pedig a Kafka-n keresztül?
Hogyan oldja meg a párhuzamos kérések korlátozásának problémáját egy több példányból álló elosztott rendszerben, ha a felhasználónak várnia kell, ahelyett hogy hibát kapna?
Keresse meg a szintaktikai hibákat a javított kódban
func countSubs(s string) int { result := 0 left := 0 hm := make(map[rune]int) for right := 0; right < len(s); right++ { hm[s[right]]++ for hm[s[right]] > 1 { hm[s[left]]-- if hm[s[left]] == 0 { delete(hm, s[left]) } left++ } result += (right - left + 1) } return result }
Implementáld a BulkCreateUsers módszert a proto fájl alapján: hozd létre a projektstruktúrát, az üzleti logikát, a repository-t és az SQL lekérdezéseket a SOLID elvek betartásával