Spring Boot
开发服务Node.js
做为服务网关反向代理调用服务Zookeeper
注册发现服务Docker
封装/部署/隔离服务Jenkins
构建发布服务Spring4.0推荐使用Java代码和注解方式做为配置(去xml),Spring Boot
遵循相关理念且采用4.0相关特性和技术,集成了主流组件,可建立一个内嵌Servlet容器的jar独立运行,且提供生产级特性(服务治理)。node
Node.js
是基于ChromeV8引擎的Javascript运行环境,它使用“事件驱动”且“异步非I/O”的模型使其轻量且高效,Node.js的包管理器NPM是全球最大的开源库生态系统。docker
Node.js
是运行环境,而非Javascript类库和框架,NPM与Java的Maven殊途同归,事件驱动把事件加入队列中轮训。Node.js采用单线程模型,适用于I/O密集型应用(高并发网站)。缓存
Node.js内置HTTP服务器(模块),性能和稳定性与Nginx不分伯仲。且模块体系强大,好比Web框架Express
,Web Socket服务Scocket.IO
,命令行工具Commander.js
,Http代理服务器node-http-proxy
Node.js
性能不亚于Nginx
,但扩展性高于Nginx
,能够动态指定被代理的目标地址,并执行反向代理操做,调用微服务REST API。安全
微服务网关提供反向代理与服务发现,还应具有安全认证,性能监控,数据缓存,请求分片,静态相应等特性。服务器
提供分布式环境下的协调服务,分布式应用可基于它实现数据发布与订阅,负载均衡,命名服务,分布式协调与通知,集群管理,领导选举,分布式锁,分布式队列等。架构
Zookeeper
包含五个特性并发
Zookeeper
服务器之间可高效进行数据同步Zookeeper
内部拥有一个树状的内存模型,相似于文件系统,有若干目录,目录下有若干文件,统称为ZNode
。ZNode
可由Zookeeper
客户端建立,客户端与服务端创建链接后,服务端为客户端建立一个Session,客户端对ZNode
的操做均在这个Session中。负载均衡
ZNode
有四类节点:框架
ZNode类型 | 说明 |
---|---|
Persistent(持久节点) | 当会话结束后,该节点不会被删除 |
Persistent Sequential (持久顺序节点) | 当会话结束后,该节点不会被删除,且节点名中带自增数后缀 |
Ephemeral (临时节点) | 当会话结束后,该节点会被删除 |
Ephemeral Sequential (临时顺序节点) | 当会话结束后,该节点会被删除,且节点名中带自增数后缀 |
Zookeeper
参考了经典的分布式一致性协议Paxos协议,设计了更轻量级的协议Zab
(Zookeeper Atomic Broadcat
,Zookeeper
原子广播协议)。异步
Zab
分为两个阶段:Leader Election
(领导选举)与Atomic Boardcast
(原子广播)。
启动时会选举出一个Leader,其余节点Follower,当Leader节点处故障,则自动选举出新的Leader,并让全部节点恢复到一个正常状态。而后经过原子广播,同步Leader和Follower数据。 全部写操做都发送到Leader节点,并经过广播同步到Follower节点。 Zookeeper
集群中各个节点会互相通讯,确保存活,超过半数节点就能够正常对外提供服务,所以通常提供奇数个节点。客户端可链接任意节点,且与某节点断开后,会自动链接到其余节点。
启动
Spring Boot
服务并注册到Zookeeper
中,依次判断并建立节点 根节点(持久节点)-服务节点(持久节点)-地址节点(临时顺序节点)。
Node.js
经过node-zookeeper-client
链接Zookeeper
,获取服务地址,执行反向代理。
Docker引擎(Docker Engine
):可理解为一个运行在服务器上的后台进程,本质上是一个服务,启动后,咱们能够经过发送Docker命令与之通讯
Docker客户端(Docker Client
):分为Docker命令客户端和Rest API客户端
Docker镜像(Docker Images
):如同光盘刻录数据后,放入光驱中读取数据。咱们将程序打包到镜像中,将其载入到Docker引擎中运行
Docker容器(Docker Containers
):运行Docker镜像,会启动一个Docker容器,该容器中运行镜像中封装的程序。若是将镜像理解为Java类,容器至关于Java实例。同一个镜像理论上可运行无数个Docker容器
Docker镜像注册中心(Docker Registry
):官方提供了Docker Hub
的镜像注册中心,用于存放公开和私有的Docker镜像仓库(Docker Repository
)。咱们能够用Docker Hub
中下载镜像和上传镜像。
Docker的四大特色:
Docker提供了Dockerfile
的脚本文件,经过一些指令,可快速编写镜像的构建脚本,从而让构建进行作到自动化。
在
Spring Boot
项目中,能够添加Dockerfile
文件,并经过docker-maven-plugin
插件,构建Docker镜像并Push到仓库。
mvn docker:build
可在target目录下生成docker目录,包含classes目录全部文件,打包jar,Dockerfile。docker-maven-plgin
插件在这个目录下执行docker bulid命令来构建镜像。
是一款持续集成软件,可链接代码仓库,从中获取源码并执行自动构建,构建完毕后还可执行后续任务,好比:生成单元测试报告,归档程序包,部署程序包到Maven仓库,发送邮件通知等。Jenkins
支持一主多从,构建任务可并行在多台Slave机器上。
Jenkins
可配置构建触发器,并容许咱们在“构建前”或“构建后”添加执行的Shell
脚本。
- 开发人员将源码推送至
Gitlib
,随后触发Jenkins
构建任务Jenkins
调用Maven
进行构建,编译生成jar包- 根据构建过程,生成一个
Docker
镜像,并推送至局域网的Docker Registry
中- 根据生成的镜像,运行一个
Docker
容器
除此以外,微服务架构还涉及:微服务日志,微服务安全,服务监控,微服务测试,微服务通讯,微服务治理等。