其他分享
首页 > 其他分享> > duboo仿猫眼微服务架构—微服务入门

duboo仿猫眼微服务架构—微服务入门

作者:互联网

duboo仿猫眼微服务架构)

微服务入门

传统业务应用

在没有提出微服务的概念时,一个软件应用,往往会将应用所有功能都开发和打包在一起,运行在通用的服务器上,如Tomcat等。此时,大多数应用都在一个JVM中,随着应用的增大,性能会不断下降;业务之间的耦合严重,即使企业内部有规范和约束,但随着业务逻辑复杂度的增加,开发人员的不断流动,整个应用的维护变得越来越难。

传统应用带来的问题:

微服务发展历程

随着互联网应用规模不断扩展,单体应用架构无法满足需求,分布式应用势在必行。

面向服务开发-SOA

SOA(Service-Oriented Architecture)将单一进程的应用做了拆分,形成独立对外提供服务的组件,每个组件通过网络协议对外提供服务。通过这种协议,服务之间可以通过接口进行交互。通过这种架构,将重复的功能抽取为服务,可以提高开发效率,提高系统的可重用性、减少系统中的接口耦合。

常用的SOA实现方式有两种:Web Service和ESB。Web Service通常使用SOAP协议,即用HTTP和HTTPS来传输XML数据。所有的Web Service服务都会注册到Web Service的目录中,每个服务都依赖于这个目录来发现存在的服务。

ESB简称企业服务总线,服务之间的通信与调用都通过总线来完成,ESB作为项目与服务之间通信的桥梁。

缺点

微服务开发

SOA最早的出现是为了解决企业不同系统之间整合的问题,提出服务重用和消息总线。SOA中存在大量的编排,通常通过消息总线来承载业务逻辑,并构建出重量级中心化的中间件。SOA有个很大的问题在于总线,按照这个思想,这些系统总会在某个环节上走向集中,所以去中心化做的很不彻底。

微服务和SOA一脉相承,是一种将业务系统进一步拆分的架构风格。

微服务强调每个单一业务都独立运行,每个单一服务都应该使用更轻量级的机制保持通信。

微服务不强调环境,可以不同语言或数据源,它不关心你用的是Java还是Python,数据库用的是Mysql还是Redis,仅面向自身单一的服务。

特点

常见分布式系统框架

分布式系统框架
接入层
CDN:静态资源缓存
LVS:负载均衡
Nginx:负载和反向代理

Openresty
Nginx+Lua的中间件
处理非业务数据 IP黑名单等应用防火墙 在应用之前做拦截等

应用层
微服务框架
服务治理
自动化运维发布

缓存
热点数据 分布式Session

消息队列
异步 解耦 削峰

持久层
MySQL 文件系统

微服务的选择

Dubbo

Dubbo主要基于Netty和Mina构成,提供高性能、透明的RPC调用。Dubbo可以让开发者像调用本地方法一样调用远程服务,而不需要显式在代码中指定是远程调用。整个过程对开发者透明,Dubbo会自动完成后续的所有操作,例如:负载均衡、路由、协议转换、序列化等。开发者只需要接收对应的调用结果即可。

Dubbo提供了注册中心机制,解耦了消费方和服务方动态发现的问题,并提供高可靠能力,大量采用微内核+富插件设计思想,包括框架自身核心都作为扩展点实现,提供灵活地可扩展能力。
在这里插入图片描述
服务提供者在启动时会向注册中心注册自己的元数据(服务IP和端口等),服务消费方在启动时从注册中心订阅服务提供方的元数据,注册中心发生数据变更会推送给订阅的消费者。在获取服务元数据后,服务消费方可以发起RPC调用,在RPC调用前后会向监控中心上报统计信息。

分类 Dubbo的特性
面向接口代理的高性能RPC调用 基于代理的远程调用,服务以接口为粒度
服务自动注册与发现 支持多种注册中心服务,服务实例上下线实时感知
运行期流量调度 内置路由策略,通过配置不同的路由规则,轻松实现灰度发布、同机房优先等功能
智能负载均衡 内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量
高度可扩展能力 Protocol、Transport、Serialization被设计为扩展点
可视化的服务治理与运维 随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数

SpringCloud

微服务全家桶

Spring Cloud由众多子项目组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。比如使用Spring Cloud Config 可以实现统一配置中心,对配置进行统一管理;使用Spring Cloud Netflix 可以实现Netflix 组件的功能 - 服务发现(Eureka)、智能路由(Zuul)、客户端负载均衡(Ribbon)。

Dubbo类似于Spring Cloud的一个子集,Dubbo功能和文档完善,在国内有很多的成熟用户。Dubbo具有调度、发现、监控、治理等功能,支持相当丰富的服务治理能力。Dubbo架构下,注册中心对等集群,并会缓存服务列表,当服务下线时继续提供发现功能,本身的服务发现结构有很强的可用性与健壮性,足够支持高访问量的网站。

Dubbo底层是使用Netty这样的NIO框架,是基于TCP协议传输的,配合以Hession序列化完成RPC通信。而SpringCloud是基于Http协议+rest接口调用远程过程的通信,相对来说,Http请求会有更大的报文,占的带宽也会更多。但是REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更为合适,至于注重通信速度还是方便灵活性,具体情况具体考虑。
对于类似于电商等同步调用场景多并且能支撑搭建Dubbo 这套比较复杂环境的成本的产品而言,Dubbo 确实是一个可以考虑的选择。

Zero ICE

二进制流

Dubbo

Dubbo总体分为业务层、RPC层、Remote层。Dubbo框架中的分层代表了不同的逻辑实现,他们是一个个组件,这些组件构成了整个Dubbo体系。
dubbo框架

层次名 作用
Service 业务层。业务代码的接口与实现
config 配置层。围绕ServiceConfig和ReferenceConfig两个实现类展开,初始化配置信息
proxy 服务代理层。代理层自动做远程调用并返回结果
register 注册层。负责Dubbo框架的服务注册与发现
cluster 集群容错层。远程调用失败时的容错策略;选择具体调用节点时的负载均衡策略;特殊调用路径的路由策略
monitor 监控层。监控统计调用次数和调用时间等
protocol 远程调用层。Invoker暴露和引用的主功能入口,管理Invoker的生命周期。
exchange 信息交换层。建立Request-Response模型,封装请求响应模式,如把同步请求转化为异步请求
transport 网络传输层。把网络传输(如Netty、Mina)抽象为同一的接口
Serialoze 序列化层。管理整个框架网络传输时的序列化/反序列化工作

标签:SOA,Dubbo,调用,服务,duboo,接口,应用,猫眼
来源: https://blog.csdn.net/weixin_43867524/article/details/105568334