唯品会微服务架构演进之路

开发 架构
顶层的聚合API服务面向不同的业务线,提供统一的接口,方便前端应用调用。这种设计确保了用户操作的统一性和一致性。

唯品会是业界在服务化走得比较彻底的一家公司,主要体现有两方面,一是在彻底落地,二是纯自研。从2015年开始建设至今,微服务基础中台已经成为唯品会最为重要的技术基础设施之一,在唯品会所有关键业务场景全面深入落地,并承载着几乎全部用户流量的请求处理和后端服务调用。在体系内注册的独立服务数超过3000,独立方法数万级别,高峰时每小时承载着千亿次服务调用,服务化网关作为流量入口承载着百万级别QPS。

单体架构

特点:

  • 采用LAMP技术栈。
  • 所有功能模块都集成在一个应用程序中。
  • 数据库存在单点故障风险。

问题:

  • 随着业务增长,应用变得复杂,维护困难。
  • 数据库负载过高,扩展性差。

垂直应用架构

特点:

  • 将单体应用拆分为多个独立的垂直应用。
  • 每个应用有独立的数据库。

图片图片

垂直应用架构

特点:

  • 将单体应用拆分为多个独立的垂直应用。
  • 每个应用有独立的数据库。

问题:

  • 数据一致性难以保证。
  • 应用之间的依赖关系复杂,导致维护成本高。

图片图片

微服务架构

特点:

  • 将垂直应用进一步拆分为更小的微服务。
  • 每个微服务独立部署,独立数据库。
  • 通过API进行通信。

实践:

  • 订单服务化:将订单处理拆分为多个独立的微服务,如查询订单、取消订单、退款等。
  • 服务能力开放:通过API网关开放服务能力,构建生态系统。

图片图片

为什么要这么分呢?

1.分层清晰:

架构图按照功能层次划分,每一层都有明确的职责和边界,确保了系统的模块化   和可维护性。

2.服务独立:

基础服务、聚合服务和流程服务之间的依赖关系明确,每个服务都可以独立开发、部署和扩展,提升了系统的灵活性和可靠性。

3.复用性高:

基础服务提供了最基本的业务功能,聚合服务通过调用基础服务实现更高层次的业务功能,提高了服务的复用性,减少了重复开发工作。

4.面向用户的聚合API服务:

顶层的聚合API服务面向不同的业务线,提供统一的接口,方便前端应用调用。这种设计确保了用户操作的统一性和一致性。

订单服务化

图片图片

服务模块职责明确,售前、售后、履约、定时任务和公共服务等各自独立,避免了职责混乱,提高了系统的可维护性和扩展性。各个服务模块可以独立开发、部署和扩展,方便根据需求进行调整和优化,提升系统的灵活性。定时任务和公共服务的独立设计,使得系统在高并发和复杂场景下也能保持高可用性,减少了单点故障的风险,通过分层设计,将复杂的业务逻辑分解为多个小的模块,减少了单个模块的负载,提高了整体系统的性能。各个模块独立管理,方便运维和监控,可以快速定位和解决问题,提高系统的运维效率,通过将自营订单服务和第三方订单服务分开设计,支持多种业务模式,方便企业拓展不同的业务渠道。

订单服务化和取消订单相关服务交互

图片图片

服务能力开放共建生态

图片图片

微服务整体架构

图片图片

微服务架构最佳实践

图片图片

1. 业务驱动原则

  • 识别核心业务域,形成基础业务能力:首先要识别和理解业务的核心部分,确保微服务的设计和实现是围绕这些关键业务能力展开的。
  • 根据业务定位、范围、边界进行服务的划分:根据业务需求和功能进行合理的服务划分,确保每个微服务有明确的边界和职责。
  • 首先关注服务的业务范围,而不是服务的数量、粒度:重点在于服务的功能和作用,而不是追求将系统拆分为尽可能多的小服务。

2. 服务分层原则

  • 划分基础、聚合、流程服务:将服务划分为基础服务(提供基本功能)、聚合服务(组合多个基础服务)、流程服务(实现复杂业务流程)。
  • 基础服务贴近业务实体,提供业务的基础能力:基础服务直接支持业务实体,提供基本的业务操作和数据管理。
  • 聚合服务聚合基本业务场景,满足高一层业务场景并可复用:聚合服务通过组合基础服务,实现更复杂的业务功能,支持更高层次的业务需求。
  • 流程服务面向复杂业务流程实现,通过驱动多个聚合/基础服务实现一个完整的业务流程:流程服务负责协调多个服务,完成复杂的业务流程。

3. 服务松耦合原则

  • 服务职责单一,一个服务聚焦在特定业务的有限范围内,有助于敏捷开发和独立发布:每个服务应该有明确的职责范围,避免职责过于宽泛,以便独立开发和部署。
  • 区分核心业务服务和非主核心业务服务:核心业务服务是系统的关键部分,非主核心业务服务则是辅助性的功能。
  • 区分稳定服务和易变服务:将频繁变化的服务和稳定的服务分开管理,减少变化对系统整体的影响。
  • 每个服务只能访问自己的数据:服务之间通过API进行通信,避免直接访问其他服务的数据,增强系统的模块化和独立性。

4. 服务独立部署原则

  • 服务独立部署,能够独立发布或取消发布:每个服务都可以独立部署,不依赖于其他服务,发布和回滚都非常灵活。
  • 服务可水平扩展,并支持单独扩展:服务能够根据需求进行水平扩展,支持弹性伸缩。
  • 实现持续集成和自动发布:通过持续集成和自动化工具,实现服务的自动化构建、测试和部署。
  • 实现服务的技术和业务监控:对服务的运行状态进行实时监控,确保系统的稳定性和性能。

5. 兼容性原则

  • 接口契约先行,提供最新在线服务文档:服务之间的接口要有明确的契约,并提供最新的文档,确保各服务之间的兼容性。
  • 服务版本管理,保证向前兼容:通过版本管理,确保新版本的服务能够兼容旧版本,平滑过渡。
责任编辑:武晓燕 来源: 二进制跳动
相关推荐

2021-08-03 07:21:14

架构微服务开发

2021-05-06 11:54:40

大数据Flink

2024-06-05 12:03:43

微服务架构场景

2018-11-14 13:49:16

Apache Flin唯品会架构

2017-03-21 10:24:40

敏捷Scrum实践总结

2017-03-22 09:04:21

敏捷Scrum实践

2023-12-30 08:27:13

2017-03-29 10:09:44

敏捷Scrum实践

2024-05-16 07:51:55

分布式系统架构

2023-10-11 07:29:21

2023-11-21 08:37:09

2020-08-05 08:23:19

架构Java微服务

2016-11-10 19:10:09

唯品会双11

2020-11-25 09:56:48

架构运维技术

2019-12-31 10:33:48

架构运维技术

2020-02-10 19:16:52

服务端高并发架构

2019-09-25 09:01:53

高并发架构分布式

2019-12-17 11:18:37

高并发分布式架构

2016-03-15 16:24:47

集群调度框架演进

2017-08-31 09:39:56

微服务架构演进
点赞
收藏

51CTO技术栈公众号