漫谈架构技术
Written by
荒岛书生
on
本文介绍技术选型原则、高可用如何做、一般商业应用的数据库配置、电商场景里的超卖如何处理等零散知识点,点到为止。
高并发,高可用,高性能
软件工程方面
- 事前:多机服务冗余、隔离、自动发布、灰度发布、数据库加索引、集成测试 & 单元测试
- 中间:多级缓存(业务,sql缓存,中间件),离线,重试i,限流降级,异步,监控,回滚策略
- 事后:复盘,优化迭代
编程技巧
- 不要在for循环里查询数据库,造成过多查询
- 重要的日志要区分error、info、debug 记录下来
- 调用第三方服务要考虑好服务重试问题
- 严格命名参数、方法名、类名,这将在后来给你大大节约回想代码的时间
- 强烈建议加注释,即便其他人都不写。除非你的记忆里能记得起来几个月之前的代码是什么意思。
- 保持类、方法只要有单一职责。所以要多拆分,不要写一个100行的方法,让别人很难迅速理解!如何拆分设计各个类、类的方法,这是一件入门容易学成难的事情!
技术选型原则:
越合适越好,越简单越好。多使用第三方库。
编程语言
想要用最少的人力时间开发,选Python 。 想要最容易找到员工,选Java。 想要跟随潮流,2020年比较流行的、个人比较看好 Golang、Ruby。
数据库选型
tidb:不会有join、事务问题。 crdb: 搭建复杂,对性能配置要求高
数据仓库&流计算
olap doris sparksql presto impala druid flink
一般商业应用的数据库配置
数据库连接池大小 一般配置 100左右,针对4核CPU、10,能支持7k的并发量。 druid 连接池
分布式存储: mysql NoSQL NewSQL olap MySQL: 分表 500w,2G大小;index pool buffer size tidb:
场景一:超卖
超卖是商业 to C 的系统里常碰到的问题,要想解决这个问题,需要设计高可用、高并发、高性能、高拓展等多个方面。
- 服务重试
- A–B;
- 竞争
-
redis 解决:
分布式锁:lua+key+自动失效; redis ,spring interation分段锁: K1,K2,Kn重试 ;随机负载
mysql 解决
1. 悲观锁,select * from where user for update 排它锁
2. 乐观锁 1. mvcc,业务检查 2. case when ,update set case when then 下单 - 过滤器、拦截器 使用过滤器拦截器、提前分流,提前预先判断错误并返回客户端,尽量在代码层解决错误产生,尽量避免错误的请求落在数据库里。比如提前判断请求参数的范围、提前在redis里缓存商品 SKU 避免无效的 SKU 查询等。