В предыдущих статьях мы представили микросервисы и узнали о шлюзах микросервисов. Далее давайте узнаем о центре регистрации микросервисов. Что такое реестр?Теперь каждый из наших микросервисов развертывается на независимой машине или докере, каждый с независимым IP-адресом, поэтому обнаружение службы в основном достигается каким-то образом.IP-адрес развертывания службы. Когда служба A вызывает службу B, если она использует для вызова режим микрослужбы, ей необходимо обратиться к реестру, чтобы получить IP-адрес и порт машины, на которой развернута служба B, прежде чем вызывать службу B. Поэтому вполне возможно, что реестр очень важен во всей системе микросервисов. ZooKeeper, о котором мы часто слышим, является одним из компонентов, которые могут реализовать обнаружение служб, включая eureka, компонент обнаружения служб, предоставляемый в системе springcloud. Сегодня мы узнаем о нако и почему мы хотим заменить эврику нако.
что такое накос
nacos — это приложение Alibaba с открытым исходным кодом, которое можно использовать в качестве компонента обнаружения служб и компонента центра конфигурации. Давайте сначала взглянем на архитектуру и экологию nacos:Nacos = Spring Cloud Eureka (центр регистрации) + Spring Cloud Config (центр конфигурации) Nacos можно интегрировать с Spring, Spring Boot, Spring Cloud и заменить Spring Cloud Eureka, Spring Cloud Config. Коммерческим продуктам Али соответствуют ACM и EDAS.
- Динамические изменения конфигурации реализуются через Nacos Server и spring-cloud-starter-alibaba-nacos-config.
- Зарегистрируйтесь и найдите службы через Nacos Server и spring-cloud-starter-alibaba-nacos-discovery.
использование нако
Используйте Nacos для регистрации и обнаружения служб
Связи и функции центра регистрации во всей системе микросервиса, как показано на следующем рисунке, простой процесс заключается в том, что поставщик услуг начинает регистрироваться в nacos, сообщает nacos мой IP и порт, а затем потребитель услуг получает сообщение синхронизации, соответствующее nacos, и тогда потребитель получает IP-адрес и порт незнакомой машины провайдера.В микросервисах ZooKeeper, Eureka, Consul и Nacos можно использовать в качестве центров регистрации для сравнения друг с другом:Как показано на рисунке выше, nacos поддерживает режимы как AP, так и CP. Он выбирает временный и постоянный в соответствии с регистрацией службы, чтобы решить, переходить ли в режим AP или в режим CP. В моем понимании он поддерживает режим CP, который должен быть настроить центральный кластер, поскольку nacos может действовать как центр регистрации и центр конфигурации, поскольку информация о его центре конфигурации хранится в nacos, если один из nacos зависает, информация о конфигурации не была синхронизирована, может возникнуть несогласованность конфигурации. В настоящее время Nacos поддерживает использование отчетов пульса для временных экземпляров для поддержания активности. Период по умолчанию для отправки пульса составляет 5 секунд. Сервер Nacos установит экземпляр как неработоспособный через 15 секунд отсутствия пульса и удалит временный экземпляр, когда он не получает сердцебиение в течение 30 секунд.
представление:
Обнаружение службы Nacos (3 узла)
- Количество сервисов под мощностью измерения давления может достигать 60 Вт, количество зарегистрированных экземпляров может достигать 110 Вт, а работа кластера продолжает оставаться стабильной, оправдывая ожидания;
- TPS экземпляра регистрации/запроса достигает более 13 000, а интерфейс соответствует ожиданиям;
Центр конфигурации Nacos
- Существует разница между временем публикации и мониторинга, и изменения конфигурации в основном можно отслеживать в течение 100 мс.
процесс реестра конфигурации nacos
(1) Скачать накос (GitHub.com/alibaba/вывезти…
- Linux/Unix/Mac: sh startup.sh -m автономный
- Windows: cmd startup.cmd -m автономный
Сценарий startup.sh находится в каталоге bin после распаковки Nacos. Здесь мы в основном представляем комплексное использование Spring Cloud и Nacos. После завершения запуска посетите:http://127.0.0.1:8848/nacos/, вы можете войти на страницу управления службой Nacos следующим образом: Вот интерлюдия маленького друга, который создал службу общественного благосостояния для всеобщего пользования. Я не знаю, можно ли ее использовать сейчас. Вы можете попробовать. Я пользовался ею раньше. Служба общественного благосостояния Nacos: Консоль Nacos
- адрес:Это cos. Brother space.com/that cos/index…
- И учетная запись, и пароль: nacos
Конфигурация использования клиента
- Используйте службу реестра: spring.cloud.nacos.discovery.server-addr=nacos.didispace.com:80
- Используйте службу центра конфигурации: spring.cloud.nacos.config.server-addr=nacos.didispace.com:80
(2) Создайте приложение для доступа к центру регистрации Nacos.
- поставщик услуг
- Создайте приложение Spring Boot, которое можно назвать: alibaba-nacos-discovery-server.
- Отредактируйте pom.xml и добавьте необходимые зависимости.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
Обязательно обратите внимание сюда: При интеграции обязательно обращайте внимание на требования к версии и соответствиеКогда пакет представлен, это официальный springcloud и alibaba, Если вы используете его, постарайтесь убедиться, что он не перепутан.Как показано на рисунке выше, если вы используете springboot1.x, вам необходимо использовать версию 1.5.0.Если вы используете springboot2.x, вам необходимо использовать версию 2.0.0 или выше.3. Добавьте аннотацию @EnableDiscoveryClient в класс запуска и предоставьте интерфейс API.
@EnableDiscoveryClient
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
@Slf4j
@RestController
static class TestController {
@GetMapping("/hello1")
public String hello1(@RequestParam String name) {
log.info("name = " + name);
return "hello1: " + name;
}
}
}
- Настраивается в yml или свойствах
spring.application.name=alibaba-nacos-discovery-server
server.port=8001
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
- Запускаем сервис и видим в консоли или логе следующее, что значит регистрация прошла успешно
INFO 18473 --- [main] o.s.c.a.n.registry.NacosServiceRegistry : nacos registry, alibaba-nacos-discovery-server 10.11.24.69:8001 register finished
Посетив только что адрес страницы, вы можете увидеть следующее:
- потребитель услуг
- Создайте приложение Spring Boot, которое можно назвать: alibaba-nacos-discovery-client-consumer.
- Отредактируйте зависимости в pom.xml, как указано выше.
- Примените аннотированный основной класс и используйте LoadBalancerClient для вызова интерфейса службы.
@EnableDiscoveryClient
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
@Slf4j
@RestController
static class TestController {
@Autowired
LoadBalancerClient loadBalancerClient;
@GetMapping("/test1")
public String test1() {
// 通过spring cloud common中的负载均衡接口选取服务提供节点实现接口调用
ServiceInstance serviceInstance = loadBalancerClient.choose("alibaba-nacos-discovery-server");
String url = serviceInstance.getUri() + "/hello1?name=" + "lalalala";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(url, String.class);
return "返回结果是 : " + result;
}
}
}
Конфигурация yml такая же, как и у поставщика услуг, после запуска потребителя мы несколько раз запрашиваем интерфейс test1 и обнаруживаем, что ip вызывающего поставщика услуг отличается, что косвенно означает, что при получении экземпляра службы через Интерфейс LoadBalancerClient, реализован сервис-провайдер Балансировка нагрузки инстансов.
Как общаться между сервисами
- Использование RestTemplate
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
- Использование веб-клиента
@Bean
@LoadBalanced
public WebClient.Builder loadBalancedWebClientBuilder() {
return WebClient.builder();
}
- Используйте притворство (рекомендуется)
@FeignClient("alibaba-nacos-discovery-server")
public interface AaService{
@GetMapping("/hello1")
String hello1(@RequestParam(name = "name") String name);
}
Когда вам нужно его использовать, вам нужно всего лишь внедрить объект AaService в соответствующее место вызова и напрямую вызвать метод hello1. На самом деле, используем ли мы RestTempalte, WebClient или Feign, похоже, не имеет значения, использую ли я Nacos или нет? Независимо от того, используете ли вы Eureka или Consul, для реализации вызова службы используется один и тот же метод.Для Spring Cloud, даже если мы заменим Nacos в качестве нового реестра службы, это фактически не повлияет на наш код уровня приложения. Так почему же Spring Cloud может предоставить нам такой идеальный опыт кодирования? На самом деле, это полностью связано с инкапсуляцией Spring Cloud Common, потому что он сделал хорошие абстракции в регистрации и обнаружении сервисов, балансировке клиентской нагрузки и т. д., и приложения верхнего уровня полагаются на эти абстрактные интерфейсы, а не на определенные Реализация определенного промежуточного программного обеспечения. Поэтому в Spring Cloud мы можем легко переключать промежуточное ПО для управления услугами. В следующей статье мы продолжим вводить соответствующую конфигурацию и pit nacos в качестве еще одной функции config. Если вы хотите узнать больше, пожалуйста, обратите внимание~"Стек ИТ-технологий", я буду ждать вас там~~~