SolarMesh正式发布 v1.10.1 版本,这次版本更新的主题是支持主流注册中心。
概述
在云计算和容器技术蓬勃发展的今天,Kubernetes的影响力与日俱增,**“上Kubernete = 上云原生”**这一句话虽然不正确,但基本成为了客观事实。随之而来的是为系统研发开启了全新的系统架构和思维方式——集群,节点,云资源等概念成为了可以被调度的对象,开始与业务系统有所关联了。这也是为什么很多期望上云的企业在早期迁移存量系统的时候会出现各种故障,严重影响研发的根源所在。
对于Kubernetes来说集群内的一切都是聚合的抽象资源,也被称之为云资源,Kubernetes正是通过对云资源的统一调配来实现资源利用的最大化。所以云原生应用从一开始就是基于"无限"的云资源设计,通过对云资源的依赖来实现本身的价值。
对于一些老旧的应用来说,设计之初是基于“有限”的基础设施,比如cpu、内存、固定ip等基础设施而设计,应用运行依赖于这些单点资源。
我们用服务发现功能举例来看看Kubernetes和传统应用在设计思路上的不同。
以SpringCloud为代表的SOA体系一般会依赖一个叫做服务注册中心的组件做微服务之间的沟通媒介,通俗的说就相当于一块公告版,上面记录的是所有服务的ip地址,如果哪个服务需要与其他服务沟通的时候就去看一眼公告版,拿到对方的ip之后再调用。这里面体现了一个思路,对于公告版而言,它会认为各微服务是固定不动的,如果微服务挪动了地方的话就得去公告版上更改ip。
而Kubernetes会认为服务实例是游离状态的,它可能被调度到集群中任意的一个节点上,Kubernetes会提供一个叫做service的云资源来描述这一组服务实例,在调用时无需关心对方现在被调度到了何方,也不用关心调度到了哪一个实例上,他们会被认为是为客户端提供一样的服务。
如果强行将SOA体系整个迁移到Kubernetes当中,在Kubernetes的调度下服务实例可能会发生频繁的变更,那么注册中心上就会不断发生注册与重新注册,带来的后果就是服务显得十分不稳定。
由此看来,Kubernetes在设计上就与传统应用有所区别,导致不进行架构层次的重构与改变,传统应用很难直接运行在kubernetes中,更别提享受云原生体系带来的技术红利。
而这些问题的存在就得需要一套解决方案去平衡这些SOA架构的应用和kubernetes之间的关系。
为此,SolarMesh在此次 v1.10.1 版本更新中添加了对注册中心的支持。通过对流量的劫持以及对服务注册中心的代理实现SOA架构与Kubernetes的无缝对接,在不改任何代码的情况下享受kubernetes和服务网格带来的技术红利。
演示
示例项目
此次演示使用了一个典型的电商项目 mall-swarm(github.com/macrozheng/…)。
mall-swarm是一套微服务商城系统,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。
由于mall-swarm依赖众多,部署麻烦,我们将mall-swarm的所有中间件做了一份k8s部署yaml,让所有的中间件都部署到集群内方便测试,改造后源码开源在mall-swarm-istio(github.com/solarmesh-c…),所以我们这次使用mall-swarm改造版。
前置条件
- k8s集群
- 安装SolarMesh
- 部署nacos并且根据SolarMesh文档配置了networking-agent组件(nacos部署在集群内外都可以)
创建namespace
kubectl create ns mall
复制代码
clone仓库
git clone https://github.com/solarmesh-cn/mall-swarm-istio.git
复制代码
部署基础设施
kubectl apply -n mall -f mall-swarm/document/k8s/infra
复制代码
导入sql
连接集群 nodeport 33066端口上的mysql,导入 mall-swarm/document/sql 下面的sql文件。
部署mall-swarm
kubectl apply -n mall -f mall-swarm/document/k8s/service
复制代码
接入sidecar
将gateway,mall-admin,mall-auth,mall-portal,mall-monitor,mall-search 服务接入sidecar,这里可以使用SolarMesh的手动接入功能,找到对应的workload进行接入。
访问页面
部署mall-admin-web
注:config/prod.env.js配置到集群内的gateway服务
访问mall-admin-web的页面即可
流量视图
在页面上试着多访问几次,让mall产生更多的流量。
此时查看流量视图,SolarMesh已经完整的监测到了整个项目的流量拓扑。
其他更新内容
- 增强附加组件体系: 新增公共组件-鉴权组件,实现外挂式权限管理
- 优化: 界面对接集群,流量视图展示优化,日志展示优化
- 修复了一些已知的bug
SolarMesh
虽然Kubernetes和服务网格是未来的大势所趋,但今天的企业系统大多还是以SOA架构为主。
企业通过内部强大的研发运维能力,硬上Kubernetes相对来说容易,但适应Kubernetes带来的思维转换往往是艰难而缓慢的。
SolarMesh v1.10.1版本起到牵线作用,让企业系统可以向着云原生的方向走近一步,服务网格也向着传统应用走近一步。
SolarMesh 基于 Istio 及容器技术,提供流量监控和管理,提供完善的非侵入式服务治理解决方案,帮助企业在纷繁复杂的微服务调度中快速定位问题,增强研发效率,让服务网格不再难学难用,让服务网格在企业落地更加平滑、安全、稳定。