Java微服务、springboot、springclound

Java微服务

spring IO platform

用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你使用maven dependency引入spring jar包时它就在工作了。

 

Spring Boot

旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能,可以和spring cloud联合部署。

 

Spring Framework

即通常所说的spring 框架,是一个开源的Java/Java EE全功能栈应用程序框架,其它spring项目如spring boot也依赖于此框架。

 

Spring Cloud

微服务工具包,为开发者提供了在分布式系统的配置管理、服务发现、断路器、智能路由、微代理、控制总线等开发工具包。

 

Spring XD

是一种运行时环境(服务器软件,非开发框架),组合spring技术,如spring batch、spring boot、spring data,采集大数据并处理。

 

Spring Data

是一个数据访问及操作的工具包,封装了很多种数据及数据库的访问相关技术,包括:jdbc、Redis、MongoDB、Neo4j等。

 

Spring Batch

批处理框架,或说是批量任务执行管理器,功能包括任务调度、日志记录/跟踪等。

 

Spring Security

是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。

 

Spring Integration

面向企业应用集成(EAI/ESB)的编程框架,支持的通信方式包括HTTP、FTP、TCP/UDP、JMS、RabbitMQ、Email等。

 

Spring Social

一组工具包,一组连接社交服务API,如Twitter、Facebook、LinkedIn、GitHub等,有几十个。

 

Spring AMQP

消息队列操作的工具包,主要是封装了RabbitMQ的操作。

 

Spring HATEOAS

是一个用于支持实现超文本驱动的 REST Web 服务的开发库。

 

Spring Mobile

是Spring MVC的扩展,用来简化手机上的Web应用开发。

 

Spring for Android

是Spring框架的一个扩展,其主要目的在乎简化Android本地应用的开发,提供RestTemplate来访问Rest服务。

 

Spring Web Flow

目标是成为管理Web应用页面流程的最佳方案,将页面跳转流程单独管理,并可配置。

 

Spring LDAP是一个用于操作LDAP的Java工具包,基于Spring的JdbcTemplate模式,简化LDAP访问。

 

Spring Session

session管理的开发工具包,让你可以把session保存到redis等,进行集群化session管理。

 

Spring Web Services

是基于Spring的Web服务框架,提供SOAP服务开发,允许通过多种方式创建Web服务。

 

Spring Shell

提供交互式的Shell可让你使用简单的基于Spring的编程模型来开发命令,比如Spring Roo命令。

 

Spring Roo

是一种Spring开发的辅助工具,使用命令行操作来生成自动化项目,操作非常类似于Rails。

 

Spring Scala

为Scala语言编程提供的spring框架的封装(新的编程语言,Java平台的Scala于2003年底/2004年初发布)。

 

Spring BlazeDS Integration

一个开发RIA工具包,可以集成Adobe Flex、BlazeDS、Spring以及Java技术创建RIA。

 

Spring Loaded

用于实现java程序和web应用的热部署的开源工具。

 

Spring REST Shell

可以调用Rest服务的命令行工具,敲命令行操作Rest服务。

 

SpringCloud 的子项目

目前来说spring主要集中于spring boot(用于开发微服务)和spring cloud相关框架的开发,我们从几张图着手理解,然后再具体介绍:

 

 

 

 

spring cloud子项目包括:

 

Spring Cloud Config:配置管理开发工具包,可以让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion。

 

Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。

 

Spring Cloud Netflix:针对多种Netflix组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。

 

Netflix Eureka:云端负载均衡,一个基于 REST 的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移。

 

Netflix Hystrix:容错管理工具,旨在通过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

 

Netflix Zuul:边缘服务工具,是提供动态路由,监控,弹性,安全等的边缘服务。

 

Netflix Archaius:配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。

 

Spring Cloud for Cloud Foundry:通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。

 

Spring Cloud Sleuth:日志收集工具包,封装了Dapper,Zipkin和HTrace操作。

 

Spring Cloud Data Flow:大数据操作工具,通过命令行方式操作数据流。

 

Spring Cloud Security:安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。

 

Spring Cloud Consul:封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。

 

Spring Cloud Zookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现。

 

Spring Cloud Stream:数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。

 

Spring Cloud CLI:基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。

 

什么是微服务?

微服务简介

微服务的流行,Martin功不可没,这老头也是个奇人,特别擅长抽象归纳和制造概念,我觉的这就是最牛逼的markting啊,感觉这也是目前国人欠缺的能力。

 

先来看看传统的web开发方式,通过对比比较容易理解什么是Microservice Architecture。和Microservice相对应的,这种方式一般被称为Monolithic(比较难传神的翻译)。所有的功能打包在一个 WAR包里,基本没有外部依赖(除了容器),部署在一个JEE容器(Tomcat,JBoss,WebLogic)里,包含了 DO/DAO,Service,UI等所有逻辑。

 

 

这里写图片描述

Monolithic比较适合小项目,优点是:

 

1、开发简单直接,集中式管理

 

2、基本不会重复开发

 

3、功能都在本地,没有分布式的管理开销和调用开销

 

它的缺点也非常明显,特别对于互联网公司来说(不一一列举了):

 

1、开发效率低:所有的开发在一个项目改代码,递交代码相互等待,代码冲突不断

 

2、代码维护难:代码功能耦合在一起,新人不知道何从下手

 

3、部署不灵活:构建时间长,任何小修改必须重新构建整个项目,这个过程往往很长

 

4、稳定性不高:一个微不足道的小问题,可以导致整个应用挂掉

 

5、扩展性不够:无法满足高并发情况下的业务需求

 

所以,现在主流的设计一般会采用Microservice Architecture,就是基于微服务的架构。简单来说,微服务的目的是有效的拆分应用,实现敏捷开发和部署。

 

这里写图片描述

用《The art of scalability》一书里提到的scale cube比较容易理解如何拆分。你看,我们叫分库分表,别人总结成了scale cube,这就是抽象的能力啊,把复杂的东西用最简单的概念解释和总结。X轴代表运行多个负载均衡器之后运行的实例,Y轴代表将应用进一步分解为微服务 (分库),数据量大时,还可以用Z轴将服务按数据分区(分表)

 

这里写图片描述

怎么具体实现微服务

听上去好像都不错,具体怎么落地啊?这需要回答下面几个问题:

1、客户端如何访问这些服务?

2、服务之间如何通信?

3、这么多服务,怎么找?

4、服务挂了怎么办?

5、客户端如何访问这些服务?

原来的Monolithic方式开发,所有的服务都是本地的,UI可以直接调用,现在按功能拆分成独立的服务,跑在独立的一般都在独立的虚拟机上的 Java进程了。客户端UI如何访问他的?后台有N个服务,前台就需要记住管理N个服务,一个服务下线/更新/升级,前台就要重新部署,这明显不服务我们 拆分的理念,特别当前台是移动应用的时候,通常业务变化的节奏更快。另外,N个小服务的调用也是一个不小的网络开销。还有一般微服务在系统内部,通常是无 状态的,用户登录信息和权限管理最好有一个统一的地方维护管理(OAuth)。

所以,一般在后台N个服务和UI之间一般会一个代理或者叫API Gateway,他的作用包括

1、提供统一服务入口,让微服务对前台透明

2、聚合后台的服务,节省流量,提升性能

3、提供安全,过滤,流控等API管理功能

我的理解其实这个API Gateway可以有很多广义的实现办法,可以是一个软硬一体的盒子,也可以是一个简单的MVC框架,甚至是一个Node.js的服务端。他们最重要的作 用是为前台(通常是移动应用)提供后台服务的聚合,提供一个统一的服务出口,解除他们之间的耦合,不过API Gateway也有可能成为单点故障点或者性能的瓶颈。

一般用过Taobao Open Platform的就能很容易的体会,TAO就是这个API Gateway。

服务之间如何实现通信

因为所有的微服务都是独立的Java进程跑在独立的虚拟机上,所以服务间的通行就是IPC(inter process communication),已经有很多成熟的方案。现在基本最通用的有两种方式。这几种方式,展开来讲都可以写本书,而且大家一般都比较熟悉细节了, 就不展开讲了。

1、同步调用

2、REST(JAX-RS,Spring Boot)

 

3、RPC(Thrift, Dubbo)

 

4、异步消息调用(Kafka, Notify, MetaQ)

 

一般同步调用比较简单,一致性强,但是容易出调用问题,性能体验上也会差些,特别是调用层次多的时候。RESTful和RPC的比较也是一个很有意 思的话题。

 

一般REST基于HTTP,更容易实现,更容易被接受,服务端实现技术也更灵活些,各个语言都能支持,同时能跨客户端,对客户端没有特殊的要 求,只要封装了HTTP的SDK就能调用,所以相对使用的广一些。RPC也有自己的优点,传输协议更高效,安全更可控,特别在一个公司内部,如果有统一个 的开发规范和统一的服务框架时,他的开发效率优势更明显些。就看各自的技术积累实际条件,自己的选择了。

 

而异步消息的方式在分布式系统中有特别广泛的应用,他既能减低调用服务之间的耦合,又能成为调用之间的缓冲,确保消息积压不会冲垮被调用方,同时能 保证调用方的服务体验,继续干自己该

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值