跳转到主要内容

标签(标签)

资源精选(342) Go开发(108) Go语言(103) Go(99) angular(82) LLM(75) 大语言模型(63) 人工智能(53) 前端开发(50) LangChain(43) golang(43) 机器学习(39) Go工程师(38) Go程序员(38) Go开发者(36) React(33) Go基础(29) Python(24) Vue(22) Web开发(20) Web技术(19) 精选资源(19) 深度学习(19) Java(18) ChatGTP(17) Cookie(16) android(16) 前端框架(13) JavaScript(13) Next.js(12) 安卓(11) 聊天机器人(10) typescript(10) 资料精选(10) NLP(10) 第三方Cookie(9) Redwoodjs(9) LLMOps(9) Go语言中级开发(9) 自然语言处理(9) PostgreSQL(9) 区块链(9) mlops(9) 安全(9) 全栈开发(8) ChatGPT(8) OpenAI(8) Linux(8) AI(8) GraphQL(8) iOS(8) 软件架构(7) Go语言高级开发(7) AWS(7) C++(7) 数据科学(7) whisper(6) Prisma(6) 隐私保护(6) RAG(6) JSON(6) DevOps(6) 数据可视化(6) wasm(6) 计算机视觉(6) 算法(6) Rust(6) 微服务(6) 隐私沙盒(5) FedCM(5) 语音识别(5) Angular开发(5) 快速应用开发(5) 提示工程(5) Agent(5) LLaMA(5) 低代码开发(5) Go测试(5) gorm(5) REST API(5) 推荐系统(5) WebAssembly(5) GameDev(5) CMS(5) CSS(5) machine-learning(5) 机器人(5) 游戏开发(5) Blockchain(5) Web安全(5) Kotlin(5) 低代码平台(5) 机器学习资源(5) Go资源(5) Nodejs(5) PHP(5) Swift(5) 智能体(4) devin(4) Blitz(4) javascript框架(4) Redwood(4) GDPR(4) 生成式人工智能(4) Angular16(4) Alpaca(4) 编程语言(4) SAML(4) JWT(4) JSON处理(4) Go并发(4) kafka(4) 移动开发(4) 移动应用(4) security(4) 隐私(4) spring-boot(4) 物联网(4) nextjs(4) 网络安全(4) API(4) Ruby(4) 信息安全(4) flutter(4) 专家智能体(3) Chrome(3) CHIPS(3) 3PC(3) SSE(3) 人工智能软件工程师(3) LLM Agent(3) Remix(3) Ubuntu(3) GPT4All(3) 软件开发(3) 问答系统(3) 开发工具(3) 最佳实践(3) RxJS(3) SSR(3) Node.js(3) Dolly(3) 移动应用开发(3) 低代码(3) IAM(3) Web框架(3) CORS(3) 基准测试(3) Go语言数据库开发(3) Oauth2(3) 并发(3) 主题(3) Theme(3) earth(3) nginx(3) 软件工程(3) azure(3) keycloak(3) 生产力工具(3) gpt3(3) 工作流(3) C(3) jupyter(3) 认证(3) prometheus(3) GAN(3) Spring(3) 逆向工程(3) 应用安全(3) Docker(3) Django(3) R(3) .NET(3) 大数据(3) Hacking(3) 渗透测试(3) C++资源(3) Mac(3) 微信小程序(3) Python资源(3) JHipster(3) 大型语言模型(2) 语言模型(2) 可穿戴设备(2) JDK(2) SQL(2) Apache(2) Hashicorp Vault(2) Spring Cloud Vault(2) Go语言Web开发(2) Go测试工程师(2) WebSocket(2) 容器化(2) AES(2) 加密(2) 输入验证(2) ORM(2) Fiber(2) Postgres(2) Gorilla Mux(2) Go数据库开发(2) 模块(2) 泛型(2) 指针(2) HTTP(2) PostgreSQL开发(2) Vault(2) K8s(2) Spring boot(2) R语言(2) 深度学习资源(2) 半监督学习(2) semi-supervised-learning(2) architecture(2) 普罗米修斯(2) 嵌入模型(2) productivity(2) 编码(2) Qt(2) 前端(2) Rust语言(2) NeRF(2) 神经辐射场(2) 元宇宙(2) CPP(2) 数据分析(2) spark(2) 流处理(2) Ionic(2) 人体姿势估计(2) human-pose-estimation(2) 视频处理(2) deep-learning(2) kotlin语言(2) kotlin开发(2) burp(2) Chatbot(2) npm(2) quantum(2) OCR(2) 游戏(2) game(2) 内容管理系统(2) MySQL(2) python-books(2) pentest(2) opengl(2) IDE(2) 漏洞赏金(2) Web(2) 知识图谱(2) PyTorch(2) 数据库(2) reverse-engineering(2) 数据工程(2) swift开发(2) rest(2) robotics(2) ios-animation(2) 知识蒸馏(2) 安卓开发(2) nestjs(2) solidity(2) 爬虫(2) 面试(2) 容器(2) C++精选(2) 人工智能资源(2) Machine Learning(2) 备忘单(2) 编程书籍(2) angular资源(2) 速查表(2) cheatsheets(2) SecOps(2) mlops资源(2) R资源(2) DDD(2) 架构设计模式(2) 量化(2) Hacking资源(2) 强化学习(2) flask(2) 设计(2) 性能(2) Sysadmin(2) 系统管理员(2) Java资源(2) 机器学习精选(2) android资源(2) android-UI(2) Mac资源(2) iOS资源(2) Vue资源(2) flutter资源(2) JavaScript精选(2) JavaScript资源(2) Rust开发(2) deeplearning(2) RAD(2)

在这篇文章中,将深入了解Booking.com可能的高级架构,Booking.com是世界领先的旅游和酒店平台之一。

介绍

Booking.com为全球数百万用户提供服务,拥有动态的系统架构,以满足不断变化的客户期望并整合技术创新。本文的目的是从Booking.com的系统需求入手,讨论该平台是如何设计的,以及它的主要组件是如何工作的。

与业内其他领先公司一样,Booking.com需要复杂且可扩展的架构来不断改善用户体验、提高效率并保持市场竞争优势。在本文中,我们将尝试了解这样一个平台背后的技术过程,并提出一个基本的高级架构。无论您是软件开发人员、系统工程师还是精通技术的人,我们都希望这篇文章能让您更好地了解Booking.com的技术结构。

系统要求

Booking.com的系统架构经过精心设计,以适应其平台的广泛需求。2019年,该平台每24小时处理超过1500000次预订体验[3]。这种巨大的流量水平表明,需要一种高容量、有弹性的服务器基础设施,能够有效地处理大量数据和用户交互,尤其是在使用高峰期。

此外,该平台庞大的用户群,特别是截至2022年的1亿移动用户,带来了重大挑战和机遇[1]。如此庞大的用户数量意味着该平台正在处理其服务器上的大量数据和繁忙流量。为了有效地管理这一点,系统架构必须稳健且可扩展,确保它能够处理这个庞大而活跃的用户群的并发请求和数据处理需求。

高级架构

 

 

 

Possible High-Level Architecure of Booking.com

您在上面看到的可能的高级架构图是Booking.com服务架构的可视化摘要。为了更好地理解系统中每个组件的作用和功能,我们将在下面的图表中单独讨论关键组件。

架构模式

Booking.com高层架构中的一个关键决策是选择一种架构模式,该模式可以有效地适应平台在不同服务之间的变化和动态负载。考虑到服务负载的多样性,例如与预订用户数量相比,用户浏览酒店的频率更高,很明显,一刀切的扩展方法不适合Booking.com的需求。

微服务架构模式是最适合这种场景的解决方案。这种模式将应用程序构建为松散耦合的服务集合,每个服务都围绕特定的业务能力设计。这种体系结构选择使单个服务能够根据需求进行放大或缩小,而不会影响系统的其他区域。

数据库

在Booking.com的架构中,关系数据库的选择是战略性的,这是由平台的运营模式驱动的,在该模式下,酒店搜索量大大超过了实际预订量。关系数据库在读取操作中的效率与平台所能容纳的大量搜索无缝匹配。此外,事务的完整性在保留系统中至关重要,关系数据库的ACID属性在其中起着至关重要的作用。关系模型还熟练地处理Booking.com数据中复杂的相互关系,例如酒店、房间和房间类型之间的连接,增强了数据的完整性并简化了维护。

来自该公司科技博客的见解表明,MySQL是他们的关系数据库首选,提供了必要的功能、性能和可靠性。Booking.com技术博客上的许多文章都讨论过MySQL的使用。想要获得更多有关该主题的信息和深入知识的读者可以通过此链接访问该平台的技术博客。

存储镜像

图像的存储和分发旨在加速用户体验并提高效率。该平台利用内容交付网络(CDN)技术为用户提供对酒店图像的快速访问。CDN的使用使其能够通过从地理位置较近的服务器提供酒店图像,以高速向世界各地的用户交付内容。系统将图像的URL存储在数据库中。

API网关

API网关充当接收所有传入API请求的第一个点,执行身份验证并将其路由到适当的微服务。它还包含保护系统不过载的速率限制器。这种集中式结构有效地管理系统上的流量,并通过基于用户授权控制访问来提供安全的用户体验。

主要微服务

在Booking.com的实际系统架构中,可能有比这里列出的更多的微服务,或者其中一个列出的微服务实际上可能被拆分为不同的微服务。以下是核心和核心微服务,但这可能不代表Booking.com完整而全面的服务列表。

  • 酒店服务:该服务管理用户的酒店搜索,包括酒店的详细信息、照片和可用性。该服务有自己的数据库,保存酒店的记录、物业和当前状态。此外,酒店位置、房间类型和可用设施等信息很少发生变化,因此缓存这些信息以确保高访问速度和效率是有意义的。
  • 评论服务:评论服务管理用户对酒店的评论和评分。Booking.com认为,审查系统对用户体验和服务质量至关重要,这就是为什么他们非常重视平台的审查系统。如果您有兴趣了解更多关于Booking.com审查系统的规模和这些流程的技术细节,请参阅[4]。
  • 支付服务:该服务处理支付信息、交易历史和账单数据,使用户能够安全地进行支付。
  • 预订服务:该服务管理用户的预订并将其映射到酒店。它有自己的数据库,其中包含预订详细信息、用户的预订状态和更改历史。它还与支付服务审查服务和酒店服务进行沟通。例如,当用户请求进行预订时,它会呼叫支付服务并等待来自的成功消息以完成预订。如果付款成功,它会向酒店服务部门发送请求,以便对酒店状态进行必要的更新。
  • 搜索服务:它管理用户在平台上进行的所有与搜索相关的查询。当用户搜索住宿时,该服务会使用ElasticSearch处理这些请求。
  • 预订管理服务:酒店业主可以查看和跟踪用户的预订情况,更新客房供应情况,并管理预订详细信息。因此,它与预订、付款和旅馆服务进行沟通。

除了这些主要的微服务,Booking.com的架构还可能包括其他服务,这些服务分析用户行为,并使用预订数据为不断发展的机器学习管道提供信息。这样的服务允许平台个性化用户体验,并不断提高服务质量。

第三方组件

弹性搜索:ElasticSearch以其快速高效地索引和查询大型数据集的能力而闻名,使搜索服务能够快速过滤并向用户提供广泛多样的住宿选择。

  • Kafka:Kafka使用连接器,尤其是从MySQL中提取数据和将数据馈送到Elasticsearch等操作。这允许系统中的不同服务,例如搜索服务,访问最新的和索引的数据。MySQL的数据通过Kafka输入到Elasticsearch中,可以快速高效地处理和查询数据。以下过程发生在Hotel、Kafka和ElasticSearch的MySQL集群之间。

 

Illustration of Feeding ElasticSearch by Kafka [7]

如果您想详细了解如何通过Kafka将数据从MySQL传输到Elasticsearch,请参阅[7]。

微服务之间的通信

我们深入研究了使Booking.com能够有效管理其复杂服务网络的复杂架构。该体系结构分为两个主要组件:控制平面和数据平面,每个组件在系统的整体功能中都有不同的作用。

控制平面充当操作的大脑。它负责流量路由、策略执行和服务发现的高级管理。ZooKeeper和Kubernetes等工具在这一层面上发挥着关键作用。ZooKeeper以其协调和配置管理功能而闻名,它与Kubernetes协同工作,后者擅长协调容器化应用程序。它们共同确保Booking.com生态系统中的服务能够发现彼此,并根据运营商设置的规则和配置一致地运行。

另一方面,数据平面是动作发生的地方——数据包通过这个平面在服务之间流动。它由轻量级、高性能的代理填充,如Envoy,其任务是直接处理请求和响应。这些代理由控制平面动态配置,以应用特定的路由规则、处理重试、超时,并实现HTTPS流量的SSL/TLS加密等安全措施。

Service Mesh Architecture: Control and Data Planes in Action [6]

全局请求管理

Booking.com使用基于HAProxy的ADN(应用程序交付网络)来有效地管理用户请求。HAProxy充当高性能负载均衡器和代理服务器,自动将用户请求路由到最合适的服务器。HAProxy动态管理网络上的流量,从而在考虑地理位置、服务器运行状况和负载等各种因素的情况下处理用户请求。

用户提出的请求由HAProxy路由到最合适的数据中心。此路由经过优化以确保最低的延迟和最高的服务质量。

如果您想更详细地了解HAProxy是如何工作的,以及Booking.com是如何使用它的,请参阅[5]。

结论

最后,我们研究了Booking.com的高级架构及其核心微服务、其全球应用程序交付网络以及其组件如何协同工作。与任何技术审查一样,重要的是要记住,这里提供的信息可能不完整和全面,而且可能会随着时间的推移而变化。你可以关注Booking.com的技术博客来了解他们的最新消息。非常感谢您抽出宝贵的时间阅读我的文章。我希望这篇文章能帮助你加深对Booking.com技术结构的理解。

参考

[1] “40+ Booking.com statistics [Latest 2023 Figures!],” www.dreambigtravelfarblog.com. https://www.dreambigtravelfarblog.com/blog/booking-com-statistics

[2] A. Xu and S. Lam, System design interview: an insider’s guide volume 2. Millbrae, California: Byte Code Llc, 2022.

[3] “SREcon19 Europe/Middle East/Africa — SLOs for Data-Intensive Services,” www.youtube.com. https://www.youtube.com/watch?v=ZdguHXglT8M (accessed Jan. 09, 2024).

[4] B. Hiltpolt, “Scaling our customer review system for peak traffic,” Booking.com Engineering, Nov. 08, 2022. https://medium.com/booking-com-development/scaling-our-customer-review-system-for-peak-traffic-cb19be434edf (accessed Jan. 09, 2024).

[5] “HAProxyConf 2019 — How Booking.com Powers a Global ADN with HAProxy by Marcin Deranek,” www.youtube.com. https://www.youtube.com/watch?v=NcpeJV8-OzA (accessed Jan. 09, 2024).

[6] “Introducing Envoy-Based Service Mesh at Booking.com — Ivan Kruglov, Booking.com,” www.youtube.com. https://www.youtube.com/watch?v=Pus2ytdEfrQ (accessed Jan. 09, 2024).

[7] G. Fong, “A Practical Guide to Build Data Streaming from MySQL to Elasticsearch Using Kafka Connectors,” Medium, May 13, 2023. https://blog.devgenius.io/a-practical-guide-to-build-data-streaming-from-mysql-to-elasticsearch-using-kafka-connectors-c311cf29ed38 (accessed Jan. 09, 2024).