《SpringCloud微服务实战》个人阅读笔记

第一章 基础知识

1.什么是微服务:

微服务是系统架构上的一种设计风格;

它的主旨是将一个原本独立的系统拆分成多个小型服务;

服务之间通过基于HTTP的RESTful API进行通信协作;

 

2.微服务存在的问题:

#运维的新挑战

在微服务架构中,运维人员需要维护的进程数量会大大增加。

#接口的一致性

虽然我们拆分了服务,但是业务逻辑上的依赖并不会消除,

只是从单体应用中的代码依赖变为了服务间的通信依赖。

#分布式的复杂性

需要考虑:网络延迟、分布式事务、异步消息等;

 

3.微服务架构的九大特性:

服务组件化;

按业务组织团队;

做“产品”的态度;

智能端点与哑管道;

去中心化治理;

去中心化管理数据;

基础设施自动化;

容错设计;

演进式设计;

 

4.SpringCloud简介:

SpringCloud是一个基于SpringBoot实现的微服务架构开发工具。

 

第二章 SpringBoot

SpringBoot starter

SpringBoot出现的宗旨并非要重写Spring或是替代Spring,而是希望通过设计大量的自动化配置等方式来简化Spring原有样板化的配置,是得开发者可以快速构建应用;

除了解决配置问题外,SpringBoot还通过一系列Starter POMs的定义,让我们整合各项功能的时候,不需要在Maven的pom.xml文件中维护那些错综复杂的依赖关系,而是通过类似模块化的Starter模块定义来引用,使得依赖管理工作变得更为简单;

SpringBoot的Starter POMs采用 spring-boot-starter-*的命名方式,*代表一个特别的应用功能模块

SpringBoot的打包方式

SpringBoot默认将Web应用打包为jar形式,而非war的形式;

SpringBoot除了可以更好融入Docker之外,其自身就支持嵌入式的Tomcat等容器。所以通过SpringBoot构建的应用不需要安装Tomcat、将应用打包成war、再部署到Tomcat这样复杂的构建与部署工作,只需将SpringBoot应用打成jar包,通过java -jar命令直接运行就能启动一个标准化的Web应用;

实现RESTful API

在SpringBoot中创建一个RESTful API的实现代码同SpringMVC应用一样,只是不需要像SpringMVC那样先做很多配置,而是可以直接编写Controller内容。

SpringBoot的配置文件

1.application.properties

SpringBoot的配置目录是:src/main/resources

SpringBoot的默认配置文件是:src/mian/resources/application.properties

关于SpringBoot应用的配置内容都可以集中在该文件中,根据我们引入的不同starter模块,可以在这里定义:容器端口号、数据库连接信息、日志级别等各种配置信息;

 

2.YAML

SpringBoot的配置文件还支持现在被广泛推荐使用的YAML文件

YAML强调以数据为中心,而不是以标记语言为中心。

YAML以类似大纲的缩进形式来表示,配置信息利用阶梯化缩进的方式,其结构更为清晰易读,同时配置内容的字符量也得到显著减少。

 

3.自定义参数

也可以在配置文件中定义一些我们需要的自定义属性。

然后在应用中可以通过@Value注解来加载这些自定义的参数

 

4.多环境配置

application-dev.properties  开发

application-test.properties  测试

application-prod.properties 生产

监控与管理

spring-boot-starter-actuator

引入该模块能够自动为SpringBoot构建的应用提供一系列用于监控的端点。

 

第三章 SpringCloud Eureka

关于:微服务治理

主要负责完成微服务架构中的服务治理功能;

服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动注册与发现;

服务注册:在微服务治理框架中,通常都会构建一个注册中心,每个微服务单元向注册中心登记自己提供的服务;

服务发现:服务间的调用不再通过指定具体的实例地址来实现,而是通过向服务名发起请求调用实现;调用方需要向服务注册中心咨询服务,并获取所有服务的实例清单,以实现对具体服务实例的访问;

使用Eureka来实现服务注册与发现;

Eureka包含:服务端组件客户端组件

Eureka服务端:也称为:服务注册中心,同其他服务注册中心一样,支持高可用配置;

Eureka客户端:主要处理服务的注册与发现;

                           客户端服务通过注解和参数配置的方式,嵌入在客户端应用程序的代码中,在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性地发送心跳来更新它的服务租约。同时,它也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期性地刷新服务状态;

搭建服务注册中心

1. 创建SpringBoot工程命名为:eureka-server;

2. 在pom.xml中引入依赖:spring-cloud-eureka-server

3. 通过 @EnableEurekaServer注解 启动一个服务注册中心提供给其他应用进行对话;

    注意:在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要进制它的客户端注册行为:在application.properties中:eureka.client.register-with-eureka=false;

注册服务提供者

在完成服务注册中心的搭建之后,接下来我们尝试将一个既有的springboot应用加入Eureka的服务治理体系中去。

1. 在pom.xml中添加依赖:spring-cloud-starter-eureka

2. 改造/hello请求处理接口,通过注入DiscoveryClient对象,在日志中打印出服务的相关内容;

3. 在主类中通过加上 @EnableDiscoveryClient注解,激活Eureka中的DiscoveryClient实现;

4. 在application.properties中,通过:spring.application.name属性来为服务命名,比如命名为:hello-service;

                                             再通过:eureka.client.serviceUrl.defaultZone属性 来指定服务注册中心的地址;

服务发现与消费

构建服务消费者。

服务发现:由Eureka的客户端完成;

服务消费:由Ribbon完成;

1. 启动之前实现的服务注册中心eureka-server,以及hello-service服务;

2. 创建一个springboot工程来实现服务消费者,取名为:ribbon-consumer

    在pom.xml总添加依赖:spring-cloud-starter-eureka,spring-cloud-starter-ribbon;

3. 创建应用主类ConsumerApplication,通过 @EnableDiscoveryClient注解让该应用注册为Eureka客户端应用,以获得服务发现能力;

    同时,在该主类中创建RestTemplate的SpringBoot实例,并通过@LoadBalanced注解开启客户端负载均衡;

4. 创建ConsumerController类并实现/ribbon-consumer接口;

    在该接口中,通过上面创建的RestTemplate来实现对HELLO-SERVICE服务提供的/hello接口进行调用;

   可以看到这里访问的地址是服务名HELLO-SERVICE,而不是一个具体的地址;

5. 在application.properties中配置Eureka服务注册中心的位置,需要与之前的HELLO-SERVICE一样,不然是发现不了该服务的;

6. 启动ribbon-consumer应用;

总结

Eureka服务治理基础架构三个核心要素:

   1)服务注册注册中心

             服务注册

             服务同步

             服务续约

   2)服务提供者

             获取服务

             服务调用

             服务下线

   3)服务消费者

             失效剔除

             自我保护

 

第4章 SpringCloud Ribbon:客户端负载均衡

SpringCloud Ribbon

SpringCloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具;

可以轻松地将面向服务的REST模板请求自动转换成客户端负载均衡的服务调用;

它几乎存在于每一个SpringCloud构建的微服务和基础设施中,包括Feign也是基于Ribbon实现的工具;

客户端负载均衡与服务端负载均衡最大的不同点在于服务清单所存储的位置,所有客户端节点都维护着自己要访问的服务端清单,而这些服务清单来自于服务注册中心,比如Eureka服务端;客户端负载均衡也需要心跳去维护自己要访问的服务清单的健康性,只是这个步骤需要与服务注册中心配合完成;

RestTemplate

spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接, 我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。

RestTemplate针对几种不同请求类型和参数类型的服务的调用实现:

GET请求:

     第一种:getForEntity()

     第二种:getForObject()

POST请求:

     第一种:postForEntity()

     第二种:postForObject()

     第三种:postForLocation()

PUT请求:

     put()

DELETE请求:

     delete()

负载均衡器

在具体实现客户端负载均衡的时候,是通过Ribbon的ILoadBalancer接口实现的;

以下是ILoadBalancer接口的实现类:

     AbstractLoadBalancer;

     BasedLoadBalancer 类是Ribbon负载均衡器的基础实现类,在该类中定义了很多关于负载均衡相关的基础内容;

     DynamicServerListLoadBalancer 类继承于 BasedLoadBalancer类,它是基础负载均衡器的扩展;

     

 

第6章 SpringCloud Feign:声明式服务调用

Feign简介:

Feign是基于Ribbon和Hystrix的声明式服务调用组件、一种声明式HTTP客户端;

我们在使用Ribbon时,通常都会利用它对RestTemplate的请求拦截来实现对依赖服务的接口调用,而RestTemplate已经实现了对HTTP请求的封装处理,形成了一套模板化的调用方法。Feign在此基础上进一步封装,由它来帮助我们定义和实现依赖服务接口的定义,即可完成对服务提供方的接口绑定,简化了在使用Ribbon时自行封装服务调用客户端的开发量;

创建步骤:

1. 创建SpringBoot工程,命名为:feign-consumer,

    在pom.xml中引入spring-cloud-starter-eureka和spring-cloud-starter-feign依赖;

2. 创建应用主类ConsumerApplication,并通过@EnableFeignClients注解开启SpringCloud Feign的支持功能;

3. 定义HelloService接口,通过@FeignClient注解指定服务名来绑定服务,然后再使用SpringMVC的注解来绑定具体该服务提供的REST接口;

4. 创建一个ConsumerController来实现对Feign客户端的调用;使用@Autowired直接注入上面定义的HelloService实例,然后调用;

5. 最后,同Ribbon实现的消费者一样,需要在application.properties中指定服务注册中心,并定义自身的服务名为feign-consumer

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
微服务是什么?微服务是用于构建应用程序的架构风格,一个大的系统可由一个或者多个微服务组成,微服务架构可将应用拆分成多个核心功能,每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作和出现故障的时候不会相互影响。为什么要用微服务?单体架构下的所有代码模块都耦合在一起,代码量大,维护困难,想要更新一个模块的代码,也可能会影响其他模块,不能很好的定制化代码。微服务中可以有java编写、有Python编写的,他们都是靠restful架构风格统一成一个系统的,所以微服务本身与具体技术无关、扩展性强。大型电商平台微服务功能图为什么要将SpringCloud项目部署到k8s平台?SpringCloud只能用在SpringBoot的java环境中,而kubernetes可以适用于任何开发语言,只要能被放进docker的应用,都可以在kubernetes上运行,而且更轻量,更简单。SpringCloud很多功能都跟kubernetes重合,比如服务发现,负载均衡,配置管理,所以如果把SpringCloud部署到k8s,那么很多功能可以直接使用k8s原生的,减少复杂度。Kubernetes作为成熟的容器编排工具,在国内外很多公司、世界500强等企业已经落地使用,很多中小型公司也开始把业务迁移到kubernetes中。kubernetes已经成为互联网行业急需的人才,很多企业都开始引进kubernetes技术人员,实现其内部的自动化容器云平台的建设。对于开发、测试、运维、架构师等技术人员来说k8s已经成为的一项重要的技能,下面列举了国内外在生产环境使用kubernetes的公司: 国内在用k8s的公司:阿里巴巴、百度、腾讯、京东、360、新浪、头条、知乎、华为、小米、富士康、移动、银行、电网、阿里云、青云、时速云、腾讯、优酷、抖音、快手、美团等国外在用k8s的公司:谷歌、IBM、丰田、iphone、微软、redhat等整个K8S体系涉及到的技术众多,包括存储、网络、安全、监控、日志、DevOps、微服务等,很多刚接触K8S的初学者,都会感到无从下手,为了能让大家系统地学习,克服这些技术难点,推出了这套K8S架构师课程。Kubernetes的发展前景 kubernetes作为炙手可热的技术,已经成为云计算领域获取高薪要掌握的重要技能,在招聘网站搜索k8s,薪资水平也非常可观,为了让大家能够了解k8s目前的薪资分布情况,下面列举一些K8S的招聘截图: 讲师介绍:  先超容器云架构师、IT技术架构师、DevOps工程师,曾就职于世界500强上市公司,拥有多年一线运维经验,主导过上亿流量的pv项目的架构设计和运维工作;具有丰富的在线教育经验,对课程一直在改进和提高、不断的更新和完善、开发更多的企业实战项目。所教学员遍布京东、阿里、百度、电网等大型企业和上市公司。课程学习计划 学习方式:视频录播+视频回放+全套源码笔记 教学服务:模拟面试、就业指导、岗位内推、一对一答疑、远程指导 VIP终身服务:一次购买,终身学习课程亮点:1. 学习方式灵活,不占用工作时间:可在电脑、手机观看,随时可以学习,不占用上班时间2.老师答疑及时:老师24小时在线答疑3. 知识点覆盖全、课程质量高4. 精益求精、不断改进根据学员要求、随时更新课程内容5. 适合范围广,不管你是0基础,还是拥有工作经验均可学习:0基础1-3年工作经验3-5年工作经验5年以上工作经验运维、开发、测试、产品、前端、架构师其他行业转行做技术人员均可学习课程部分项目截图   课程大纲 k8s+SpringCloud全栈技术:基于世界500强的企业实战课程-大纲第一章 开班仪式老师自我介绍、课程大纲介绍、行业背景、发展趋势、市场行情、课程优势、薪资水平、给大家的职业规划、课程学习计划、岗位内推第二章 kubernetes介绍Kubernetes简介kubernetes起源和发展kubernetes优点kubernetes功能kubernetes应用领域:在大数据、5G、区块链、DevOps、AI等领域的应用第三章  kubernetes中的资源对象最小调度单元Pod标签Label和标签选择器控制器Replicaset、Deployment、Statefulset、Daemonset等四层负载均衡器Service第四章 kubernetes架构和组件熟悉谷歌的Borg架构kubernetes单master节点架构kubernetes多master节点高可用架构kubernetes多层架构设计原理kubernetes API介绍master(控制)节点组件:apiserver、scheduler、controller-manager、etcdnode(工作)节点组件:kube-proxy、coredns、calico附加组件:prometheus、dashboard、metrics-server、efk、HPA、VPA、Descheduler、Flannel、cAdvisor、Ingress     Controller。第五章 部署多master节点的K8S高可用集群(kubeadm)第六章 带你体验kubernetes可视化界面dashboard在kubernetes中部署dashboard通过token令牌登陆dashboard通过kubeconfig登陆dashboard限制dashboard的用户权限在dashboard界面部署Web服务在dashboard界面部署redis服务第七章 资源清单YAML文件编写技巧编写YAML文件常用字段,YAML文件编写技巧,kubectl explain查看帮助命令,手把手教你创建一个Pod的YAML文件第八章 通过资源清单YAML文件部署tomcat站点编写tomcat的资源清单YAML文件、创建service发布应用、通过HTTP、HTTPS访问tomcat第九章  kubernetes Ingress发布服务Ingress和Ingress Controller概述Ingress和Servcie关系安装Nginx Ingress Controller安装Traefik Ingress Controller使用Ingress发布k8s服务Ingress代理HTTP/HTTPS服务Ingress实现应用的灰度发布-可按百分比、按流量分发第十章 私有镜像仓库Harbor安装和配置Harbor简介安装HarborHarbor UI界面使用上传镜像到Harbor仓库从Harbor仓库下载镜像第十一章 微服务概述什么是微服务?为什么要用微服务微服务的特性什么样的项目适合微服务?使用微服务需要考虑的问题常见的微服务框架常见的微服务框架对比分析第十二章 SpringCloud概述SpringCloud是什么?SpringCloudSpringBoot什么关系?SpringCloud微服务框架的优缺点SpringCloud项目部署到k8s的流程第十三章 SpringCloud组件介绍服务注册与发现组件Eureka客户端负载均衡组件Ribbon服务网关Zuul熔断器HystrixAPI网关SpringCloud Gateway配置中心SpringCloud Config第十四章 将SpringCloud项目部署到k8s平台的注意事项如何进行服务发现?如何进行配置管理?如何进行负载均衡?如何对外发布服务?k8s部署SpringCloud项目的整体流程第十五章 部署MySQL数据库MySQL简介MySQL特点安装部署MySQL在MySQL数据库导入数据对MySQL数据库授权第十六章 将SpringCLoud项目部署到k8s平台SpringCloud微服务电商框架安装openjdk和maven修改源代码、更改数据库连接地址通过Maven编译、构建、打包源代码在k8s中部署Eureka组件在k8s中部署Gateway组件在k8s中部署前端服务在k8s中部署订单服务在k8s中部署产品服务在k8s中部署库存服务第十七章 微服务的扩容和缩容第十八章 微服务的全链路监控什么是全链路监控?为什么要进行全链路监控?全链路监控能解决哪些问题?常见的全链路监控工具:zipkin、skywalking、pinpoint全链路监控工具对比分析第十九章 部署pinpoint服务部署pinpoint部署pinpoint agent在k8s中重新部署带pinpoint agent的产品服务在k8s中重新部署带pinpoint agent的订单服务在k8s中重新部署带pinpoint agent的库存服务在k8s中重新部署带pinpoint agent的前端服务在k8s中重新部署带pinpoint agent的网关和eureka服务Pinpoint UI界面使用第二十章 基于Jenkins+k8s+harbor等构建企业级DevOps平台第二十一章 基于Promethues+Alert+Grafana搭建企业级监控系统第二十二章 部署智能化日志收集系统EFK 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值