随着当今云原生的发展,无状态微服务系统通过其良好的设计理念和相关技术栈的成熟,成为越来越多企业建设系统的首选,但不可避免的是随着微服务拆分系统增多,稳定性慢慢会被重视,如何保证服务 7*24 小时不间断服务,节点或服务级异常不会影响到整个交易链路,会成为系统开发人员和架构师需要考虑的逃避不掉的问题。
我司基于 Spring Cloud 微服务技术的平台也上线 6、7 年,支持上千个微服务系统,积累了一些经验,在隔离方面总结如下:
服务级隔离更多是前期规划期间进行,一般用于 API 网关的使用。
已上图为例,一般查询商品的流量要比购买商品流量大得多,如果查询和购买两个流量都过同一组 API 网关,购买商品势必会收到影响。常见的做法 API 网关按照服务或一定的规则进行逻辑管理,对大流量的系统可以设置专门的 API 网关进行支持。结合 API 网关压测情况+容器云自动扩散容能力,能有效支撑突发流量,同时保障其他流量不受影响。
大多数情况下会将入口流量配置在同一个端口下,也没什么问题,但在出现响应时间较长、请求量较大、连接长时间不释放场景时,就有可能阻塞端口,造成其他服务也不可用。比如上图同步通讯录一般响应时间较长,也有可能集中请求较多,就很容易阻塞,影响查询通讯录请求。我们可以在设计开发时使用单独的端口,避免对其他服务造成影响。
当流量进入端口后,可以为每个微服务分配独立线程池,用于将不同的任务或服务放置在独立的线程池中,以实现资源的隔离和管理。线程池隔离可以帮助提高系统的稳定性和性能,并防止某个任务或服务的问题影响整个系统。
故障节点隔离是一种针对微服务架构中故障节点进行隔离和处理的技术。在大规模微服务系统中,节点故障是难以避免的,可能由于硬件故障、网络问题、软件错误或其他原因导致某个节点无法正常运行。为了保证整个系统的稳定性和可靠性,故障节点隔离技术可以采取以下措施:
使用容器化技术(如 Docker)或虚拟化技术(如 VMware)将不同的服务或组件隔离在独立的运行环境中,确保它们之间的资源不会互相干扰。通过为每个服务分配适当的资源限制,如 CPU、内存和网络带宽,可以避免资源的竞争和冲突。
在实战中,在设计阶段就需要根据预估的 QPS 量级,合理进行使用隔离技术。一般独立大系统建议使用独立网关,大系统中核心微服务使用独立端口,通过压力测试,合理配置线程池等参数大小,出现问题是隔离故障节点实现及时止损。
这些功能或技巧可以提升平台的稳定系,但在使用时会增加平台日常运维的复杂度,需要对多 API 网关进行分组管理,有时候操作不当很容易出现线上事故。解决方式是尽量提升管理平台的交互度和自动化程度,减少手工操作。在线上实践中可以逐步形成标准,统一规范,逐步赋能给支持的业务系统,提升其连续性。
领取专属 10元无门槛券
私享最新 技术干货