Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2203|回复: 0
打印 上一主题 下一主题

让你一分钟了解分布式服务框架

[复制链接]

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
跳转到指定楼层
楼主
发表于 2018-5-3 09:42:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 java 于 2018-5-3 09:54 编辑

让你一分钟了解分布式服务框架

程序员的日常那些事 2018-05-02 19:07:00
[size=13.3333px]
1:应用架构的演进过程
说到分布式架构,首先需要了解一下应用架构的整个演进过程,如下图所示

第一代:MVC架构 :当业务规模很小时,将所有功能都部署在同一个进程中,通过双机或者前置负载均衡实现负载分流;此时,用于分离前后逻辑的Mvc架构是关键。
Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写
第二代:RPC架构:当垂直应用越来越多,应用之间交互不可避免,将核心和公共业务抽取出来,作为独立的服务,实现前后台逻辑分离、此时,用于提高业务复用和拆分的RPC框架是关键。
RPC(Remote Promote Call)远程过程调用 一种进程间通信方式。允许像调用本地服务一样调用远程服务。
第三代:SOA架构:随着业务发展,服务数量越来越多,服务生命周期管控和运行态的治理成为瓶颈,此时用于提升服务质量的SOA服务治理是关键。
SOA (面向服务的架构)Service-Oriented Architecture
第四代:微服务架构:随着敏捷开发,持续交付,DEVOPS理论的发展和实践,以及基于docker等轻量级容器部署应用和服务的成熟,微服务架构开始流行,逐渐成为应用架构的未来演进方向。通过服务的原子拆分,以及微服务的独立打包,部署和升级,小团队敏捷交付,应用的交付周期将缩短,运维成本也将大幅下降。
随着大型应用的不断发展,新的业务需求和功能不断增加,技术也在不断演进,不同团队构建的功能子系统采用的技术架构五花八门,子系统之前的开发,部署和运维模式也存在较大差异。传统垂直架构已经不能适应业务发展的需求,服务化改造才是最有效的方式。而改造的核心就是分布式服务架构。
2:分布式诞生的背景:
应用从集中式走向分布式。大规模系统架构的设计一般规则就是尽可能的拆分,以达到更好的独立扩展与伸缩,更灵活的部署,更好的隔离和容错,更高的开发效率。具体的拆分策略大体分为横向拆分和纵向拆分。
  • 横向拆分:将核心的,公共的业务拆分出来,通过分布式服务框架对业务进行服务化,消费者通过标准的契约来消费这些服务。服务提供者独立打包,部署,与消费者解耦。
  • 纵向拆分:通过对业务逻辑梳理,根据业务的特性把应用拆开,不同的业务模块独立部署,例如一个CRM系统就可以按照客户域,产品域,资源域等拆分,将复杂的业务线拆分成相对独立,灵活的具体能力域,由大到小,分而治之。

使用WEB服务或者rpc架构对业务进行拆分后,随着服务数的增多,急需一个服务治理框架,有效管控服务,提升服务运行期质量,防止业务服务代码架构腐化。服务治理主要有以下几点:
  • 生命周期管理:服务上线,测试发布和下线通知机制要规范化。
  • 服务容量规划:随着业务的发展,服务调用量越来越大,服务的容量问题逐渐显现出来。需要通过采集服务调用性能,时延,成功率,系统资源占用等综合指标,为容量规划提供精确的数据支持。
  • 运行期治理:流量陡增,系统资源成为瓶颈,对非核心服务采取降级,限流的措施,保证核心业务的运行;缓存失效时,系统压力转移到数据库,服务调用时延突然增大,业务失败率升高,需要在线调大服务调用超时时间,保证业务成功率;非核心服务发生故障时,希望对业务放通,不调用远程服务,取而代之的是执行本地的降级逻辑。
  • 服务安全:敏感数据需要有权限控制。

3:分布式服务框架设计
尽管不同的分布式架构实现细节存在差异,但是核心功能差异不大。通常,分布式服务框架的架构可以抽象为三层。
1)RPC层:包括底层通信框架(例如NIO框架),序列化和反序列化框架,用于屏蔽底层通信协议细节和序列化方式差异的Remoting框架。
2)Filter Chain层:服务调用职责链,提供多种服务调用切面提供框架自身和使用者扩展,例如负载均衡,服务调用性能统计,服务调用完成通知机制,失败重发等。
3)Service层:主要包括java动态代理,消费者使用,主要用于将服务提供者的接口封装成远程服务调用:java反射,服务提供者使用,根据消费者请求消息中的接口名,方法名,参数列表反射调用服务提供者的接口本地实现类。
从功能角度看,分布式服务框架通常会包含另外两个重要功能:服务治理中心和服务注册中心,业务需求不同,具体实现细节也存在很大差异。以服务注册中心为例,HSF使用的是基于数据库的ConfigServer,Dubbo默认使用的是Zookeeper。
服务注册中心负责服务的发布和通知,通常支持对等集群部署,某一个服务注册中心当机并不会导致整个服务注册中心集群不可用。
服务治理中心通常包含服务治理接口和服务治理Portal,架构师,测试人员和系统维护人员通过服务治理Portal对服务的运行状态,历史数据,健康度和调用关系等进行可视化的分心和维护,目标就是要持续优化服务,防止服务架构腐化,保证服务高质量运行。
4:分布式架构的功能特性
1)服务订阅发布:
  • 配置化发布和引用服务:支持通过XML配置的方式发布和导入服务,降低对业务代码的侵入。
  • 服务自动发现机制:支持服务实时自动发现,由注册中心推送服务地址,消费者不需要配置服务提供者地址,服务地址透明化。
  • 服务在线注册和去注册:支持运行态注册新服务,也支持运行态取消服务注册。

2)服务路由:
  • 默认提供随机路由、轮循、基于权重的路由策略等:默认提供常用的路由策略,避免每个框架使用者都重复开发
  • 粘滞连接:总是向同一个提供方发起请求,除非此提供方挂掉,再切换到另一台
  • 路由定制:支持用户自定义路由策略,扩展平台的功能

3)集群容错
  • Failover:失败自动切换,当出现失败,重试其他服务器,通常用于读操作;也可用于幂等性写操作
  • Failback:失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作
  • Failfast:快速失败,只发起一次调用,失败立即报错,通常用于非幂等性的写操作

4)服务调用
  • 同步调用:消费者发起服务调用之后,同步阻塞等待服务端响应
  • 异步调用:消费者发起服务调用之后,不阻塞立即返回,由服务端返回应答后异步通知消费者
  • 并行调用:消费者同时对多个服务提供者批量发起服务调用请求,批量发起请求后,集中等待应答

5)多协议
私有协议:支持二进制等私有协议,支持私有协议定制和扩展
公有协议:提供 Web Service等公有协议,用于外部服务对接
6)序列化方式
  • 二进制类序列化:支持 Thrift、 Protocol buffer等二进制协议,提升序列化性能
  • 文本类序列化:支持JSON、XML等文本类型的序列化方式,提升通用性和可读性

7)统一配置
  • 本地静态配置:安装部署修改一次,运行态不修改的配置,可以存放到本地配置文件中
  • 基于配置中心的动态态配置:运行态需要调整的参数,统一放到配置中心(服务注册中心),修改之后统一下发,实时生效

5:分布式架构的性能特性
1)高性能:在同等资源占用情况下,单服务提供者的TPS要尽量高
2)低时延:在同等资源下,服务调用时延要尽量低
3)性能线性增长:扩展服务提供者,性能要能够线性增长
6:分布式架构的可靠性
应用有单机调用演进到分布式部署之后,由于网络故障,会导致业务失败率增加,分布式框架需要具备很强的可靠性来保证业务的成功率。
1)服务注册中心:
  • 健康状态监测:注册中心通过心跳检测服务提供者的存在,服务提供者当机,注册中心将立即推送事件通知消费者。
  • 故障切换:注册中心对等集群,任意一台当机后,将自动切换。
  • 高HA:注册中心全部当机后,服务提供者和服务消费者仍能通过本地缓存通信

2)消除单点故障:
  • 服务无状态:服务提供者无状态,任意一台当机后,不影响使用。
  • 服务集群容错:只要集群中有一台机器的服务提供之可用,业务就不会中断。

7:服务治理
1)服务运行态管控:
  • 服务路由:动态修改路由
  • 服务限流:资源成为瓶颈时,服务端和消费者的动态流控
  • 服务迁入迁出:实现资源的动态分配
  • 服务降级:服务提供者故障时或者业务高峰期,进行服务强制或者容错降级,执行本地降级逻辑,保证系统平稳运行
  • 服务超时控制:动态调整超时时间,在业务高峰期保障业务调用成功率

2)服务监控:
  • 性能统计:统计项包括服务调用时延、成功率、调用次数等
  • 统计报表:提供多维度、实时和历史数据报表,同比、环比等性能对比数据,供运维、运营等使用
  • 告警:指标异常,根据告警策略发送告警,包括但不限于短信、E-mail、记录日志等

3)服务生命周期管理
  • 上线审批:服务提供者不能随意线上发布服务,需要通过正规的审批流程批准之后才能上线
  • 下线通知:服务提供者在下线某个服务之前一段时间,需要根据SLA策略,通知消费者
  • 服务灰度发布:灰度环境划分原则、接口前向兼容性策略,以及消费者如何路由,都需要灰度发布引擎负责管理

4)故障快速定界定位
  • 分布式日志采集:支持在大规模分布式环境中实时采集容器、中间件和应用的各种日志
  • 海量日志在线检索:支持分布式环境海量日志的在线检索,支持多维度索引和模糊査询
  • 调用链可视化展示:通过分布式消息跟踪系统输出调用链,可视化、快速地进行故障定界
  • 运行日志故障定位:通过调用链的故障关键字,在日志检索界面快速检索故障日志,用于故障的精确定位

5)服务安全
  • 敏感服务的授权策略:敏感服务如何授权,防止恶意调用
  • 链路的安全防护:消费者和服务提供者之间的长连接,需要增加安全防护,例如基于Token的安全认证机制

目前,开源的分布式架构有阿里的dubbo,spring的spring cloudy。都是很不错的。大家有空可以研究一下源码,一定会有收获。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-23 12:36 , Processed in 0.060995 second(s), 22 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表