同时采用1主2从1备的双机房设计
- Master到Slave使用半同步方案,保证从库数据一致性 。
- Master异常时,通过mycat切换至Slave,Slave转换为新Master
- Master异常恢复后,先将原Master设置为Slave,数据同步完成后,再切换回正式Master
对数据库的大量操作是读操作,一般占到所有操作70%以上 。所以做读写分离还是很有必要的,如果不做读写分离,那么从库也是一种很大的浪费 。mycat通过配置很容易做到读写分离,在从库进行读操作,提升资源利用率,在主库进行写操作,减低主库压力 。
文章插图
?
分库分表
- 垂直分库:按照功能划分,把数据分别放到不同的数据库和服务器 。例如:账户、资产、交易等业务领域不同的数据分别放在不同的库中,分散压力、减少相互影响、降低耦合,独立模块独立发布
- 水平分库:在垂直分库不能满足要求时,再对模型进行水平的 切分,将同一实体,不同范围的数据分散到不同库中,保持单库数量和压力,提升连接数,达到横向扩展的目的 。
文章插图
?
冷热数据方案热数据缓存
- 对于高频使用的热数据,如经常使用App的客户信息等,适当增加数据库query cache,提升数据库查询性能 。
- 在应用层使用redis等内存缓存部分高频使用数据,降低请求响应时间,增加系统流畅度,提升客户体验 。
- 进行读写分离,使用从库提供数据查询的服务,提升从库硬件资源利用率,降低主库读压力,增加主库写性能 。提升整体效率 。
- 对于使用频率很低或基本不使用的冷数据,如历史交易、历史卡券等,进行数据的归档,提升数据库的性能 。
- 也可提供使用频率较低的历史交易查询功能,使用备库提供服务 。
- 对于交易类数据建议按日期进行分库分表,每日交易分为一片或多片,对于历史交易如1年前交易进行定期迁移和归档,提升数据库性能 。
文章插图
?
在进行持续集成的过程中,同时加入了安全检查,合规检查以及单元测试(SpringBoot应用使用JUnit,Vue前端应用使用Jest测试框架)的步骤,以保证每一次发布的质量 。###ConfigMap ConfigMap用于将应用的配置信息与程序的分离,这种方式不仅可以实现应用程序被的复用,而且还可以通过不同的配置实现更灵活的功能 。本案例中,SpringBoot应用在K8S部署时,便将application.yml文件以ConfigMap文件的形式进行挂载 。需要注意,SpringBoot会优先读取classpath下的配置文件,因此需要在打出springboot应用jar包时,先将配置文件排除,并通过容器启动命令参数来制定挂载的应用配置文件 。
-spring.profiles.active=prod-spring.config.location=/config/application.yml复制代码
###K8S容器部署 在K8S部署平台,可以为每一个服务指定初始的资源,以及节点数量配置 。比如我们为SpringBoot应用初始配置,2core 4g的资源配置,节点数量则为20个 。文章插图
?
根据需要我们可以采用滚动方式对pod数量进行伸缩 。而不会引起服务不可用的情况 。
文章插图
?
另外,我们也可以利用弹性伸缩,基于某些关键指标,如容器的CPU使用量作为阈值,来触发容器进行弹性伸缩 。在这个案例中,通过弹性伸缩机制,在上班以及中午业务高峰时间段内,将更多pod提供给业务服务组件,而在晚上,则会将pod从业务组件收回,提供给需要跑批处理以及异步消费的服务组件 。
文章插图
?
运维与监控ELKELK是一套解决方案而不是一款软件, 三个字母分别是三个软件产品的缩写 。E代表Elasticsearch,负责日志的存储和检索; L代表Logstash, 负责日志的收集,过滤和格式化;K代表Kibana,负责日志的展示统计和数据可视化 。
推荐阅读
- 防火墙基础与配置
- 萧何在汉书中属于 成也萧何败也萧何指的是西汉哪位开国功臣
- 朱元璋的郭宁莲是怎么死的 朱元璋老婆郭宁莲
- 哈尔科夫反击战的精妙之处
- 陈平和张良谁更会用计 陈平和张良谁的水平高
- 盗墓笔记里的汪家人是什么来历 盗墓笔记里的汪家人到底是什么人啊
- 这可能是网上最全的 Docker 工具集合
- 六安瓜片是怎么来的,六安瓜片的存储方法
- 一通百通,一文实现灵活的 K8S 基础架构
- 500元以内什么蓝牙耳机好?五大性价比高的蓝牙耳机推荐