初学微服务,首先要明晰微服务架构,微服务,是什么?

微服务:套用微服务的提出者马丁·夫勒的论文定义:

业界大牛 马丁.福勒(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学习笔记一相关推荐

  1. SpringCloud学习笔记(1)- Spring Cloud Alibaba

    文章目录 SpringCloud学习笔记(1)- Spring Cloud Alibaba 服务治理 Nacos 服务注册 Nacos 服务发现与调用 Ribbon 负载均衡 Sentinel 服务限 ...

  2. SpringCloud学习笔记(1)- Spring Cloud Netflix

    文章目录 SpringCloud学习笔记(1)- Spring Cloud Netflix 单体应用存在的问题 Spring Cloud Eureka Eureka Server代码实现 Eureka ...

  3. Spring-Cloud 学习笔记-(4)负载均衡器Ribbon

    目录 Spring-Cloud 学习笔记-(4)负载均衡器Ribbon 1.前言 2.什么是负载均衡 2.1.问题分析 2.2.什么是Ribbon 3.快速入门 3.1.实现方式一 3.1.1.修改代 ...

  4. SpringCloud学习笔记(6)----Spring Cloud Netflix之负载均衡-Ribbon的使用

    1. 什么是负载均衡? 负载均衡,就是分发请求流量到不同的服务器. 负载均衡一般分为两种 1. 服务器端负载均衡(nginx) 2. 客户端负载均衡(Ribbon) 2. 服务提供者(spring-c ...

  5. SpringCloud 学习笔记

    SpringCloud 学习笔记 最开始新建一个新的maven项目,什么都不选,直接写名字就好,这里是 springloud 新建后,把 src 目录删除,在pom.xml文件导入依赖 <!-- ...

  6. 分布式系统服务注册与发现原理 SpringCloud 学习笔记

    分布式系统服务注册与发现原理 & SpringCloud 学习笔记 分布式系统服务注册与发现原理 引入服务注册与发现组件的原因 单体架构 应用与数据分离 集群部署 微服务架构 架构演进总结 服 ...

  7. springcloud学习笔记---环境搭建--Linux下jdk安装

    springcloud学习笔记-环境搭建–Linux下jdk安装 1.官网下载jdk1.11 链接: https://pan.baidu.com/s/1vZ4PoJAnwczkRICfCNKHAA 提 ...

  8. SpringCloud 学习笔记(2 / 3)

    Spring Cloud 学习笔记(1 / 3) Spring Cloud 学习笔记(3 / 3) 文章目录 56\_Hystrix之全局服务降级DefaultProperties 57\_Hystr ...

  9. SpringCloud 学习笔记(3 / 3)

    Spring Cloud 学习笔记(1 / 3) Spring Cloud 学习笔记(2 / 3) 文章目录 108\_Nacos之Linux版本安装 109\_Nacos集群配置(上) 110\_N ...

  10. SpringCloud 学习笔记(1 / 3)

    Spring Cloud 学习笔记(2 / 3) Spring Cloud 学习笔记(3 / 3) 文章目录 01\_前言闲聊和课程说明 02\_零基础微服务架构理论入门 03\_第二季Boot和Cl ...

最新文章

  1. 剑指offer: 面试题40. 最小的k个数
  2. centos中执行apt-get命令提示apt-get command not found
  3. 如何编写无法维护的代码_编写可维护的前端代码
  4. 2.变量/字符串/if/while/数据类型
  5. SQL OVER用法
  6. 【04】AngularJS 表达式
  7. 7-9 输出大写英文字母 (15 分)
  8. 零基础机器学习(2)-你的第一个Python程序
  9. php 子类重新定义父类的变量_PHP设计模式 ——(抽象工厂模式)
  10. 【jQuery笔记Part4】03-事件详解
  11. mysql explain ref列_mysql explain中的列
  12. xp系统qq安装不上网络连接服务器,windows xp系统不能登录qq的解决方法
  13. VLAN及VLAN间路由
  14. python,matlab 读取NIFTI(.nii)格式图像、FSL安装
  15. SQL注入常用WAF绕过姿势
  16. 免费的人脸识别SDK(基于 Java 实现的人脸识别功能)
  17. EAI_BOT越登智能车
  18. c语言6行6列元素奇数的个数,C语言任意输入n个整数,分别统计奇数的和.奇数的个数.偶数的和.偶数的个数....
  19. 安卓讲课笔记1.4 安卓平台架构
  20. 单片机 P0口、P1口 寄存器和引脚的不同

热门文章

  1. 使用jemeter做接口测试
  2. 一个班,排,连,营,有多少人
  3. 2年后,还是放弃了programmer dvorak
  4. c语言程序设计谢丽霞课后答案,课程建设计划.doc
  5. 春节档7天33亿 淘票票全力助推春节档
  6. python 进度条 tqdm_Python进度条tqdm,你值得拥有
  7. Qt编写自定义控件44-天气仪表盘
  8. MFC第1天--跟踪代码要抓重点--切记切记--侯杰复习C++ 2对象切割与虚函数P68
  9. cad线性标注命令_CAD线性标注快捷键DLI,CAD标注快捷键大全
  10. 为什么局域网共享的文件不能复制,提示要以计算机管理员的身,局域网内文件不能复制...