基于docker 如何部署surging分布式微服务引擎
1、前言
转眼间surging 开源已经有1年了,经过1年的打磨,surging已从最初在window 部署的分布式微服务框架,到现在的可以在docker部署利用rancher 进行服务编排的分布式微服务引擎,再把业务进行剥离, 通过配置路径就能驱动加载业务模块,这样的细粒度设计,能更加灵活从业务中针对于对象加以细分,能更加灵活的拆分聚合服务。而这篇文章我们来谈谈基于docker 如何部署
2、概述
容器,就是用来存放镜像的器皿,而镜像是构建成的一个轻量的、独立的、可执行的包,包括了执行它所需要的所有东西:代码、运行环境、系统工具、系统库、设置。
程序被构建成镜像放到容器中,那么它所依赖的下层环境就不再重要了。它可以在任何地方运行,甚至在混合云环境下也可以。所以为何容器能流行起来,而容器技术兴起让Docke也渐渐的映入大家的眼帘,
那么Docker又是什么呢?
Docker是基于Go语言开发并开源的容器引擎
Docker将应用软件运行时所需的一切都打包成互相隔离的容器
Docker可以自动执行并配置开发/线上环境,快速构建,测试和运行复杂的多容器应用程序
对拥有数千个节点或容器的应用程序,Docker也能快速的扩展和调配
可以运行在主流的Linux系统,Mac以及Windows上,并且保证无论软件在哪里部署,都能正常运行并得到相同的结果
相关概念介绍
Image镜像和Container容器:你可以把两者理解为类和实例对象,或者是ISO系统镜像和虚拟机的关系。不同的Image所包含的软件或者环境是不同的,但是你可以使用Dockerfile(docker特有语法规则所创建的文件)进行管理。而Container则是以Image作为模板,可以独立运行的微型系统,一个Image可以创建出来多个Container容器的实例
Registry:Docker Hub镜像仓库,为每个人提供庞大的镜像资源进行拉取和使用
Dockerfile:是一个将镜像命令组合在一起的文件,用于Image的自动构建
3、环境搭建
系统环境
宿主机:Windows 10 专业版
Linux服务器: CentOS 3.10
1.安装Docker
Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
[root@runoob ~]# uname -r 3.10.0-862.E17.X86_64
# yum install docker-engine 安装docker包
安装成功后,使用docker version命令查看是否安装成功,安装成功后------如下图
启动 Docker
systemctl start docker
查看docker信息,如下图
systemctl status docker
测试运行 hello-world
#docker run hello-world
2.安装rancher
下载镜像
docker pull rancher/server
启动
rancher
docker run -d --restart=always -p 8080:8080 rancher/server
安装成功后,通过http://ip:8080访问,如下图所示
3.安装rabbitmq
下载镜像
#docker pull rabbitmq:management
启动
rabbitmq
#docker run -d --name rabbitmq --publish 5672:5672 --publish 4369:4369 --publish 25672:25672 --publish 15671:15671 --publish 15672:15672 \rabbitmq:management
安装成功后,通过http://ip:15672访问,如下图所示
4.安装Consul
下载镜像
#docker pull docker.io/consul:latest
创建 Consul 配置
#vim /opt/platform/consul/server.json
{
"datacenter": "quark-consul",
"data_dir": "/consul/data",
"server": true,
"ui": true,
"bind_addr": "192.168.249.162",
"client_addr": "192.168.249.162",
"bootstrap_expect": 1,
"retry_interval": "10s",
"rejoin_after_leave": false,
"skip_leave_on_interrupt": true
}
配置说明
官方在启动容器的时候是将一部分配置作为 docker run
的参数,而我是把参数写到了配置文件里。
- datacenter:数据中心名称(库名)
- data_dir:数据存储目录
- server:运行在server模式
- ui:使用UI界面
- bind_addr:内部集群通信绑定的地址。默认是
0.0.0.0
,如果有多块网卡,需要指定,否则启动报错 - client_addr:客户端接口绑定的地址,默认是
127.0.0.1
; - retry_join:重新加入集群
- retry_interval:重试时间
- rejoin_after_leave:在离开集群之后才重试加入
- skip_leave_on_interrupt:在启动后,是否 Ctrl+C 优雅退出,我们是容器模式,所以不用管,直接 true 就好了。
启动 consul-server
docker run -d --net=host --name consul -v /opt/platform/consul/config:/consul/config -v /opt/platform/consul/data:/consul/data consul agent
安装成功后,通过http://ip:8500访问,如下图所示
5. 安装dotnetcore 2.1 runtime
下载镜像
#sudo docker pull microsoft/dotnet:2.1-runtime
启动
#sudo docker run -it microsoft/dotnet:2.1-runtime
四、部署程序
1. 部署surging引擎,无需引用任何业务模块,新建Dockerfile文件
FROM microsoft/dotnet:2.1-runtime
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "Surging.Services.Server.dll"]
发布程序
dotnet publish -r centos.7-x64 -c release
使用Dockerfile创建镜像
#docker build -t surgingserver .
启动
#docker run --name surgingserver --env Mapping_ip=192.168.249.162 --env Mapping_Port=198 --env RootPath=/home/fanly --env
Register_Conn=192.168.249.162:8500 --env EventBusConnection=172.17.0.4 --env Surging_Server_IP=0.0.0.0 -v /home/fanly:/home/fanly -it -p 198:198 surgingserver
配置说明
- Mapping_ip:映射的外部IP(环境变量)
- Mapping_port:映射的外部端口(环境变量)
- RootPath:业务模块存储的根路径(环境变量)
- Register_Conn:注册中心地址(环境变量)
- EventBusConnection:eventbus 地址(环境变量)
- Surging_Server_IP:容器内部IP(环境变量)
启动后在rancher如下图所示
因为方便,把宿主机的目录进行了挂载,microsurging 为分布式微服务引擎,Modules 为业务模块目录,surgingapi为网关
2. 部署surging网关,新建Dockerfile文件
FROM microsoft/dotnet:2.1-runtime
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "Surging.ApiGateway.dll"]
发布程序
dotnet publish -r centos.7-x64 -c release
使用Dockerfile创建镜像
docker build -t surgingapi .
启动
#docker run --name surgingapi -it -p 729:729 --env Register_Conn=192.168.249.162:8500 surgingapi
启动后在rancher如下图所示
可以通过http://ip:729进行访问
然后可以通过postman 来测试网关,如下图
五、总结
通过1年的开发,surging 也趋于完善,性能非常不错,平均访问在0.12ms 左右,而且6月30日会在上海微软研发中心和大家见面讲解下surging 微服务引擎,也请大家多多关注
基于docker 如何部署surging分布式微服务引擎的更多相关文章
- Surging 分布式微服务框架使用入门
原文:Surging 分布式微服务框架使用入门 前言 本文非 Surging 官方教程,只是自己学习的总结.如有哪里不对,还望指正. 我对 surging 的看法 我目前所在的公司采用架构就是类似与S ...
- [转载]Surging 分布式微服务框架使用入门
前言 本文非 Surging 官方教程,只是自己学习的总结.如有哪里不对,还望指正. 我对 surging 的看法 我目前所在的公司采用架构就是类似与Surging的RPC框架,在.NET 4.0框架 ...
- docker部署PiggyMetrics分布式微服务
在上一篇文章里http://www.cnblogs.com/lyhero11/p/8686058.html, 讲解了如何在windows10下安装docker社区版. 那如何利用docker落地一个分 ...
- 推荐一款分布式微服务框架 Surging
surging surging 是一个分布式微服务框架,提供高性能RPC远程服务调用,采用Zookeeper.Consul作为surging服务的注册中心,集成了哈希,随机,轮询,压力最小优先作为 ...
- 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群
庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介 前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...
- Dapeng框架-开源高性能分布式微服务框架
我们公司性质是新零售,公司也有专门的框架组.这群大牛自己开发了一整套分布式微服务框架.我们也在使用这套框架,有很多心得体会. 该框架既Dapeng也!开源github地址:https://github ...
- Net Core 分布式微服务框架
Jimu : .Net Core 分布式微服务框架介绍 https://www.cnblogs.com/grissom007/p/9291345.html 一.前言 近些年一直浸淫在 .Net 平台做 ...
- Thrift搭建分布式微服务1
Thrift搭建分布式微服务 一.Thrift是什么? 关于Thrift的基本介绍,参看张善友的文章Thrift简介. 二.为什么使用微服务? 在公司的高速发展过程中,随着业务的增长,子系统越来越多. ...
- 整合SPRING CLOUD云服务架构 - 企业分布式微服务云架构构建
整合SPRING CLOUD云服务架构 - 企业分布式微服务云架构构建 1. 介绍 Commonservice-system是一个大型分布式.微服务.面向企业的JavaEE体系快速研发平台,基于模 ...
随机推荐
- Colossus: Successor to the Google File System (GFS)
Colossus is the successor to the Google File System (GFS) as mentioned in the recent paper on Spanne ...
- IEEE发布2017年编程语言排行榜:Python高居首位
https://news.cnblogs.com/n/574248 编者按:本文由微信公众号“机器之心”(ID:almosthuman2014)编译,机器之心专注生产 AI 领域专业性内容.本文作者: ...
- Kotlin : Retrofit + RxAndroid + Realm
https://jqs7.com/kotlin-retrofit-rxandroid-realm/ 原作者:Ahmed Rizwan 原文链接:Kotlin : Retrofit + RxAndroi ...
- OkHttp上传文件,服务器端请求解析找不到文件信息的问题
长话短说,不深入解释了,官方给的上传案例代码: private static final String IMGUR_CLIENT_ID = "..."; private stati ...
- Java获取当日的起始时间,结束时间,现在时间,是否在时间段中。
当日的起始时间 public static Date getTodayStartTime() { Calendar todayStart = Calendar.getInstance(); today ...
- remove the nth node from the end of the list
problem description: remove the nth node from the end of the list for example: given: 1->2->3 ...
- python new和init知识点
__new__ 方法是什么?如果将类比喻为工厂,那么__init__()方法则是该工厂的生产工人,__init__()方法接受的初始化参 数则是生产所需原料,__init__()方法会按照方法中的语句 ...
- Asp.Net MVC 中JS通过ajaxfileupload上传图片获取身份证姓名、生日、家庭住址等详细信息
客户要求用身份证图片上传获取身份证的详细信息就下来研究了一下(现在的客户真的懒 身份证信息都懒得输入了哈哈...),经过慢慢研究,果然皇天不负有心人搞出来了.这个借助的是腾讯的一个SKD 腾讯优图云 ...
- Python(1)
Python 学习 Part1 1. 斐波那契数序列 >>> a,b=0,1 >>> a 0 >>> b 1 >>> while ...
- wordpress上下篇
分页一: <!--上下篇开始--> <div class="shangxia"> <?php $current_category=get_the_ca ...