高性能架构模式

jujusharp  •  Jun 2, 2019 9:14:39 PM

原文地址


(1)读写分离

主从复制延迟

1、写操作后的读操作指定发给数据库主服务器

2、读从机失败后再读一次主机

3、关键业务读写操作全部指向主机,非关键业务采用读写分离

1、程序代码分装

2、中间件封装

(2)分库分表

二、高性能nosql

  • K-V 存储:解决关系数据库无法存储数据结构的问题,以 Redis 为代表。

  • 文档数据库:解决关系数据库强 schema 约束的问题,以 MongoDB 为代表。

  • 列式数据库:解决关系数据库大数据场景下的 I/O 问题,以 HBase 为代表。

  • 全文搜索引擎:解决关系数据库的全文搜索性能问题,以 Elasticsearch 为代表。

三、高性能缓存架构

1、缓存穿透

2、缓存雪崩

设计方式:后台定时更新+业务消息队列通知更新

3、缓存热点

实现方式: 针对缓存热点复制多份缓存副本

四、单服务器高性能模式 -并发模型

1、ppc (process per connection)

优化:ppc + prefork

2、tpc(thread per connection)

优化:tpc + prethread

ppc与tpc 适用场景 :

ppc与tpc是阻塞io/bio

常量连接海量请求情形,比如数据库,activemq 的bio模式可以用

常量连接常量请求 情形 企业内部系统

3、Reactor/Dispatcher 模式

形象描述:来了事件我通知你,你来处理

nio 同步非阻塞 ,io 多路复用统一监听事件,收到事件后分配(dispatch)给某个进程

典型实现方案:

(1)单reactor单进程/线程

只适用于业务处理非常快速的场景,例如单 Reactor 单进程redis

(2)单reactor多线程

应用举例:java 的nio,消息队列设计

(3)多reactor多进程/线程

应用举例:多reactor多进程的nginx,多reacotr多线程的netty,memcache

(4)proactor模式

形象描述:来了事件我来处理,处理完了我通知你

Windows 下通过 IOCP 实现了真正的异步 I/O,而在 Linux 系统下的 AIO 并不完善

海量连接海量请求

小提示:IO操作分两个阶段 1、等待数据准备好(读到内核缓存) 2、将数据从内核读到用户空间(进程空间) 一般来说1花费的时间远远大于2。 1上阻塞2上也阻塞的是同步阻塞IO 1上非阻塞2阻塞的是同步非阻塞IO,这讲说的Reactor就是这种模型 1上非阻塞2上非阻塞是异步非阻塞IO,这讲说的Proactor模型就是这种模型

五、集群高性能模式-负载均衡

(1) 架构

1、dns 负载均衡

优化:http-dns 适合cs模式,替换现有基于udp的dns协议

2、硬件负载均衡

3、软件负载均衡

lvs 或nginx

(2) 算法

轮询 、加权轮询、负载最低、性能最优、hash类

参考:李运华的从0开始学架构


近期文章:

如何开始架构设计

微服务架构————基本组件

微服务实战问题

微服务架构进阶

秒杀系统设计

分布式数据一致性理解

5种分布式锁实现的对比?

Java并发编程学习体系

java8 Stream 史上最全总结

Java 网络编程"初探"

redis 知识点总结

java 核心技术学习总结 (一)

spring中"投机取巧"地限制 用户同时登陆

如果你喜欢本文

请长按二维码,关注乔志勇笔记

0 回复
暂时没有回复,你也许会成为第一个哦