架构是逻辑上的设计模式,而框架则是具体的实现。一个架构模式上,可能会使用到多个框架。

一、架构的演变

架构的演变是根据业务量的急速扩张对技术要求不断的加深而产生的。如果细粒度的划分可以有很多路线,我一般将演变过程大体上分为这几类:

单体架构 -----> 分布式架构 -----> SOA(面向服务架构) ------> 微服务

1.传统的三层架构

在传统的架构中,SSH,SSM,主要分为web 控制层,业务逻辑层,数据库访问层,单点项目,项目没有拆分,所有的开发任务全部写在一个项目中,耦合度比价高,如果程序中的一个功能出现了问题,所导致的就是整个服务挂掉。

2.SOA 架构

因为传统项目的耦合度比较高,所以架构的发展逐步面向服务化,将共同的业务逻辑抽取出来,形成一个服务,可以供其他服务所调用,服务和服务之间的调用通过RPC远程调用(底层就是httpclient技术)。

SOA 架构中通常使用xml 实现通讯,xml 比较重,占宽带,相对冗余,在高并发情况下,很受影响。底层是使用webservice 技术,ESB 消息总站。

3.微服务架构

Springcloud 就是微服务架构,是由SOA 架构发展而来,没有ESB 总站的传输方式,采用http + json 轻量级的传输方式。

微服务的架构比SOA更加的轻量级。

微服务架构中,服务的独立性更加的强,可以有独立数据库,独立的缓存、数据库、消息队列等资源,保障服务与服务之间更加的不受影响。

微服务架构中,服务化的粒度更加的精细,所以,更加适合敏捷开发。

二、一些常用的框架介绍

根据框架在体系的不同作用,主要可以分为:

服务治理(注册中心):Dubbo (阿里巴巴)、Dubbox(当当网在Dubbo继续开发的)、Eureka(已经闭源了)、consul

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

分布式任务调度平台:xxl-job

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

从市面上目前的使用情况来看,dubbo以及springcloud活跃度是很高的,所以针对性的介绍一下以及它们之间的异同。

1.什么是dubbo,原理是什么?

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

主要核心部件:

  • Remoting:网络通信框架,实现了 sync-over-async 和 request-response 消息机制;
  • RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能;
  • Registry: 服务目录框架用于服务的注册和服务事件发布和订阅。

工作原理:

dubbo官网的架构设计提供了一张整体的框架图,10个层级看起来挺吓人的。但是其核心总结起来就是:Microkernel + Plugin(微内核+插件)。

  • Provider       暴露服务方称之为“服务提供者”。
  • Consumer    调用远程服务方称之为“服务消费者”。
  • Registry       服务注册与发现的中心目录服务称之为“服务注册中心”。
  • Monitor        统计服务的调用次数和调用时间的日志服务称之为“服务监控中心”。

(1) 连通性:

1.注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小;

2.监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示;

3.服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销;

4.服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销;

5.注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外;

6.注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者;

7.注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表;

8.注册中心和监控中心都是可选的,服务消费者可以直连服务提供者。

(2) 健壮性:

1.监控中心宕掉不影响使用,只是丢失部分采样数据;

2.数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务;

3.注册中心对等集群,任意一台宕掉后,将自动切换到另一台;

4.注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯;

5.服务提供者无状态,任意一台宕掉后,不影响使用;

6.服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复。

(3) 伸缩性:

1.注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心;

2.服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者。

2.什么是springcloud,原理是什么?

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

SpringCloud的组成

Spring Cloud由众多子项目组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。

下面对其核心五大部件做一个简单介绍:

(1)服务发现——Netflix Eureka

一个RESTful服务,用来定位运行在AWS地区(Region)中的中间层服务。由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。

(2)客服端负载均衡——Netflix Ribbon

Ribbon,主要提供客户侧的软件负载均衡算法。

Ribbon客户端组件提供一系列完善的配置选项,比如连接超时、重试、重试算法等。Ribbon内置可插拔、可定制的负载均衡组件。下面是用到的一些负载均衡策略:

  • 简单轮询负载均衡
  • 加权响应时间负载均衡
  • 区域感知轮询负载均衡
  • 随机负载均衡

Ribbon中还包括以下功能:

  • 易于与服务发现组件(比如Netflix的Eureka)集成
  • 使用Archaius完成运行时配置
  • 使用JMX暴露运维指标,使用Servo发布
  • 多种可插拔的序列化选择
  • 异步和批处理操作(即将推出)
  • 自动SLA框架(即将推出)
  • 系统管理/指标控制台(即将推出)

(3)断路器——Netflix Hystrix

断路器可以防止一个应用程序多次试图执行一个操作,即很可能失败,允许它继续而不等待故障恢复或者浪费 CPU 周期,而它确定该故障是持久的。断路器模式也使应用程序能够检测故障是否已经解决。如果问题似乎已经得到纠正​​,应用程序可以尝试调用操作。

断路器增加了稳定性和灵活性,以一个系统,提供稳定性,而系统从故障中恢复,并尽量减少此故障的对性能的影响。它可以帮助快速地拒绝对一个操作,即很可能失败,而不是等待操作超时(或者不返回)的请求,以保持系统的响应时间。如果断路器提高每次改变状态的时间的事件,该信息可以被用来监测由断路器保护系统的部件的健康状况,或以提醒管理员当断路器跳闸,以在打开状态。

(4)服务网关——Netflix Zuul

类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。

(5)分布式配置——Spring Cloud Config

这个还是静态的,得配合Spring Cloud Bus实现动态的配置更新。

3.SpringCloud和Dubbo的区别

最大区别:SpringCloud抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式。总体来说,两者各有优势。虽说后者服务调用的功能,但也避免了上面提到的原生RPC带来的问题。而且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的依赖,这在强调快速演化的微服务环境下,显得更加合适。

这也相当于品牌机与组装机的区别。很明显SpringCloud比dubbo的功能更强大,覆盖面更广,而且能够与SpringFramework、SpringBoot、SpringData、SpringBatch等其他Spring项目完美融合,这些对于微服务至关重要。使用Dubbo构建的微服务架构就像组装电脑、各环节我们选择自由度高,但是最总可能会因为内存质量而影响整体,但对于高手这也就不是问题。而SpringCloud就像品牌机,在Spring Source的整合下,做了大量的兼容性测试,保证了机器拥有更高的稳定性。

SOA架构与微服务架构到底是什么?以及对应的一些常用的框架简介相关推荐

  1. SOA架构和微服务架构之间的关系

    写在前面: 你好,欢迎你的阅读! 我热爱技术,热爱分享,热爱生活, 我始终相信:技术是开源的,知识是共享的! 博客里面的内容大部分均为原创,是自己日常的学习记录和总结,便于自己在后面的时间里回顾,当然 ...

  2. 分布式与微服务——Iaas,Paas和Saas、单体应用和缺点、微服务概念、传统 分布式 SOA 架构与微服务架构的区别、微服务实战、什么是RPC、CAP定理和BASE理论、唯一ID生成、实现分布式

    文章目录 1-什么是Iaas,Paas和Saas 一 IaaS基础设施服务 二 paas平台即服务 三saas软件即服务 四 总结 2-单体应用和缺点 一 单体应用 二 单体应用的缺陷 3-微服务概念 ...

  3. 系统架构的演变过程(单体应用架构、垂直应用架构、分布式SOA架构、微服务架构)

    文章目录 系统架构演变 单体应用架构 垂直应用架构 分布式SOA架构 什么是SOA 微服务架构 分布式SOA架构和微服务架构对比 系统架构演变 随着互联网的发展,网站应用的规模不断扩大,常规的应用架构 ...

  4. SOA架构和微服务架构的区别(转载)

    文章目录 1.SOA架构和微服务架构的区别 2.ESB和微服务API网关 1.ESB(企业服务总线) 2.API网关: 3.SOA架构特点: 4.微服务架构特点: 1.通过服务实现组件化 2.按业务能 ...

  5. 单体应用、SOA架构、微服务架构的对比

    目录 前言: 单体架构 SOA架构 微服务架构 前言: 随着近年来云技术的发展,越来越多的用户选择使用云技术来代替传统的IT基础设施.在云技术发展的早期,业界的关注点集中在虚拟化.分布式.存储等laa ...

  6. 单体架构-->SOA架构-->微服务架构

    上诉架构图采用了分层架构,按照调用顺序,从上到下为表示层.业务层.数据访问(DAO)层.DB层.表示层负责用户体验,业务层负责业务逻辑,包括电影.订单和用户三个模块.数据访问层负责DB层的数据存取,实 ...

  7. 微服务架构 之 互联网项目架构演变过程 (单点架构,模块化架构,分布式架构,soa架构,微服务架构)

    一.什么是单点系统(传统架构)? 1.传统的SSH,SSM 架构,分为三层架构 web控制层.业务逻辑层.数据库访问层. 2. 传统架构也就是单点应用,就是大家在刚开始初学JavaEE技术的时候SSH ...

  8. SOA架构和微服务架构的区别是什么

    本文来说下SOA架构和微服务架构的区别是什么 文章目录 SOA架构和微服务架构的区别 ESB和微服务API网关 SOA架构特点 微服务架构特点 本文小结 SOA架构和微服务架构的区别 首先SOA和微服 ...

  9. 组件化、模块化、集中式、分布式、服务化、面向服务的架构、微服务架构

    组件化.模块化.集中式.分布式.服务化.面向服务的架构.微服务架构 最近最火的词是什么?那大概就是微服务(Microservice)了.最近也火的一踏糊涂的Docker.DevOps也都是围绕着微服务 ...

  10. 一文看懂Java微服务架构,WEB2.0,垂直架构,分布式架构,微服务架构

    Java微服务架构 目录: 了解开发环境&生成环境 WEB1.0 & WEB2.0 垂直架构 分布式架构 微服务架构 1.了解开发环境&生产环境 1.1 开发环境 平时在写代码 ...

最新文章

  1. 好多Javascript日期选择器呀--1
  2. 国外厂商在行业客户上输单的原因
  3. url 自动加入链接
  4. pyqt5教程11:绘制外观
  5. Spring Cloud Kubernetes容器化实践
  6. 深度学习入门:Day-11_CNN
  7. Java技术学习路线图
  8. cogs 1111. 最短路
  9. Linux上的errno和strerror
  10. Fuzzing技术分析
  11. 用eviews做svar模型_SVAR模型制作过程
  12. 【企业邮箱注册】管理员如何设置定期修改密码?
  13. 幂模函数方程组的解法(一)
  14. Stm32F4x采用外部触发法测矩形波频率和占空比
  15. 怎么用notepad将html格式化,Notepad++如何使用Tidy2格式化HTML文档?
  16. 小白学 Python 爬虫(13):urllib 基础使用(三)
  17. 加密软件 PGP安装教程。
  18. html画布里增添颜色,在HTML5画布中更改笔触颜色
  19. java 音频 二进制互转,将音频文件转二进制分包存储到Redis(奇淫技巧操作)
  20. matlab两横排合并,Matlab设置Legend横排、分块

热门文章

  1. css的引入方式和选择器
  2. guanyongyu3
  3. 喜迎双旦 岁末狂欢丨誉天2021开年大促
  4. 基于JavaScript的电池图标批量下载
  5. 计算机维护维修实训报告,计算机维护维修实训报告.doc
  6. 机智云OTA实践教程
  7. 【历史上的今天】1 月 3 日:苹果公司正式注册成立;《电脑报》正式创刊;英特尔创始人诞生
  8. 使用HTML编写简单的新闻页面
  9. oracle linux i386,在CentOS 5.5 i386 上安装 Oracle 10G XE
  10. ReadFile() WIN API