【注】原文发表于开源中国:https://my.oschina.net/lujianing/blog/800412
作者:蛙牛
摘要: 浓缩的都是精华
微服务架构要求:
微服务技术选型:
架构技术选型
Spring4.0推荐使用Java代码和注解方式作为配置(去xml),Spring Boot遵循相关理念且采用4.0相关特性和技术,集成了主流组件,可创建一个内嵌Servlet容器的jar独立运行,且提供生产级特性(服务治理)。
Node.js是基于ChromeV8引擎的Javascript运行环境,它使用“事件驱动”且“异步非I/O”的模型使其轻量且高效,Node.js的包管理器NPM是全球最大的开源库生态系统。
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包含五个特性:
ZNode类型 说明
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的四大特点:
在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容器
除此之外,微服务架构还涉及:微服务日志,微服务安全,服务监控,微服务测试,微服务通信,微服务治理等。
© 著作权归作者所有
程序员如何积累、总结经验?是否要坚持写技术博客?如何才能写好技术博客?写技术文章是否对出版图书有帮助?相信这些问题,是很多入门的程序员甚至是资深程序员都会考虑的问题。 极客邦近期采访了特赞公司的CTO、《轻量级微服务架构(上册)》作...
读者评论