【系统架构师-案例题-软件架构(架构风格、系统架构)-分布式系统(高)】Web Elasticsearch分词的商品推荐系统

文章目录

一、题目

某电商企业计划开发一款商品推荐系统,并接入微信小程序,以提升用户购物体验,增加商品销量。该企业组建了项目团队,团队成员包括项目经理、架构师、开发工程师、测试工程师等。在技术选型方面,架构师经过调研和评估,选择了 Elasticsearch 作为搜索引擎,利用其强大的分词功能和分布式架构,实现对海量商品数据的高效存储和检索。

1、(6分)Elasticsearch中内置了很多分词器,请用150字说明Simple, Whitespace, Keyword 分词引擎的特点差异。

2、(12分)请根据下图所示的商品推荐系统架构图,将下列名称填写空白处的内容(原题是红色标注处挖空)。

(1)、接入层、

(2)、显示层、

(3)、应用层、

(4)、业务逻辑层、

(5)、控制层、

(6)、网络层、

(7)、数据访问层、

(8)、数据层、

(9)、Mybatis,

(10)、Nginx,

(11)、 Flink,

(12)、Javascript,

(13)、Node.js,

(14)、RESTful,

(15)、Elasticsearch,

(16)、kafka

3、(7分)该方案中使用了RESTful风格,请用150字描述如何使用前后端分离如何实现RESTful。



二、完整答案

第1题:4种分词器特点差异

分词器 核心特点与分词规则
Standard分词器 Elasticsearch默认分词器: • 英文场景:按单词切分,自动将大写字母转换为小写,过滤标点符号 • 中文场景:仅简单将中文文本拆分为单个汉字,无完整语义分词能力
Simple分词器 按照非字母字符(如标点符号、数字、特殊字符等)进行切分,同时会将大写字母转换为小写,并过滤掉所有非字母字符,仅保留纯字母单词
Whitespace分词器 仅按照空白字符(如空格、制表符等)进行切分,不会进行小写转换,也不会过滤任何字符(标点符号、数字完整保留)
Keyword分词器 不进行任何切分,将输入的整个字符串作为一个单独的词(关键词)来处理,适用于精确匹配场景

第2题:架构图填写(8个空完整答案)

答案:(1)显示层(2)控制层(3)JavaScript(4)RESTful(5)业务逻辑层(6)数据层(7)MyBatis(8)Nginx


第3题:RESTful架构实现前后端分离的原理

RESTful架构通过定义一套标准化规范,从资源定义、交互协议、职责划分等维度彻底解耦前后端,实现前后端分离,核心要点如下:

  1. 资源定义与URL规范:在RESTful架构中,每种URL唯一代表一种系统资源。通过不同的HTTP请求方法(GET、POST、PUT、DELETE)对同一URL进行操作,即可实现对该资源的获取、添加、修改和删除,实现接口语义化。
  2. 请求方式与响应格式:客户端使用标准的HTTP方法对服务器上的资源进行操作,服务器响应通常以JSON格式返回数据,前后端仅通过数据交互,不耦合页面渲染逻辑。
  3. 前后端职责分离:前端主要负责用户界面与用户体验(页面展示、渲染、交互),通过发送Ajax请求与后端交互,仅做数据展示;后端专注于业务逻辑处理与数据存储,接收请求、处理业务后返回数据,不关心前端实现形式。
  4. 前后端交互规范:前后端通过RESTful规范进行数据交互,双方遵循相同的接口定义、请求方法和响应格式,可独立开发、独立部署、独立维护,大幅提升团队协作效率与系统可扩展性。

三、完整解析

第1题解析

Elasticsearch的分词器(Analyzer)是全文检索的核心组件,负责将文本拆分为可索引的词条(Term),4种分词器的设计场景完全不同:

  • Standard:默认通用分词器,适合英文常规检索,中文场景仅能做单字拆分,实际业务中需搭配IK等中文分词器使用;
  • Simple:适合纯英文文本检索,自动过滤非字母内容,避免标点、数字干扰;
  • Whitespace:适合需要保留原格式、按空格切分的场景(如日志、特定格式文本);
  • Keyword:适合ID、分类名、标签等需要精确匹配的字段,不做任何拆分,保证检索准确性。

第2题解析

该架构是典型的前后端分离+微服务的互联网系统架构,分层设计遵循「高内聚、低耦合」原则,各层职责清晰:

  1. 接入层:系统的用户入口,本场景为微信小程序,也可扩展为Web、APP等多端入口;
  2. 界面层:前端核心层,负责页面渲染、用户交互,HTML构建页面结构,Vue/React作为前端框架,TypeScript最终编译为JavaScript运行;
  3. 基础服务层:前端运行与部署的支撑层,Nginx做反向代理、负载均衡,Webpack打包前端资源,Node.js支撑前端运行/服务端渲染;
  4. 通信层:前后端交互的标准协议,HTTP是Web系统的通用协议,RESTful是接口设计的规范;
  5. 业务逻辑层:后端核心层,Java是企业级后端主流语言,Spring Cloud用于微服务治理,MyBatis作为持久层框架;
  6. 数据层:数据存储与检索层,MySQL存储结构化业务数据,Redis做缓存加速热点数据,Elasticsearch负责商品分词检索与推荐,是本系统的核心组件;
  7. 开发工具层:辅助开发的工具集,Git做版本控制,Maven做项目构建,题目说明无需填写。

第3题解析

前后端分离的核心是解耦,RESTful架构通过标准化规范实现了彻底解耦:

  • 传统单体架构中,前后端代码耦合在同一项目中,前端修改需后端重新部署,技术栈绑定;
  • RESTful架构下,前后端仅通过接口契约交互,前端可自由选择Vue/React/小程序等技术栈,后端可自由选择Java/Go等语言,双方可并行开发、独立部署;
  • 同时,RESTful的无状态特性、标准化HTTP方法,让接口具备通用性,可同时支持多端接入,大幅提升系统的可扩展性与维护性。
相关推荐
2401_827499993 小时前
python核心语法05-模块
java·前端·python
ShineWinsu3 小时前
Chrome安全机制深度解析技术文章
前端·chrome·安全
EnoYao3 小时前
把你们开发扒个底朝天 Skill
前端·后端·程序员
Mintopia3 小时前
遇到 Bug 不要慌:一套通用排查思路
架构
零陵上将军_xdr3 小时前
MySQL体系架构
数据库·mysql·架构
提子拌饭1333 小时前
开源鸿蒙跨平台Flutter开发:中小学跳绳遥测记录表:基于 Flutter 的体能监测与分钟级频域测绘架构
flutter·华为·架构·开源·harmonyos
程序员 沐阳3 小时前
从内容管控到硬件隔离:Chrome 安全防护体系深度拆解
前端·chrome·安全
Mintopia3 小时前
初级、中级、高级程序员的真正差别
架构
Black蜡笔小新3 小时前
视频融合平台EasyCVR核心技术架构解析与多场景应用实践
架构·音视频
heimeiyingwang3 小时前
【架构实战】搜索引擎架构:ElasticSearch集群设计
elasticsearch·搜索引擎·架构