微服务2.0技术栈选型手册

keycloakify-demo-app - 此仓库是此网站的源代码 docker build -f Dockerfile -t garronej/keycloakify-demo-app . docker run -it --rm -p 1337:80 garronej/keycloakify-demo-app 立即下载
  • 选型准则
  1. 生产级:选择的产品是要抗流量解决实际业务问题的,并非只是拿来写demo,该产品必须是可运维、可治理,成熟稳定的。
  2. 一线互联网公司落地产品
  3. 开源社区活跃度
  • 微服务基础架构核心关注点

  • 服务框架选型
  1. SpringBoot/Cloud由于spring社区的影响力以及Netflix的背书,目前可以认为是Java微服务的一个社区标准。基于Spring的框架本质上可以认为是Restful框架,序列化协议主要采用基于文本的JSON,通信协议基于HTTP。
  2. Dubbo,其本质是一套基于Java的RPC框架,当当的DubboX拓展了RESTful的接口暴露能力,它主要面向Java技术栈,跨语言能力较弱,其强大的服务治理能力也导致了框架相对较重,完全用好的门槛较高。另,新浪微博开源的Motan也不错,像是一个轻量剪裁版的Dubbo。
  3. gRpc,是谷歌近年新推的一套RPC框架,基于protobuf的强契约编程模型,能自动生成各种语言客户端,且保证互操作。支持HTTP2是一大亮点,但比较适合内部服务调用场景,对外暴露服务比较麻烦,需要配合gRpc gateway,另,东西比较新,对于HTTP2带来的好处社区也未达成一致,请慎用。
  • 运行时支撑服务选型
  1. 服务注册中心,springcloud与Euark是最佳搭配,Eureka在Netflix经过大规模生产验证,支持跨数据中心,客户端配合Ribbon可以实现灵活的客户端软负载;Consul[附录12.5]也是不错选择,天然支持跨数据中心,还支持KV模型存储和灵活健康检查能力,目前在github上有超过11k星
  2. 服务网关,如果采用Spring Cloud体系,则选择Zuul[附录12.6]是最佳搭配,Zuul在Netflix经过大规模生产验证,支持灵活的动态过滤器脚本机制,异步性能不足(基于Netty的异步Zuul迟迟未能推出正式版)。Zuul网关目前在github上有超过3.7k星。基于Nginx/OpenResty的API网关Kong[附录12.7]目前在github上比较火,有超过14.1k星。因为采用Nginx内核,Kong的异步性能较强,另外基于lua的插件机制比较灵活,社区插件也比较丰富,从安全到限流熔断都有,还有不少开源的管理界面,能够集中管理Kong集群。
  3. 配置中心,Spring Cloud自带Spring Cloud Config[附录12.8](github 0.75k stars),个人认为算不上生产级,很多治理能力缺失,小规模场景可以试用。个人比较推荐携程的Apollo[附录12.9]配置中心,在携程经过生产级验证,具备高可用,配置实时生效(推拉结合),配置审计和版本化,多环境多集群支持等生产级特性,建议中大规模需要对配置集中进行治理的企业采用。Apollo目前在github上有超过3.4k星
  • 服务监控选型
  1. 日志监控,ELK目前可以认为是日志监控的标配,功能完善开箱即用,Elasticsearch[附录12.10]目前在github上有超过28.4k星。Elastalert[附录12.11] (github 4k stars)是Yelp开源的针对ELK的告警通知模块。
  2. 调用链监控,目前社区主流是点评CAT[附录12.12](github 4.3k stars),Twitter之前开源现在由OpenZipkin社区维护的Zipkin[附录12.13](github 7.5k stars)和Naver开源的Pinpoint[附录12.14](github 5.3k stars)。
  3. Metrics监控主要依赖于时间序列数据库(TSDB),目前较成熟的产品是StumbleUpon公司开源的基于HBase的OpenTSDB。OpenTSDB 本身不提供告警模块,Argus[附录12.17](github 0.29k星)是Salesforce开源的基于OpenTSDB的统一监控告警平台,支持丰富的告警函数和灵活的告警配置,可以作为OpenTSDB的告警补充。年也出现一些轻量级的TSDB,如InfluxDB[附录12.18](github 12.4k stars)和Prometheus[附录12.19](github 14.3k stars),这些产品函数报表能力丰富,自带告警模块,但是分布式能力不足,适用于中小规模企业。Grafana[附录12.20](github 19.9k stars)是Metrics报表展示的社区标配。
  4. 健康检查和告警通知,Sensu[附录12.21](github 2.7k stars),能够对各种服务(例如spring boot暴露的健康检查端点,时间序列数据库中的metrics,ELK中的错误日志等)定制灵活的健康检查(check),然后用户可以针对check结果设置灵活的告警通知策略。Sensu在Yelp等公司有落地案例。其它类似产品还有Esty开源的411[附录12.22](github 0.74k星)和Zalando的ZMon[附录12.23] (github 0.15k星),它们是分别在Esty和Zalando落地的产品,但是定制check和告警配置的使用门槛比较高,社区不热,建议有定制自研能力的团队试用。ZMon后台采用KairosDB存储,如果企业已经采用KariosDB作为时间序列数据库,则可以考虑ZMon作为告警通知模块。
  • 服务容错选型
  1. 针对Java技术栈,Netflix的Hystrix[附录12.24](github 12.4k stars)把熔断、隔离、限流和降级等能力封装成组件,任何依赖调用(数据库,服务,缓存)都可以封装在Hystrix Command之内,封装后自动具备容错能力。
  2. Hystrix一般需要在应用端或者框架内埋点,有一定的使用门槛。对于采用集中式反向代理(边界和内部)做服务路由的公司,则可以集中在反向代理上做熔断限流,例如采用nginx[附录12.25](github 5.1k stars)或者Kong[附录12.7](github 11.4k stars)这类反向代理,它们都有插件支持灵活的限流容错配置。Zuul网关也可以集成Hystrix实现网关层集中式限流容错。集中式反向代理需要有一定的研发和运维能力,但是可以对限流容错进行集中治理,可以简化客户端。

  • 后台服务选型
  1. 消息系统,Apache顶级项目Kafka[附录12.26](github 7.2k stars)是社区标配。对 Kafka的监控和治理能力进行适当定制完善,Allegro公司开源的hermes[附录12.27](github 0.3k stars)是一个可参考项目,它在Kafka基础上封装了适合业务场景的企业级治理能力。阿里开源的RocketMQ;RabbitMQ[附录12.29](github 3.6k星)是老牌经典的MQ,队列特性和文档都很丰富,性能和分布式能力稍弱,中小规模场景可选。
  2. 缓存治理,客户端直连模式,SohuTv开源的cachecloud[附录12.30](github 2.5k stars)是一款不错的Redis缓存治理平台,提供诸如监控统计,一键开启,自动故障转移,在线伸缩,自动化运维等生产级治理能力,另外其文档也比较丰富。中间层Proxy模式,则Twitter开源的twemproxy[附录12.31](github 7.5k stars)和CodisLab开源的codis[附录12.32](github 6.9k stars)是社区比较热的选项。
  3. 分布式数据访问层,采用Java技术栈,则当当开源的shardingjdbc[附录12.33](github 3.5k stars)是一个不错的选项,如果倾向采用数据库访问中间层proxy模式,则从阿里Cobar演化出来的社区开源分库分表中间件MyCAT[附录12.34](github 3.6k stars)是一个不错选择 。
  4. 任务调度系统,xxl-job[附录12.35](github 3.4k stars),部署简单轻量,大部分场景够用。elastic-job[附录12.36](github 3.2k stars)相比xxl-job功能更强一些也更复杂。
  • 服务安全选型
  1. 对于微服务安全认证授权机制一块,目前业界虽然有OAuth和OpenID connect等标准协议。
  2. Apereo CAS
  3. Boss开源的keycloak[附录12.38](github 1.9 stars),spring cloud security[附录12.39]等,大都是opinionated(一家观点和做法)的产品,同时因支持太多协议造成产品复杂,也缺乏足够灵活性。
  4. 个人建议基于OAuth和OpenID connect标准,在参考一些开源产品的基础上(例如Mitre开源的OpenID-Connect-Java-Spring-Server[附录12.40],github 0.62k stars),定制自研轻量级授权服务器。
  5. Wso2提出了一种微服务安全的参考方案[附录12.45],建议参考,该方案的关键步骤如下:
  6. 使用支持OAuth 2.0和OpenID Connect标准协议的授权服务器(个人建议定制自研);

  7. 使用API网关作为单一访问入口,统一实现安全治理;

  8. 客户在访问微服务之前,先通过授权服务器登录获取access token,然后将access token和请求一起发送到网关;

  9. 网关获取access token,通过授权服务器校验token,同时做token转换获取JWT token。

  10. 网关将JWT Token和请求一起转发到后台微服务;

  11. JWT中可以存储用户会话信息,该信息可以传递给后台的微服务,也可以在微服务之间传递,用作认证授权等用途;

  12. 每个微服务包含JWT客户端,能够解密JWT并获取其中的用户会话信息。

  13. 整个方案中,access token是一种by reference token,不包含用户信息可以直接暴露在公网上;JWT token是一种by value token,可以包含用户信息但不暴露在公网上。

  • 服务部署平台选型

容器已经被社区接受为交付微服务的一种理想手段,可以实现不可变(immutable)发布模式。一个轻量级的基于容器的服务部署平台主要包括容器资源调度,发布系统,镜像治理,资源治理和IAM等模块。

  1. 集群资源调度系统,目前Google开源的kubernetes已经形成市场领导者地位,github上有31.8k星,如果你的团队有足够定制自研能力,想深度把控底层调度算法,也可以基于mesos做定制自研。
  2. 镜像治理,基于docker registry,vmware开源的harbor是目前社区比较成熟的企业级产品,在其基础上扩展了权限控制,审计,镜像同步,管理界面等治理能力,可以考虑采用。
  3. 资源治理,目前这块还没有生产级的开源产品,一般企业需要根据自己的场景定制自研。
  4. 发布平台,jenkins, Netflix开源的spinnake,但是这个产品比较复杂重量(因为它既要支持适配对接各种CI系统,同时还要适配对接各种公有云和容器云,使得整个系统异常复杂)
  5. IAM:是identity & access management的简称,对发布平台各个组件进行身份认证和安全访问控制

 

此篇文章作为学习笔记,原文章链接:https://mp.weixin.qq.com/s/ENq2UlCvF0kf0P4-fUtuxA

keycloak应用于rest资源保护的springboot端源码 这个是一个用keycloak保护rest资源的例子,里面的keycloak端配置请看博客讲解https://blog.csdn.net/hb_688/article/details/81180709 立即下载

相关推荐

微服务架构技术栈选型手册

2014年可以认为是微服务1.0的元年,当年有几个标志性事件,一是MartinFowler在其博客上发表了”Microservices”一文,正式提出微服务架构风格;二是Netflix微服务架构经过多年大规模生产验证,最终抽象落地形成一整套开源的微服务基础组件,统称NetflixOSS,Netflix的成功经验开始被业界认可并推崇;三是Pivotal将NetflixOSS开源微服务组件集成到其Spring体系,推出SpringCloud微服务开发技术栈。一晃三年过去,,容器,PaaS,CloudNative,gRPC,ServiceMesh,Serverless等新技术新理念你方唱罢我登场,不

微服务权限终极解决方案,Spring Cloud Gateway + Oauth2 实现统一认证和鉴权!

最近发现了一个很好的微服务权限解决方案,可以通过认证服务进行统一认证,然后通过网关来统一校验认证和鉴权。此方案为目前最新方案,仅支持Spring Boot 2.2.0、Spring Cl...

macrozheng的专栏 4万+

微服务网关|Zuul1.0和2.0我们该如何选择?

在今年5月中,Netflix终于开源了它的支持异步调用模式的Zuul网关2.0版本,真可谓千呼万唤始出来。从Netflix的官方博文[附录1]中,我们获得的信息也比较令人振奋:TheCloudGatewayteamatNetflixrunsandoperatesmorethan80clustersofZuul2,sendingtraffictoabout100(andgrowing)backendserviceclusterswhichamountstomorethan1millionrequests

使用Keycloak实现安全的SpringBoot微服务,2024年最新nginx在微服务架构的作用

总的来说,面试是有套路的,一面基础,二面架构,三面个人。最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!)、书籍、视频等。希望也能帮助想进大厂的朋友**[外链图片转存中…(img-XPn0kIhA-1712809350367)]

weixin_57992300的博客 1172

中国式微服务技术栈2.0

主要包含11大核心组件,分别是:1.服务网关Zuul2.服务注册发现Eureka+Ribbon3.服务配置中心Apollo4.认证授权中心SpringSecurityOAuth25.服务框架SpringMVC/Boot1.数据总线Kafka2.日志监控ELK3.调用链监控CAT4.Metrics监控KairosDB5.健康检查和告警ZMon6.限流熔断和流聚合Hystrix/Turbine2013年左右,InfoQ曾经对前Netflix架构总监AdrianCockcroft有过一次专访[附录1],其中有问Adrian:“Netflix开源这么多项目,你认为哪一个是最不可或缺的(MOSTIndi

储能电站 BMS 与车载动力电池 BMS 核心差异:工况、保护策略、控制逻辑对比

储能电站BMS与车载动力电池BMS虽同名,实为针对不同赛道量身定制的产品。简单地将车载BMS方案套用于储能,或将储能BMS思路用于车载,都可能带来性能、安全或成本上的严重问题。在选择和设计BMS时,必须回归其应用场景的本质需求储能BMS是**“资产管理者”**,精打细算,追求在长达十余年的服役期内稳定、高效地创造收益。车载BMS是**“性能与安全卫士”**,反应敏捷,确保在车辆全生命周期内动力澎湃且万无一失。

小帽子的博客 422

Kong社区版集成Keycloak实现微服务认证与鉴权

文章目录Kong社区版集成Keycloak实现微服务认证与鉴权前言认证和鉴权流程在Keycloak上配置创建Realm创建Client创建Role创建User服务环境准备受保护的端点的服务首页服务在Kong上配置新建服务添加路由添加CORS插件添加JWT插件创建Consumer配置Consumer的JWT credentials测试成功测试角色小结参考文档 Kong社区版集成Keycloak实现微服务认证与鉴权 前言 Kong企业版有OpenID Connect插件可以很方便地和Keycloak集成。 是K

锐意工作室 4621

【基金量化研究系列】基金绩效归因模型——Brinson多期归因模型之python实现

文章目录1. 引言2. Brinson多期归因模型的Python实现2.1 基准数据读取模块2.2 持仓数据读取模块2.3 持仓收益与基准计算模块2.4 Brinson多期归因模型核心算法Brinson_Multiple2.5 主函数模块3. 归因结果写在最后 1. 引言 在上文中,我们已经介绍了Brinson归因模型的基本思想。那么,就让我们动起手来,实现这一方法吧! 在Brinson多期归因模型实现的过程中,本文使用模块化方法,将整个实现过程划分为如下五个功能板块: Module 1: 基准数据读取模

Mikey_Sun的博客 2万+

微服务 2.0 技术栈选型手册*图文版

一 选型准则 对于技术选型,我个人有很多标准,其中下面三项是最重要的: 生产级 我们选择的技术栈是要解决实际业务问题和上生产抗流量的(选择不慎可能造成生产级事故),而不是简单做个POC或者Demo展示,所以生产级(Production Ready),可运维(Ops Ready),可治理,成熟稳定的技术才是我们的首选; 一线互联网公司落地产品 我们会尽量采用在一线互联网公司落地并且开源的,且...

qq_43614498的博客 479

复信号的调制与解调(基带)

Digital modulation methods can be considered as digital-to-analog conversion and the corresponding demodulation or detection as analog-to-digital conversion. 数字调制可以看成是数字到模拟的变换,同样,数字解调也可以看作是模拟向数字的转换。

JonTargaryen的博客 1万+

Qwen-Image LoRA训练实战:从数据准备到异常修复的全流程解析

本文详细解析了Qwen-Image LoRA训练的全流程,从数据准备到参数优化再到异常修复。通过实战案例展示了如何利用LoRA技术微调Qwen-Image模型,提升中文场景下的图像生成质量,特别针对手脚生成异常等问题提供了有效解决方案。文章还分享了中文提示词优化技巧和高级训练方法,帮助开发者高效训练出高质量的LoRA模型。

lemon的博客 965

微服务 2.0 技术栈选型手册

源/芋道源码 一、前言 二、选型准侧 三、微服务基础架构核心关注点 四、服务框架选型 五、运行时支撑服务选型 六、服务监控选型 七、服务容错选型 八、后台服务选型 九、服务安全选型 十、服务部署平台选型 十一、写在最后 一、前言 2014年可以认为是微服务1.0的元年,当年有几...

IT有个圈儿 296

YOLOv5s模型训练全流程解析:从数据准备到实战检测

本文详细解析了YOLOv5s模型训练的全流程,涵盖从环境搭建、数据准备与格式转换,到模型训练、参数调优及实战检测的完整步骤。文章提供了具体的代码示例和常见问题解决方案,旨在帮助开发者,特别是新手,高效掌握YOLOv5s模型训练的核心技术,并成功应用于实际检测任务中。

weixin_29041767的博客 331
上一篇: 5商笔记
下一篇: ssm 整合 swagger maven方式
卜夫
博客等级 码龄9年 0粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值