微服务架构在B2B电商中的应用
基于微服务架构的B2B电子商务平台设计与实现
1 引言
电子商务研究中心发布的“2018(H1)中国B2B电子商务市场数据监测报告”数据显示,2018年上半年,中国B2B电子商务交易规模达11.2万亿元,相比2017年上半年的9.8万亿元,增长率为14.2%,收入规模为255亿元。与2017年上半年168亿元的收入相比,增长率为51.7%。这表明B2B电子商务正处于发展机遇期。
本文提出的基于微服务架构的B2B电子商务平台正是在此背景下产生的。将微服务架构引入B2B电子商务平台的设计中,采用分布式架构替代传统的单体架构。灵活部署、高容错性、易于扩展和松散耦合使得该架构能够实现B2B电子商务平台的快速开发以及业务需求的实时扩展,且每个微服务均为自治和去中心化的,有效解决了单体架构难以扩展和维护的问题。
2 相关工作
先前的研究主要关于微服务架构。
微服务架构是一种新的系统软件设计模式。它建议将一个庞大而复杂的单体应用划分为多个可管理的组,每组处理相关的服务。每个微服务专注于一个业务功能,并根据其特定的业务职责进行划分。结果,这些独立服务可以轻松地被部署和发布。
独立地内部部署到生产环境,且服务的修改不会影响整个系统。
辛媛媛、牛军、谢志君等[3]分析并比较了微服务架构主流实现框架的特点及核心组件。克雷洛夫斯基等[4]探讨了如何应用微服务架构设计智慧城市物联网平台。许多研究人员开始将微服务应用于特定领域。例如,王学峰等[5]将微服务应用于高速铁路,设计了一种基于微服务架构的高速铁路Wi‐Fi运营服务系统。王一超、王玉梅等[6]实现了基于微服务架构的智能设备运维管理平台。本文将微服务应用于电子商务平台。
3 系统需求分析
除了传统电子商务平台的用户管理、商品管理、订单管理和支付管理外,系统还具有以下主要需求:
- 丰富的支付接口,支持多种支付方式。
- 全面的物流服务,覆盖大多数物流公司。
- 即时通讯功能,通过聊天窗口实现即时通信,提升沟通效率。
- 分析用户的浏览历史和购买历史,提供精准商品推荐服务,改善用户体验。
- 考虑到营销手段,系统需具备应对访问量激增的能力。
- 考虑到业务发展,系统可支持新模块的便捷快速扩展。
4 系统设计
4.1 逻辑架构
本文设计的B2B电子商务平台采用分层架构。应用架构分为四层:业务层、服务层、数据访问层和数据管理层。电子商务平台的微服务架构设计主要针对服务层,为系统的表现层提供接口支持。系统逻辑架构如图2所示。
4.1.1 业务层
业务层主要包括不同终端的接口展示和用户界面。为了提升用户体验,不同终端将具有不同的界面。
总体而言,B2B电子商务平台的表现层提供了买家卖家中心、支付管理、订单管理、商品展示、即时通讯、购物车和收藏夹等主要模块。
以商品展示和即时通讯为例,用户可以在商品展示模块中浏览和搜索商品,后台会根据用户的浏览历史和购买历史提供个性化的商品推荐服务,从而提升用户的购物体验。即时通讯能够确保买家与客户之间的及时沟通,优化购物流程。
4.1.2 服务层
该系统的核心在于服务层对应业务层所展示的业务需求。与传统的单体架构不同,B2B电子商务平台采用微服务架构,能够根据业务类型有效地拆分业务服务层的组件。系统的微服务架构将在下一节中讨论。
4.1.3 数据访问层
数据访问层主要负责数据库访问,即数据存储和读取,将数据持久化到数据库。B2B电子商务平台通过利用微服务开发框架提供的分布式数据库服务和分布式缓存服务的功能,为应用服务层提供统一数据操作接口。
它使每个应用服务能够使用统一访问接口操作各种类型的数据管理系统,并实现与其他服务之间的数据访问。
4.1.4 数据管理层
数据管理层根据不同的数据存储和管理策略采用相应的方案处理不同类型的数据特征。对于结构化数据,使用关系型数据库;对于半结构化和非结构化数据,使用NoSQL数据库。同时,根据大规模数据并发访问的情况,基于大数据开发的支持,提供大数据计算和存储服务。
4.2 微服务架构
在传统应用模式下,系统的全部功能部署在同一台机器上,并集成在一个应用程序中。与这种单体架构相比,微服务的核心思想是去中心化,能有效将整个系统划分为独立的服务,这些服务可以独立部署和运行。每个服务独立开发,可按业务单元划分,实现跨组织、跨区域的协作,且每个服务拥有独立的数据库,从而实现服务间的强隔离。基于微服务架构设计的B2B电子商务平台旨在有效拆分服务组件,各服务组件单独管理,以实现敏捷开发与部署。
除了各个业务单元的服务外,微服务架构还包括服务治理组件,如负载均衡、服务中心、服务网关、容错机制、智能路由、配置管理等。这些组件相互协作,与业务的各类微服务共同构成一个微服务系统。B2B电子商务平台的整体微服务架构如图3所示。该系统的微服务主要包括以下几个部分:
- 大数据微服务 :大数据微服务通过一组一致的封装API与存储进行交互。这样,您可以轻松地向系统中添加新的存储技术。在运行数据库时,系统从不直接操作数据库,而是提供一组CRUD API来执行数据检索和存储。
- 安全微服务 :该服务提供认证与安全功能,过滤需要认证的资源,拒绝处理未通过身份认证的请求,并对重要数据进行观察、监控、跟踪,显示准确的请求状态。
- 人工智能微服务 :人工智能微服务基于大数据提供一系列人工智能工具,如机器学习和数据挖掘。
- 应用微服务 :该服务提供支持多种客户端交互接口的组件,例如网页用户界面、PC客户端或移动应用。
-
其他微服务
:根据平台业务模块划分的其他微服务,包括用户微服务、订单微服务和物流微服务等。
本文采用Spring Cloud作为B2B电子商务平台的微服务技术框架。用户通过客户端发起请求,经由Zuul服务网关转发至相应的微服务。通过使用服务网关、动态路由、服务注册与发现、断路器、负载均衡等相关技术,构建一套数据服务系统,实现B2B电子商务平台的各项业务功能。
4.2.1 服务注册与发现
Eureka[9]框架提供基于 REST 的服务,主要用于集群中的服务管理。其架构如图4所示。在微服务架构中,每个服务组件独立部署,每个服务组件包含一个Eureka客户端组件,用于将相关服务的信息(如IP地址、端口等)注册到注册中心。注册中心拥有一个注册表,用于存储和维护各个服务的IP地址和端口信息。当一个服务的Eureka客户端在注册中心完成设置并注册后,它也可以获取注册中心内的注册列表,进而调用其他客户端发布的服务。
4.2.2 负载均衡
在微服务架构中,为了提高可扩展性,单个微服务通常具有多个进程级的服务实例,且服务实例的数量随着服务请求数量的变化而变化。当服务请求数量增加时,服务实例的数量也可能相应增加;反之,当服务请求数量减少时,服务实例也可能被销毁。因此,需要一种负载均衡算法将服务请求分发到特定的服务实例进行处理。
B2B电子商务平台使用Ribbon[10]作为负载均衡器与 Eureka 集成。Ribbon的主要功能是提供负载均衡算法,与集群服务器通信,并提供一系列完善的配置项,如连接超时、重试等。Ribbon会维护服务器信息,并根据特定规则(即负载均衡算法)将服务请求转发到相应的服务实例。其工作原理如图5所示。
Ribbon的默认负载均衡策略包括简单随机算法、轮询方法、加权轮询方法和哈希算法。
鉴于B2B电子商务平台的业务需求,系统在业务推广及其他活动中需要具备较强的负载能力。为了提高系统后端服务的利用效率和负载能力,考虑采用最小连接数算法。对于连接数最少的服务器,Ribbon将根据最小连接数算法优先将新的连接请求分配给该服务器。作为动态调度算法,最小连接数算法通过当前活跃连接的数量来评估服务器负载。图6展示了最小连接数算法。
4.2.3 服务网关
在B2B电子商务平台中,每个服务都有未使用的端口。以商品接口为例,用户向服务器发送商品展示请求时,需要调用商品规格查询和库存查询等多个微服务。如果通过服务的URL直接访问这些微服务,将增加系统的复杂性,并降低客户端多次HTTP请求的效率。
针对这些问题,Zuul[11]将这些微服务组织起来对外提供服务。通过将Zuul注册到服务中心的Eureka服务器中,我们只需访问Zuul(微服务网关)的地址以及其他服务注册的名称和相关接口,即可访问特定服务。
4.2.4 容错
系统中不可避免地会发生一些服务或机器故障,这可能导致整个系统瘫痪。B2B电子商务平台使用 Hystrix[12]作为保护框架。Hystrix提供了多种服务容错机制,如超时重试、限流、熔断模式等。本系统采用熔断模式。
当某个服务的基础模块发生故障时,Hystrix会隔离该服务的基础模块,并快速响应请求,以确保系统的整体稳定性。
4.2.5 消息驱动
消息驱动用于处理企业组件之间的消息通信。通过构建消息应用,微服务可以通过消息与其他内部或外部组件进行通信。服务应用通过消息传输数据,并使用消息队列作为消息载体相互通信。我们使用RabbitMQ作为消息代理,RabbitMQ支持AMQP(高级消息队列协议)。
5 微服务的实现
在本平台的开发中,我们使用Docker和Kubernetes作为微服务容器。核心服务基于J2EE平台开发,使用Tomcat作为应用服务器,Feign作为REST客户端,并使用RabbitMQ开发异步通信。安全服务基于Jasig CAS组件。在人工智能服务中,使用TensorFlow进行数据挖掘和深度学习。在大数据服务中,我们使用Redis进行图片数据存储,kairosDB用于时序数据存储,MongoDB用于文档存储。
我们将展示一些服务的REST API调用,如下所示:
-
创建新商品 :
通过调用此接口,传入商品所有者的ID以及商品的属性(如商品的名称、价格、规格、描述),我们可以创建新商品。
请求URI
POST /commodity/create/{userId}
请求头(简要) :
json { "userId": "1158743", "商品": [ { "名称": "真空吸盘", "价格": "49.99", "描述": "这是一个真空吸盘", "长度": "8", "宽度": "8", "高度": "20" } ] } -
查询订单状态 :
通过调用此接口并传入订单ID,我们可以查询订单的状态,例如:等待付款、待发货、待收货等。
请求URI
GET /order/{orderId}
返回示例 :
json { "result": [ { "orderId": "20190101121245", "orderStatus": "等待付款" } ] }
6 结论
本文提出了一种基于微服务架构的B2B电子商务平台。此外,我们还介绍了系统的核心组件和功能,并对其进行了详细描述。
更多推荐
所有评论(0)