【高手问答汇总】 与 Spring Cloud Alibaba 开源项目负责人一起深入理解 Spring Cloud

语言: CN / TW / HK

据 O’Reilly 在 2020 年 7 月 15 日公布的企业微服务市场现状的调研数据来看,有 77% 的组织采用了微服务,其中, 92% 的组织成功地使用了微服务。Spring Cloud 和 Apache Dubbo 作为非常流行的两款微服务开发框架,深受开发者们关注。

OSCHINA 请来了 Spring Cloud Alibaba 开源项目负责人方剑 @fangjian0423 和大家一起探讨关于 Spring Cloud 相关的问题。

本期高手问答嘉宾方剑参与了 Spring Cloud Alibaba 开源项目的建设,并成为该项目的创始人之一。在建设 Spring Cloud Alibaba 的过程中,他对 Spring Cloud 整个生态的知识点进行了深入学习,发现 Spring Cloud 生态体系其实非常庞大,大家平时可能更多地关注于服务注册/发现、配置管理、熔断器和网关这 4 大方面,但实际上 Spring Cloud 还包括消息、消息总线、任务调度、应用部署、Serverless、CI/CD 等诸多领域的知识。

 

嘉宾简介

方剑,花名洛夜,Spring Cloud Alibaba 开源项目负责人/创始人之一。Apache RocketMQ CommitterAlibaba Nacos Committer。目前就职于阿里巴巴集团。

曾在个人博客上编写过《Spring MVC源码分析系列》、《Spring Boot源码分析系列》文章。目前,关注微服务、云原生、Kubernetes

 

问: spring cloud源码有什么需要关注的?2,阿里巴巴改了spring cloud那部分源码?

答:

1. Spring Cloud 大部分组件的基础是 Spring Boot ,基于 Spring Boot 的 hook 机制(工厂加载机制)去设计出 Spring Cloud 自己的微服务实现(服务注册/发现,分布式配置,服务调用等等)。像 Spring Cloud Stream,Spring Cloud Function,Spring Batch 这些都是比较独立的设计,可以参考书上的讲解哈 ~

2. 目前并没有改造 Spring Cloud 的源码,是在原有代码的基础上实现了自身的特性。比如 Dubbo Spring Cloud 是通过 AOP 切了部分实现并加上了新的特性。后面有机会会和 Pivotal(VMware)工程师一起设计/优化 Spring Cloud 源码 

问: 你好,现在网关层到底用什么?好多公司还在用ZUUL,GATEWAY靠谱么?

答: 推荐使用 Spring Cloud Gateway 哦,这个已经经过生产验证过,而且是 Spring Cloud 社区自己创建/维护的项目。据我了解,目前 Zuul 越来越少的公司再使用了。

问: 您好,关于spring cloud关于CICD 和云原生主要提现在哪些方面呢

答:

1. CICD 方面。可以参考书里的 Spring Cloud Data Flow 章节,里面有讲到 Spring Cloud Skipper 以及 Spring Cloud Deployer。目前我知道有公司通过这些技术栈做 CICD。当然,也可以通过 Jenkins 自己做 CICD。

2. 云原生这个概念一开始可是 Spring 的母公司 Pivotal 提出的哦,Pivotal 还提出了12-factor Apps。这 12 个要素在 Spring Boot/Cloud 上几乎都支持,Pivotal 的 Spring 首席布道师 Josh Long 编写的《Cloud Native Java》是一本讲解云原生以及 Spring Boot/Cloud 的书籍,里面也讲到了这些内容。

问: 1. 在微服务系统下,权限系统如果用oauth2封装成一个单独的服务,每次鉴权都要增加一次http验证token,怎样提高性能 2.  spring cloud如果发布到kubernetes,最佳实践是无状态的服务以pod运行在k8s,任务调度、nacos等第三方模块以jar发布还是统一都由kubernetes管理?Istio是否能降低kubernetes运维的复杂度 

答:

1. 如果权限是一个单独的微服务模块,可以考虑在代码层面做一些性能优化。比如加上限流;FeignClient 客户端使用 okhttp 代替默认的 jdk http 客户端,修改压缩策略;超时时间修改等等

2. 业务应用可以以无状态的方式运行在 Kubernetes 上,有状态的应用 Kubernetes 也能管理,参考 Kubernetes 部署 Nacos 文章

3. Istio 确实是可以降低 Kubernetes 的运维复杂度,但前提是我们得对 Istio 足够了解,了解 Istio 本身也是一件需要时间让技术/运维团队慢慢熟悉的过程。关于是否要使用 Istio,还是得根据公司的规模/技术栈等多方面因素决定。选择适合自己的才是最舒服的。

问: 目前公司已经使用springcloud构建了微服务。服务之间使用feignclient进行调用,因为feign只是对http通信的封装,接口还是通过controller定义 ,在网关进行接口对外暴露的时候需要特别注意安全,一不小心就把对内的接口暴露出去了。使用dubbo可以解决,但是架构上会复杂一些,还是从管理上解决这样的问题?怎么来考量

答: 简单点安全这块可以通过 Content-Type 做一些区分,让客户端传递正确的 Content-Type 才可以调用。从长远看可以加一些鉴权操作。

问: seata的@globaltranscation注解和shardingjdbc的事物注解冲突吗

答: 不冲突,参考:https://github.com/seata/seata-samples/tree/master/springboot-shardingsphere-seata

问: spring cloud和dubbo现在哪个更具有优势,已经使用dubbo的有必要迁移到springcloud吗

答: 各有优势,个人建议根据公司/个人的情况采取技术栈。不要为了迁移而迁移

问: Spring Cloud Alibaba 跟 Spring Cloud 是什么关系,学会 Spring Cloud Alibaba 就会用 Spring Cloud 吗?

答: 建议看下 https://www.oschina.net/question/4489239_2321891 这里的采访哦,谢谢。

问: 如何评价一些强行微服务的行为

答: 可以看下 https://www.oschina.net/question/4489239_2321891 这里的采访。微服务跟企业的规模,技术栈,发展,团队划分都有关系,很多在单体应用里不存在的问题,使用微服务架构后会出现,一定要做好准备。我个人的观点是微服务有它的优点,但不适合所有团队,不要为了微服务而微服务。

问: 请教学习路径 

答:

每个人都有自己的学习方法哦,而且也不一定适用于别人。可以参考下 https://www.oschina.net/question/4489239_2321891 这里的采访 “你什么时候开始接触 Spring Cloud 的,平时如何学习了解 Spring Cloud 生态?可以分享下经验吗?” 这个问题。

我复制下内容哈 ~

第一次接触 Spring Cloud 是在 2016 年。那个时候公司在用 Spring Boot,后来了解到 Spring 家族里还有 Spring Cloud 这个项目,然后对它做了一些简单了解。在 2017 年,由于工作的关系,我对 Spring Cloud 做了一个比较深入的接触。

关于如何学习 Spring Cloud 生态。我相信每个人都有自己的学习方法,我在这里分享一下个人的学习 Spring Framrwork 的过程。

我建议大家带着思考去学习。在深入接触 Spring Cloud 之前,我对 Spring MVC 和 Spring Boot 都已经有了比较深入的理解。学习 Spring MVC 的时候,我带着 "Controller 方法上加个 @ResponseBody 注解后把 Request Body 解析成 JSON" 这个问题去解读源码;学习 Spring Boot 的时候,我带着 "Spring Boot 提供的 starter 内部没有任何一行代码 java,引入后却可以使用对于 starter 的特效,这是怎么做到的?" 问题去解读源码。

有了 Spring 的这些基础知识后,Spring Cloud 学习起来会非常方便,Spring Cloud 本质上是一套基于 Spring Boot 的 hook 机制去提供微服务领域下常见问题的解决方案。

这里有我记录的这些学习文章,大家有兴趣可以关注:

SpringBoot源码分析系列:http://fangjian0423.github.io/2017/06/05/springboot-source-analysis-summary/

SpringMVC源码分析系列:https://www.cnblogs.com/fangjian0423/p/springMVC-directory-summary.html

Spring Cloud:在《深入理解 SpringCloud 与实战》书里了 ~

问: acos有心跳检测机制吗,或者类似的功能。如果有的话,可以说说设计实现的原理吗

答: Nacos 有客户端和服务端心跳检查,可以参考 https://www.infoq.cn/article/b*6vymikao9vakisjype

问: 1.Spring Cloud Alibaba目前推荐用哪个注册中心?Eureka推荐吗?2.spring cloud源码用的比较多的设计模式是什么?怎么考虑的

答: 1. Nacos。目前已经成为市场占有率第一的注册中心,Eureka 1.x 已经停止维护了 2. 几乎所有设计模式都有涉及。比如工厂,策略,组合,适配器,代理,命令,单例。这个看下 spring framework 源码会收获很多设计模式的理解

问: 推荐冷冷的 pig项目还有视频在b站里,方便学习,若依的spring cloud也可以学习下,也有人放视频在b 站

答: 这里有一些资料哦: https://github.com/alibaba/spring-cloud-alibaba/wiki/awesome-spring-cloud-alibaba 开源项目可以上 github/gitee 搜一下,挺多的

问: Spring Cloud Resilience4j这个目前用在什么场景比较多?那些项目需要用到?2.老项目贸然增加新组件Resilience4j等等新spring组件??,怎么预防和老代码冲突??

答: 1. 主要用于 Circuit Breaker/Rate Limiter,Retry 等场景。书上有讲哦 ~ 2. 没有特别好的方法,主要看新组件和老代码的兼容性。目前 Hystrix 迁移到 Sentinel 几乎不需要代码改造 ~

问: spring cloud nacos能否把logback的配置文件logback.xml配置在nacos上去

答: 可以。需要注意的点是确保 Logging 初始化之前能够加载到 Nacos 的配置,Spring Boot Logging 初始化以及 Spring Cloud Bootstrap 过程可以参考书里的材料哦

 

购买地址:https://item.jd.com/13043028.html