1.Go 语言体系下的微服务框架选型:Dubbo-go
2.Sentinel 2.0 微服务零信任的探索与实践
3.å
«ãSentinelä»ç»å使ç¨
4.八、Sentinel介绍和使用
5.Nacos配置注册中心和Sentinel分布式流量防卫兵相关知识总结
6.Sentinelä¸Hystrixçåºå«
Go 语言体系下的微服务框架选型:Dubbo-go
随着微服务技术的快速发展,Go 语言作为云原生领域最受欢迎的开发语言,正在被越来越多的企业作为微服务开发的首选语言。在众多流行的微服务框架中,Go-micro、鬼王指标源码Go-zero、Dubbo-go 等脱颖而出。Dubbo-go 作为 Dubbo 微服务体系中多语言实现的一员,在拥抱云原生标准方面展现出了积极态度,特别是在 Proxyless Mesh 形态下,与 Pixiu 云原生网关的antd design源码配合,形成了完善的 Dubbo-go 微服务生态矩阵。
Dubbo-go 简介显示了其在微服务方向的沉淀和积累,特别是在互联互通和服务治理能力上。Dubbo-go 是一款易用、高性能的 WEB 和 RPC 框架,具备服务发现、流量治理、可观测、认证鉴权等能力,支持多种通信协议,如 HTTP/2、灵聚源码TCP、gRPC 等。它通过与 Nacos、Zookeeper、Sentinel、Zipkin、Kubernetes、Prometheus 等生态项目的兼容性,提供了面向 Go 语言体系的微服务开发体验。
过去一年,Dubbo-go 推出了优雅上下线功能,bb 指标源码显著提升了微服务集群的稳定性。这项功能解决了服务上线调用报错的问题,遵循严格的初始化过程依赖关系,保证了服务能够被正常调用。同时,新一代柔性服务的推出,采用了峰值干预算法,通过改进的 P2C 算法,实现了更智能的负载均衡。此外,Dubbo-go 的时光相册源码 TLS 安全通信功能也得到了增强,为微服务之间提供了可信的通信方式。
展望 年,Dubbo-go 的规划着重于持续打磨框架,优先保障稳定性的同时提升易用性,致力于成为一流的 Go 语言微服务框架。社区将继续加强对文档建设和开发者工具的建设工作,集成更多命令于 dubboctl 工具中,为用户提供快速创建微服务的特性和支持 Hessian2 生成器、新建 Dubbo-go 项目的功能,进一步提升文档和工具的质量,确保框架成为面向 Go 开发者的轻量、易用的微服务开发平台。
Sentinel 2.0 微服务零信任的探索与实践
古典朴素的安全哲学探讨
网络安全的现状是企业在网络边界进行防护,而内部缺乏有效安全措施,导致防护脆弱,易被绕过。类比于现实中的小区安全,如果小区内部无门、仅靠门口保安检查,那么小区的安全性将非常低。黑客或非法进入者可以通过假冒身份、尾随等手段突破安全防线,这也映射了网络环境中的安全风险。
零信任理念的提出
零信任强调所有安全措施下沉至应用级别,每个应用需进行身份认证和授权。通过认证确认身份,颁发证书标识身份,并定期更新以保证有效性。鉴权则确认用户具备访问特定服务的权限。
认证与授权机制
类似于住户通过通行证获得对应房屋钥匙的机制,零信任中客户端或服务端通过证书声明身份,证书内标识身份和权限信息,应用据此执行访问控制规则。
零信任的扩展功能
零信任系统还需支持动态可变认证策略、资产监控与可见性、审计与合规性等,以适应不断变化的安全环境。
Istio在零信任构建中的角色
Istio提供了一套完善的零信任构建方案,在服务网络中,实现认证与鉴权等功能,确保应用间安全通信。
Sentinel 2.0的安全底座愿景
Sentinel从流控降级等基础功能升级至全生命周期保护,支持零信任能力,包括证书管理与鉴权规则。
Sentinel 2.0的零信任实现
Sentinel 2.0在零信任领域聚焦于证书管理与鉴权规则,通过CRD规则统一管理零信任功能,并适配现有架构。
代码结构与适配
Sentinel的代码结构为Spring Cloud Alibaba、Dubbo、Spring Boot等框架提供适配接口,实现零信任功能的集成。
平滑升级策略
在升级过程中,确保应用实例同时支持HTTP和HTTPS,通过模式切换实现平滑过渡,满足零信任安全要求。
兼容性方案
应用实例需在重启后启用兼容模式,监控流量后切换至严格模式,保证零信任功能的无缝集成。
未来展望
致力于集成CI/CD流程,实现自适应调整安全策略,以及默认安全配置,推动零信任在企业微服务中的大规模应用。
å «ãSentinelä»ç»å使ç¨
Sentinel (åå¸å¼ç³»ç»çæµéé²å«å µ) æ¯é¿éå¼æºçä¸å¥ç¨äºæå¡å®¹éç综åæ§è§£å³æ¹æ¡ãå®ä»¥æµé为åå ¥ç¹, ä»æµéæ§å¶ãçæé级ãç³»ç»è´è½½ä¿æ¤çå¤ä¸ªç»´åº¦æ¥ä¿æ¤æå¡ç稳å®æ§ã
ä¸ä¾èµä»»ä½æ¡æ¶/åº,è½å¤è¿è¡äºææ Java è¿è¡æ¶ç¯å¢ï¼åæ¶å¯¹ Dubbo /Spring Cloud çæ¡æ¶ä¹æè¾å¥½çæ¯æã
åºäº Spring Boot å¼åï¼æå åå¯ä»¥ç´æ¥è¿è¡ï¼ä¸éè¦é¢å¤ç Tomcat çåºç¨å®¹å¨ã
Sentinelææç¥è¯é½å¯ä»¥å®ç½æ¥è¯¢ï¼ å®ç½å°å
æµè§å¨å°åï¼ mandKey å groupKeyï¼ç¨äºåºåèµæºï¼ä»¥å对åºçé离çç¥ï¼çº¿ç¨æ± é离 or ä¿¡å·éé离ï¼ã线ç¨æ± é离模å¼ä¸éè¦é 置线ç¨æ± 对åºçåæ°ï¼çº¿ç¨æ± å称ã容éãæéè¶ æ¶çï¼ï¼ç¶å Command å°±ä¼å¨æå®ç线ç¨æ± æç §æå®ç容éçç¥æ§è¡ï¼ä¿¡å·éé离模å¼ä¸éè¦é ç½®æ大并åæ°ï¼æ§è¡ Command æ¶ Hystrix å°±ä¼éå¶å ¶å¹¶åè°ç¨ã
Sentinel ç设计åæ´ä¸ºç®åãç¸æ¯ Hystrix Command 强ä¾èµé离è§åï¼Sentinel çèµæºå®ä¹ä¸è§åé ç½®çè¦å度æ´ä½ãHystrix ç Command 强ä¾èµäºé离è§åé ç½®çåå æ¯é离è§åä¼ç´æ¥å½±å Command çæ§è¡ãå¨æ§è¡çæ¶å Hystrix ä¼è§£æ Command çé离è§åæ¥å建 RxJava Scheduler 并å¨å ¶ä¸è°åº¦æ§è¡ï¼è¥æ¯çº¿ç¨æ± 模å¼å Scheduler åºå±ç线ç¨æ± 为é ç½®ç线ç¨æ± ï¼è¥æ¯ä¿¡å·é模å¼åç®åå è£ æå½å线ç¨æ§è¡ç Schedulerãè Sentinel 并ä¸æå®æ§è¡æ¨¡åï¼ä¹ä¸å ³æ³¨åºç¨æ¯å¦ä½æ§è¡çãSentinel çååé常ç®åï¼æ ¹æ®å¯¹åºèµæºé ç½®çè§åæ¥ä¸ºèµæºæ§è¡ç¸åºçéæµ/é级/è´è½½ä¿æ¤çç¥ãå¨ Sentinel ä¸èµæºå®ä¹åè§åé ç½®æ¯å离çãç¨æ·å éè¿ Sentinel API ç»å¯¹åºçä¸å¡é»è¾å®ä¹èµæºï¼åç¹ï¼ï¼ç¶åå¯ä»¥å¨éè¦çæ¶åé ç½®è§åãåç¹æ¹å¼æ两ç§ï¼
try-catch æ¹å¼ï¼éè¿ SphU.entry(...)ï¼ï¼ç¨æ·å¨ catch åä¸æ§è¡å¼å¸¸å¤ç / fallback
if-else æ¹å¼ï¼éè¿ SphO.entry(...)ï¼ï¼å½è¿å false æ¶æ§è¡å¼å¸¸å¤ç / fallback
Sentinel æä¾ å¤æ ·åçè§åé ç½®æ¹å¼ ãé¤äºç´æ¥éè¿ loadRules API å°è§å注åå°å åæä¹å¤ï¼ç¨æ·è¿å¯ä»¥æ³¨ååç§å¤é¨æ°æ®æºæ¥æä¾å¨æçè§åãç¨æ·å¯ä»¥æ ¹æ®ç³»ç»å½åçå®æ¶æ åµå»å¨æå°åæ´è§åé ç½®ï¼æ°æ®æºä¼å°åæ´æ¨éè³ Sentinel 并å³æ¶çæã
éç¦»æ¯ Hystrix çæ ¸å¿åè½ä¹ä¸ãHystrix æä¾ä¸¤ç§é离çç¥ï¼çº¿ç¨æ± é离ï¼Bulkhead Patternï¼åä¿¡å·éé离ï¼å ¶ä¸ææ¨èä¹æ¯æ常ç¨çæ¯çº¿ç¨æ± é离ãHystrix ç线ç¨æ± é离é对ä¸åçèµæºåå«å建ä¸åç线ç¨æ± ï¼ä¸åæå¡è°ç¨é½åçå¨ä¸åç线ç¨æ± ä¸ï¼å¨çº¿ç¨æ± æéãè¶ æ¶çé»å¡æ åµæ¶å¯ä»¥å¿«é失败ï¼å¹¶å¯ä»¥æä¾ fallback æºå¶ã线ç¨æ± é离ç好å¤æ¯é离度æ¯è¾é«ï¼å¯ä»¥é对æ个èµæºç线ç¨æ± å»è¿è¡å¤çèä¸å½±åå ¶å®èµæºï¼ä½æ¯ä»£ä»·å°±æ¯çº¿ç¨ä¸ä¸æåæ¢ç overhead æ¯è¾å¤§ï¼ç¹å«æ¯å¯¹ä½å»¶æ¶çè°ç¨ææ¯è¾å¤§çå½±åã
ä½æ¯ï¼å®é æ åµä¸ï¼çº¿ç¨æ± é离并没æ带æ¥é常å¤ç好å¤ãé¦å å°±æ¯è¿å¤ç线ç¨æ± ä¼é常影åæ§è½ãèèè¿æ ·ä¸ä¸ªåºæ¯ï¼å¨ Tomcat ä¹ç±»ç Servlet 容å¨ä½¿ç¨ Hystrixï¼æ¬èº« Tomcat èªèº«ç线ç¨æ°ç®å°±é常å¤äºï¼å¯è½å°å åæä¸ç¾å¤ï¼ï¼å¦æå ä¸ Hystrix 为å个èµæºå建ç线ç¨æ± ï¼æ»å ±çº¿ç¨æ°ç®ä¼é常å¤ï¼å ç¾ä¸ªçº¿ç¨ï¼ï¼è¿æ ·ä¸ä¸æåæ¢ä¼æé常大çæèãå¦å¤ï¼çº¿ç¨æ± 模å¼æ¯è¾å½»åºçé离æ§ä½¿å¾ Hystrix å¯ä»¥é对ä¸åèµæºçº¿ç¨æ± çæéãè¶ æ¶æ åµåå«è¿è¡å¤çï¼ä½è¿å ¶å®æ¯è¶ æ¶çæåæµéæ§å¶è¦è§£å³çé®é¢ï¼å¦æç»ä»¶å ·å¤äºè¶ æ¶çæåæµéæ§å¶çè½åï¼çº¿ç¨æ± é离就æ¾å¾æ²¡æé£ä¹å¿ è¦äºã
Sentinel å¯ä»¥éè¿å¹¶å线ç¨æ°æ¨¡å¼çæµéæ§å¶æ¥æä¾ä¿¡å·éé离çåè½ãè¿æ ·çé离é常轻é级ï¼ä» éå¶å¯¹æ个èµæºè°ç¨ç并åæ°ï¼èä¸æ¯æ¾å¼å°å»å建线ç¨æ± ï¼æ以 overhead æ¯è¾å°ï¼ä½æ¯ææä¸éã并ä¸ç»ååºäºååºæ¶é´ççæé级模å¼ï¼å¯ä»¥å¨ä¸ç¨³å®èµæºçå¹³åååºæ¶é´æ¯è¾é«çæ¶åèªå¨é级ï¼é²æ¢è¿å¤çæ ¢è°ç¨å 满并åæ°ï¼å½±åæ´ä¸ªç³»ç»ãè Hystrix çä¿¡å·éé离æ¯è¾ç®åï¼æ æ³å¯¹æ ¢è°ç¨èªå¨è¿è¡é级ï¼åªè½çå¾ å®¢æ·ç«¯èªå·±è¶ æ¶ï¼å æ¤ä»ç¶å¯è½ä¼åºç°çº§èé»å¡çæ åµã
çæéçº§å¯¹æ¯ sentinelåHystrixççæé级æ¬è´¨é½æ¯åºäºçæå¨æ¨¡å¼
Sentinel ä¸ Hystrix é½æ¯æåºäºå¤±è´¥æ¯çï¼å¼å¸¸æ¯çï¼ ççæé级 æ¤æ¶ææ对该èµæºçè°ç¨é½ä¼è¢« blockï¼ç´å°è¿äºæå®çæ¶é´çªå£åæå¯åæ§å°æ¢å¤ãä¸é¢æå°è¿ï¼Sentinel è¿æ¯æåºäºå¹³åååºæ¶é´ççæé级ï¼å¯ä»¥å¨æå¡ååºæ¶é´æç»é£é«çæ¶åèªå¨çæï¼æç»ææ´å¤ç请æ±ï¼ç´å°ä¸æ®µæ¶é´åææ¢å¤ãè¿æ ·å¯ä»¥é²æ¢è°ç¨éå¸¸æ ¢é æ级èé»å¡çæ åµã
å®æ¶ææ ç»è®¡å®ç°å¯¹æ¯
Hystrix å Sentinel çå®æ¶ææ æ°æ®ç»è®¡å®ç°é½æ¯åºäºæ»å¨çªå£çãHystrix 1.5 ä¹åççæ¬æ¯éè¿ç¯å½¢æ°ç»å®ç°çæ»å¨çªå£ï¼éè¿éé å CAS çæä½å¯¹æ¯ä¸ªæ¡¶çç»è®¡ä¿¡æ¯è¿è¡æ´æ°ãHystrix 1.5 å¼å§å¯¹å®æ¶ææ ç»è®¡çå®ç°è¿è¡äºéæï¼å°ææ ç»è®¡æ°æ®ç»ææ½è±¡æäºååºå¼æµï¼reactive streamï¼çå½¢å¼ï¼æ¹ä¾¿æ¶è´¹è å»å©ç¨ææ ä¿¡æ¯ãåæ¶åºå±æ¹é æäºåºäº RxJava çäºä»¶é©±å¨æ¨¡å¼ï¼å¨æå¡è°ç¨æå/失败/è¶ æ¶çæ¶ååå¸ç¸åºçäºä»¶ï¼éè¿ä¸ç³»åçåæ¢åèåæç»å¾å°å®æ¶çææ ç»è®¡æ°æ®æµï¼å¯ä»¥è¢«çæå¨æ Dashboard æ¶è´¹ã
Sentinel ç®åæ½è±¡åºäº Metric ææ ç»è®¡æ¥å£ï¼åºå±å¯ä»¥æä¸åçå®ç°ï¼ç®åé»è®¤çå®ç°æ¯åºäºLeapArrayçæ»å¨çªå£ï¼åç»æ ¹æ®éè¦å¯è½ä¼å¼å ¥ reactive stream çå®ç°ã
Sentinel çç¹è²
é¤äºä¹åæå°ç两è çå ±åç¹æ§ä¹å¤ï¼Sentinel è¿æä¾ä»¥ä¸çç¹è²åè½ï¼
è½»é级ï¼é«æ§è½
Sentinel ä½ä¸ºä¸ä¸ªåè½å®å¤çé«å¯ç¨æµé管æ§ç»ä»¶ï¼å ¶æ ¸å¿sentinel-core没æä»»ä½å¤ä½ä¾èµï¼æå ååªæä¸å°Kï¼é常轻é级ï¼å¼åè å¯ä»¥æ¾å¿å¼å ¥ sentinel-core èä¸éæ å¿ä¾èµé®é¢ ï¼åæ¶sentinelæä¾å¤ç§æ©å±ç¹ï¼ç¨æ·å¯ä»¥å¾æ¹ä¾¿çæ ¹æ®éæ±å»è¿è¡æ©å±ï¼èä¸æ ç¼åæ¢å°Sentinelä¸
å¼å ¥Sentinel带æ¥çæ§è½æèé常å°ãåªæå¨ä¸å¡åæºéçº§è¶ è¿ W QPS çæ¶åæä¼æä¸äºæ¾èçå½±åï¼5% - % å·¦å³ï¼ï¼åæº QPS ä¸å¤ªå¤§çæ¶åæèå ä¹å¯ä»¥å¿½ç¥ä¸è®¡ã
æµéæ§å¶
Sentinelå¯ä»¥é对ä¸åçè°ç¨ 以ä¸åçè¿è¡ææ å¦ QPSã并åè°ç¨æ°ãç³»ç»è´è½½çï¼ä¸ºåºåï¼å¯¹èµæºè°ç¨è¿è¡æµéæ§å¶ï¼å°éæºç请æ±è°æ´æåéçå½¢ç¶ã
Sentinel æ¯æå¤æ ·åçæµéæ´å½¢çç¥ï¼å¨ QPS è¿é«çæ¶åå¯ä»¥èªå¨å°æµéè°æ´æåéçå½¢ç¶ã常ç¨çæï¼
ç´æ¥æç»æ¨¡å¼ï¼å³è¶ åºç请æ±ç´æ¥æç»ã
æ ¢å¯å¨é¢ç模å¼ï¼ å½æµéæ¿å¢çæ¶åï¼æ§å¶æµééè¿çéçï¼è®©éè¿çæµéç¼ç¼çå¢å ï¼å¨ä¸å®æ¶é´å éæ¸å¢å å°éå¼ä¸éï¼ç»å·ç³»ç»ä¸ä¸ªé¢ççæ¶é´ï¼é¿å å·ç³»ç»è¢«åå®ã
åéå¨æ¨¡å¼ å©ç¨ Leaky Bucket ç®æ³å®ç°çåé模å¼ï¼ä¸¥æ ¼æ§å¶äºè¯·æ±éè¿çæ¶é´é´éï¼åæ¶å 积ç请æ±å°ä¼æéï¼è¶ è¿è¶ æ¶æ¶é¿ç请æ±ç´æ¥è¢«æç»ã
Sentinel Hystrix
é离çç¥åºäºå¹¶åæ°çº¿ç¨æ± é离/ä¿¡å·éé离
çæé级çç¥åºäºååºæ¶é´æ失败æ¯çåºäºå¤±è´¥æ¯ç
å®æ¶ææ å®ç°æ»å¨çªå£æ»å¨çªå£ï¼åºäº RxJavaï¼
è§åé ç½®æ¯æå¤ç§æ°æ®æºæ¯æå¤ç§æ°æ®æº
æ©å±æ§å¤ä¸ªæ©å±ç¹æ件çå½¢å¼
åºäºæ³¨è§£çæ¯æå³å°åå¸æ¯æ
è°ç¨é¾è·¯ä¿¡æ¯æ¯æåæ¥è°ç¨ä¸æ¯æ
éæµåºäº QPS / 并åæ°ï¼æ¯æåºäºè°ç¨å ³ç³»çéæµä¸æ¯æ
æµéæ´å½¢æ¯ææ ¢å¯å¨ãåéå¨æ¨¡å¼ä¸æ¯æ
ç³»ç»è´è½½ä¿æ¤æ¯æä¸æ¯æ
å®æ¶çæ§ APIåå¼åæ ·è¾ä¸ºç®å
æ§å¶å°å¼ç®±å³ç¨ï¼å¯é ç½®è§åãæ¥çç§çº§çæ§ãæºå¨åç°çä¸å®å
常è§æ¡æ¶çéé ServletãSpring CloudãDubboãgRPC çServletãSpring Cloud Netflix
æç« åºå¤ /educast/article/details/