Det finns dussin lösningar för att utföra upptäcktstjänster i Mesos-miljö.
Vi kan dela in dem i tre grupper genom hur kunden hittar tjänster:
- Proxybaserad
- När det sitter proxy mellan klienter och tjänst, t.ex. HAProxy (marathon-lb är baserad på det), fabio, traefik, nixy) som tar hand om lastbalansering av dina tjänster baserat på HTTP-sökväg, header, domän e.t.c. Denna lösning är lätt att utveckla och ger möjlighet att justera lastbalansering efter önskemål. Å andra sidan lägger vi till ytterligare hopp och som proxy har vi MitM-situation.
- DNSlike (fråga en speciell välkänd slutpunkt om tjänstens plats)
- Programvarudefinierat nätverk - vi kan använda IP per behållare med SDN så att varje behållare exponeras med unik IP och presenterar sina tjänster med standardportar 80 för HTTP, 443 för HTTPS och så vidare. Detta är mest avancerad och relativt ny teknik även om den använder vanlig gammal DNS för att hitta tjänstens IP. Det kan vara svårare att införa än proxy men kommer att fungera med alla typer av trafik.
- Tjänstepost - där varje behållare är registrerad i global DNS och klienten får sin IP och PORT med hjälp av DNS SRV-frågor. Consul Mesos DNS tillhandahåller denna typ av DNS-server. Även några andra protokoll är baserade på denna idé (ta en titt på Bonjure). Den försöker få det bästa av både SDN och proxy. Det är relativt enkelt att installera och det är protokollagnostiskt.
- Annat
- Allt som inte passar in i andra typer, t.ex. egenutvecklad lösning, etcd eller Eureka. Det kan vara mycket tight med infrastruktur och applikationer som ger vissa optimeringar. Det är värt att nämna att det finns några försök att använda DHT-baserad upptäcktstjänst - Meta Service Discovery
Du kan hitta mer information om verktyg som kan användas för att skapa Discovery Service här
Vi kan dela upp Discovery Services efter hur de är fyllda med tjänsteposter:
- Pooling
- Mesos/Marathon frågas regelbundet om tillstånd. Så här fungerar Mesos DNS. Detta är den enklaste metoden men kommer att orsaka enorma fördröjningar mellan servicestart/stopp och förändringar kommer in i tjänstens upptäckt. Detta kan minimeras genom att använda hälsokontroll.
- Händelsebaserad
- Marathon har förmågan att driva evenemang med information om tillståndsändringar (det finns initiativ att inkludera evenemangsbuss int Mesos också — designdokument. På så sätt fungerar marathon-lb. Liknande jobb utförs av marathon-konsul men data skickas till konsul.
- I app/behållare
- Ovanstående lösningar är asynkrona så det kan finnas en tidsperiod när ditt tjänstupptäcktstillstånd är inaktuellt, t.ex. tjänsten startade men är inte redo att betjäna förfrågningar, eller så har tjänsten precis dött. Även med healtcheck kunde vi inte anta att allt händer med 0 driftstopp. Lösningen för att minimera driftstopp är att låta applikationen registrera sig själv när den är redo att betjäna förfrågningar och avregistrera innan den slutar (aka graciös avstängning).