Open guanhui07 opened 1 year ago
面试服务端开发:
高并发 我说下我的见解 学习 或 心得:
最弱为mysql 读写 越少打mysql越好 ,多考虑异步 锁 缓存 mysql分库分表,索引优化
mysql
分布式,服务器集群,负载均衡 拆各个服务 每个服务独立库表
分布式
服务器集群
负载均衡
关系型数据库用来落地 多用nosql补充 灵活用
nosql
动静分离 cdn 使用 go swoole 常驻内存,支持协程 异步非阻塞 mysql连接池 mongodb 分片aoto sharding 一主多从 读写分离 分库分表 索引 慢查询优化 应用集群,lvs nginx负载均衡,分布式 热数据多级缓存 进程内,机器内,redis集群 锁 redis集群 rdb aof redis分布式锁 mq异步化 肖峰 解藕 投递 es 微服务 tcc 链路追踪 grpc 服务注册发现 consul nacos etcd zookerper 配置中心 appolo nacos 分布式数据库 tidb polardb等 网关 kong apisix orange lua openresty 灰度 金丝雀发布 限流 熔断 降级 监控平台 告警 通知 日志分析 elk日志 上云平台 容器化 k8s横向 水平扩展 全链路压测
cdn
mongodb
lvs
nginx
tcc
grpc
consul
nacos
etcd
zookerper
appolo
tidb
polardb
kong
apisix
orange
lua
openresty
金丝雀发布
elk
k8s
主从 冗余 备份 比如微博早就万亿博文,所以要拆 按时间拆 实体表比如用户表 取模分, 日志表按月份或每日分
分库分表 拆 用中间件java比较多 mycat dbproxy等 竖直分,水平分,发号器服务 主库同步五个从库 log dump 线程 主从延迟 主库写还是有上限假如 8p16g 写1200qps上限 就需要拆 分库分表 一个主库拆,n个主库 每个主库带几个从库节点 微服务化 比如独立活动服务 秒杀独立服务集群增加服务器 , 商品服务缓存化 mq异步化落地,锁,库存存redis内存
mycat
dbproxy
考虑的点: 内存 cpu 硬盘 系统 磁盘io 网络io 静态就是带宽 cdn 最后招 稍微提升服务器配置 抗多点qps
磁盘io
网络io
最后 没有一步到位的架构 架构很多 按需选择,架构演化, 比如 淘宝从最开始18罗汉 的 php 单体架构 演化到 java 微服务化
php
高并发 不知 多高 算高 每个人理解不同 了解到 像一些应用 如 laravel 几十qps 就上限了 但加上缓存 以及 opcache 负载均衡 主从 有服务依然 足够稳健 服务多年盈利。 有些需要并发的接口 迁移到swoole或 golang 比如用swoft hyperf gin 用上 mysql连接池 常驻内存 协程 缓存 性能是百倍 千倍的 提升,配合mq 异步削峰 ,加上应用集群 负载均衡 读写分离 容器化 技术 慢慢拆分演化成微服务架构
高并发
laravel
opcache
主从
swoole
golang
swoft
hyperf
gin
mysql连接池
常驻内存
协程
缓存
mq
应用集群
读写分离
容器化
一切技术皆不是银弹, 学习技术 点线面 ,从了解 到 实践应用 会遇到很多问题 ,比如微服务 拆服务,链路追踪 ,异步mq ,tcc
面试服务端开发:
被问到 大流量高并发系统架构如何设计?
高并发 我说下我的见解 学习 或 心得:
最弱为
mysql
读写 越少打mysql
越好 ,多考虑异步 锁 缓存 mysql分库分表,索引优化分布式
,服务器集群
,负载均衡
拆各个服务 每个服务独立库表关系型数据库用来落地 多用
nosql
补充 灵活用动静分离
cdn
使用 go swoole 常驻内存,支持协程 异步非阻塞 mysql连接池mongodb
分片aoto sharding 一主多从 读写分离 分库分表 索引 慢查询优化 应用集群,lvs
nginx
负载均衡,分布式 热数据多级缓存 进程内,机器内,redis集群 锁 redis集群 rdb aof redis分布式锁 mq异步化 肖峰 解藕 投递 es 微服务tcc
链路追踪grpc
服务注册发现
consul
nacos
etcd
zookerper
配置中心appolo
nacos
分布式数据库tidb
polardb
等 网关kong
apisix
orange
lua
openresty
灰度金丝雀发布
限流 熔断 降级 监控平台 告警 通知 日志分析elk
日志 上云平台 容器化k8s
横向 水平扩展 全链路压测主从 冗余 备份 比如微博早就万亿博文,所以要拆 按时间拆 实体表比如用户表 取模分, 日志表按月份或每日分
分库分表 拆 用中间件java比较多
mycat
dbproxy
等 竖直分,水平分,发号器服务主库同步五个从库 log dump 线程 主从延迟 主库写还是有上限假如 8p16g 写1200qps上限 就需要拆 分库分表 一个主库拆,n个主库 每个主库带几个从库节点 微服务化 比如独立活动服务 秒杀独立服务集群增加服务器 , 商品服务缓存化 mq异步化落地,锁,库存存redis内存
考虑的点: 内存 cpu 硬盘 系统
磁盘io
网络io
静态就是带宽 cdn 最后招 稍微提升服务器配置 抗多点qps高并发: 分布式,集群,缓存 锁 异步化
高可用: 多机房 异地容灾 冗余 备份
最后 没有一步到位的架构 架构很多 按需选择,架构演化, 比如 淘宝从最开始18罗汉 的
php
单体架构 演化到 java 微服务化高并发
不知 多高 算高 每个人理解不同 了解到 像一些应用 如laravel
几十qps 就上限了 但加上缓存 以及opcache
负载均衡
主从
有服务依然 足够稳健 服务多年盈利。 有些需要并发的接口 迁移到swoole
或golang
比如用swoft
hyperf
gin
用上mysql连接池
常驻内存
协程
缓存
性能是百倍 千倍的 提升,配合mq
异步削峰 ,加上应用集群
负载均衡
读写分离
容器化
技术 慢慢拆分演化成微服务架构一切技术皆不是银弹, 学习技术 点线面 ,从了解 到 实践应用 会遇到很多问题 ,比如微服务 拆服务,链路追踪 ,异步mq ,tcc