第1章大型互联网公司的基础架构——1.1 单机房的内部架构

news/2025/2/23 13:04:14

所谓的应用后台就是指机房机房架构是一个庞大的工程,你可能听说过很多大型互联网公司曾在各种技术峰会上介绍它们的“三地五中心”多机房,甚至是全球异地多活机房等,这些“高大上”的话题讨论的都是机房架构的内容。机房最简单的形式是单机房, 本章会用大量篇幅来讨论它。虽然拥有亿级用户的互联网应用的底层不大可能采用这种架构,但是它是我们了解机房架构的重要基础。首先,在建设多机房前,我们需要熟悉一个机房的“五脏六腑”,只有非常清楚地知道单机房架构的技术细节,才能轻车熟路地构建多机房架构;其次,各互联网公司的多机房架构体系并不是一步到位搭建的,而是随着用户的逐步扩张一步步演进而来的。让我们先抛开那些知名互联网公司今天的荣耀,回到它们过去艰难的岁月,一般而言,这些公司在创业起步阶段的特点如下。

  • 用户量级相对较小。
  • 研发工程师较少。
  • 产品营收能力较差,现金储备紧张。

如果初创互联网公司选择直接构建多机房架构,则将是一件非常困难的事情。因为它要求公司:

  • 已拥有海量用户,且难以接受机房级别的故障。海量用户意味着有海量数据、海量请求,单机房的资源已经无法满足业务需求,需要拓展到多机房;而且,如果发生了机房级别的不可用故障,则等于整个应用完全不可用,将会给公司造成难以承受的巨大损失。
  • 研发工程师较多,且有多机房领域的架构师。多机房需要应对数据一致性、机房调度等复杂的技术问题,需要有大量专人投入建设。
  • 现金流畅通。每个机房的选址、光缆铺设、电路铺设、设备采购、网络带宽、服务器维护,甚至防火、防水等都需要消耗大量的经济成本,这就不得不要求公司有一定的现金储备。

综上所述,从投入产出比的角度来说,初创互联网公司一般先使用单机房充当应用后台。典型的单机房架构如图1-1所示,其中包含各种重要角色。

image-20250216104111499

假设这个单机房架构服务于某互联网社交应用Friendy,并为用户提供Web端和移动客户端两种使用途径,其中各角色的功能如下。

  1. DNS服务器负责将用户访问Friendy的域名映射为公网IP地址(或称为整个机房的入口IP地址),然后用户请求就可以通过IP协议进入机房了。
  2. LVS提供对外的公网IP地址作为机房的入口,同时作为四层负载均衡器将用户请求分发到Nginx集群。
  3. Nginx作为七层负载均衡器,根据HTTP(S)请求的协议头或URL路径规则将用户请求转发到对应的业务HTTP服务器。
  4. 业务服务层的HTTP服务真正处理用户请求,根据不同的HTTP URL向RPC服务发送业务逻辑处理请求。
  5. 业务服务层的RPC服务执行核心业务逻辑。如果业务逻辑涉及读/写数据,那么它会进一步访问数据层;如果业务逻辑涉及与其他RPC服务的交互,那么它也会调用其他RPC服务。
  6. 存储层是所有存储系统的集合,包括分布式缓存、关系型数据库、NoSQL数据库等。分布式缓存提供数据缓存,用于应对高并发的读请求访问;关系型数据库作为持久化存储保存用户数据(需要注意的是,若无特殊说明,本书后续章节提及的数据库均为关系型数据库),常见的关系型数据库包括MySQL、SQLite、SQL Server等;NoSQL数据库是一个大类,被应用于关系型数据库无法发挥作用的场景。
  7. 服务发现负责保存每个服务的动态访问地址列表,以便其他服务可以快速查找到某服务的访问地址。其功能与DNS相似。
  8. 消息中间件作为常用的研发中间件,用于请求异步执行、服务间解耦、请求削峰填谷。

在简单了解了单机房架构的组成角色之后,接下来将详细介绍各角色的相关技术与技术选型,以便读者对这些角色存在的意义能有更深刻的理解,甚至将来可以以架构师的身份主导一个互联网应用的机房建设工作。


http://www.niftyadmin.cn/n/5860114.html

相关文章

字符串函数和结构题内存对齐

图下为函数使用&#xff1a; #include <ctype.h>int main() {int ret isdigit(Q);printf("%d\n", ret);return 0; }int main() {printf("%c\n", toupper(a));printf("%c\n", tolower(A));return 0; }

lwip和tcp/ip区别

lwIP 和 TCP/IP 的区别 lwIP&#xff08;Lightweight IP&#xff09;和 TCP/IP 并不是同一级别的概念&#xff0c;lwIP 实际上是一个 TCP/IP 协议栈的实现。我们可以这样理解&#xff1a; TCP/IP 是一个 网络协议模型&#xff0c;定义了 互联网通信的标准&#xff0c;包括 IP…

嵌入式八股,struct结构体和union联合体的联系与区别

struct和union都是用户自定义的数据类型&#xff0c;它们都可以包含多个成员&#xff0c;并且成员可以是不同的数据类型。 它们的成员都可以通过点运算符&#xff08;.&#xff09;或箭头运算符&#xff08;->&#xff09;进行访问。对于指针的访问用&#xff08;->&…

acm培训 part 7

这部分的重点是图论 1.题目解析 1.1 Stockbroker Grapevine 这道题的重点是通过图建立各个经纪人之间的关系&#xff0c;再存储传播所需要的值。通过不断模拟去找到所需要的最短时间&#xff0c;代码如下 #include<bits/stdc.h> using namespace std; const int INF10…

零基础学QT、C++(四)QT程序打包

项目包 链接&#xff1a;https://pan.quark.cn/s/6a3455161757 记得创建yolo的数据库&#xff0c;并把数据导入 目录 一、把项目变为release版 二、运行项目 三、找到windeployqt6.exe 四、运行exe 五、无法定位重新输入点 学习视频 QT程序打包发布教程&#xff01;&#xff01…

CF292C Beautiful IP Addresses 题解

题目介绍 这道题我们读完题后看到题目给的条件&#xff1a; IP 地址&#xff0c;且去掉分割的点以后的纯数字字符串是回文&#xff0c;那么就叫做美丽的 IP。 暴力方法 是不是听起来很简单&#xff0c;我先介绍一个大多数人都能想到的部分分做法&#xff1a; 枚举出所有 I…

如何有效区分网络安全威胁?

常见的网络安全威胁有很多&#xff0c;其中包括窃听、重传、伪造、篡改、非授权访问、拒绝服务攻击等。而这些威胁又被分为很多种类型&#xff0c;那么网络安全中威胁如何区分?以下是具体内容介绍。 1、从威胁的来源进行区分 内部威胁&#xff1a;80%的计算机犯罪都和系统安全…

Redis Windows 设置密码

安装目录下找到redis.windows-service.conf 搜索requirepass &#xff0c;设置为requirepass 123456 重启服务 测试