微服务带来最大的好处就是把整个大项目分割成不一样的服务,运行在不一样服务器上,实现解耦和分布式处理。微服务虽然有不少好处,可是也会有很差的一方面。任何事物都会有两面性,在微服务里面运维会是一个很大的难题,若是有一天咱们的服务数量很是的多,而后咱们又不知道哪个服务在什么机器上。可能会有人说这部分直接写在程序的配置里面就行了,当咱们服务少的时候是能够这么作的,也容许这么作,可是在实际当中咱们要尽可能避免这么作,好比说咱们某一个服务,地址换了,那么咱们设计的相关代码就得修改从新部署;又或者说咱们有一天上线一个新服务或者下线一个服务,这时候咱们又得修改程序代码,这是很是不合理的作法。那么有没有什么能够解决这样的问题呢?这里就须要用到咱们的服务注册和发现了。html
上面图片咱们能够看到在没有服务注册发现的时候一个调用者须要维护多个服务的ip和端口,这是很是很差的作法,当咱们服务进行调整的时候就有可能致使服务调用失败,还有服务器更换服务器,上下新服务,都会受到影响。未来某一个服务节点出现问题,排查对于程序和运维人员来讲都是一场很大的灾难,由于不知道哪个节点出了问题,须要每一台服务器的去排查。node
而当咱们有使用服务注册发现以后的结构体是什么样子的呢?linux
咱们从上图能够发现,当咱们有注册中心以后调用者不须要本身去维护全部服务的信息了,仅须要向注册中心请求获取服务,就能够拿到想要的服务信息。这样当咱们的服务有所调整,或者上线下线服务,都要能够轻松操做,而且能够在注册中间检查到服务的健康状况,帮助运维人员快速定位到故障的服务器。web
在Swoft这个框架里面推荐咱们使用的就是consul,consult是一个使用go写的服务注册、发现、配置管理系统。
Agent:Agent是Consul集群中一个常驻后台的程序。Agent有两种模式,一种是服务端,一种是客户端。全部Agent均可以运行DNS或者HTTP接口,而且负责检查服务是否存活,和保持服务同步。
Client:Client是一种Agent的运行模式,把全部RPC转发到Agent服务器的代理者,客户端会在后台有一个用最小带宽消耗把请求转发到后端的Agent服务,减轻Agent服务器的压力。
Server:Server是另外一种Agent的运行模式,包括使用Raft算法处理数据,维护集群状态,响应RPC的请求,与其余集群的server交换数据或者远程数据中心。
RPC:远程过程调用,这是一种容许客户端发出服务器请求的请求/响应机制。
在consult里面有不少组件,在这里咱们暂时使用一个组件就够了就是agent,对于consul的安装也是很是简单的毕竟只有一个二进制文件包,因此直接下载就可使用了。算法
一、登陆官网进行下载,https://www.consul.io/downloads.htmljson
wget https://releases.hashicorp.com/consul/1.2.1/consul_1.2.1_linux_amd64.zip
unzip consul_1.2.1_linux_amd64.zip
二、设置环境变量,若是不设置能够直接把consul执行文件移动到/usr/bin目录下bootstrap
mv consul /usr/bin
三、Server配置后端
这种方式适合用于搭建服务调试使用
consul agent -bootstrap-expect 1 -server -data-dir /data/consul -node=swoft01 -bind=0.0.0.0 -config-dir /etc/consul.d -enable-script-checks=true -datacenter=sunny -client=0.0.0.0 -ui
能够经过 http://192.168.1.100:8500 查看服务信息
这种方式适用于生产环境
consul agent -bootstrap-expect 2 -server -data-dir /data/consul -node=swoft01 -bind=0.0.0.0 -client=0.0.0.0 -config-dir /etc/consul.d -enable-script-checks=true -datacenter=sunny -client=0.0.0.0
上面这个命令是以服务端模式启动一个代理,进群有两个扩展机器,设置集群持久化数据存放在/data/consul0下面,节点名称是swoft01,绑定0.0.0.0地址,服务配置文件存放在/etc/consul.d,开启检查心跳,数据中心的名称是dc1,可访问的客户端地址是0.0.0.0
consul agent -server -data-dir /data/consul -node=swoft02 -bind=0.0.0.0 -client=0.0.0.0 -config-dir /etc/consul.d -enable-script-checks=true -datacenter=sunny -join 192.168.1.100
服务器3,IP 192.168.1.120
consul agent -server -data-dir /data/consul -node=swoft03 -bind=0.0.0.0 -client=0.0.0.0 -config-dir /etc/consul.d -enable-script-checks=true -datacenter=sunny -join 192.168.1.100
以上服务器2和服务3使用 -join 加入集群,而且使用同一个数据名称sunny
四、Client配置浏览器
consul agent -ui -data-dir /data/consul -node=swoft04 -bind=0.0.0.0 -config-dir /etc/consul.d -enable-script-checks=true -datacenter=sunny -ui -client=0.0.0.0 -join 192.168.1.100
客户端若是不使用-server就是客户端模式运行,其余参数同上,服务端和客户端都启动了以后能够在浏览器输入 http://192.168.1.130:8500 来查看信息
查看集群成员服务器
consul members
查看集群信息
consul info
更多https://www.consul.io/docs/agent/options.html
-bootstrap-expect 数据中心中预期的服务器数。不该提供此值,或者该值必须与群集中的其余服务器一致。提供后,Consul将等待指定数量的服务器可用,而后引导群集。这容许自动选择初始领导者。这不能与传统-bootstrap标志一块儿使用。此标志须要在服务端模式下运行。
-server 以服务端模式启动
-data-dir 数据存放位置,这个用于持久化保存集群状态
-node 群集中此节点的名称。这在群集中必须是惟一的。默认状况下,这是计算机的主机名。
-bind 绑定服务器的ip地址
-config-dir 指定配置文件服务,当这个目录下有 .json 结尾的文件就会加载进来,更多配置能够参考https://www.consul.io/docs/agent/options.html#configuration_files
-enable-script-checks 检查服务是否处于活动状态,相似开启心跳
-datacenter 数据中心名称
-client 客户端可访问ip,包括HTTP和DNS服务器。默认状况下,这是“127.0.0.1”,仅容许环回链接。
-ui 开启web的ui界面
-join:加入到已有的集群中
关于consul更多的信息请你们移步到https://www.consul.io/