怅然|经验分享:资深架构师教你什么是网络应用架构?( 四 )


例如 , Storyblocks , 将任务队列用于强化那些用于支持市场的幕后工作:例如视频和图片的编码 , 包含元数据标签的 CSV 的处理 , 用户统计数据的聚合 , 密码重置邮件的发送等任务 。 起初我们使用简单的 FIFO 队列 , 但最终我们还是升级为优先级列队以确保那些时间敏感的任务可以迅速完成(如密码重置邮件的发送)
任务服务器的任务处理流程为:任务服务器轮询任务队列以确定是否有任务需要执行 , 如有则推出(pop)该任务并加以执行 。 相关的编程语言和服务框架数不胜数 , 这里就不作过多展开 。
7. 全文检索服务
怅然|经验分享:资深架构师教你什么是网络应用架构?当用户输入文字进行查询时 , 多数网络应用都或多或少地提供检索功能 , 应用服务返回最相关的查询结果 。 这种用于支持文本查询的功能 , 通常被称为「全文检索」 , 全文检索使用反向索引以便快速查询包含关键词的文件信息 。
怅然|经验分享:资深架构师教你什么是网络应用架构?上图说明如何将这三个文档标题转换为反向索引 , 以便于从特定关键字快速查找到标题中具有该关键字的文档 。 请注意 , 如 “in” , ”with” 等常见单词 , 通常不包括在倒置索引中的常见单词(被称为停止词: stop words)
尽管有些数据库直接提供全文检索特性(例如 , MySQL 支持全文搜索)但将一般将计算生成并存储反向索引的「检索服务」作为独立服务并提供查询接口 。 现在最流行的全文检索平台是 Elasticsearch , 同时 Sphinx 和 Apache Solr 也是常见的备用选择 。
8. 服务
怅然|经验分享:资深架构师教你什么是网络应用架构?当应用达到一定规模 , 其中有些服务需要拆分出来成为单独的应用 。 这些新应用不一定用于开放给外部系统 , 但是一定会用于和原应用以及其他服务交互 。 举例来说 , Storyblocks 有以下几种操作和计划服务:

  • 账户服务:存储用户在我们所有站点的相关数据 , 这将有助于我们提供交叉销售的机会并创造统一的用户体验
  • 内容服务:存储所有视频、音频和图形内容的元数据 , 同时为内容下载和查看下载历史记录提供接口
  • 支付服务:为处理客户信用卡结算信息提供接口
  • HTML → PDF 服务:提供简单的处理接口 , 以支持根据 HTML 页面返回相应 PDF 文件
9. 数据处理
怅然|经验分享:资深架构师教你什么是网络应用架构?大数据时代 , 公司的生死存亡系于对数据的完善利用程度 。 现在的网络应用 , 只要达到一定业务规模 , 就一定会建立数据管道以确保数据的收集、存储和分析 。 典型的数据管道包括以下三个主要过程: