写点什么

k8s 上运行我们的 springboot 服务之——简单的架构思考

用户头像
柠檬
关注
发布于: 2020 年 05 月 21 日

综述

目前 java 后台开发人员不管面试还是真实的项目实战都离不开一个主题 soa,微服务的技术实现主要有 springcloud 和 dubbo(当然还有其他的一些 rpc 框架)。个人觉得 rpc 架构只是一种服务调用的实现,我们开发人员更应该去了解各个技术实现各个复杂的业务功能(例如:如果用分布式锁、lua 去实现秒杀),具体表现在开发人员的工作内容了解业务去用合理的 sql 语句解决问题,其他的接口和底层的服务,在架构上应该是现成的拿来即可用。


随着 k8s 技术的出现和迅速的市场占有(可以去看看阿里云等无不和 k8s 有紧密的联系)个人觉得所有的 rpc 框架以后都不得不去拥抱 k8s,目前 springcloud 已有 k8s 的 starter 了。


google 果然是大厂,推出 k8s 后又推出了 istio 了。个人觉得我们使用 k8s+istio 和 springcloud 的某些功能也能完美的搭建我们后台的微服务。这样能更好去构建开发,发布,测试,监控等等 devops 流程


一张粗略的架构图


1、通过 istio(边车,监控,负载均衡等等) + cloud 的 gateway(白名单,权限,访问统一入口,服务是否允许被调用)来完成微服务。

2、基础服务划分,相互之间尽量不要有调用,注意其原子性和幂等性

3、对于整个框架构建,如果有一个需求需要查询多个服务的需求,例如:我用户,订单,支付在不同的基础服务,有个需求是 我需要分页查询用户的的订单和支付(通过用户 id 把数据串联起来),那么这一部分查询需要单独搞一个聚合服务,专门来处理这种 跨服务的查询,不要在某个服务或者在业务系统来调不同的业务来组装

4、不能环形依赖

5、简单的说明

1)所有服务访问和调用入口在 gateway,gateway 做了很多处理,减少服务直接的访问

2)服务打包成 docker 镜像上传到私服,k8s 构造 svc 的时候去统一的私服拉取镜像

3)需要访问服务的时候需要从 k8s 的 master 节点进入,以 www.服务名.com 的方式,也就是配置/etc/hosts:www.服务名.com 对应 masterip

4)所有的配置放到 nacos 中

5)服务间调用通过 feign 来完成

6)服务日志统一通过 logback flunet 收集,放到 db(efk)中,方便查看

7)文件存储用 mongo 的 gridfs 实现

8)mysql 的读写分离,分布式事务

9)分布式锁用 redisson 完成,lua 脚本的重要性

10)监控通知使用 alertmanager,skywalking 等

11)爬虫考虑

12)当然如果涉及到大数据,那么 spark,hadoop,flume,hbase 按需加入到各个服务中,这是后话了 等等


未来的技术方向

个人觉得未来的技术:物联网+人工智能+5G+cloud+大数据+区块链


具体的架构代码https://gitee.com/lvmoney/zhy-frame-parent

发布于: 2020 年 05 月 21 日阅读数: 146
用户头像

柠檬

关注

人生尚未成功,朋友仍需努力 2020.05.21 加入

长期从事微服务,中台等后台开发和架构设计。一些见解和实现可查看https://gitee.com/lvmoney/lvmoney-frame-parent

评论 (5 条评论)

发布
用户头像
一直没搞清楚JVM-Docker-K8s-Istio之间的关系
2020 年 05 月 23 日 15:45
回复
我来排个序:k8s,istio,docker,jvm,springboot
2020 年 05 月 23 日 16:15
回复
这么排序的依据是什么呢?
2020 年 08 月 13 日 09:40
回复
实战经验
2020 年 08 月 13 日 16:14
回复
查看更多回复
没有更多了
k8s上运行我们的springboot服务之——简单的架构思考