微服务架构体系
架构的演进
-
(1)单体应用:在第一阶段的单体应用很好理解。
-
(2)垂直应用:接着随着业务量增大, 将应用拆成互不相干的几个应用,Web框架(MVC) 是关键。
-
这一步,前后端分离、使用缓存、数据库和应用服务分离都会做, 但服务间是独立的无法调用,且可能存在重复代码。
-
(3)分布式应用:垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务。这时用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
-
集群、读写分离、反向代理、加速、分布式数据库、nosql、服务拆分都会处理、消息。
-
实现了服务调用,代码复用
-
(4)弹性流动计算:服务越来越多,容量评估,资源的使用等问题逐渐显现,需要调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的 资源调度和治理中心(SOA 面向服务架构) 是关键。
-
这时候要有一个注册中心,调用关系不需要自行维护了。
-
Dubbo 就是SOA的概念了,更关注RPC和服务治理。
-
(5)微服务:最后是通俗含义的微服务,使用 SpringCloud编码,使用Docker、K8S等,解决微服务软运维问题。
-
微服务本身也算是面向服务架构(SOA),它是SOA发展道路上的优化选择,关注的是服务拆分力度,即:如何将服务合理的拆的更细、更小
-
微服务需要关注点又更多,监控、日志、安全、调度、弹性容错等
微服务和SOA
-
微服务相比于SOA更加精细,微服务更多的以独立的进程的方式存在,互相之间并无影响,不再需要协调其它服务部署对本服务的影响;
-
微服务提供的接口方式更加通用化,如HTTP RESTful,各种终端都可以调用,无关语言、平台,所以技术可以更随意,只需要提供API
-
微服务更倾向于分布式去中心化的部署方式,数据的去中心化,也可以使用更不同的数据库技术;
-
微服务运维使用docker,k8s 可以自动化部署,集中管理
Spring Cloud 和 Dubbo
传输方式:
-
Dubbo底层用Netty这样的NIO框架,基于TCP协议传输的,配合以Hession序列化完成RPC通信;
-
SpringCloud基于Http协议+rest接口调用远程过程的通信,
-
相对来说,Http会有更大的报文,占的带宽也更多。但是REST相比RPC更灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更为合适,至于注重通信速度还是方便灵活性,具体情况具体考虑。
模块区别:
Dubbo 主要分为服务注册中心,服务提供者,服务消费者,还有管控中心;
SpringCloud则是一个完整的分布式一站式框架,服务注册中心,服务提供者,服务消费者,管控台,断路器,分布式配置服务,消息总线,以及服务追踪等;
架构 SpringCloud
流程:
-
请求统一通过 API 网关(Zuul)来访问内部服务。
-
网关接收到请求后,从注册中心(Eureka)获取可用服务。
-
由 Ribbon 进行均衡负载后,分发到后端具体实例。
-
微服务之间通过 Feign 进行通信处理业务。
-
Hystrix 负责处理服务超时熔断。
-
Turbine 监控服务间的调用和熔断相关指标。
架构 Dubbo
原文地址:https://www.cnblogs.com/KL2016/p/15120418.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一行代码不用写,就可以训练、测试、使用模型,这个star量1.5k的项目帮你做到
- 打造自己最喜爱的 Windows10 —— 纯命令安装系统篇
- Ubuntu18.04 切换 Python 版本
- Python3入门学习三.md
- Yur 主题 MarkDown 展示
- Python3入门学习一.md
- 前后端分离探索——MVC 项目升级的一个过渡方案
- Python3配置和入坑.md
- 别再被叫linux小白了,你跟linux高手只差这8个快捷键命令?
- CentOS7 手动部署 BBR
- 为受管理的 PC 设置 Chrome 浏览器政策
- Git 克隆大型仓库失败解决方法
- Jmeter关联数据库及JDBC请求
- Java正则表达式
- JSON.parse() 的非严格模式