​本文是Spring Cloud专栏的第一篇文章,了解本篇文章内容有助于更好的理解后面文章

一、网站架构演变过程

1-1、传统架构

传统的SSH架构,分为三层架构 web控制层、业务逻辑层、数据库访问层。

传统架构也就是单点应用,就是大家在刚开始初学JavaEE技术的时候SSH架构或者SSM架构,业务没有进行拆分,都写同一个项目工程里面,一般是适合于个人或者是小团队开发。

这种架构模式,一旦有一个模块导致服务不可用,可能会影响整个项目。

1-2、分布式架构

分布式架构基于传统架构演变过来,将传统的单体项目以项目模块进行拆分,拆分为会员项目、订单项目、支付项目、优惠券项目等,从而降低耦合度,这种项目架构模式慢慢开始适合于互联网公司规模人数开发。

1-3、SOA架构

SOA架构代表面向与服务架构,俗称服务化,通俗的理解为面向与业务逻辑层开发,将共同的业务逻辑抽取出来形成一个服务,提供给其他服务接口进行调用,服务与服务之间调用使用rpc远程技术。

1、SOA架构特点:

SOA架构中通常使用XML方式实现通讯,在高并发情况下XML比较冗余会带来极大的影响,所以最后微服务架构中采用JSON替代xml方式。

SOA架构的底层实现通过WebService和ESB(xml与中间件混合物),Web Service技术是SOA服务化的一种实现方式,WebService底层采用soap协议进行通讯,soap协议就是Http或者是Https通道传输XML数据实现的协议。

1-4、微服务架构

1、微服务架构产生的原因

微服务架构基于SOA架构演变过来的,在传统的WebService架构中有如下问题:

1、依赖中心化服务发现机制

2、使用Soap通讯协议,通常使用XML格式来序列化通讯数据,xml格式非常喜欢重,比较占宽带传输。

3、服务化管理和治理设施不完善

1-5、漫谈微服务架构

1、什么是微服务

微服务架是从SOA架构演变过来,比SOA架构粒度会更加精细,让专业的人去做专业的事情(专注),目的提高效率,每个服务于服务之间互不影响,微服务架构中,每个服务必须独立部署,互不影响,微服务架构更加体现轻巧、轻量级,是适合于互联网公司敏捷开发。

2、微服务架构特征

微服务架构倡导应用程序设计程多个独立、可配置、可运行和可微服务的子服务。

服务与服务通讯协议采用Http协议,使用restful风格API形式来进行通讯,数据交换格式轻量级json格式通讯,整个传输过程中,采用二进制,所以http协议可以跨语言平台,并且可以和其他不同的语言进行相互的通讯,所以很多开放平台都采用http协议接口。

3、微服务架构如何拆分

1、微服务把每一个职责单一功能存放在独立的服务中

2、每个服务运行在单独的进程中

3、每个服务有自己独立数据库存储、实际上有自己独立的缓存、数据库、消息队列等资源。

4、微服务架构与SOA架构区别

1、微服务架构基于 SOA架构 演变过来,继承 SOA架构的优点,在微服务架构中去除 SOA 架构中的 ESB 消息总线,采用 http+json(restful)进行传输。

2、微服务架构比 SOA 架构粒度会更加精细,让专业的人去做专业的事情(专注),目的提高效率,每个服务于服务之间互不影响,微服务架构中,每个服务必须独立部署,微服务架构更加轻巧,轻量级。

3、SOA 架构中可能数据库存储会发生共享,微服务强调独每个服务都是单独数据库,保证每个服务于服务之间互不影响。

4、项目体现特征微服务架构比 SOA 架构更加适合与互联网公司敏捷开发、快速迭代版本,因为粒度非常精细。

二、SpringCloud微服务框架

2-1、为什么选择SpringCloud

因为SpringCloud出现,对微服务技术提供了非常大的帮助,因为SpringCloud 提供了一套完整的微服务解决方案,不像其他框架只是解决了微服务中某个问题。

服务治理:阿里巴巴开源的Dubbo和当当网在其基础上扩展的Dubbox、Eureka、Apache 的Consul等。

分布式配置中心:百度的disconf、Netfix的Archaius、360的QConf、SpringCloud Config、携程的阿波罗等。

分布式任务:xxl-job、elastic-job、springcloud的task等。

服务跟踪:京东的hyra、springcloud的sleuth等。

2-2、SpringCloud介绍

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,领导选举,分布式会话,集群状态)。分布式系统的协调导致了样板模式,使用Spring Cloud开发人员可以快速站起来实现这些模式的服务和应用程序。它们适用于任何分布式环境,包括开发人员自己的笔记本电脑,裸机数据中心和Cloud Foundry等托管平台。

三、Spring Cloud组件

Spring Cloud构建微服务是基于SpringBoot开发的,服务之间通过基于HTTP的RESTFUL API进行通信协作的。所以本专栏以后所以案例均采用SpringBoot 2.0.5.RELEASESpring Cloud  Finchley.SR4版本

Spring Cloud组件由20多个组件组成的,常用的组件有如下:

主要:

Eureka:服务注册中心,特性有失效剔除、服务保护

Dashboard,Hystrix仪表盘:监控集群模式和单点模式,其中集群模式需要收集器Turbine配合

Zuul:API服务网关,功能有路由分发和过滤

Config:分布式配置中心,支持本地仓库、SVN、Git、Jar包内配置等模式

融合:

融合在每个微服务中、依赖其它组件并为其提供服务

Ribbon:客户端负载均衡,特性有区域亲和、重试机制

Hystrix:客户端容错保护,特性有服务降级、服务熔断、请求缓存、请求合并、依赖隔离

Feign:声明式服务调用,本质上就是Ribbon+Hystrix,类似于Dubbo的调用

Stream:消息驱动,有Sink、Source、Processor三种通道,特性有订阅发布、消费组、消息分区

Bus:消息总线,配合Config仓库修改的一种Stream实现

Sleuth:分布式服务追踪,需要搞清楚TraceID和SpanID以及抽样,并且与ZipKin整合

在此还会涉及到SpringBoot的SpringBoot Admin(一个管理和监控 Spring Boot 应用程序的开源项目)

作用:

每个组件都不是平白无故的产生的,是为了解决某一特定的问题而存在

Eureka:分为客户端和服务端,客户端是一个java客户端,用来连接Eureka服务端(说白了服务端就是Eureka注册中心),与服务端进行交互,负载均衡,服务的故障切换等。。。作用类似于zookeeper

Ribbon:是一个基于HTTP和TCP的客户端负载均衡器,当使用Ribbon对服务进行访问的时候,他会扩展Eureka客户端的服务发现功能,实现从Eureka注册中心获取服务端列表,并通过Eureka客户端来确定服务端是否已经启动。Ribbon在Eureka客户端服务发现的基础上,实现对服务实例的选择策略,从而实现对服务的负载均衡消费。

总结:Eureka和Ribbon,是最基础的组件,一个注册服务,一个负载均衡消费服务。

Hystrix(断路器/熔断器):为了优化Ribbon、防止整个微服务架构因为某个服务节点的问题导致崩溃,是个保险丝的作用,防止服务雪崩。

Dashboard:给Hystrix统计和展示用的,而且监控服务节点的整体压力和健康情况。

Turbine:是集群收集器,服务于Dashboard的。

Feign:是Netflix公司开发的一个声明式的REST调用客户端,Ribbon负载均衡,Hystrix服务熔断是Spring Cloud中进行微服务开发的最基础的组件,在使用过程中我一般发现他们都是一起存在的,而且配置也相似,每次开发都有相同的代码,因此Spring Cloud基于Netflix Feign整合了Ribbon和Hystrix两个组件,让开发更简单

Zuul:是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点IP端口信息,加强安全保护的。

Config:是为了解决所有微服务各自维护各自的配置,设置一个统一的配置中心,方便修改配置的。

Bus:是因为config修改完配置后各个结点都要refresh才能生效实在太麻烦,所以交给bus来通知服务节点刷新配置的。

Stream:是为了简化研发人员对MQ使用的复杂度,弱化MQ的差异性,达到程序和MQ松耦合。目前只支持RabbitMQ和Kafka

Sleuth:是因为单次请求在微服务节点中跳转无法追溯,解决任务链日志追踪问题的

案例源码地址:https://gitee.com/coding-farmer/spirngcloud-learn

Spring Cloud专栏文章学习参考资源来源于如下,排名不分先后:

官网:https://spring.io/projects/spring-cloud

方志朋:https://blog.csdn.net/forezp

蚂蚁课堂:http://www.mayikt.com

翟永超:《Spring Cloud微服务实战》

最新文章

  1. F#之旅0 - 开端
  2. jquery 选择器 -高级使用 新的 心得
  3. maven nexus 3 third party 构件上传
  4. LR网页细分图中的时间详解
  5. 常用公共的css的样式
  6. java中进程与线程的三种实现方式
  7. 一款APP从设计稿到切图过程全方位揭秘 Mark
  8. VS2010 常见错误总结
  9. jquery 书写全选反选功能
  10. Linux 下实现控制屏幕显示信息和光标的状态
  11. 字符串String类
  12. WebSphere优化
  13. JQuery动画animate的stop方法使用详解
  14. HTML5 File接口(在web页面上使用文件)
  15. 从depth buffer中构建view-space position
  16. git合并代码解决冲突
  17. 1120 机器人走方格 V3(组合数)
  18. XML解析技术-dom4j
  19. div加链接 html给div加超链接实现点击div跳转的方法[申明:来源于网络]
  20. 如何构造树状 JSON 数据 JSON-Tree

热门文章

  1. 学习笔记05一般处理程序ashx
  2. Visual Studio Online 的 FAQ:iPad 支持、自托管环境、Web 版 VS Code、Azure 账号等
  3. 查找一个卷对应的osd
  4. Redis集群--Redis集群之哨兵模式
  5. jquery 用creatjs preloadjs的方法
  6. PHP failed to ptrace(PEEKDATA) pid 13659: Input/output error错误解决方法
  7. css3 svg 物体跟随路径动画教程
  8. 面试开挂:近百道Java面试题整理
  9. CSS(7)--- 通俗讲解清除浮动
  10. 【Spring】Spring的定时任务注解@Scheduled原来如此简单