微服务架构下的服务治理
服务治理的背景:
- 如何协调线上运行的服务,以及保障服务的高可用性。
- 如何根据服务的访问情况合理调配服务器资源,提高机器利用率。
- 如何动态的对故障业务做降级、流量控制等。
- 对于大规模服务集群,服务地址的管理以及服务上下线的动态感知。
Apache Dubbo
- Dubbo是阿里巴巴内部使用的一个分布式服务治理框架。2012年开源。
- 2019年5月,Apache Dubbo正式从孵化器中毕业,成为Apache的顶级项目。
官网地址:http://dubbo.apache.org/
概念
Apache Dubbo是一个分布式服务框架,主要实现多个系统之间的高性能、透明化调用,简单来说就是一个RPC框架,与普通RPC框架不同的是,它提供服务治理功能,如服务注册、监控、路由、容错等。
架构图
Apache Dubbo 实现远程通信
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>3.0.4</version>
</dependency>
<?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://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="user-service"/>
<dubbo:registry address="N/A"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="org.example.service.IUserService" ref="userService"/>
<bean id="userService" class="org.example.service.impl.UserServiceImpl"/>
</beans>
dubbo:applicatoin 用来描述提供方的应用信息,比如:应用名称(必填)、维护人、版本等; dubbo:registrty 配置注册中心地址,如果不需要注册中心,可以设置为N/A。 dubbo:protocol 配置服务提供者的协议,比如Hessian、WebService、Thrift等。 dubbo:service 描述需要发布的服务接口。
dubbo的高级应用
dubbo集群容错
dubbo默认提供6中容错模式,默认Failover Cluster。
容错模式 | 说明 |
---|
Failover Cluster | 失败自动切换 ,默认重试两次 | Failfast Cluster | 快速失败,立即报错 | Failsafe Cluster | 失败安全,忽略异常 | Failback Cluster | 失败后自动回复 | Forking Cluster | 并行调用多个服务,其中一个成功就返回 | Broadcast Cluster | 广播调用所有的服务提供者 |
dubbo负载均衡
dubbo提供四种负载均衡策略,默认random;
- random :随机算法
- roundRobin: 轮询
- leastActive: 最少活跃调用数
- ConsistentHash: 一致性hash
SpringBoot集成Apache Dubbo
官方文档:https://github.com/apache/dubbo-spring-boot-project
Zookeeper
zookeeper安装
- 将下载好的安装包解压到指定目录,conf是存放配置文件的目录,bin是zookeeper提供的可执行脚本的目录。
- ${zookeeper_home)\conf目录下提供zookeeper的核心配置文件样例zoo_sample.cfg;要将zookeeper运行,需要将zoo_sample.cfg该名为zoo.cfg,内容暂时可以不改;
- 到/bin目录下,执行sh zkServer.sh start 启动服务;
- 启动服务之后,通过默认发布的2181端口访问;
zookeeper的特性
zookeeper的znode创建时需要指定节点的类型,节点类型分为:
- 持久化节点
- 临时节点
- 有序节点
3.5.3之后增加了两种节点类型,分别为:
- 容器节点:当容器节下的最后一个节点被删除是,容器节点自动删除;
- TTL节点:针对持久化节点或者持久化有序节点,可以设置一个存活时间,如果存活时间之内该节点没有任何修改且该节点没有任何子节点,超过存活时间后自动会被自动删除;
|