1、前言

转眼间surging 开源已经有1年了,经过1年的打磨,surging已从最初在window 部署的分布式微服务框架,到现在的可以在docker部署利用rancher 进行服务编排的分布式微服务引擎,再把业务进行剥离, 通过配置路径就能驱动加载业务模块,这样的细粒度设计,能更加灵活从业务中针对于对象加以细分,能更加灵活的拆分聚合服务。而这篇文章我们来谈谈基于docker 如何部署

surging源码下载: https://github.com/fanliang11/surging

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的自动构建

ASP.NET Core应用开发

作者:[美] James Chambers,David Paquette,Simon Timms著 杜伟 涂曙光 柴晓伟 译

当当 广告

购买

3、环境搭建

系统环境

宿主机:Windows 10 专业版

Linux服务器: CentOS 3.10

1.安装Docker

Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

通过 uname -r 命令查看你当前的内核版本

1
[root@runoob ~]# uname -r 3.10.0-862.E17.X86_64

# yum install docker-engine 安装docker包

安装成功后,使用docker version命令查看是否安装成功,安装成功后------如下图

启动 Docker

1
systemctl  start  docker

 查看docker信息,如下图

1
systemctl  status  docker

测试运行 hello-world

1
#docker run hello-world

2.安装rancher

下载镜像

1
docker pull rancher/server

启动rancher

1
docker run -d --restart=always -p 8080:8080 rancher/server

安装成功后,通过http://ip:8080访问,如下图所示

3.安装rabbitmq

 下载镜像

1
#docker pull rabbitmq:management

启动rabbitmq

1
#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

下载镜像

1
#docker pull docker.io/consul:latest

创建 Consul 配置

1
#vim /opt/platform/consul/server.json
1
2
3
4
5
6
7
8
9
10
11
12
{
    "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

启动

1
#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"]

发布程序

1
dotnet publish -r centos.7-x64 -c release

使用Dockerfile创建镜像

1
#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文件

1
2
3
4
FROM microsoft/dotnet:2.1-runtime
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet""Surging.ApiGateway.dll"]

发布程序

1
dotnet publish -r centos.7-x64 -c release

使用Dockerfile创建镜像

1
docker build -t surgingapi .

启动

1
#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 微服务引擎,也请大家多多关注

原文地址: https://www.cnblogs.com/fanliang11/p/9191793.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

基于docker 如何部署surging分布式微服务引擎相关推荐

  1. [转载]Surging 分布式微服务框架使用入门

    前言 本文非 Surging 官方教程,只是自己学习的总结.如有哪里不对,还望指正. 我对 surging 的看法 我目前所在的公司采用架构就是类似与Surging的RPC框架,在.NET 4.0框架 ...

  2. 【ASP.NET CORE】 Surging 分布式微服务框架学习笔记(1)

    2019年02月24日,终于完成之前的项目.发现多年的工作开发节奏有点脱节了,刚好有时间多学一下,同时在这里记录一下爬坑遇到的问题.之前一直使用WEB API 做单点服务端开发,其中涉及到 ASP.N ...

  3. Surging 分布式微服务框架使用入门

    Surging 分布式微服务框架使用入门 原文:Surging 分布式微服务框架使用入门 前言 本文非 Surging 官方教程,只是自己学习的总结.如有哪里不对,还望指正. 我对 surging 的 ...

  4. 企业分布式微服务云SpringCloud SpringBoot mybatis (十一)docker部署spring cloud项目

    一.docker简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机). ...

  5. (二十)java版spring cloud+spring boot 社交电子商务平台-spring cloud构建全球多租户分布式微服务部署的方案...

    电子商务平台源码请加企鹅求求:一零三八七七四六二六.最近在用spring cloud分布式微服务云架构做一个全球多租户分布式部署的方案,我在这里只是简单的记录,当前的架构图只能是一个大概的方案,具体实 ...

  6. 基于若依开发的 Java EE 分布式微服务架构平台

    Admin Cloud 是一套企业级的多租户权限管理开发平台,基于 Admin Plus.iCRUD 和 若依.提供单体版和微服务版双版本.单体版(基于 Spring Boot) 和 微服务版(基于  ...

  7. 分布式微服务学习总结——分布式微服务概述

    文章目录 一.前言 二.一个传统的App发展进程 三.为什么要用分布式微服务? 四.什么是分布式.微服务? 1.微服务是什么? 2.微服务架构是什么? 3.分布式是什么? 4.微服务架构和分布式的关系 ...

  8. 分布式微服务架构体系详解

    课程介绍 微服务架构的技术体系.社区目前已经越来越成熟.在最初系统架构的搭建,或者当现有架构已到达瓶颈需要进行架构演进时,很多架构师.运维工程师会考虑是否需要搭建微服务架构体系.虽然很多文章都说微服务 ...

  9. 分布式微服务架构的技术体系

    微服务架构的演变 微服务是一种服务间松耦合的.每个服务之间高度自治并且使用轻量级协议进行通信的可持续集成部署的分布式架构体系.这一句包含了微服务的特点,微服务架构和其他架构有什么区别?以下对比一些常见 ...

最新文章

  1. Java使用正则表达式
  2. 浅析网站建设之初应该从哪些方面进行考虑?
  3. 将SVN与BUG跟踪管理集成
  4. LNMP 出现 No input file specified. 的解决方法
  5. PHP异常与错误处理机制
  6. 前端学习(833):操作元素小结
  7. MySQL_(Java)分页查询MySQL中的数据
  8. OpenShift 4 - 定制 RHCOS Linux的Kernal参数
  9. cownew开源-cownewStudio抢先预览
  10. SEO关键词研究工具列表
  11. java的学习内容,附高频面试题合集
  12. php 设置针式打印机纸张,针式打印机设置方法 针式打印机打印连续纸设置技巧【图文】...
  13. TCP全连接端口扫描器
  14. react Hook useReducer()和useContext()实现Redux效果
  15. macbook无法下载软件问题解决
  16. OSChina 周三乱弹 —— 奶奶别慌,还有一计可以平天下
  17. developerWorks Java技术:十周年
  18. C# 未能找到路径 “D:\...”的一部分
  19. 动态规划练习一 17:开餐馆
  20. 推荐学习课程: 职场写作训练

热门文章

  1. Lync Server 2010迁移至Lync Server 2013部署系列 Part1: 扩展AD架构
  2. 详解Oracle DELETE和TRUNCATE 的区别
  3. 缓慢渐变维度的处理方式
  4. MySQL 删除数据的最好的方式
  5. Java类加载机制深度分析
  6. 【数据库】通用的存储过程
  7. IBM在欧洲启动“智能云”研发计划
  8. BeetleX进程服务管理组件应用
  9. Magicodes.IE之快速导出Excel
  10. C# 爬虫:疫情实时信息图