《轻量级微服务架构》读书笔记

微服务架构要求:

  • 根据业务模块划分服务种类
  • 每一个服务可独立部署且互相隔离
  • 经过轻量级API调用服务
  • 服务需保证良好的高可用

微服务技术选型:

  • 使用Spring Boot开发服务
  • 使用Node.js做为服务网关反向代理调用服务
  • 使用Zookeeper注册发现服务
  • 使用Docker封装/部署/隔离服务
  • 使用Jenkins构建发布服务

输入图片说明

Spring Boot

Spring4.0推荐使用Java代码和注解方式做为配置(去xml),Spring Boot遵循相关理念且采用4.0相关特性和技术,集成了主流组件,可建立一个内嵌Servlet容器的jar独立运行,且提供生产级特性(服务治理)。node

Node.js

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服务器之间可高效进行数据同步
  • 可靠性:服务端数据发生变化会当即存储,除非另外一请求修改数据,不然数据必定可靠
  • 实时性:当请求被成功处理后,客户端会马上获取服务端的最新数据

Zookeeper内部拥有一个树状的内存模型,相似于文件系统,有若干目录,目录下有若干文件,统称为ZNodeZNode可由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引擎(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容器仅需几秒
  • 节省资源:Docker容器运行在Docker引擎上,可利用宿主机硬件资源,无需占用过多系统开销
  • 便于交付:传统软件交付的程序,Docker时代交付的是镜像,镜像不只封装了程序,也包含了程序运行的环境
  • 容易管理:可经过Docker客户端直接操做Docker引擎,方便管理Docker镜像与容器。

Docker提供了Dockerfile的脚本文件,经过一些指令,可快速编写镜像的构建脚本,从而让构建进行作到自动化。

Spring Boot项目中,能够添加Dockerfile文件,并经过docker-maven-plugin插件,构建Docker镜像并Push到仓库。

mvn docker:build 可在target目录下生成docker目录,包含classes目录全部文件,打包jar,Dockerfile。docker-maven-plgin插件在这个目录下执行docker bulid命令来构建镜像。

Jenkins

是一款持续集成软件,可链接代码仓库,从中获取源码并执行自动构建,构建完毕后还可执行后续任务,好比:生成单元测试报告,归档程序包,部署程序包到Maven仓库,发送邮件通知等。Jenkins支持一主多从,构建任务可并行在多台Slave机器上。

Jenkins可配置构建触发器,并容许咱们在“构建前”或“构建后”添加执行的Shell脚本。

  1. 开发人员将源码推送至Gitlib,随后触发Jenkins构建任务
  2. Jenkins调用Maven进行构建,编译生成jar包
  3. 根据构建过程,生成一个Docker镜像,并推送至局域网的Docker Registry
  4. 根据生成的镜像,运行一个Docker容器

除此以外,微服务架构还涉及:微服务日志,微服务安全,服务监控,微服务测试,微服务通讯,微服务治理等。

相关文章
相关标签/搜索