Sobes.tech

Golang

Које је максимално оптерећење у захтевима по секунди које је најзахтевнија услуга обрађивала? Да ли је тачно да је то до 5–8 хиљада захтева по секунди?

118

// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan

117

Са којим базама података и другим системима за складиштење података сте радили?

116

// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan

111

У којем правцу бисте били заинтересовани за развој у смислу задатака и каријерног вектора?

108

Kako da ograničite broj gorutina tako da istovremeno ne radi više od 'threads' metoda Process? Ko će izvući zadatke iz kanala?

106

Зашто разматрате нове понуде и зашто сте напустили претходну компанију?

104

// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan

94

// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan

92

// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan

90

Ko čita rezultujući kanal i gde zatim piše rezultat tako da metoda Status može da mu pristupi?

90

// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan

90

На колико хостова или инстанција је радила услуга? Колико је контејнера покренуто?

88

Kako implementirati metodu Status za dobijanje stanja zadatka po ID?

72

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 }

68

// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan

67

// kod za funkciju best() // sa obradom grešaka ako backend nije dostupan

61

// тражећи најбоље -- ??? // ако не пронађете, упоредите inflight

50
/11