传统软件项目微服务化升级系列-持久化存储

  随着业务量增长数据库会原来越成为瓶颈。一般的优化路径是一下几个步骤:

1、读写分离:热点数据从从库读

2、分库:根据业务热度和边界进行分库,将热点数据单独分库提高配置,简单说就是垂直拆分

3、分库分表:跟主键等对表数据进行分库分表,也就是水平拆分,这一步一般要考虑跨表查询的代价。设计规则将可能跨表联合查询的数据放到同一个库内。可以修改软件从业务代码上修改数据源的方式,也可以通过数据库中间件的方式实现,比如mycat。

4、分布式数据库:直接逐步更换成分布式数据库,比如tiDB。


  上面只是从数据库角度考虑的大优化,我们实际在项目进行中面临的更多的是软件层面的优化,针对这方便一般有以下几种:

1、数据库索引优化,适当建立索引,提高查询速度。

2、sql查询优化,优化系统中的sql语句,减少无用数据查询、合理使用跨表查询。

3、实时性要求高的写入型业务系统、要求相对较低的内部服务系统、要求低的分析系统。根据业务类型使用不同的数据库集群,降低业务系统数据库的查询请求,专注于写入。分析系统只使用从库。

4、根据数据特点将数据分散到不同数据库,像金额等强一致性的数据保留在关系型数据库内,地理位置、日志等信息放到kv型数据库,适当根据CAP(一致性、可用性、容错性)理论进行取舍。

5、合理使用缓存,查询较多、更新较少、实时性要求较小的数据可以放到内存型数据库中进行缓存,比如用户头像、用户名等信息。


  前面说的都是结构化数据,针对非结构化数据比如图片、视频、日志等信息也需要不断进行优化。图片、视频等资源较大的可以换为分布式文件系统,比如FastDFS、HDFS等,日志等可以用通过消息队列服务存储到分布式文件系统上。

文章分类