基于SpringBoot的微服务架构与K8S容器部署实践( 三 )


同时采用1主2从1备的双机房设计

  • Master到Slave使用半同步方案,保证从库数据一致性 。
  • Master异常时,通过mycat切换至Slave,Slave转换为新Master
  • Master异常恢复后,先将原Master设置为Slave,数据同步完成后,再切换回正式Master
mycat高可用mycat采用k8s容器化运行,使用k8s service来实现mycat的负载均衡,达到mycat的集群的高可用 。若mycat容器节点异常,应用自动连接到另外的mycat节点上 。
对数据库的大量操作是读操作,一般占到所有操作70%以上 。所以做读写分离还是很有必要的,如果不做读写分离,那么从库也是一种很大的浪费 。mycat通过配置很容易做到读写分离,在从库进行读操作,提升资源利用率,在主库进行写操作,减低主库压力 。
基于SpringBoot的微服务架构与K8S容器部署实践

文章插图
 
?
分库分表
  • 垂直分库:按照功能划分,把数据分别放到不同的数据库和服务器 。例如:账户、资产、交易等业务领域不同的数据分别放在不同的库中,分散压力、减少相互影响、降低耦合,独立模块独立发布
  • 水平分库:在垂直分库不能满足要求时,再对模型进行水平的 切分,将同一实体,不同范围的数据分散到不同库中,保持单库数量和压力,提升连接数,达到横向扩展的目的 。

基于SpringBoot的微服务架构与K8S容器部署实践

文章插图
 
?
冷热数据方案热数据缓存
  • 对于高频使用的热数据,如经常使用App的客户信息等,适当增加数据库query cache,提升数据库查询性能 。
  • 在应用层使用redis等内存缓存部分高频使用数据,降低请求响应时间,增加系统流畅度,提升客户体验 。
  • 进行读写分离,使用从库提供数据查询的服务,提升从库硬件资源利用率,降低主库读压力,增加主库写性能 。提升整体效率 。
冷数据归档
  • 对于使用频率很低或基本不使用的冷数据,如历史交易、历史卡券等,进行数据的归档,提升数据库的性能 。
  • 也可提供使用频率较低的历史交易查询功能,使用备库提供服务 。
  • 对于交易类数据建议按日期进行分库分表,每日交易分为一片或多片,对于历史交易如1年前交易进行定期迁移和归档,提升数据库性能 。
DEVOPS与K8S容器化部署####DEVOPS流水线 本案例中,通过基于jenkins的CICD平台,将应用代码从github代码库获取,使用gradle进行构建(前端使用npm构建),通过dockerfile打成镜像后,部署到K8S容器平台 。
基于SpringBoot的微服务架构与K8S容器部署实践

文章插图
 
?
在进行持续集成的过程中,同时加入了安全检查,合规检查以及单元测试(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个 。
基于SpringBoot的微服务架构与K8S容器部署实践

文章插图
 
?
根据需要我们可以采用滚动方式对pod数量进行伸缩 。而不会引起服务不可用的情况 。
基于SpringBoot的微服务架构与K8S容器部署实践

文章插图
 
?
另外,我们也可以利用弹性伸缩,基于某些关键指标,如容器的CPU使用量作为阈值,来触发容器进行弹性伸缩 。在这个案例中,通过弹性伸缩机制,在上班以及中午业务高峰时间段内,将更多pod提供给业务服务组件,而在晚上,则会将pod从业务组件收回,提供给需要跑批处理以及异步消费的服务组件 。
基于SpringBoot的微服务架构与K8S容器部署实践

文章插图
 
?
运维与监控ELKELK是一套解决方案而不是一款软件, 三个字母分别是三个软件产品的缩写 。E代表Elasticsearch,负责日志的存储和检索; L代表Logstash, 负责日志的收集,过滤和格式化;K代表Kibana,负责日志的展示统计和数据可视化 。


推荐阅读