写点什么

微服务:服务本身的设计、维护以及治理

用户头像
积极&丧
关注
发布于: 2020 年 12 月 25 日

Web Service 与企业级分布式服务

  • 服务提供者通过WSDL(Web服务描述语言,Web Service Dwscription Language)向注册中心(Service Broker)描述自身提供的服务接口属性,注册中心使用UDDI(Universal Description,Discovery,and Integration,统一描述、发现和集成)发布服务提供者提供的服务,服务请求者从注册中心检索到服务信息后,通过SOAP(Simple Object Access Protocol,简单对象访问协议)和服务提供者通信,使用相关服务。

  • Web Service 虽然有着成熟的技术规范和产品实现,以及在企业应用领域有许多成功的案例,但是也具有一些固有的缺点:

  • 臃肿的注册与发现机制

  • 低效的XML序列化手段。

  • 开销相对较高的HTTP远程通信。

  • 复杂的部署与维护手段。

  • 这些问题导致webervice 难以满足大型网站对系统高性能、高可用、易部署、易维护的要求。

微服务框架需求

  • 对于大型互联网,除了Web Service 所规范的服务注册与发现,服务调用等标准功能,还需要微服务框架能够支持:

  • 负载均衡

  • 对于集群部署的服务提供者,服务请求者可以使用加权轮询等手段访问,使服务提供者集群实现负载均衡。

  • 失效转移(Fail Over)

  • 对于大型网站的微服务而言,即使是很少访问的简单服务,也需要集群部署,同时微服务框架还需要支持服务提供者的失效转移机制,以实现服务高可用。

  • 高效的远程通信

  • 对于大型网站,核心服务每天的调用次数会达到数以亿计,如果没有高效的远程通信手段,服务调用可能会成为整个系统的瓶颈。

  • 对应用最少量侵入

  • 网站技术是为业务服务的,是否使用微服务需要根据业务发展规划,微服务也需要渐进式的演化,甚至会出现反复,即使用了微服务后又退回到集中式部署,微服务框架需要支持这种渐进式演化和反复。当然服务模板本身需要支持可集中式部署,也可分布式部署。

  • 版本管理

  • 为了应对快速变化的需求,服务版本升级不可避免,如果仅仅是服务实现升级,那么这种升级对服务请求者而言是透明的,无需关注。但是如果服务的访问接口发送变化,就需要服务请求者和服务提供者同时升级才不会导致服务调用失败。企业应用系统可以申请停机维护,同时升级接口,而网站服务不可能中断,需要服务提供者先升级接口,并同时提供历史版本的服务供请求者调用,当请求者访问接口升级后才可以关闭历史版本服务。

微服务框架(Dubbo)架构

Service Mesh 服务网格

Service Mesh Sidecar模式

  • 复杂的场景才合适

微服务架构落地

  • 业务先行,先理顺业务边界和依赖,技术是手段而不是目的。

  • 先有独立的模块,后有分布式的服务。

  • 业务耦合严重,逻辑复杂多变的系统进行微服务重构要谨慎。

  • 要搞清楚实施微服务的目的是什么,业务复用?开发边界清晰?分布式集群提升性能?

命令与查询职责隔离(CQRS)

  • 在服务接口层面将查询(读操作)与命令(写操作)隔离,实现服务层的读写分离。

  • 更清晰的领域模型

  • 针对读写分别优化,实现更好的性能。

  • 查询服务不会修改数据,更好地保护数据。

事件溯源

  • 将用户请求处理过程中的每次状态变化都记录到事件日志中,并按时间序列进行持久化存储。

  • 利用时间溯源,可以精确复现任何用户状态,进行复核审计。

  • 用事件溯源,可以有效监控用户状态变化,并在此基础上实现分布式事务。

断路器

  • 当摸个服务出现故障,响应延迟或者失败率增加,继续调用这个服务会导致调用者请求阻塞,资源消耗增加,进而出现服务级联失效,这种情况下使用断路器阻断对故障服务的调用,

  • 断路器三种状态:关闭、打开、半开。

服务重试及调用超时

上游调用者超时时间要大于下游调用者超时时间之和。

最重要的是需求



用户头像

积极&丧

关注

还未添加个人签名 2019.02.13 加入

还未添加个人简介

评论

发布
暂无评论
微服务:服务本身的设计、维护以及治理