本文提出了HTTP协议在目前网络传输中存在的问题,然后基于两个典型问题做了合理的方案设想,最终推演出的第四种方案。
研发过程中,开发同学在接到一个需求后,必须要回答两个问题:做什么(WHAT)、怎么做(HOW)。本文就开发与测试在拆解需求时面临的共性问题,结合自己过往的经验,总结的一个实用的方法。本文不讨论技术选型,仅从思考逻辑上总结应该如何拆解与实现一个给定的需求。欢迎讨论。
阿里很早就开启了线上交易应用部署单元化,因为交易单元化部署要比简单的应用服务单元化难度大很多,首先要涉及到写操作,其次交易时涉及到用户的多项资产的写,例如交易下单会涉及到商品信息(价格)、买家信息(积分)、优惠信息(优惠券)、库存等多重信息,商家可能会修改商品的价格、库存数量等,这些信息本身就是多点写的,控制不好就会出现数据一致性问题。 将交易数据完全按照某一维度进行单元化的拆分比较难,所以尽量让交易的强依赖的数据做到单元闭环,若依赖的数据做跨单元异步调用,降低交易链路的复杂性是必须的一个选择。
Kubernetes 中应用实例数设置有固定实例数、HPA 和 CronHPA 三种策略。使用最多的是固定实例数,但是很多业务都存在波峰浪谷,如果采用固定实例数的方式会造成较大的资源浪费。Kubernetes 中提供了 HPA 及 CronHPA 两种机制实现按需扩容实例数量,减少资源浪费。CronHPA 是用户设定定时规则,在固定时间进行实例数伸缩。但是设定定时规则较为复杂,如果定时间隔设置较大就会造成资源浪费。HPA 可以根据应用实时负载设置实例数量,当应用负载高时扩容,当应用负载低时则缩容实例。HPA 是基于实时负载进行扩容,只有当负载已经比较高时才会触发扩容,但此时业务已经处在高负载中因此业务部分流量出现响应慢或者超时的问题,即存在“弹性滞后”的问题。为此,我们提出了一种智能化弹性伸缩方案 AHPA,可以根据历史时序数据进行主动预测,提前扩容,避免弹性滞后。同时,会根据实时数据动态调整主动预测结果,兼容周期变动等场景。
IDC 预计到 2024 年,由于采用了微服务、容器、动态编排和 DevOps 等技术,新增的生产级云原生应用在新应用的占比将从 2020 年的 10% 增加到 60%,其中微服务的 workload 在企业内将超过 80% 。上面的四点是云原生时代所代表的四个核心技术。其中,我们的开发同学可能对于微服务比较热衷,从近几年的趋势来看,Java 领域的微服务框架日趋成熟,和云原生的结合也越来越紧密。从 EDAS 中的数据来看,Spring Cloud + Kubernetes 基本上已经成为了微服务架构形态下的主流配搭。但是另外一个数据让我产生了更多的好奇,就是目前在云原生场景下有过微服务生产经验的开发人员不足 8% 。为什么会是这个样子?我觉得主要原因有两个: