Које је максимално оптерећење у захтевима по секунди које је најзахтевнија услуга обрађивала? Да ли је тачно да је то до 5–8 хиљада захтева по секунди?
Golang
// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan
Са којим базама података и другим системима за складиштење података сте радили?
// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan
У којем правцу бисте били заинтересовани за развој у смислу задатака и каријерног вектора?
Kako da ograničite broj gorutina tako da istovremeno ne radi više od 'threads' metoda Process? Ko će izvući zadatke iz kanala?
Зашто разматрате нове понуде и зашто сте напустили претходну компанију?
// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan
// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan
// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan
Ko čita rezultujući kanal i gde zatim piše rezultat tako da metoda Status može da mu pristupi?
// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan
На колико хостова или инстанција је радила услуга? Колико је контејнера покренуто?
Implementirajte metodu Queue
Kako implementirati metodu Status za dobijanje stanja zadatka po ID?
type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr obsahuje ip:port konkrétneho inštancie func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs obsahujú adresy všetkých vyvažovaných inštancií 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(&bests.inflight){ best = entry } } return best }
// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan
Implementirajte metodu Queue
// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan
// тражећи најбоље -- ??? // ако не пронађете, упоредите inflight