Linux 性能优化实战

Linux 性能优化实战原文链接:https://time.geekbang.org/column/intro/100020901?tab=catalog

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

38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?

相关推荐
cooldream20093 分钟前
Linux性能调优技巧
linux
大G哥4 分钟前
记一次K8S 环境应用nginx stable-alpine 解析内部域名失败排查思路
运维·nginx·云原生·容器·kubernetes
长天一色7 分钟前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript
醉颜凉21 分钟前
银河麒麟桌面操作系统修改默认Shell为Bash
运维·服务器·开发语言·bash·kylin·国产化·银河麒麟操作系统
QMCY_jason1 小时前
Ubuntu 安装RUST
linux·ubuntu·rust
慕雪华年1 小时前
【WSL】wsl中ubuntu无法通过useradd添加用户
linux·ubuntu·elasticsearch
苦逼IT运维1 小时前
YUM 源与 APT 源的详解及使用指南
linux·运维·ubuntu·centos·devops
仍有未知等待探索1 小时前
Linux 传输层UDP
linux·运维·udp
zeruns8021 小时前
如何搭建自己的域名邮箱服务器?Poste.io邮箱服务器搭建教程,Linux+Docker搭建邮件服务器的教程
linux·运维·服务器·docker·网站
卑微求AC1 小时前
(C语言贪吃蛇)16.贪吃蛇食物位置随机(完结撒花)
linux·c语言·开发语言·嵌入式·c语言贪吃蛇