guanhui07 / blog

把博客迁移到这了
https://guanhui07.github.io/blog/
98 stars 31 forks source link

面试-大流量高并发系统架构设计 #799

Open guanhui07 opened 1 year ago

guanhui07 commented 1 year ago

面试服务端开发:

被问到 大流量高并发系统架构如何设计?

高并发 我说下我的见解 学习 或 心得:

最弱为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 负载均衡 主从 有服务依然 足够稳健 服务多年盈利。 有些需要并发的接口 迁移到swoolegolang 比如用swoft hyperf gin 用上 mysql连接池 常驻内存 协程 缓存 性能是百倍 千倍的 提升,配合mq 异步削峰 ,加上应用集群 负载均衡 读写分离 容器化 技术 慢慢拆分演化成微服务架构

一切技术皆不是银弹, 学习技术 点线面 ,从了解 到 实践应用 会遇到很多问题 ,比如微服务 拆服务,链路追踪 ,异步mq ,tcc