Введение
Когда услуг становится все больше и больше, постепенно появляются такие проблемы, как оценка емкости и растрата небольших сервисных ресурсов.В это время необходимо добавить диспетчерский центр для управления емкостью кластера в режиме реального времени на основе давления доступа и предоставления коэффициент использования кластера. Среди них центр планирования ресурсов и управления для улучшения использования машин является ключевым.
2. Введение в Даббо
2.1 Концепция
Dubbo — это инфраструктура распределенных сервисов проекта Alibaba с открытым исходным кодом. Он стремится предоставлять высокопроизводительные и прозрачные решения для удаленного вызова RPC, а также решения для управления сервисами SOA.
2.2 Принцип
Описание вызывающих отношений:
1) 服务容器启动、加载和运行服务提供者;
2) 服务提供者在启动时,向注册中心注册自己提供的服务;
3) 服务消费者在启动时,向注册中心订阅自己所需的服务;
4) 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更给消费者;
5) 服务消费者从地址列表中,基于软负载均衡算法选一台服务提供者进行调用,如果调用失败再选另一台;
6) 服务消费者和服务提供者在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
Описание роли узла
узел | Описание роли |
---|---|
Container | работающий сервисный контейнер |
Provider | Поставщик услуг, предоставляющий услугу |
Consumer | Потребитель службы, вызывающий удаленную службу |
Registry | Реестр для регистрации и обнаружения служб |
Monitor | Центр мониторинга, который считает звонок здесь и время вызова службы |
3. Быстрый старт
Dubbo использует метод полной конфигурации Spring для прозрачного доступа к приложению без какого-либо вмешательства API в приложение, просто используйте Spring для загрузки конфигурации Dubbo.
3.1 Установите реестр
Официально рекомендуется использовать Zookeeper в качестве центра регистрации, поэтому этот тест использует Zookeeper и размещает его на виртуальной машине с IP-адресом 192.168.2.14.
# 解压和转移目录
tar -zxvf zookeeper-3.4.8.tar.gz -C /usr/
cd /usr
mv zookeeper-3.4.8 zookeeper
# 设置配置文件
cd /usr/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
# 启动 zookeeper
/usr/zookeeper/bin/zkServer.sh start
# 查看 zookeeper 运行状态,如果出现 Mode: standalone 说明运行成功
/usr/zookeeper/bin/zkServer.sh status
3.2 Поставщики услуг
Создайте проект Maven (веб-проект с именем Dubbo-Service).
конфигурация pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.light</groupId>
<artifactId>dubbo-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.9</version>
</dependency>
</dependencies>
</project>
Конфигурация web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>dubbo-service</display-name>
<!-- spring容器 start -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-dubbo.xml</param-value>
</context-param>
<!-- spring容器 end -->
</web-app>
интерфейс:
public interface HelloService {
String sayHello(String name);
}
Класс реализации:
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String name) {
return "Hello," + name;
}
}
Конфигурация applicationContext-dubbo.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="hello-demo"/>
<dubbo:registry address="zookeeper://192.168.2.14:2181"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="com.light.dubbo.service.HelloService" ref="helloService"/>
<bean id="helloService" class="com.light.dubbo.service.impl.HelloServiceImpl"/>
</beans>
3.3 Потребители услуг
Создайте проект Maven (веб-проект с именем dubbo-consumer).
Конфигурация POM.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.light</groupId>
<artifactId>dubbo-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.9</version>
</dependency>
</dependencies>
</project>
Конфигурация web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>dubbo-consumer</display-name>
<!-- spring容器 start -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-dubbo.xml</param-value>
</context-param>
<!-- spring容器 end -->
<!-- springmvc容器 start -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- springmvc容器 end -->
</web-app>
Скопируйте интерфейс HelloService из проекта dubbo-service в этот проект (dubbo-consumer).
слой управления:
@Controller
public class HelloController {
@Autowired
private HelloService helloService;
@RequestMapping("hello")
@ResponseBody
public String hello(String name) {
return this.helloService.sayHello(name);
}
}
Конфигурация applicationContext-dubbo.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="hello-demo"/>
<dubbo:registry address="zookeeper://192.168.2.14:2181"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:reference interface="com.light.dubbo.service.HelloService"/>
</beans>
Конфигурация springmvc.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 只扫描含有@Controller注解的类 -->
<context:component-scan base-package="com.light.dubbo.controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<!-- 加载解析 @rquestMapping等注解的解析器 -->
<mvc:annotation-driven/>
</beans>
Сначала запустите проект поставщика услуг (8080), а затем запустите проект потребителя услуг (8081). Открытый доступ в браузереhttp://localhost:8081/hello?name=jackРезультат выглядит следующим образом:
4. Мониторинг
4.1 Получить исходный код
git clone --branch dubbo-2.6.0 https://github.com/alibaba/dubbo.git
После завершения загрузки используйте инструмент IDE, чтобы импортировать его подпроект dubbo-sample\dubbo-monitor-sample для компиляции и упаковки. После упаковки сжатый файл dubbo-monitor-simple-2.6.0-assembly.tar.gz будет сгенерирован в целевом каталоге проекта.
4.2 Изменить конфигурацию
1) Разархивируйте архив dubbo-monitor-simple-2.6.0-assembly.tar.gz и измените dubbo-monitor-simple-2.6.0\conf\dubbo.properties:
dubbo.registry.address=zookeeper://192.168.2.14:2181
2) В файле конфигурации поставщика услуг добавьте:
<!-- 注册中心自动查找监控服务 -->
<dubbo:monitor protocol="registry"/>
Наконец-то запустил dubbo-monitor-simple-2.6.0\bin\start.bat. Открытый доступ в браузереhttp://localhost:8080/, эффект следующий:
5. Консоль управления
Dubbo предоставляет набор консолей управления для онлайн-сервисов управления. Консоль управления представляет собой внутреннюю версию Alibaba. Часть с открытым исходным кодом в основном включает в себя: правила маршрутизации, динамическую настройку, деградацию услуг, контроль доступа, регулировку веса и балансировку нагрузки.
5.1 Получить работающий проект
В исходном коде duboo, загруженном в Разделе 4, его подпроект dubbo-admin импортируется через инструмент IDE для компиляции и упаковки.
После упаковки сжатый файл dubbo-admin-2.6.0.war будет сгенерирован в целевом каталоге проекта.
5.2 Изменить конфигурацию
Скопируйте и вставьте файлы и папки из dubbo-admin-2.6.0.war в корневой каталог tomcat и измените содержимое файла webapps\ROOT\WEB-INF\dubbo.properties:
dubbo.registry.address=zookeeper://192.168.2.14:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
Среди них в конфигурации задано 2 пользователя: root и guest.
Наконец запустите контейнер tomcat и откройте браузер для доступаhttp://localhost:8080/, страница просит ввести аккаунт и пароль, эффект после входа следующий:
6. Ссылки
- Автор этой статьи: moonlightL
- Ссылка на эту статью: woohoo.ext light.com/2018/02/22/…
- Уведомление об авторских правах:Все статьи в этом блоге являются оригинальными, если не указано иное.CC BY-NC-SA 4.0соглашение. Для перепечатки, пожалуйста, укажите исходную ссылку и автора и другую соответствующую информацию в четкой позиции в начале статьи, четко укажите изменение (если таковое имеется) и сообщите об этом по электронной почте и другими способами, спасибо за сотрудничество !