本文章只是简单介绍了微服务开发的一些关键词,若是须要知道具体实现和能够评论留言 我会及时的增长链接写出具体实现(感受没人看 就没写具体实现)。mysql
持续更新中。。。。。。算法
Dubbo的定位始终是一款基于传输层(TCP)的RPC框架,RPC(Remote Procedure Call)通讯过程在传输层中完成(HTTP通讯在应用层完成),sql
因此RPC调用方式须要服务端与客户端之间创建Socket链接来实现二进制数据的交换docker
SpringCloud抛弃了Dubbo的RPC通讯,采用的是基于HTTP的REST方式(Spring Cloud就真正的将整个Rest做为RPC实现技术)。 数据库
而SpringCloud的目标是微服务架构下的一站式解决方案。编程
Spring的服务治理是使用Netflix的Eureka做为服务治理的,它是咱们构建Spring Cloud分布式最为核心和最为基础的模块,缓存
他的做用是注册和发现安全
@EnableEurekaServer :在启动类上添加@EnableEurekaServer注解,声明这是一个Eureka Server服务器
@EnableEurekaClient:将微服务注册到Eureka Server上架构
@EnableDiscoveryClient:将微服务注册到Eureka Server上
注解@EnableEurekaClient上有@EnableDiscoveryClient注解,
能够说基本就是EnableEurekaClient有@EnableDiscoveryClient的功能
其实@EnableEurekaClientz注解就是一种方便使用eureka的注解而已,
Spring Boot服务,并提供监控管理功能。
每个微服务均可以像服务治理中心注册多个节点(服务名称相同,更改端口号 在启动一次便可)
不少时候 咱们也但愿服务治理中心也是多个节点,这才可能知足高可用和负载均衡的要求
解决办法: 咱们能够采用服务治理中心互相注册来保持相互监控
服务治理中心名称保持不变,将当前的服务治理中心节点A注册到服务治理中心节点B,而后将服务治理中心节点B注册到服务治理中心节点A。
Eureka心跳机制
微服务客户端之因此能够和Eureka保持联系,依靠的是心跳机制,也就是说你客户端能够本身来进行心跳的配置处理。
若是最大心跳时间间隔微服务没有进行心跳(如配置2s心跳心跳一次 最大心跳时间间隔5s),则认为该微服务已经死宕机了(Eureka会默认出现红字提醒)
Rabbion其实是一个RestTemplate对象,经过注解@LoadBalance 可让RestTemplete实现站点层到服务层负载均衡
也就是经过这个restTemplete对象调用用户微服务请求的时候,Ribbon会自动给用户微服务实现负载均衡,请求会被分摊到微服务的各个节点上。
Feign声明式调用。
使用restTemplete对象调用除了编写URL,还须要注意这些参数的组装和结果的返回操做。为了克服这些不友好,Spring Cloud提供了声明式调用组件Feign。
Feign是一个基于接口的编程方式,开发者只须要声明接口和配置注解,在调度接口方法时,Spring Cloud就根据配置来调度对应的REST风格的请求。
在互联网中,某一个微服务可能出现故障,为了避免蔓延到其余微服务上面致使雪崩效应。断路器会将产生故障的服务节点进行"熔断",保持各个微服务持续可用。
处理熔断的方式有 限流、缓存、服务降级,下面介绍服务降级。
所谓降级服务,就是当请求发生超时或者发生故障时,就会使用自身服务的其余方法进行相应。
对于Hystrix,Spring Cloud还提供了一个仪表盘进行监控短路的状况。
网关的功能对分布式网站十分重要,首先他能够将请求路由到真是服务器的IP地址,避免直接的攻击真实服务器
其次它也能够做为一种负载均衡的手段,使请求按照必定的算法平摊到多个节点上,减缓单点的压力。
程序启动主类 注解:@EnableZuulProxy表示我如今要启动的是一个Zuul的代理
zuul的配置:
表示zuul代理服务器home路径下全部的请求转发给user服务
https://www.jianshu.com/p/29e12ac2ce42
Spring Boot之中为了方便开发者,已经整合了消息组件,也提供了有一系列的处理支持。若是按照这样的方式在Spring Cloud之中进行消息处理,有些人会认为比较麻烦。
因此在Spring Cloud里面将消息整合的处理操做进行了进一步的抽象操做,实现了更加简化的消息处理。
简单总结:SpringCloud Stream就是实现了MDB功能,同时能够增长更加简化方便的整合消息组件。
顾名思义SpringCloudConfig的核心做用就在于配置文件的管理上。
当项目开发复杂微服务有特别多几百个的时候,对于配置文件的管理就很是麻烦,若是想要进行某一个项配置文件的变动(举例 数据库驱动变动),那么就有可能修改上百个配置文件。
SpringCloudConfig借助SVN、GITHUB来进行微服务配置文件的保存,SpringCloudConfig保存的配置就是咱们GIT仓库。
至于配置文件的安全问题(举例 配置的JDBC不能泄露),在SpringCloudConfig之中还提供有一些安全加密处理 密钥处理、jsk安全处理。
本质:SpringCloudConfig要求咱们全部的配置服务项都要求放到GIT之中,咱们使用的时候进行加载,方便整套微服务架构中配置文件的统一管理。
几乎每一个有趣的应用都至少有一个相似数据库或者消息中间件的基础设施服务,咱们能够选择把这些基础设施服务安装在本身的机器上。
不幸的是安装起来并不容易,就好比说以前在window上安装mysql各类问题。若是有一键安装的配置就完美了,而且咱们并不喜欢在本身的机器上装满各类乱七八糟的服务。
所以咱们要用docker容器,docker将做为一个容器运行咱们须要的全部的服务。(Nginx Mq Redis Mysql 等等等等)
Docker几个重要的概念
镜像
通常状况下,咱们首先须要将程序打包到Docker镜像中,随后才能将镜像交给其余人使用。
容器
当咱们获取到Docker镜像之后,能够随时运行该Docker镜像,此时变会启动一个Docker容器,该容器将运行镜像中封装的程序
若是咱们把Docker镜像理解为JAVA类的话,那么Docker容器就至关于Java实列。
仓库
集中存放镜像文件的地方(能够理解为GitHub这样的托管服务器)
咱们使用Git管理代码,使用Maven构建项目,使用Docker封装服务,这些事情都须要经过手工方式一步一步的完成,可否让这些步骤自动的去执行呢?
也就是说开发人员将源代码推送到Git远程仓库,自动进行Maven构建,并自动将构建生成的程序包放入Docker容器中。