[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-mikroservisy-chto-takoe-service-discovery-i-kak-ono-rabotaet":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},826,"chto-takoe-service-discovery-i-kak-ono-rabotaet",23,"mikroservisy","Микросервисы","🔗","Что такое Service Discovery и как оно работает?","Service Discovery — это механизм, позволяющий микросервисам автоматически находить друг друга в сети без жёсткого указания IP-адресов и портов.\n\n> Аналогия из жизни: Service Discovery — это как телефонный справочник. Вместо того чтобы помнить номер каждого отдела, вы звоните на ресепшен (реестр), называете имя отдела и получаете актуальный номер.\n\n### Два подхода\n\n| Подход | Как работает | Пример |\n|---|---|---|\n| Client-Side Discovery | Клиент запрашивает реестр и сам выбирает экземпляр | Netflix Eureka |\n| Server-Side Discovery | Запрос идёт через балансировщик, который обращается к реестру | Kubernetes DNS, AWS ELB |\n\n\u003Cdetails>\u003Csummary>Netflix Eureka (Client-Side Discovery)\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Eureka Server\n@SpringBootApplication\n@EnableEurekaServer\npublic class EurekaServerApplication {\n    public static void main(String[] args) {\n        SpringApplication.run(EurekaServerApplication.class, args);\n    }\n}\n```\n\n```yaml\n# Eureka Server — application.yml\nserver:\n  port: 8761\neureka:\n  client:\n    register-with-eureka: false\n    fetch-registry: false\n```\n\n```java\n\u002F\u002F Микросервис-клиент (payment-service)\n@SpringBootApplication\n@EnableDiscoveryClient\npublic class PaymentServiceApplication {\n    public static void main(String[] args) {\n        SpringApplication.run(PaymentServiceApplication.class, args);\n    }\n}\n```\n\n```yaml\n# Клиент — application.yml\nspring:\n  application:\n    name: payment-service\neureka:\n  client:\n    service-url:\n      defaultZone: http:\u002F\u002Feureka-server:8761\u002Feureka\u002F\n  instance:\n    prefer-ip-address: true\n```\n\n\u003C\u002Fdetails>\n\n### Consul\n\nConsul — Service Discovery + Key-Value Store + Health Checks. Более зрелое решение для production:\n\n```yaml\nspring:\n  cloud:\n    consul:\n      host: consul-server\n      port: 8500\n      discovery:\n        service-name: payment-service\n        health-check-interval: 10s\n```\n\n### Kubernetes DNS\n\nЕсли микросервисы работают в Kubernetes, Service Discovery встроено:\n\n```yaml\napiVersion: v1\nkind: Service\nmetadata:\n  name: payment-service\nspec:\n  selector:\n    app: payment-service\n  ports:\n    - port: 8080\n# Другие сервисы обращаются по имени: http:\u002F\u002Fpayment-service:8080\n```\n\nВ Kubernetes-среде часто отказываются от Eureka\u002FConsul в пользу встроенного DNS, что упрощает архитектуру.\n\n> **На собеседовании:** покажите, что знаете оба подхода (client-side и server-side), и что в Kubernetes Service Discovery встроено через DNS. Частая ошибка — рассказывать только про Eureka, не упомянув Kubernetes.","","middle",[15],"microservices",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":20,"featuredSnippetReady":23},"Что такое Service Discovery и как оно работает? — Gymterview","Service Discovery — это механизм, позволяющий микросервисам автоматически находить друг друга в сети без жёсткого указания IP-адресов и портов.","Service Discovery — это механизм, позволяющий микросервисам автоматически находить друг друга в сети без жёсткого указан",[15,13],true]