高并发的哲学原理

118 阅读7分钟

放到最前面:高并发的哲学原理读后感
lvwenhan.com/tech-epic/4…

找出单点,进行拆分

  1. 动静分离,使用Nginx代替Apache,将静态资源使用CDN来承载
  2. 将应用代码和数据库分在不同的机器上部署。如果应用代码和数据库跑在一个系统上,压力稍微大一点,很容易出现“债股双杀”的局面:MySQL的响应变慢,应用代码就需要更长时间的等待,又要消耗更多的CPU资源,从而形成“内卷”和“踩踏”
  3. 抗击爬虫的方法:
    • 利用ElasticSearch完成搜索任务
    • 将部分任务定义为定时任务
    • 给予数据库和应用程序更多的资源
    • 限流:ip限流;接口限流;整个 /24 ip 段做请求频率限制
    • 熔断

Apache的性能瓶颈与Nginx的性能优势

为什么Nginx与Apache性能强:因为Nginx利用率epoll事件驱动API,大幅度降低了海量TCP谅解下的CPU负载,提升了单个系统的TCP响应容量。Nginx的epoll比Apache的select性能高。 表现良好的方法:在APache前面加一个Nginx处理海量的请求,这样Apache只需要处理好与Nginx之间的少量TCP连接

基础设施并发:虚拟机与k8s

  1. kong网关:是基于国产OpenResty技术的开源网关
  2. 服务发现:像Kong一样,HashiCorp开源的consul也可以独立于k8s环境运行,于是选择其来做服务发现,服务发现的原理:构造一个共识集群,各个节点之间会使用固定的端口相互通信,但新的上游服务器开机后,他上面的consul服务会开机启动,之后就会和配置好的一个master的ip进行通信,加入这个集群,并广播本机可以提供的服务名称,假设叫up。这是,同样在集群内的kong网关服务器就可以通过它本机上安装的consul提供的DNS服务拿到新加入集群的这台机器的ip了。
  3. 虚拟化技术的价值
    • 资源隔离:后端技术的软件大部分都是有多大屁股穿多大裤衩,根据请求压力任意获取计算资源,这就让计算资源的发呢配容易出现问题,导致木桶效应,最终导致整体性能反而更低
    • 降低运维复杂度
    • 隐藏价值:很多软件都具有单机性能极限,即使给它更多的计算资源,也无法提高这些软件的性能。

隐藏在语言背后的魔鬼:运行架构为何会成为性能瓶颈

go在语言层面打造了一个完善的高并发工具--goroutine协程,它是语言提供的一个 线程池+协程的综合解决方案,并使用channel管道思想来传递数据,为 使用者提供了一个无需手动管理的高性能并发控制runtime,可以保证完全榨干每一个cpu时间片。 goroutine的缺点是内存同步问题。使用redis打辅助,当某个协程进入网络IO状态,则会立即让出CPU时间片,goto到下一个协程,不浪费CPU资源。

应用网关、负载均衡和路由器

应用网关,又称为API网关,它是所有api请求的大门,自己接下所有HTTP/HTTPS/TCP请求,再将请求转发给真正的上游服务器。常见的应用网关软件有HAProxy、Nginx、Envoy 等

应用网关

应用网关的作用:

  • 解放后端架构:所有系统都应该放在应用网关的背后,包括开发环境
  • TLS卸载:终端用户范围应用网关的时候采用的是HTTPS协议,这个协议是需要对数据进行加解密的,应用网关非常适合干这件事,而背后的业务系统只提供标准HTTP协议即可,降低了业务系统的部署复杂度和资源消耗。
  • 身份验证和安全性提升:应用网关可以对后端异构系统进行统一的身份验证,无需一个一个单独实现。也可以统一防火墙白名单,后端系统防火墙只对网关ip开发,极大提升了后端系统的安全性,降低了海量服务器安全管理的难度。甚至可以针对某条api进行单独鉴权,让系统的安全管控能力大幅度提升。
  • 指标和数据收集:所有的流量都会经过网关,所以对指标进行收集也会变得简单
  • 数据压缩和转换:应用网关还可以统一对流量进行 gzip 压缩,可以将所有业务一次性升级到 HTTP/2 和 HTTP/3,可以对数据进行格式转换(XML 到 JSON)和修改(增加/修改/删除字段),总是就是能各种上下其手,翻云覆雨,随心所欲。
  • 此外如果低负载,则应用网关和负载均衡可以是同一个软件来完成。如果是高负载,则在负载均衡后面接多个应用网关

负载均衡

负载均衡的作用:与路由器的作用差不多,将客户端的请求转发到下游的应用网关中,他与客户端不进行TCP连接,只是转发报文

SDN 如何替代百万人民币的负载均衡硬件(网关、LVS、交换机)

  1. 交换机:客户端与负载均衡器之间使用的是公网,而负载均衡器与应用网关之间使用内网。在这两个过程中使用交换机
  2. LVS:与交换机不同的是,LVS在转发的过程中会修改报文中的ip等信息。在客户端和应用网关之间先后经过网关与LVS。LVS的运行原理:它通过在LVS和上游服务器上配置虚拟ip,以对数据包进行篡改后再发送为手段,在标准以太网模型下构建出异构可行的负载均衡系统。它不像交换机那样完全不修改数据包,不像网关那样维持异构对应关系并修改很多东西,它篡改数据包,但不多,所以可以实现非常高的性能。

数据库以及它背后的存储

InnoDB与之前的MyISAM最大的变化是什么

最大的变化是将磁盘上面数据的基本存储结构从索引+数据这样的分体式,变成了所有数据都挂在索引上的整体式:从“B+树索引”加“磁盘连续存储数据”(中间用指针链接)变成了“B+树存储所有索引和数据”

## 细数四代分布式数据库并拆解 TiDB 和 OceanBase(主从、中间件、KV、计算与存储分离、列存储、CAP定理)

  1. CAP理论:
  • 一致性:同一个时刻发送到三个机房的同一读请求返回的数据必须一致性(强一致性),而且磁盘上的数据也必须在一段时间后变的完全逻辑一致。
  • 可用性:一定比列的机器宕机,其他未宕机服务器必须能够响应客户端的请求(必须是正确格式的成功或失败),这个比列的大小就是可用性级别。
  • 分区容错性:一个集群由于通信故障分裂成两个集群后,不能变成两个数据不一致的集群(脑裂),对外必须依然表现为一个逻辑集群。

## 理论无限容量:站在地球表面

  1. 微服务划分:在大量调用的api中,一次携带了数据写入的请求一定只会对单个微服务进行写入,但会对多个微服务进行数据读取。如果某个头部api请求会对两个微服务系统进行写入,那说明微服务的划分出了问题,需要调整系统结构划分。

读后总结:

写得不错,但对于一个小白来说看得有点云里雾里。工作后再读一读