Мне кажется в функции GetNextPeer вместо nil лучше возвращать error.
// GetNextPeer returns next active peer to take a connection
func (s *ServerPool) GetNextPeer() *Backend {
// loop entire backends to find out an Alive backend
next := s.NextIndex()
l := len(s.backends) + next // start from next and move a full cycle
for i := next; i < l; i++ {
idx := i % len(s.backends) // take an index by modding with length
// if we have an alive backend, use it and store if its not the original one
if s.backends[idx].IsAlive() {
if i != next {
atomic.StoreUint64(&s.current, uint64(idx)) // mark the current one
}
return s.backends[idx]
}
}
return nil
}
Тогда в функции lb вместо проверки на nil будет идиоматическая для Go проверка на error:
// lb load balances the incoming request
func lb(w http.ResponseWriter, r *http.Request) {
peer := serverPool.GetNextPeer()
if peer != nil {
peer.ReverseProxy.ServeHTTP(w, r)
return
}
http.Error(w, "Service not available", http.StatusServiceUnavailable)
}
Интересная статья, спасибо!
На какой технологии реализован Data-bus?
Каким образом происходит отправка данных в Data-bus? (для Apache Kafka клиентскую библиотеку подключать надо, для Data-bus тоже?)
Интересная подборка, попробуем что-нибудь из этого прочитать.
Разделяю боль героев рассказа 🙁. У меня есть подозрения, что такое происходит из-за не четких границ между обязанностями 🙂
Не вижу в статье ничего относящего к 2022 году
Тогда в функции lb вместо проверки на nil будет идиоматическая для Go проверка на error:
Используете ли вы при написании Сервисов спеку OSB www.openservicebrokerapi.org?
На какой технологии реализован Data-bus?
Каким образом происходит отправка данных в Data-bus? (для Apache Kafka клиентскую библиотеку подключать надо, для Data-bus тоже?)
текст:
ссылка на The Twelve-Factor ведёт на SOLID.