Linux 性能优化实战原文链接:https://time.geekbang.org/column/intro/100020901?tab=catalog
- [33 | 关于 Linux 网络,你必须知道这些(上)](#33 | 关于 Linux 网络,你必须知道这些(上))
-
- 设计高并发架构有哪些策略?
- 如何理解云计算?
- [如何理解TCP/IP 四层模型?](#如何理解TCP/IP 四层模型?)
- 如何理解网络接口层MAC寻址?
- 如何理解网络接口层错误侦测?
- 如何理解网络包的封装格式?
- 如何理解MTU?
- [如何理解Linux 内核中的网络栈?](#如何理解Linux 内核中的网络栈?)
- 如何理解应用程序通过系统调用和套接字进行交互?
- 如何理解Linux网络收发数据流程?
- [38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?](#38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?)
33 | 关于 Linux 网络,你必须知道这些(上)
设计高并发架构有哪些策略?
1,负载均衡:Nginx,HAProxy,LVS。
2,微服务:应用程序拆分为小型独立服务。
小型独立服务的特点:
- 实现应用程序特定业务,职责单一。
- 开发、部署和扩展能快速迭代。
- 通过HTTP,REST或消息队列协同实现应用程序功能。 (需要设计高效可靠的服务间通信。)
- 实现技术多样,不同服务可以使用不同的技术栈。
- 有独立的数据库和数据模型,去中心化。(需要考虑数据一致性的问题。)
- 不同服务之间故障隔离,提高系统整体稳定性。(需要管理,监控和运维多个独立服务。)
- 根据需求水平缩扩容,充分利用资源。
- 自动化监控、运维。
- Docker,Kubernetes。
3,异步编程:RabbitMQ,Kafka。
4,服务无状态设计:
- 请求之间不相互依赖。
- 请求和服务数据不相互依赖。
5,缓存:Redis,Memcached。
6,服务内部优化:数据结构和算法的优化,提高请求处理速度。
7,数据库优化:
- 读写分离。
- 使用NoSQL数据库。
- 数据库分片。
- 索引优化。
8,限流和熔断:必要时进行服务降级,保证核心功能的稳定性。
9,API网关:
- 客户端 --- API网关 --- 服务端。
- 简化客户端逻辑,为客户端提供统一的交互接口。
- 屏蔽后端服务的复杂性和细节。
10,CDN:
- 在多个地理位置的服务器上缓存。用户访问时,选择最接近的服务器向用户提供服务。
11, 数据复制和同步:
多数据中心之间复制数据,提高数据可用性和访问速度。
如何理解云计算?
通过互联网提供计算资源与服务(包括硬件和软件)。
IaaS:基础设施即服务。
- 提供虚拟化计算资源,用户租用这些资源,无需购买和维护硬件。
- CPU,内存,磁盘,网络等。
- 例如:Google Compute Engine,Amazon EC2,Microsoft Azure VMs。
PaaS:平台即服务。
- 提供除IaaS之外的软件应用平台。
- 为开发者提供完整的开发和部署环境,能在云端构建,测试,部署,管理和更新应用程序。
- 开发工具集成:提供集成开发环境和环境,代码编辑器,版本控制,编译服务,测试服务等。
- 中间件服务:数据库,消息队列,缓存,邮件服务等,开发者无需单独安装和管理。
- 编程语言和框架的支持:支持多种编程语言和框架。
- 自动化管理:自动化部署、扩展、负载均衡、日志管理、安全更新等。
- 服务集成:容易与其他服务集成,如连接不同的API、数据服务或企业服务。
- 开发者可以使用PaaS提供的服务快速开发新应用程序。
- 提供与生产环境一直的测试平台。
- 部署过程自动化和标准化,快速迭代应用。
- 提供完整的工具用于创建、测试和管理API。
- 例如:Google App Engine,Heroku,Microsoft Azure App Serveices。
SaaS:软件即服务。
- 通过互联网提供应用程序作为服务,用户直接通过浏览器或API直接访问服务,无需任何维护。
- 服务商负责软件的维护、操作和更新。
- 例如:Google Workspace,Microsoft 365。
如何理解TCP/IP 四层模型?
应用层:向用户提供一组应用程序接口,屏蔽底层复杂的网络协议栈。应用程序开发者只关注业务逻辑实现,而不需要处理网络通信的细节。例如:HTTP,FTP,DNS等。
传输层:应用程序(网络层IP + 传输层端口唯一标识)之间的通信。例如:TCP,UDP等。
网络层:主机(网络层IP唯一标识)之间的通信。例如:IP等。
网络接口层:负责网络帧在物理链路上的传输。
TUPIAN
如何理解网络接口层MAC寻址?
如何理解网络接口层错误侦测?
如何理解网络包的封装格式?
TUPIAN
如何理解MTU?
数据链路层限制的最大IP包传输大小。
IP头 + TCP头 + 应用数据 > MTU,则在网络层进行分片。
第一个分片:IP头部 + TCP头部 + 应用数据。
其他分片:IP头部 + 应用数据。
举例:MTU为1500字节。
2000字节IP数据包:IP头 (20字节) +TCP头 (20字节) +应用数据 (1960字节)。
分片1:IP头 (20字节) +TCP头 (20字节) +应用数据 (1460字节)。
分片2:IP头 (20字节) +应用数据(500字节)。
如何理解Linux 内核中的网络栈?
TUPIAN
如何理解应用程序通过系统调用和套接字进行交互?
如何理解Linux网络收发数据流程?
接收流程:
- 网络帧到达网卡。
- 网卡通过DMA将数据帧放在收包队列。
- 硬中断通知中断处理程序收到了网络帧,为网络帧在内核分配数据结构 sk_buff 并拷贝到 sk_buff缓冲区。
- 硬中断结束,通知软中断。
- 软中断从 sk_buff 缓冲区取出网络帧,按照网络协议解析,将应用数据缓存在socket中。
- 应用程序使用socket接口读取数据。
TUPIAN