用Go写微服务三年了,踩了很多坑,也明白了很多道理,今天来分享一下,希望能帮到大家。

我,用,Go,写,微服务,已经,三年,了,从,最,开始,接触,Go,和,微服务,到,现在,在,项目,中,大规模,使用,踩,了,很多,坑,也,走,了,不少,弯路,当然,也,收获,了,很多,经验,和,教训。

这,三年,来,我,用过,好几个,Go,微服务,框架,也,自己,搭,过,微服务,架构,遇到,了,各种,各样,的,问题,也,解决,了,很多,难题,慢慢,地,对,Go,微服务,有,了,自己,的,理解,和,感悟。

今天,这篇,文章,就,来,分享,一下,我,用,了,三年,Go,微服务,框架,才,明白,的,这些,道理。

一、不要盲目追求微服务

第一个,道理,就是,不要,盲目,追求,微服务,这,是,我,踩,过,最大,的,坑,之一,也是,很多,人,容易,犯,的,错误。

刚,接触,微服务,的,时候,我,觉得,微服务,很,酷,很,先进,什么,项目,都,想,用,微服务,来,做,觉得,不用,微服务,就,落后,了,就,不,够,技术,含量,结果,在,一个,不,太大,的,项目,里,硬,上,了,微服务,把,一个,本来,很,简单,的,单体,应用,拆,成,了,十几个,微服务,结果,就是,开发,效率,大,打折扣,部署,和,运维,复杂度,急剧,上升,各种,分布式,的,问题,接踵而至,比如,服务,之间,调用,超时,分布式,事务,数据,一致性,服务,注册,发现,配置,管理,链路,追踪,等等,一大堆,问题,都,来,了,本来,一个,人,能,搞定,的,项目,变成,需要,好几,个人,才能,维护,而且,还,经常,出,问题,很,痛苦。

后来,我,才,明白,微服务,不是,银弹,不是,什么,项目,都,适合,用,微服务,微服务,有,它,的,适用,场景,也,有,它,的,代价,和,复杂度,只有,当,项目,足够,大,团队,足够,大,业务,足够,复杂,的,时候,微服务,的,优势,才能,体现,出来,才,值,得,投入,那么,多,成本,去,做,微服务,如果,项目,不,大,团队,不,大,业务,不,复杂,用,单体,应用,反而,更,好,开发,效率,更,高,运维,更,简单,也,更,稳定。

而且,微服务,的,拆分,也,不是,越,细,越,好,很多,人,觉得,微服务,就是,要,把,服务,拆,得,越,小,越,好,一个,功能,就,拆,一个,服务,结果,拆,出,来,几十个,甚至,上百个,服务,管理,起来,非常,痛苦,服务,之间,调用,关系,复杂,像,蜘蛛网,一样,排查,问题,很,困难,性能,也,受,影响,因为,一次,请求,要,经过,好几个,服务,网络,开销,很,大,延迟,很,高,其实,微服务,的,拆分,应该,按,业务,领域,来,拆,而,不是,按,功能,来,拆,一个,服务,应该,对应,一个,独立,的,业务,领域,有,自己,的,数据,和,业务,逻辑,高内聚,低耦合,这样,的,拆分,才,是,合理,的,而,不是,为了,拆,而,拆。

所以,我,现在,的,建议,是,不要,盲目,追求,微服务,先,想,清楚,你的,项目,是不是,真的,需要,微服务,你的,团队,有没有,能力,驾驭,微服务,的,复杂度,如果,不,确定,就,先,用,单体,应用,把,业务,做,起来,等,项目,大,了,团队,大,了,业务,复杂,了,再,考虑,拆,微服务,也,不,迟,而且,现在,也,有,很多,框架,支持,从,单体,到,微服务,的,平滑,迁移,不用,一开始,就,上,微服务。

二、框架只是工具,核心是业务和架构

第二个,道理,就是,框架,只是,工具,核心,是,业务,和,架构,不要,本末倒置。

刚,学,Go,微服务,的,时候,我,花,了,很多,时间,去,研究,各种,框架,比如,go-kit,go-micro,Kratos,Dubbo-go,等等,每个,框架,都,去,研究,它,的,用法,特性,优缺点,纠结,到底,该,用,哪个,框架,觉得,选,对,了,框架,项目,就,成功,了,一半,结果,花,了,很多,时间,在,选,框架,和,研究,框架,上,真正,花,在,业务,和,架构,设计,上,的,时间,反而,很,少,导致,项目,的,业务,逻辑,很,混乱,架构,设计,很,不合理,即使,框架,用,得,再,熟,项目,还是,做,得,很,糟糕。

后来,我,才,明白,框架,只是,工具,是,帮,你,实现,业务,和,架构,的,手段,不是,目的,真正,决定,项目,成败,的,是,业务,逻辑,是否,清晰,架构,设计,是否,合理,而,不是,用,了,什么,框架,一个,好,的,架构,和,业务,设计,即使,用,最,简单,的,框架,甚至,不用,框架,自己,写,也,能,做,得,很,好,一个,糟糕,的,架构,和,业务,设计,即使,用,再,强大,的,框架,也,做,不,好,反而,可能,因为,框架,的,复杂度,让,项目,更,糟糕。

而且,Go,语言,本身,的,哲学,就是,简单,实用,不,喜欢,过度,设计,和,复杂,的,框架,很多,Go,的,微服务,框架,其实,都,比较,轻量,不会,像,Java,的,Spring Cloud,那样,大,而,全,很多,东西,需要,你,自己,去,组合,和,实现,这,其实,是,Go,的,风格,让,你,有,更,多,的,自由度,也,让,你,更,关注,业务,和,架构,本身,而,不是,框架,的,用法。

所以,我,现在,的,建议,是,不要,花,太多,时间,纠结,选,什么,框架,也,不要,花,太多,时间,研究,框架,的,各种,高级,特性,先,把,业务,理,清楚,把,架构,设计,好,然后,选,一个,适合,自己,项目,的,框架,够用,就,行,剩下,的,时间,花,在,业务,和,架构,上,这样,项目,才能,做,好,而且,框架,这,东西,是,通,的,你,理解,了,微服务,的,核心,概念,和,架构,换,什么,框架,都,能,很快,上手,不用,太,纠结。

三、服务治理比服务开发更重要

第三个,道理,就是,服务,治理,比,服务,开发,更,重要,很多,人,容易,忽视,这,一点。

刚,做,微服务,的,时候,我,把,大部分,精力,都,放,在,开发,服务,上,觉得,把,每个,服务,的,业务,逻辑,写,好,就,行,了,服务,治理,的,东西,比如,服务,注册,发现,配置,中心,熔断,限流,降级,负载均衡,链路,追踪,监控,告警,日志,等等,都,觉得,是,辅助,的,不,重要,等,服务,都,开发,完,了,再,搞,也,不,迟,结果,服务,都,开发,完,了,上线,之后,各种,问题,都,来,了,服务,挂,了,不,知道,调用,失败,了,不,知道,哪里,出,问题,了,查,半天,查,不,到,流量,大,了,服务,被,打垮,连锁,反应,整个,系统,都,崩,了,很,痛苦,这,时候,才,发现,服务,治理,的,重要性,但是,已经,晚,了,只能,救火,补,窟窿。

后来,我,才,明白,微服务,的,难点,不,在于,开发,服务,而,在于,治理,服务,一个,服务,开发,起来,很,简单,但是,几十个,服务,一起,运行,怎么,保证,它们,稳定,可靠,怎么,监控,它们,的,状态,怎么,排查,问题,怎么,应对,流量,波动,怎么,保证,数据,一致性,这些,才,是,微服务,最,难,的,地方,也是,最,重要,的,地方,服务,治理,做,不好,服务,开发,得,再,好,也,没用,上线,之后,照样,出,问题,照样,不稳定。

而且,服务,治理,的,东西,应该,在,项目,一开始,就,考虑,和,搭建,而,不是,等,服务,都,开发,完,了,再,补,因为,很多,治理,的,功能,需要,在,开发,服务,的,时候,就,集成,进去,比如,链路,追踪,的,埋点,监控,的,指标,日志,的,规范,等等,等,服务,都,开发,完,了,再,补,就,很,麻烦,需要,改,很多,代码,成本,很,高,所以,应该,在,项目,架构,设计,阶段,就,把,服务,治理,的,方案,定,好,把,治理,的,基础设施,搭,好,然后,开发,服务,的,时候,就,按照,规范,来,集成,这些,治理,功能,这样,才能,保证,服务,上线,之后,稳定,可靠,可观测,可治理。

所以,我,现在,做,微服务,项目,会,花,很多,时间,在,服务,治理,的,架构,设计,和,基础设施,搭建,上,比如,用,什么,做,服务,注册,发现,用,Consul,还是,etcd,还是,Kubernetes,的,Service,用,什么,做,配置,中心,用,Nacos,还是,Apollo,还是,etcd,用,什么,做,链路,追踪,用,Jaeger,还是,Zipkin,还是,SkyWalking,用,什么,做,监控,告警,用,Prometheus,加,Grafana,还是,其他,用,什么,做,日志,收集,用,ELK,还是,Loki,这些,都,要,在,项目,一开始,就,定,好,搭,好,然后,开发,服务,的,时候,就,集成,进去,这样,服务,上线,之后,才能,稳定,可靠,出,了,问题,也,能,快速,排查,和,解决。

四、分布式事务是难题,能避免就避免

第四个,道理,就是,分布式,事务,是,难题,能,避免,就,避免,不要,轻易,碰。

刚,做,微服务,的,时候,我,对,分布式,事务,没有,太,多,概念,觉得,和,单体,的,事务,差不多,应该,有,框架,能,帮,我,搞定,结果,在,一个,业务,场景,里,需要,跨,好几个,服务,保证,数据,一致性,我,想,当然,地,用,了,两阶段,提交,2PC,的,方案,结果,就是,性能,很,差,因为,2PC,是,同步,阻塞,的,整个,事务,期间,资源,都,被,锁定,并发,上,不,去,而且,协调者,挂,了,的话,参与者,会,一直,阻塞,很,容易,出,问题,还有,网络,分区,的,问题,等等,各种,坑,踩,了,个,遍,最后,这个,功能,做得,很,糟糕,性能,差,还,不,稳定,经常,出,问题,很,痛苦。

后来,我,才,明白,分布式,事务,是,分布式,系统,中,最,难,的,问题,之一,没有,完美,的,解决方案,所有,的,方案,都,有,代价,和,局限性,比如,2PC,性能,差,阻塞,严重,TCC,开发,成本,高,需要,写,三个,接口,try,confirm,cancel,业务,侵入,大,Saga,长,事务,缺乏,隔离性,可能,有,脏读,等等,没有,一个,方案,是,银弹,能,完美,解决,所有,问题,所以,最好,的,方案,就是,尽量,避免,分布式,事务,不要,让,一个,业务,操作,跨,多个,服务,需要,保证,强,一致性。

怎么,避免,呢,首先,在,服务,拆分,的,时候,就要,考虑,这个,问题,尽量,把,需要,强,一致,的,业务,放,在,同一个,服务,里,不要,拆,开,比如,订单,和,支付,如果,需要,强,一致,就,放,在,同一个,服务,里,不要,拆成,两个,服务,这样,就,能,用,本地,事务,保证,一致性,不用,分布式,事务,其次,对于,确实,需要,跨,服务,的,业务,尽量,用,最终,一致性,代替,强,一致性,比如,用,消息,队列,异步,处理,保证,最终,数据,一致,而,不是,同步,调用,保证,强,一致,大部分,业务,场景,其实,最终,一致性,就,够,了,不用,强,一致性,比如,下单,之后,扣,库存,发,通知,等等,不用,同步,完成,异步,处理,最终,一致,就,行,用户,也,不,会,太,在意,这,几秒钟,的,延迟,这样,就,能,避免,分布式,事务,的,难题,系统,也,更,简单,更,可靠,性能,也,更,好。

如果,确实,避免,不,了,需要,分布式,事务,那,就要,根据,业务,场景,选择,合适,的,方案,比如,对,一致性,要求,高,并发,不,高,的,场景,可以,用,TCC,对,长,事务,业务,流程,多,的,场景,可以,用,Saga,对,性能,要求,高,一致性,要求,不,那么,高,的,场景,可以,用,事务,消息,最终,一致,等等,没有,最好,的,方案,只有,最,适合,的,方案,要,根据,业务,需求,来,选,而且,一定要,充分,测试,考虑,各种,异常,情况,比如,网络,超时,服务,挂,掉,重复,调用,等等,保证,方案,的,可靠性。

所以,我,现在,做,微服务,项目,会,在,架构,设计,阶段,就,尽量,避免,分布式,事务,把,强,一致,的,业务,放,一起,跨,服务,的,业务,尽量,用,最终,一致性,实在,避免,不,了,的,才,用,分布式,事务,方案,而且,会,非常,谨慎,充分,评估,和,测试,不会,想,当然,地,用,某个,方案。

五、可观测性是微服务的生命线

第五个,道理,就是,可观测性,是,微服务,的,生命线,没有,可观测性,的,微服务,就是,盲人,骑,瞎马,很,危险。

刚,做,微服务,的,时候,我,对,可观测性,不,太,重视,觉得,只要,服务,能,跑,就,行,日志,随便,打,打,监控,有,个,基础,的,就,行,链路,追踪,觉得,不,需要,结果,上线,之后,出,了,问题,比如,某个,接口,响应,慢,或者,报错,查,半天,查,不,到,原因,因为,不知道,请求,经过,了,哪些,服务,每个,服务,花,了,多少,时间,哪个,服务,报,了,错,日志,也,散,在,各个,服务,里,要,一个,一个,去,查,很,麻烦,而且,日志,也,不,规范,很,难,关联,起来,排查,一个,问题,要,花,好几个,小时,甚至,半天,很,痛苦,而且,很多,时候,问题,是,偶发,的,复现,不,了,更,难,排查,只能,靠,猜,很,被动。

后来,我,才,明白,微服务,因为,服务,多,调用,链,长,问题,定位,很,困难,所以,可观测性,特别,重要,是,微服务,的,生命线,没有,好,的,可观测性,出,了,问题,根本,没,法,快速,定位,和,解决,系统,就,像,一个,黑盒,你,不,知道,里面,发生,了,什么,很,危险,而且,微服务,的,问题,往往,是,连锁,的,一个,服务,出,问题,可能,影响,很多,其他,服务,如果,不能,快速,发现,和,定位,问题,影响,会,很,大,损失,也,会,很,大。

可观测性,主要,包括,三个,方面,日志,监控,和,链路,追踪,也就是,常说,的,Observability,三大,支柱,这,三个,都,很,重要,缺一不可。

日志,是,最,基础,的,可观测性,手段,每个,服务,都,要,打,日志,而且,要,规范,比如,日志,级别,要,合理,debug,info,warn,error,要,分,清楚,日志,内容,要,有,意义,能,帮,你,排查,问题,不要,打,无用,的,日志,也,不要,漏,打,关键,的,日志,还有,日志,格式,要,统一,最好,是,结构化,日志,比如,JSON,格式,方便,收集,和,分析,还要,有,统一,的,traceid,能,把,同一个,请求,在,各个,服务,的,日志,关联,起来,这样,排查,问题,的,时候,用,traceid,一,搜,就能,看到,整个,调用链,的,所有,日志,很,方便。

监控,是,用来,实时,了解,系统,状态,的,比如,每个,服务,的,QPS,响应,时间,错误率,CPU,内存,磁盘,网络,等等,指标,都,要,监控,起来,而且,要,有,告警,当,指标,异常,的,时候,能,及时,通知,到,人,这样,才能,在,问题,影响,用户,之前,就,发现,和,解决,监控,一般,用,Prometheus,加,Grafana,来,做,指标,收集,和,可视化,告警,用,Alertmanager,或者,其他,告警,工具,监控,的,指标,要,全,不仅,要,监控,系统,指标,还要,监控,业务,指标,比如,订单,量,支付,成功率,等等,这样,才能,全面,了解,系统,状态。

链路追踪,是,微服务,特有的,可观测性,手段,用来,追踪,一个,请求,经过,了,哪些,服务,每个,服务,花,了,多少,时间,哪个,服务,报,了,错,等等,能,帮,你,快速,定位,性能,瓶颈,和,错误,来源,链路,追踪,一般,用,Jaeger,Zipkin,或者,SkyWalking,来,做,需要,在,服务,里,埋点,把,trace,信息,传,递,下去,现在,很多,框架,都,自动,集成,了,链路,追踪,的,埋点,不用,自己,写,太多,代码,很,方便,链路,追踪,对,排查,微服务,的,问题,特别,有,帮助,尤其是,性能,问题,和,跨,服务,的,错误,能,一,眼,看,到,是,哪个,服务,的,问题,不用,一个,一个,服务,去,查。

所以,我,现在,做,微服务,项目,会,在,一开始,就,把,可观测性,的,基础设施,搭,好,日志,收集,用,ELK,或者,Loki,监控,用,Prometheus,加,Grafana,链路,追踪,用,Jaeger,或者,SkyWalking,然后,开发,服务,的,时候,就,按照,规范,打,日志,埋,监控,指标,集成,链路,追踪,这样,服务,上线,之后,就,有,完整,的,可观测性,出,了,问题,能,快速,定位,和,解决,很,省心,也,很,安心。

六、API设计是微服务的契约,要慎重

第六个,道理,就是,API,设计,是,微服务,的,契约,要,慎重,不要,随便,改。

刚,做,微服务,的,时候,我,对,API,设计,不,太,重视,觉得,API,就是,个,接口,能,调,通,就,行,字段,名,随便,起,参数,随便,加,后来,需求,变,了,就,随便,改,API,删,字段,改,字段,名,改,参数,等等,结果,就是,调用,这个,API,的,其他,服务,都,挂,了,因为,它们,还,按,旧,的,API,格式,来,调,不,兼容,了,要,改,很多,代码,而且,有时候,服务,是,不同,团队,开发,的,改,API,还要,协调,其他,团队,一起,改,很,麻烦,也,很,容易,出,问题,有,一次,因为,改,了,一个,字段,名,没,通知,另,一个,团队,导致,他们,的,服务,上线,之后,报错,影响,了,线上,业务,很,严重,后来,花,了,很多,时间,才,修复,也,造成,了,损失,很,深刻,的,教训。

后来,我,才,明白,微服务,之间,是,通过,API,来,通信,的,API,就是,服务,之间,的,契约,一旦,定,了,就,不能,随便,改,因为,可能,有,很多,其他,服务,在,依赖,这个,API,随便,改,会,导致,其他,服务,不,兼容,出,问题,所以,API,设计,一定,要,慎重,在,设计,的,时候,就,要,考虑,清楚,字段,名,参数,返回,格式,等等,都,要,合理,规范,尽量,考虑,未来,的,扩展,避免,以后,需要,改。

而且,API,设计,要,遵循,一些,规范,和,最佳,实践,比如,RESTful,API,的,规范,资源,命名,要,合理,用,名词,不用,动词,HTTP,方法,要,正确,GET,查,POST,增,PUT,改,DELETE,删,状态码,要,正确,200,成功,400,参数,错误,401,未,认证,403,无,权限,404,不,存在,500,服务器,错误,等等,返回,格式,要,统一,比如,都,用,JSON,格式,有,统一,的,code,message,data,字段,错误,信息,要,清晰,能,帮,调用方,定位,问题,还有,版本,管理,API,要,有,版本,比如,/v1/xxx,/v2/xxx,以后,不,兼容,的,改动,可以,升,版本,保留,旧,版本,一段时间,让,调用方,有,时间,迁移,不会,一下子,就,挂,了。

还有,API,文档,很,重要,要,有,清晰,的,API,文档,说明,每个,接口,的,用途,参数,返回,值,错误,码,等等,让,调用方,能,快速,上手,不用,去,猜,或者,问,开发,API,文档,一般,用,Swagger,或者,OpenAPI,来,做,能,自动,生成,还,能,在线,调试,很,方便,而且,API,文档,要,和,代码,同步,更新,不要,代码,改,了,文档,没,改,导致,文档,和,实际,不,一致,误导,调用方。

如果,确实,需要,改,API,一定,要,慎重,尽量,做,兼容,性,的,改动,比如,加,字段,不要,删,字段,不要,改,字段,名,和,类型,因为,加,字段,是,兼容,的,旧,的,调用方,不,会,受,影响,删,字段,或者,改,字段,是,不,兼容,的,会,影响,旧,的,调用方,如果,必须,做,不,兼容,的,改动,要,升,API,版本,保留,旧,版本,一段时间,通知,所有,调用方,迁移,等,所有,调用方,都,迁移,完,了,再,下掉,旧,版本,不要,直接,改,旧,版本,的,API,那样,会,出,大,问题。

所以,我,现在,设计,API,会,非常,慎重,先,和,相关,方,讨论,清楚,再,定,定,了,之后,就,不,随便,改,而且,会,写,好,文档,做好,版本,管理,尽量,做,兼容,性,的,改动,避免,影响,其他,服务,这样,微服务,之间,的,协作,才,能,顺畅,不,会,因为,API,的,问题,导致,线上,故障。

七、容错和降级是微服务的必备能力

第七个,道理,就是,容错,和,降级,是,微服务,的,必备,能力,没有,容错,和,降级,的,微服务,很,脆弱,一,推,就,倒。

刚,做,微服务,的,时候,我,觉得,服务,都,是,稳定,的,不会,出,问题,所以,没有,做,容错,和,降级,调用,其他,服务,的,时候,直接,调,不,做,任何,保护,结果,有,一次,一个,下游,服务,出,问题,了,响应,很,慢,几乎,不,返回,导致,调用,它,的,上游,服务,的,线程,都,被,阻塞,住,了,等,待,下游,返回,慢慢,地,上游,服务,的,线程,池,被,占,满,了,再也,处理,不,了,新,的,请求,也,挂,了,然后,更,上游,的,服务,也,因为,同样,的,原因,挂,了,连锁,反应,整个,系统,都,崩,了,影响,很大,后来,排查,发现,就是,因为,一个,小,服务,出,问题,导致,整个,系统,雪崩,很,可怕,这,就是,没有,容错,和,降级,的,后果。

后来,我,才,明白,微服务,因为,服务,多,依赖,复杂,任何,一个,服务,出,问题,都,可能,通过,调用,链,传导,上去,导致,更大,范围,的,故障,也就是,常说,的,服务,雪崩,所以,必须,有,容错,和,降级,机制,在,下游,服务,出,问题,的,时候,能,保护,上游,服务,不,被,拖垮,保证,核心,功能,可用,这,是,微服务,高可用,的,基础,没有,容错,和,降级,的,微服务,是,很,脆弱,的,一,推,就,倒。

容错,和,降级,主要,包括,几个,方面,超时,重试,熔断,限流,降级,等等,这些,都,很,重要,要,配合,使用。

超时,就是,调用,下游,服务,的,时候,设置,超时,时间,比如,2秒,超过,这个,时间,还,没,返回,就,认为,调用,失败,不再,等,这样,就,不会,因为,下游,响应,慢,而,一直,阻塞,线程,导致,线程,池,被,占,满,超时,是,最,基础,的,容错,机制,所有,跨,服务,调用,都,应该,设置,超时,时间,不要,用,默认,的,无,超时,或者,超时,时间,太,长,那样,很,危险。

重试,就是,调用,失败,的,时候,自动,重试,几次,因为,有些,失败,是,临时,的,比如,网络,抖动,服务,短暂,不可用,重试,一下,可能,就,成功,了,能,提高,系统,的,可用性,但是,重试,要,谨慎,不是,所有,失败,都,能,重试,比如,写,操作,重试,可能,导致,重复,提交,数据,不一致,而且,重试,会,增加,下游,的,压力,如果,下游,已经,过载,了,重试,会,雪上加霜,让,问题,更,严重,所以,重试,要,设置,合理,的,次数,和,间隔,比如,重试,2次,间隔,100ms,而且,只,对,读,操作,或者,幂等,的,写,操作,重试,非,幂等,的,写,操作,不要,重试。

熔断,就是,当,下游,服务,的,错误率,或者,响应,时间,超过,阈值,的,时候,自动,断开,对,这个,服务,的,调用,直接,返回,失败,或者,降级,结果,不再,实际,调用,下游,这样,能,保护,下游,服务,不,被,继续,打,压力,也,能,保护,上游,服务,不,被,拖垮,等,下游,服务,恢复,了,再,自动,恢复,调用,熔断,一般,用,Hystrix,或者,Sentinel,来,实现,是,防止,服务,雪崩,的,重要,手段,熔断,的,阈值,要,合理,设置,比如,错误率,超过,50%,就,熔断,熔断,时间,30秒,之后,尝试,半开,看,下游,是否,恢复,恢复,了,就,关闭,熔断,没,恢复,就,继续,熔断。

限流,就是,限制,对,服务,的,请求,速率,防止,流量,过大,把,服务,打垮,限流,一般,在,网关,层,或者,服务,本身,做,比如,限制,每个,IP,每秒,最多,100次,请求,或者,整个,服务,每秒,最多,1000次,请求,超过,就,拒绝,或者,排队,限流,能,保护,服务,在,流量,突增,的,时候,不,被,打垮,保证,服务,能,正常,处理,它,能力,范围,内,的,请求,限流,的,算法,有,很多,比如,令牌桶,漏桶,滑动,窗口,等等,要,根据,业务,场景,选择,合适,的,算法。

降级,就是,当,系统,压力,大,或者,某个,服务,不可用,的,时候,牺牲,一些,非,核心,功能,保证,核心,功能,可用,比如,电商,网站,在,大促,的,时候,压力,大,可以,把,商品,评价,推荐,等,非,核心,功能,降级,掉,保证,下单,支付,等,核心,功能,正常,降级,需要,在,业务,代码,里,做,判断,当,触发,降级,条件,的,时候,走,降级,逻辑,返回,默认,值,或者,提示,用户,功能,暂时,不可用,降级,是,保证,系统,高可用,的,重要,手段,能,在,极端,情况,下,保证,核心,业务,不,崩。

所以,我,现在,做,微服务,项目,会,在,一开始,就,考虑,容错,和,降级,所有,跨,服务,调用,都,设置,超时,重要,的,服务,加,熔断,和,限流,核心,业务,做,降级,方案,而且,会,做,故障,演练,比如,故意,把,某个,服务,挂,掉,看,系统,会不会,雪崩,容错,和,降级,机制,有没有,效,这样,才能,保证,系统,在,真实,故障,的,时候,能,扛,住,不,出,大,问题。

八、写在最后

用,了,三年,Go,微服务,框架,踩,了,很多,坑,也,明白,了,很多,道理,上面,说,的,这些,都是,我,用,血泪,换来,的,经验,和,教训,希望,能,给,正在,学习,或者,使用,Go,微服务,的,朋友,一些,参考,少,走,弯路。

总结,一下,主要,就是,这,几点,不要,盲目,追求,微服务,要,根据,项目,和,团队,情况,来,决定,框架,只是,工具,核心,是,业务,和,架构,不要,本末倒置,服务,治理,比,服务,开发,更,重要,要,重视,服务,治理,的,基础设施,建设,分布式,事务,是,难题,能,避免,就,避免,尽量,用,最终,一致性,可观测性,是,微服务,的,生命线,要,重视,日志,监控,链路,追踪,API,设计,是,微服务,的,契约,要,慎重,不要,随便,改,容错,和,降级,是,微服务,的,必备,能力,要,做好,防止,服务,雪崩。

当然,这些,只是,我,个人,的,经验,和,感悟,不一定,都,对,也,不一定,适合,所有,场景,大家,还是,要,根据,自己,的,实际,情况,来,判断,和,选择,不要,盲目,照搬,技术,这,东西,是,死,的,人,是,活,的,要,灵活,运用,适合,自己,的,才,是,最,好,的。

而且,技术,是,不断,发展,的,新,的,框架,新,的,理念,不断,出现,比如,现在,很,火,的,服务网格,Istio,Linkerd,等等,能,帮,我们,把,很多,服务,治理,的,功能,从,业务,代码,里,抽,出来,放到,基础设施,层,让,业务,代码,更,简单,还有,Go,的,新,版本,也,不断,推出,新,特性,比如,Go 1.13,的,错误,处理,改进,模块,管理,等等,都,在,让,Go,越来越,好用,所以,我们,也要,不断,学习,跟上,技术,的,发展,不要,固步自封。

最后,希望,大家,都,能,在,微服务,的,道路,上,越走,越顺,少,踩,坑,多,收获,做,出,稳定,可靠,高性能,的,微服务,系统,也,欢迎,大家,在,评论,区,分享,你们,的,微服务,经验,和,教训,一起,交流,一起,进步。

愿,我们,都,能,在,技术,的,道路,上,不断,成长,不断,进步。