1.SaaS技术栈选型,如何取最优解
SaaS技术栈作为SaaS应用的核心,可决定应用程序的可扩展性、功能性和可行性。 因此,如何根据企业需求做出关于最佳技术堆栈的决策,是首要思考的问题。根据SaaS技术栈选择原则,企业在选择的过程中,需要注意以下四点:
- 按需引入
按照SaaS技术架构建设与演进需求节奏,引入技术栈。例如企业前期业务量不是很大,基础性运维能力就能支撑业务。随着业务规模的扩大,租户数量增加,底层资源消耗也逐渐增加,企业就需要建立运维监控系统数据分析平台支持海量的日志采集、存储、分析及查询等需求。
- 可驾驭
尽可能选择团队熟悉、成熟技术栈,企业在使用CNCF的开源软件过程中,若出现问题,借助有强有力社区支持,就能够得到及时反馈,帮助自己解决问题。
- 适当超前
技术栈容量选择能够满足未来1~2年业务需求,在选择的过程中要考量架构的可扩展性,方便后期的扩容操作。
- 性价比
技术栈考虑实施的性价比,如部署、维护成本等。
以 SaaS-Housekeeper项目为例,SaaS-Housekeeper项目是华为云开发者团队基于SaaS项目技术支持实践。从上图可以看出,在开发过程中,华为云选择基于JAVA开发的Spring Boot和Spring-Cloud技术栈进行微服务应用开发,引入微服务引擎CSE解决配置热更新的场景问题,应用部署方面选择具有弹性伸缩能力的K8S集群。在数据库方面,选择的是RDS服务解决后期扩容问题,以及Redis解决分布式缓存问题。在基础运维方面,通过LTS解决日志采集、查询分析服务。
2.CSE+CCE:简化企业微服务开发,加快应用容器化部署
随着云原生技术的不断完善和发展,云原生技术及架构在架构演进、技术选型、构建现代化应用等工作中产生了深刻的影响。在企业上云的趋势下,越来越多的企业和开发者开始把业务与技术向云原生演进。在技术栈选型上,企业也趋向于容器化、微服务化以及基于云化应用中间件、数据库构建应用。
2.1微服务开发
云原生+AI+大数据时代,微服务化和容器化是应用现代化的基本特点。开源Spring Cloud为开发人员构建微服务架构提供了完整的解决方案,成为很多开发者的选择。但基于Spring Cloud组件构建微服务平台,需要集成验证Hystrix、Ribbon、Zipkin、Prometheus等大量三方组件,门槛高,学习周期长。
用户在微服务开发阶段与华为云CSE微服务引擎对接,只需导入华为云微服务SDK即可享受何种服务治理和管控能力,相比较开源Spring Cloud既简单又方便。基于Spring Cloud微服务开发的项目,对接CSE只需在Pom里把Spring Cloud换成Spring Cloud华为的组件。
2.2 容器化部署
华为云容器引擎CCE是基于业界主流的Docker和Kubernetes开源技术构建的容器服务,提供众多契合企业大规模容器集群场景的功能。而且,云容器引擎深度整合华为云高性能的计算(ECS/BMS)、网络(VPC/EIP/ELB)、存储(EVS/OBS/SFS)等服务,并支持GPU、NPU、ARM、FPGA等异构计算架构,支持多可用区(Available Zone,简称AZ)、多区域(Region)容灾等技术构建高可用Kubernetes集群。
作为全球首批通过CNCF基金会Kubernetes一致性认证的容器服务,CCE在系统可靠性、高性能、开源社区兼容性等多个方面具有独特的优势,满足企业在构建容器云方面的各种需求。CCE具有如下价值:
- 提高资源利用率(成本优化)
(1)榨干资源价值(虚机规格固定,容器规格灵活)
(2)秒级弹性伸缩(虚机分钟级弹性,容器秒级弹性)
(3)根据部分企业案例,在总体业务增长 20% 的情况下,综合节省成本可达到30%
- 提高运维效率(节省人力)
(1)自动化(CI/CD,自动弹性伸缩)
(2)上线/升级时间,从小时级变成分钟级
3.在多租户模式下,如何选择设计路由策略
实现多租户的设计原理,实际上是需要做到应用层和数据层的共享和隔离,然后通过一种路由机制,可以根据不同的策略,将用户的请求路由到指定的计算集群即可。
如果企业已经规划好了SaaS应用多租和开发内容,那是时候考虑SaaS应用部署环境的问题。
在SaaS应用场景,线下IDC部署显然不是一个很好的选择,相较于基于云上虚拟机部署模式,采用Kubernetes集群模式部署SaaS应用应该是首选。云容器引擎CCE提供高度可扩展的、高性能的企业级Kubernetes集群,充分利用云上弹性能力、丰富存储类型,支持实现SaaS业务降成本、动态扩容、高可靠性等需求。云容器引擎CCE可以为云上构建SaaS应用提供不同多租隔离模式:
基于CCE Pod模式,租户间通过Pod进行隔离,每个Pod包含多个Container。
优点:简单,成本低,共享运行态资源,适用应用无法拆分的单体应用
缺点:隔离性弱、安全性弱、服务出现不可用状态会影响所有租户
基于CCE NameSpace模式,不同租户的业务微服务部署在同一个CCE集群中的不同的NameSpace中,支持资源的逻辑隔离;不同租户的路由、升级等策略部署到同一个配置中心的不同的配置组中,支持策略逻辑隔离;
优点:租户逻辑隔离,成本适中,隔离性适中,安全性适中
缺点:多租资源命名、管理等较复杂
基于网络环境模式,不同租户的业务微服务在不同的环境中
优点:租户基础设施物理隔离,成本高、隔离性高、安全性高
缺点:多集群,多配置中心,管理最复杂
在共享资源池模式下,Kubernetes集群为SaaS应用开发者提供的namespace隔离方式能够带来很大的帮助。华为云容器引擎CCE在namespace粒度提供了网络隔离、资源配额限制以及RBAC权限管理策略等租户管控策略。
网络隔离方面,CCE基于Kubernetes的网络策略功能进行了加强,通过配置网络策略,允许在同个集群内实现网络的隔离,也就是可以在某些实例(Pod)之间架起防火墙。在华为云上提供了vpc网络和容器隧道网络,仅“容器隧道网络”模式的集群支持网络隔离。
资源配额限制方面,通过设置命名空间级别的资源配额,实现多租户在共享集群资源的情况下限制团队、租户可以使用的资源总量,包括限制命名空间下创建某一类型对象的数量以及对象消耗计算资源(CPU、内存)的总量。
在业务比较平稳的SaaS系统中,可以用于租户业务资源的隔离,CCE集群支持CPU/内存配额限制、网络隔离、QoS限速等策略。以QoS限速策略为例,由于不同租户资源可能部署在同一节点上,导致不同业务容器之间存在带宽抢占的情况,容易造成业务抖动。为了解决这个问题,您可以通过对Pod间互访进行QoS限速来解决这个问题当然,也可以通过亲和性策略,将不同租户的pod调度到不同节点上,避免网络资源抢占。