微服务实施笔记(四)——部署服务发现
微服务实施笔记(四)——部署服务发现
上回书搭建了3个待用的服务。用来模拟实际中的服务。接下来就是把这几个服务注册到一个服务管理中心了。
使用consul搭建服务管理中心
在这里选用consul来做服务管理中心。consul是采用golang开发的,CAP中满足CP的一款服务管理系统。选择它的原因就是它足够简单。简单到什么程度呢,一行代码搞定:
sudo docker run -d \-e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \--name=node1 -p 8300:8300 -p 8301:8301 -p 8301:8301/udp \-p 8302:8302/udp -p 8302:8302 -p 8400:8400 -p 8500:8500 \-p 53:53/udp -h consul_node1 \consul agent -server -bootstrap \-node=node1 -client 0.0.0.0 -ui
执行后在浏览器中查看 http://localhost:8500/ui
就是如此简单,而且自带ui。好的软件都应如此简单。
Consul 四大特性
- Service Discovery (服务发现)
- Health Check (健康检查)
- Multi Datacenter (多数据中心)
- Key/Value Storage(KV键值存储)
下文在介绍如何利用这四大特性。
这下,待发现的服务有了,可以注册服务的管理中心也有了,接下来怎么办呢,怎么把服务注册到服务中心呢。
自动注册服务
服务注册可以分为“自注册” 与 “第三方注册”两种方式。
以下内容引用自http://blog.csdn.net/jek123456/article/details/78083618
1.自注册:服务内部启动客户端,连接注册中心,写入服务信息。
好处:
- 没有引入第三方,进程数量少,少依赖。
问题:
- 服务代码对注册中心进行了硬编码,若更换了注册中心,服务代码也必须跟着调整;
- 注册中心必须与每个服务都保持通信,来做心跳检测。如果服务很多时,对注册中心也是一种额外的开销;
2.第三方注册(本文采用方式):采用协同进程的方式,监听服务进程的变化,将服务信息写入注册中心。
- 好处:做到了服务与注册中心的解耦,对服务而言,完成了服务的自动化注册;
- 问题:协同进程本身也要考虑高可用,否则将成为单点故障的风险点;
第三方注册需要一个注册工具,这里使用Registrator
Registrator:一个由Go语言编写的,针对docker使用的,通过检查本机容器进程在线或者停止运行状态,去注册服务的工具。所以我们要做的实验,所有的工具都是在docker上运行的,就是因为registrator是通过检查docker容器的状态来判断服务状态的,这样就和我们的代码实现完全解耦了,对上层透明化,无感知。它有如下特点
- 通过docker socket直接监听容器event,根据容器启动/停止等event来注册/注销服务
- 每个容器的每个exposed端口对应不同的服务
- 支持可插拔的registry backend,默认支持Consul, etcd and SkyDNS
- 自身也是docker化的,可以容器方式启动
- 用户可自定义配置,如服务TTL(time-to-live)、服务名称、服务tag等
依然是一行代码搞定:
docker run -d \--name=registrator \--net=host \--volume=/var/run/docker.sock:/tmp/docker.sock \gliderlabs/registrator:latest \consul://localhost:8500
这样启动的服务会有一个问题,就是registrator无法准确取到IP地址,所以最好把本地IP地址指定给registrator。方法就是使用docker-compose。新建一个docker-compose.yml文件,内容如下:
version: '2'
services:registrator1:image: gliderlabs/registratorrestart: alwaysnetwork_mode: "host"name: registratorvolumes:- /var/run/docker.sock:/tmp/docker.sockcommand: "-ip 192.168.1.231 consul://192.168.1.231:8500"
其中最后一行ip后面就是容器运行的宿主机的本地ip地址。然后在docker-compose.yml文件所在目录下执行docker-compose ip -d命令。
运行之后刷新下浏览器看看:
注册成功。但是这里只用到了consul四大特性中的第一个服务发现,它的另一个重要特性健康检查并没有被利用起来。健康检查会按照配置的时间间隔和方式检查服务的健康状态。这样就可以及时的剔除无法对外提供服务的服务了。那么怎么为服务配置健康检查呢?修改服务程序本身当然可以,但是这样的话就违背解耦合的初衷了。引入docker层就是为了解耦合用的,所以可以通过对dockerfile的配置来实现。
怎么用呢,可以使用dockerfile的lable或者环境变量来进行配置。
对于server1服务的docker配置如下(详细可以参考https://gliderlabs.com/registrator/latest/user/services/ 和 https://gliderlabs.com/registrator/latest/user/backends/):
以下是修改后的server1的daockerfile,其中通过环境变量增加了支持consul服务特性的配置项。
FROM microsoft/aspnetcore:2.0
LABEL Name=lizpen/server1 Version=0.0.1
#以下环境变量用来定义consul的服务属性
ENV SERVICE_NAME=server1
ENV SERVICE_ID=server1.001
ENV SERVICE_TAGS=server1
#以下环境变量用来定义consul的服务检查特性
ENV SERVICE_CHECK_HTTP=/api/values
ENV SERVICE_CHECK_INTERVAL=15s
ENV SERVICE_CHECK_TIMEOUT=10s ARG source=.
WORKDIR /app
EXPOSE 3000
COPY $source/bin/Debug/netcoreapp2.0/ .
ENTRYPOINT dotnet server1.dll
先删除掉正在运行的容器,vscode侧边栏中的docker工具提供了这些功能,及其好用:
然后重新build docker镜像,并运行生成好的镜像。然后刷新consul的管理网站可以看到tags和健康检查都上线了。
至此,服务发现在单机运行成功。
接下来就是把这套东西部署到搭建好的虚拟环境中去。
微服务实施笔记(四)——部署服务发现相关推荐
- 微服务实施笔记(五)——生产环境部署
上回书,把服务注册的整个流程在本地单机上完整的走完了,接下来就要把这些东西部署到虚拟的生产环境中去了.整个服务注册的流程都是依靠docker进行打包和部署的.当要发布到生产环境中的时候就涉及到dock ...
- 微服务实施笔记(一)
微服务架构可以说是目前最流行的架构了,我终于也要上这条船了,为什么要上这条船呢,只是为了时尚吗?呵呵,当然不是,上这条船是为了实用的. 先说说现状.现有的系统简单.粗暴.开发是采用c#和dotnet ...
- 微服务实施笔记(三)——建立待发现服务
上回书搭建加了一个由3台服务器和两台开发机组成的模拟开发部署环境.接下来就是要在这个环境中进行模拟的开发和部署了. 如何开啊部署呢,先设想一下实际的应用场景.如下图所示: 浏览器通过域名访问web站点 ...
- 微服务实施笔记(二)——搭建实验部署环境
上回书为微服务的实施定下了基调,接下来就开干吧. 搭建服务器环境 实验环境使用虚拟机搭建.本次实验需要搭建3台服务器,分别命名为server1.server2和server3.在虚拟机中安装ubunt ...
- GitChat · 架构 | 为什么微服务实施那么难?如何高效推进微服务架构演进
GitChat 作者:顾宇 原文:为什么微服务实施那么难?如何高效推进微服务架构演进 关注公众号:GitChat 技术杂谈,一本正经的讲技术 前言 笔者从 2013 年加入 ThoughtWorks ...
- 为什么微服务实施那么难?如何高效推进微服务架构演进
为什么微服务实施那么难?如何高效推进微服务架构演进 前言 笔者从 2013 年加入 ThoughtWorks 至今共 4年时间.在这 4 年的时间里,我分别以 开发人员, DevOps 工程师.Dev ...
- Spring Cloud 微服务实战笔记
Spring Cloud 微服务实战笔记 微服务知识 传统开发所有业务逻辑都在一个应用中, 开发,测试,部署随着需求增加会不断为单个项目增加不同业务模块:前端展现也不局限于html视图模板的形式,后端 ...
- 我们如何衡量一个微服务实施的成功
4 月在深圳的 GOPS 大会上我分享了"落地微服务的难点和如何高效落地微服务",这是我 2017 年 4 月份开始做的项目总结,后来发表到了自己的博客和" Though ...
- 爱奇艺社交泡泡后台微服务实施经验
微服务不是万能的,也不要为了微服务而微服务.能够支持业务在各个阶段的成长是第一位的,就好比泡泡平台从最开始定位的的社交(聊天.发帖),到目前的明星.兴趣社区和运营推广,再到未来的不同业务的基础平台,每 ...
最新文章
- oracle+olh+hive,hadoop+hive+hbase的简单安装 | YallonKing
- autosys start_mins
- 750px设计稿处理方式
- 计算机网络网关作用,默认网关的作用
- 软件测试基础知识bbst,摘自James Bach对软件测试新手的建议
- 第8步 第2剑客 mybatis plugin 第三剑客 page helper csdn每天最多发多少文章 是20篇,刚刚才试了。2014
- (转)如何在maven的pom.xml中添加本地jar包
- [20160229]探究oracle的启动过程.txt
- Google Chrome 将禁止“退格键”作为后退按钮使用
- css中绝对定位和浮动的异同
- 为什么关于反趋势交易的书以及文章很少?
- 基于Java的汽车租赁系统
- 支持M1芯片AE2022已发布,After Effects 2022 for MAC中文安装教程,支持Monterey系统不闪退
- H3C室外无线AP(WA4320X)胖瘦切换设置方法
- Java简易图书DVD管理系统
- 【小睿精选·第四期】谷歌开源更快、更高效的 TensorFlow 运行时 TFRT
- 【操作系统】进程同步实验
- bandit game
- 如何倾听客户之声?你需要的不仅仅是调研
- CF 246C Beauty Pageant