Sobes.tech

Golang

Mekkora a maximális terhelés kérés/sec-ben, amit a legnagyobb terhelésű szolgáltatás kezelt? Igaz, hogy ez akár 5–8 ezer kérés/sec?

118

// kód a best() függvényhez // hibakezeléssel, ha nincs backend elérhető

117

Milyen adatbázisokkal és más adattároló rendszerekkel dolgozott?

116

// kód a best() függvényhez // hibakezeléssel, ha nincs backend elérhető

111

Milyen irányban érdekelne a fejlődés feladatok és karriervektor szempontjából?

108

Hogyan korlátozhatjuk a goroutine-ok számát úgy, hogy egyszerre ne fusson több, mint 'threads' Process módszer? Ki fogja kivonni a feladatokat a csatornából?

106

Miért fontolgat új ajánlatokat, és miért hagyta el a korábbi cégét?

104

// kód a best() függvényhez // hibakezeléssel, ha nincs backend elérhető

94

// kód a best() függvényhez // hibakezeléssel, ha nincs backend elérhető

92

Ki olvassa az eredményes csatornát, és hova írja az eredményt, hogy a Status módszer hozzáférhessen?

90

// kód a best() függvényhez // hibakezeléssel, ha nincs backend elérhető

90

// kód a best() függvényhez // hibakezeléssel, ha nincs backend elérhető

90

Milyen számú hoszt vagy példány működött a szolgáltatás? Hány konténer indult el?

88

Hogyan valósítsuk meg a Status metódust, hogy az ID alapján megkapjuk a feladat állapotát?

72

type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr egy adott példány ip:port címe func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs tartalmazza az összes kiegyensúlyozható példány címét func NewBalancer(addrs []string) *Balancer { data := make([]*backentry,len(addrs)) for i,addr := range addrs{ data[i] = &backentry{ backend: NewBackend(addr), inflight: 0, } } return &Balancer{backends:data} } func(b *Balancer)Invoke(ctx context.Context, req Request) (Response, error){ b.mu.Lock() entry := b.best() atomic.AddInt64(&entry.inflight,1) b.mu.Unlock() defer atomic.AddInt64(&entry.inflight,-1) return entry.backend.Invoke(ctx,req) } func(b *Balancer) best() *backentry{ var best *backentry for _,entry := b.backends{ if best == nil || atomic.LoadInt64(&entry.inflight) < atomic.LoadInt64(&best.inflight){ best = entry } } return best }

68

// kód a best() függvényhez // hibakezeléssel, ha nincs backend elérhető

67

// kód a best() függvényhez // hibakezeléssel, ha nincs backend elérhető

61

// a legjobb keresése -- ??? // ha nem találod, hasonlítsd össze inflight-tal

50
/11