微服务之SpringCloud

微服务

系统架构的演变

单体应用架构

  • 优点:开发简单,适用于小型应用
  • 缺点:一旦项目庞大,不易扩展,维护,代码耦合

垂直应用架构

  • 优点
    • 解决高并发问题
    • 针对不同的模块优化
    • 方便水平扩展,容错
  • 缺点
    • 系统间相互独立
    • 重复开发工作

分布式架构

  • 缺点:服务的调度、评估、治理困难

分布式SOA架构

即面向服务的架构(SOA),是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。涉及的架构:esb总线、dubbo框架
在这里插入图片描述

  • 优点:
    • 抽取公共的功能为服务,提高开发效率
    • 对不同的服务进行集群化部署解决系统压力
    • 基于ESB/DUBBO减少系统耦合
  • 缺点:
    • 抽取服务的粒度较大
    • 服务提供方与调用接口耦合度较高

解决:微服务架构

  • 优点:
    • 通过服务的原子化拆分,以及微服务独立打包、部署和升级,小团队的交付周期将缩短,运维成本也将大幅度下降。
    • 微服务遵循单一原则,微服务之间采用Restful等轻量级协议传输。
  • 缺点:
    • 微服务过多,服务治理成本高,不利于系统维护。
    • 分布式系统开发的成本高(容错、分布式事务等)

SOA与微服务的关系

功能 SOA 微服务
组件大小 大块业务逻辑 单独任务或小块业务逻辑
耦合 通常松耦合 总是松耦合
公司架构 任何类型 小型、专注于功能交叉团队
管理 着重中央管理 着重分散管理
目标 确保应用能够交互操作 执行新功能、快速拓展开发

分布式核心知识

远程调用技术

流行的调用技术RPC、HTTP

RPC协议

远程过程调用(Remote Procedure Call)的缩写形式,

方法接口参数
解析之后的返回值
解析数据调用的服务
返回值
服务消费者
序列化反序列化
网络传输TCP协议
序列化反序列化
服务提供者
RESTful接口

REST是英文representational state transfer(表象性状态转变)或者表述性状态转移;Rest是web服务的一种架构风格;使用HTTP,URI,XML,JSON,HTML等广泛流行的标准和协议;轻量级,跨平台,跨语言的架构设计;它是一种设计风格,不是一种标准,是一种思想。

区别与联系
比较项 RESTful RPC
通讯协议 HTTP 一般使用TCP
性能 略低 较高
灵活度
应用 微服务架构 SOA架构

1、HTTP相对更规范、更标准、更通用,无论哪种语言都支持http协议。如果你是对外开放平台,外部的编程语言多种多样,你无法拒绝对每种语言的支持,现在是开源中间件,基本最先支持的几个协议都包含RESTful。
2、PRC框架作为架构微服务化的基础组件,它能大大降低架构微服务化的成本,提高调用方与服务提供方的研发效率,屏蔽进程调用函数的各类复杂细节。让调用方感觉就像调用远程函数一样调用端口函数,让服务提供方感觉就像实现一个本地函数一样来实现服务。

常见的微服务框架

SpringCloud

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

ServiceComb

ServiceComb是华为2017年开源的微服务框架,ServiceComb在华为内部的实践中沉淀了丰富的企业级应用开发经验,该项目已于2017年12月进入Apache孵化器。华为把他贡献给了Apache,现在已经成为了Apache的顶级项目。
Apache ServiceComb的官网:http://servicecomb.apache.org/cn/

ZeroC ICE

Ice(Internet Communications Engine)是一个面向对象的RPC框架,它可以帮助你轻松地构建分布式应用。通过使用Ice,用户可以将更多的注意力放在自己应用程序的逻辑上,至于底层网络程序接口的交互则由Ice负责。通过使用Ice,用户不需要再为一些细节担忧,例如开放式网络连接、网路传输的序列化和反序列化,以及连接的失败重传问题。
ZeroC ICE下载官网:https://zeroc.com/downloads/ice

Spring Cloud

首先,尽管Spring Cloud带有“Cloud”这个单词,但它并不是云计算解决方案,而是在Spring Boot基础之上构建的,用于快速构建分布式系统的通用模式的工具集。
其次,使用Spring Cloud开发的应用程序非常适合在Docker和PaaS(比如Pivotal Cloud Foundry)上部署,所以又叫做云原生应用(Cloud Native Application)。云原生可以简单地理解为面向云环境的软件架构。

Spring Cloud具有如下特点:

约定大于配置
适用于各种环境
隐藏了组件的复杂性,并提供声明式、无XML式的配置方式
开箱即用,快速启动
组件丰富,功能齐全

springcloud的版本说明:

springcloud项目是由多个独立项目集合而成的,每个项目都是独立的,各自进行自己的迭代和版本发布。所以springcloud不方便使用版本号来管理,而是使用版本名。以避免和子项目版本号的冲突。

常用的5个组件

服务发现——Netflix Eureka
客服端负载均衡——Netflix Ribbon
断路器——Netflix Hystrix
服务网关——Netflix Zuul
分布式配置——Spring Cloud Config

Netflix Eureka

作用:实现服务治理(服务注册与发现)
简介:Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。
由两个组件组成:Eureka服务端和Eureka客户端。
Eureka服务端用作服务注册中心。支持集群部署。
Eureka客户端是一个java客户端,用来处理服务注册与发现。
在应用启动时,Eureka客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地。客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。

Netflix Ribbon

作用:Ribbon,主要提供客户侧的软件负载均衡算法。
简介:Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

Netflix Hystrix

作用:断路器,保护系统,控制故障范围。
简介:为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

Netflix Zuul

作用:api网关,路由,负载均衡等多种作用
简介:类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。
在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务。当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端。

Spring Cloud Config

作用:配置管理
简介:SpringCloud Config提供服务器端和客户端。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。
这个还是静态的,得配合Spring Cloud Bus实现动态的配置更新。

发布了11 篇原创文章 · 获赞 5 · 访问量 734

猜你喜欢

转载自blog.csdn.net/JAVA_php_Jack/article/details/103103494