springcloud学习笔记一
初学微服务,首先要明晰微服务架构,微服务,是什么?
微服务:套用微服务的提出者马丁·夫勒的论文定义:
业界大牛 马丁.福勒(Martin Fowler )这样描述微服务:
论文网址:https://martinfowler.com/articles/microservices.html#MicroservicesAndSoa
中文版翻译网址:http://blog.cuicc.com/blog/2015/07/22/microservices/
微服务架构:
简单来说,微服务架构风格[1]是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源RESTful API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。
微服务:
强调的是服务的大小,是具体解决某个问题的具体应用。
优点:
每个服务足够内聚,足够小,代码容易理解这样聚焦一个指定的业务或者业务要求
开发简单,开发效率足够高,一个服务可能就是专一的干一件事
微服务能够被小团体单独开发,这个小团体是2-5的开发人员
微服务是松耦合的,有功能意义的服务,无论在开发夹断还是再部署阶段都是独立的
微服务能狗使用单独的语言开发
易于第三方集成,微服务允许容易且灵活的方式自动部署,通过持续集成工具,如Jenkins,Hudson,banboo
微服务易于被开发人员理解,修改和维护,这样小团体能够关注自己的工作成果。无需通过合作体现价值
微服务允许你融合最新的技术
微服务只是业务逻辑的代码,不会和Html,CSS或其他页面组件混合
缺点:
开发人员要处理分布式系统的复杂性
多服务运维难度增加,随着服务的增加,运维的难度也在增加
系统依赖部署
服务i间通信成本
数据一致性
。。。。
前言
Spring Cloud 为构建分布式系统和微服务提供了一些通用的工具,例如:
配置中心
服务注册与发现
熔断器
路由
代理
控制总线
一次性令牌
全局锁
leader选举
分布式 会话
集群状态等。
目前国内有很多公司还是使用dubbo做服务分解,但dubbo只提供了服务注册发现功能,要建立分布式系统还要自己找对应工具进行组合,当然这样定制性、灵活性高,但有些技术要摸着走,而且阿里已经停止了对dubbo的更新(2017重新启动了)。
如果采用Spring Cloud技术栈,Spring Cloud提供了分布式系统和微服务中所需要的约大多数公共模块和功能,
Spring Cloud 下各项目都是基于 Spring Boot 的,所有要想用Spring Cloud做微服务开发,最好先掌握 Spring Boot。
下表是dubbox与Spring Cloud技术栈对比:
功能 | Dubbox | Spring Cloud |
---|---|---|
服务注册中心 | Zookeeper | Spring Cloud Netflix Eureka |
服务调用方式 | RPC/REST API | REST API |
服务网关 | 无 | Spring Cloud Netflix Zuul |
服务网关 | 无 | Spring Cloud Netflix Zuul |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
打个不恰当的比喻:
使用Dubbo构建的微服务架构就像组装电脑,各环节我们的选择自由度很高,但是最终结果很有可能因为一条内存质量不行就点不亮了,总是让人不怎么放心,但是如果你是一名高手,那这些都不是问题;而Spring Cloud就像品牌机,在Spring Source的整合下,做了大量的兼容性测试,保证了机器拥有更高的稳定性,但是如果要在使用非原装组件外的东西,就需要对其基础有足够的了解。
下面是对springcloud工具的各种实战:
Eureka 服务注册与发现:
eureka注册中心:
pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.atguigu.springcloud</groupId><artifactId>microservicecloud</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>microservicecloud-eureka-7001</artifactId><dependencies><!--eureka-server服务端 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId></dependency><!-- 修改后立即生效,热部署 --><dependency><groupId>org.springframework</groupId><artifactId>springloaded</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies></project>
配置文件:(供参考,其中有些配置需要按照自己的需求修改)
erver: port: 7001eureka: instance:hostname: eureka7001.com #eureka服务端的实例名称client: register-with-eureka: false #false表示不向注册中心注册自己。fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务service-url: #单机 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #集群配置,为其他的服务注册中心地址
spring boot启动类:
采用注解的方式加载某些组件:
@SpringBootApplication
@EnableEurekaServer
public class Applicaion_server_7001 {public static void main(String args[]){SpringApplication.run(Applicaion_server_7001.class,args);}
}
这样启动了版可以通过:localhost:7001看看服务中心
Eureka客户端:(服务注册)
pom:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.atguigu.springcloud</groupId><artifactId>microservicecloud</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>microservicecloud-provider-dept-8001</artifactId><dependencies><!-- 引入自己定义的api通用包,可以使用Dept部门Entity --><dependency><groupId>com.atguigu.springcloud</groupId><artifactId>microservicecloud-api</artifactId><version>${project.version}</version></dependency><!-- actuator监控信息完善 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- 将微服务provider侧注册进eureka --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- 修改后立即生效,热部署 --><dependency><groupId>org.springframework</groupId><artifactId>springloaded</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies>
</project>
配置文件:
erver:port: 8001mybatis:config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路径type-aliases-package: com.atguigu.springcloud.entities # 所有Entity别名类所在包mapper-locations:- classpath:mybatis/mapper/**/*.xml # mapper映射文件spring:application:name: microservicecloud-dept datasource:type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动包url: jdbc:mysql://localhost:3306/cloudDB01 # 数据库名称username: rootpassword: pps123dbcp2:min-idle: 5 # 数据库连接池的最小维持连接数initial-size: 5 # 初始化连接数max-total: 5 # 最大连接数max-wait-millis: 200 # 等待连接获取的最大超时时间eureka:client:service-url:defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #服务注册中心地址instance:instance-id: microservicecloud-dept8001 #设置服务注册的名称prefer-ip-address: true #设置超链接可以显示IP
info:app.name: ppscompany: ppsbuild.artifactId: $project.artifactId$build.version: $project.version$
@SpringBootApplication
@EnableEurekaClient //本服务启动后会自动注册进eureka服务中
@EnableDiscoveryClient //服务发现
public class DeptProvider8001_App {public static void main(String... args){SpringApplication.run(DeptProvider8001_App.class, args);}}
当服务注册成功后可以再注册中心看到具体注册的服务名
Ribbon简介
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。
在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。展示了Ribbon与Eureka配合使用时的架构。
未完待续。。。
springcloud学习笔记一相关推荐
- SpringCloud学习笔记(1)- Spring Cloud Alibaba
文章目录 SpringCloud学习笔记(1)- Spring Cloud Alibaba 服务治理 Nacos 服务注册 Nacos 服务发现与调用 Ribbon 负载均衡 Sentinel 服务限 ...
- SpringCloud学习笔记(1)- Spring Cloud Netflix
文章目录 SpringCloud学习笔记(1)- Spring Cloud Netflix 单体应用存在的问题 Spring Cloud Eureka Eureka Server代码实现 Eureka ...
- Spring-Cloud 学习笔记-(4)负载均衡器Ribbon
目录 Spring-Cloud 学习笔记-(4)负载均衡器Ribbon 1.前言 2.什么是负载均衡 2.1.问题分析 2.2.什么是Ribbon 3.快速入门 3.1.实现方式一 3.1.1.修改代 ...
- SpringCloud学习笔记(6)----Spring Cloud Netflix之负载均衡-Ribbon的使用
1. 什么是负载均衡? 负载均衡,就是分发请求流量到不同的服务器. 负载均衡一般分为两种 1. 服务器端负载均衡(nginx) 2. 客户端负载均衡(Ribbon) 2. 服务提供者(spring-c ...
- SpringCloud 学习笔记
SpringCloud 学习笔记 最开始新建一个新的maven项目,什么都不选,直接写名字就好,这里是 springloud 新建后,把 src 目录删除,在pom.xml文件导入依赖 <!-- ...
- 分布式系统服务注册与发现原理 SpringCloud 学习笔记
分布式系统服务注册与发现原理 & SpringCloud 学习笔记 分布式系统服务注册与发现原理 引入服务注册与发现组件的原因 单体架构 应用与数据分离 集群部署 微服务架构 架构演进总结 服 ...
- springcloud学习笔记---环境搭建--Linux下jdk安装
springcloud学习笔记-环境搭建–Linux下jdk安装 1.官网下载jdk1.11 链接: https://pan.baidu.com/s/1vZ4PoJAnwczkRICfCNKHAA 提 ...
- SpringCloud 学习笔记(2 / 3)
Spring Cloud 学习笔记(1 / 3) Spring Cloud 学习笔记(3 / 3) 文章目录 56\_Hystrix之全局服务降级DefaultProperties 57\_Hystr ...
- SpringCloud 学习笔记(3 / 3)
Spring Cloud 学习笔记(1 / 3) Spring Cloud 学习笔记(2 / 3) 文章目录 108\_Nacos之Linux版本安装 109\_Nacos集群配置(上) 110\_N ...
- SpringCloud 学习笔记(1 / 3)
Spring Cloud 学习笔记(2 / 3) Spring Cloud 学习笔记(3 / 3) 文章目录 01\_前言闲聊和课程说明 02\_零基础微服务架构理论入门 03\_第二季Boot和Cl ...
最新文章
- 剑指offer: 面试题40. 最小的k个数
- centos中执行apt-get命令提示apt-get command not found
- 如何编写无法维护的代码_编写可维护的前端代码
- 2.变量/字符串/if/while/数据类型
- SQL OVER用法
- 【04】AngularJS 表达式
- 7-9 输出大写英文字母 (15 分)
- 零基础机器学习(2)-你的第一个Python程序
- php 子类重新定义父类的变量_PHP设计模式 ——(抽象工厂模式)
- 【jQuery笔记Part4】03-事件详解
- mysql explain ref列_mysql explain中的列
- xp系统qq安装不上网络连接服务器,windows xp系统不能登录qq的解决方法
- VLAN及VLAN间路由
- python,matlab 读取NIFTI(.nii)格式图像、FSL安装
- SQL注入常用WAF绕过姿势
- 免费的人脸识别SDK(基于 Java 实现的人脸识别功能)
- EAI_BOT越登智能车
- c语言6行6列元素奇数的个数,C语言任意输入n个整数,分别统计奇数的和.奇数的个数.偶数的和.偶数的个数....
- 安卓讲课笔记1.4 安卓平台架构
- 单片机 P0口、P1口 寄存器和引脚的不同
热门文章
- 使用jemeter做接口测试
- 一个班,排,连,营,有多少人
- 2年后,还是放弃了programmer dvorak
- c语言程序设计谢丽霞课后答案,课程建设计划.doc
- 春节档7天33亿 淘票票全力助推春节档
- python 进度条 tqdm_Python进度条tqdm,你值得拥有
- Qt编写自定义控件44-天气仪表盘
- MFC第1天--跟踪代码要抓重点--切记切记--侯杰复习C++ 2对象切割与虚函数P68
- cad线性标注命令_CAD线性标注快捷键DLI,CAD标注快捷键大全
- 为什么局域网共享的文件不能复制,提示要以计算机管理员的身,局域网内文件不能复制...