下面我们创建一个Sample项目。
先来看看基本架构的想法。
技术栈:
Kong+GrayLog+OAuth2+Springboot+Express+Swagger
Devops : Jenkins+Git+Docker+Rancher
1. 首先项目是基于IaaS,从供应商那获虚拟机, 小公司嘛,不期望花太多的时间在Infra上, Docker 隔离环境差异性,application 以docker image的方式发布。
2. 客户端(Browser,APP或者其他第三方系统)请求首先到第一层Loadbalancer,这个Loadbalancer是可选的,可能是云供应商提供的,也可以是自己的apache,Nginx(或者直接就是kong)或者F5。不是必须的,如果云厂商没有提供,那可以忽略。
3.客户端请求通过第一层的LB之后,到达API gateway。个人理解,API gateway 就是一个门,入户大门也好房间之间的们也罢,反正们的基本功能是必须的。它可以完成对API的简单转换,AuthC,Rate-limitting,logging,caching以及Transformations。这里我们用的是Kong(没错就是那个大猩猩)。Kong 基于Nginx开发出来的完整概念上的API gateway,在性能方面你可以放心使用。Kong有很多插件,如果需要自己开发插件的话,可能要稍微学一下Lua。当然对于控制狂来说可能会选择Spring Cloud来自己写一些变态需求。
4.客户端访问的资源可能是一个需要AuthC。API gateway可以从认证服务器LDAP/Oauth2来进行认证。然后将请求转给Rancher的loadbalancer。
5.Rancher是一个容器编排软件。随着docker的流行,Rancher也已经for production了。相比其他容器编排软件(Kubernetes,Mesos, Swarm)来说,最大的好处就是难度适中。给了我们中小型企业一个构建自己的CaaS和PaaS的机会。请求发送到Rancher的LB后会转给App容器完成相关任务。对于微服务来说,rancher+docker 很容易的就能实现服务注册,服务发现,健康检测,路由,负载均衡。
6.App容器开发语言不相关,只需要完成自己的微服务就好了,他所需要的其他服务地址,只需要调用其服务名,Docker/Rancher的DNS会自动完成相关的转换。
7.App2 是一个springboot的实现,可以通过spring config来完成一些业务相关的配置管理。当然Rancher也可以在容器启动的时候以环境变量的方式将配置信息传进去。
8.spring config 从GIT 或者 本地磁盘获取相关的配置文件。
9.任何第三放的服务,都可以通过Rancher以Service的方式配置到rancher的Stack里面。
10.Graylog只是一个日志工具(可以被logstash,splunk等替代),应用容器将日志直接输出到syslog(理论基础就是,开发人员不关心日志放哪里,看console就行了,application不需要关心日志放哪里,负责输出就行了,日志服务器关心日志放哪里,取syslog就行啦)。
11. 所有容器/软件都部署到IaaS上,在IaaS的主机上只需要安装Docker就可以了。
12.DevOps流程之后讨论。
好了,这就是一个基本的简单的架构。下面来详细讲解这个Demo。