主要考虑三个方面,一个是架构,一个是容量,还有一个是调优。
架构方面要考虑的主要是架构拆分、加速和增加吞吐量技术。
架构拆分的常用技术比如:DDD四层架构、六边形架构、微内核架构,还有像k8s架构那种基于角色的拆分;还有异步化,基于事件驱动来分阶段处理;查询分等级,实时走数据库,列表等大查询走ES等搜索引擎;读写分离。
加速和增加吞吐量技术常用的比如:CDN、缓存、负载均衡、合理进行业务编排并行执行,还可以考虑使用webflux等响应式编程框架。
业务容量需要做到可衡量、可观测、可应对。容量包含数据量和并发量两方面。数据量方面比如数据库容量,我之前的项目,数据库容量的对应措施是使用日表、月表这样方便定期删除归档的手段,让数据库表的容量在一定数量级范围内维持稳定的容量水位。这也是一种冷热分离的手段,减轻当前热数据的存储量,提高性能。
容量设计要考虑两方面:一方面是容量伸缩,另一方面是容量防御。
容量伸缩主要遵循AKF扩展立方。X轴水平扩容,Y轴垂直领域拆分扩容,Z轴按一定的算法规则扩容。
容量防御方面的手段比如:隔离、混部、流控、熔断和降级。一旦出现问题,先让系统柔性地提供服务,争取一个扩容的时间。
调优技术比如:JVM调优减少GC停顿,无垃圾化减少GC,梳理业务优化模型。