分布式服务框架之功能模型
来源:互联网 发布:淘宝直通车关键词词典 编辑:程序博客网 时间:2024/04/30 01:27
分布式服务框架
随着业务的扩展,应用规模不断扩大,系统内部巨无霸应用越来越多,常规的垂直应用架构无法应对复杂业务带来的各种挑战。通过将业务公告能力抽象成原子服务,对复杂应用进行水平拆分合垂直拆分,实现服务消费者和生产者的解耦,降低重复模块开发的人力成本和时间成本。
框架功能
尽管不同的分布式框架实现细节略有差别,功能特性也不近相同,但是都具有以下基本特性。
服务订阅与发布 :
- 配置化发布和引用服务:
客户端通过xml文件配置进行服务的引用,服务端通过xml文件配置进行服务的发布,降低代码的侵入性; - 服务自动发现机制:
支持服务试试自我发现,注册中心推送服务的上线下线或者地址变更,对于客户端来说服务透明化,降低消费者和服务者耦合性。 - 服务在线注册和去注册:
支持运行态服务的上下线,对于消费端来说,具有消息通知机制保证服务状态的更新。
- 配置化发布和引用服务:
服务路由:
- 支持默认路由:
例如随机,轮询,权重路由策略。 - 路由定制:
支持用户个性化路由策略定制。
- 支持默认路由:
集群容错:
- FailOver机制:
失败自动切换,当出现失败,重试其他服务器,通常用于读操作 - Failback机制:
失败自动回复,日志记录失败请求,定时重发,通常用于写操作 - Failfast机制:
快速失败,只发起一次调用,失败立即报错。
- FailOver机制:
服务调用:
- 同步调用:
消费者发起服务调用后,阻塞等待服务端响应。 - 异步调用:
消费者发起调用以后,不阻塞立即返回,由服务端返回应答异步通知消费端。 - 并行调用:
消费者同时对多个服务发起调用。
- 同步调用:
多协议支持:
- 支持公有协议:
- 支持私有协议:
序列化:
- 二进制序列化:
支持Thrift, Protocol buff等二进制协议,提升序列化性能 - 文本序列化:
支持json,xml等文本类型的序列化方式,提升通用性和可读性。
- 二进制序列化:
统一配置管理:
- 本地静态配置:
安装部署修改一次,运行态不修改的配置,可以存放在本地配置文件中。 - 基于配置中心动态配置:
运行太需要调整的参数,统一放到哦欸之中心(服务注册中心),修改之后同意下发,即时生效
- 本地静态配置:
系统可靠性
服务由单机应用扩展为多机集群甚至多机房调用,由于机器/网络故障等原因,都由可能导致服务调用失败,导致业务失败率增加,分布式服务框架需要具备很强的可靠性,具体措施如下:
- 服务注册中心:
- 服务健康状态检测:
注册中心通过心跳检测服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者。 - 故障切换:
注册中心对等集群,任意一台宕机,将自动切换到另一台 - 高可用:
注册中心全部当掉,消费者和服务者仍能通过本地缓存进行通信。
- 服务健康状态检测:
- 消除单点故障:
- 服务无状态:
- 服务避免全局吗变量,人员一台宕机,不影响使用
- 服务集群容错:只要就能中一台服务提供者可用,业务就不会中断。
- 网络链路健壮性:
- 心跳检测:
网络链路空闲时没有业务消息,通过定时心跳检测链路是否可用。 - 断连重连机制:
链路意外断连后,根据客户端配置的重连策略定时重连,重连 成功自谦消息不会路由到服务提供者上。
- 心跳检测:
性能要求
应用分布式化以后,由原来的本地API调用变成跨进程/跨机器、甚至跨区域调用,网络通信、消息序列化和反序列化、反射调用和动态代理等都会导致性能损耗,了如果服务框架性能比较差,时延将会被方法数十倍,因此,分布式服务框架的性能指标非常重要。
注:
源代码见GitHub
Github博客
后记:纵使烟雾缭绕,我必奋然前行。
阅读全文
0 0
- 分布式服务框架之功能模型
- 分布式系统架构之框架化服务
- 分布式服务之Dubbo_01_基础框架搭建
- 分布式服务框架之原理实现
- 分布式服务框架之服务化最佳实践
- 分布式服务框架之服务化最佳实践
- 分布式服务框架之服务化最佳实践
- 分布式服务框架之服务化最佳实践
- 分布式服务框架之服务化最佳实践
- 分布式服务框架 Zookeeper
- 分析分布式服务框架
- 分布式服务框架 Zookeeper
- 分布式服务框架 Zookeeper
- 分布式服务框架 Zookeeper
- 分布式服务框架
- ZooKeeper--分布式服务框架
- 分析分布式服务框架
- 分布式服务框架 Zookeeper
- uml静态结构
- 六-2 检查和编辑页面和样式 编辑样式
- shiro 简单的身份验证 案例
- angular的样式变化
- DataFrame条件筛选完胜for+if,提速50倍
- 分布式服务框架之功能模型
- 内部类的编码及使用,包括成员内部类,局部内部类,匿名内部类
- 常用Linux命令及其含义
- 【上海校区】PHP命名空间及简单运用
- monkey如何执行入门基础
- C# Linq 实现 对表某类型的数据统计
- 概率DP
- JSON
- 验证手机号码的正则表达式