谢幕整理SpringCloud系列01-微服务的开始
我打算把之前在有道云的笔记整理一下,加深自己的印象,同步到博客园。所以有了这个系列!
springcloud练手系列
- 是springcloud的基本使用方法,和demo加基本的原理
- sprongcloud版本Edgware.SR4
- springboot 版本1.5.16.RELEASE
- 仅仅记录一下,自己学习的demo
- git 地址 https://github.com/SamuelTao/springcloud-xiemu-demo.git
为什么要使用微服务
传统架构的问题
- (1)单块应用,耦合严重
- (2)开发速度慢,新需求
- (3)不易于扩展和重构
- (4)不易于技术升级
微服务架构的几大特征:
- (1)足够单一的职责与功能
- (2)非常的微型 :几百行~几千行代码
- (3)面向服务的思想
- (4)独立开发:团队,技术选型,前后端分离,存储分离,独立部署
- (5)自动化开发流程:编码,自动化测试,持续集成,自动化部署
微服务的强大作用:
- (1)迭代速度:你只要管好自己的服务就行了,跟别人没关系,随便你这么玩儿,修改代码,测试,部署,都是你自己的事情,不用考虑其他人,没有任何耦合
- (2)复用性:拆分成一个一个服务之后,就不需要写任何重复的代码了,有一个功能别人做好了,暴露了接口出来,直接调用不就ok了么
- (3)扩展性:独立,扩展,升级版本,重构,更换技术
- (4)完全克服了传统单块应用的缺点
微服务的缺点
- (1)服务太多,难以管理
- (2)微服务 = 分布式系统,你本来是一个系统,现在拆分成多块,部署在不同的服务器上,一个请求要经过不同的服务器上不同的代码逻辑处理,才能完成,这不就是分布式系统
- (3)分布式一致性,分布式事务,故障+容错
微服务的技术栈
- (1)领域驱动设计:微服务建模
你的任何业务系统都有自己独特的复杂的业务,但是这个时候就是有一个问题,怎么拆分服务?拆成哪些服务?拆成多大?每个服务负责哪些功能?
- 微服务的建模,模型怎么设计
领域驱动的设计思想,可以去分析系统,完成建模的设计
至少如果你真的很了解你的业务的话,你大概也知道应该如何去拆分这个服务
(2)Spring Cloud:基础技术架构
-
各个服务之间怎么知道对方在哪里 -> 服务的注册和发现
-
服务之间的调用怎么处理,rpc,负载均衡
-
服务故障的容错
-
服务调用链条的追踪怎么做
-
多个服务依赖的统一的配置如何管理
(3)DevOps:自动化+持续集成+持续交付+自动化流水线,将迭代速度提升到极致
如果要将微服务的开发效率提升到最高,DevOps,全流程标准化,自动化,大幅度提升你的开发效率
- (4)Docker:容器管理大量服务
微服务,一个大型的系统,可以涉及到几十个,甚至是上百个服务,比较坑,怎么部署,机器怎么管理,怎么运维
1、Spring Boot的特点
- (1)快速开发spring应用的框架
spring mvc+spring+mybatis,首先配置一大堆xml配置文件,其次部署和安装tomcat,jetty等容器,跟java web打交道
跟servlet,listener,filter,打交道
手工部署到tomcat或者jetty等容器中,发布一个web应用
spring boot,简单来说,就是看中了这种java web应用繁琐而且重复的开发流程,采用了spring之上封装的一套框架,spring boot,简化整个这个流程
尽可能提升我们的开发效率,让我们专注于自己的业务逻辑即可
- (2)内嵌tomcat和jetty容器,不需要单独安装容器,jar包直接发布一个web应用
- (3)简化maven配置,parent这种方式,一站式引入需要的各种依赖
- (4)基于注解的零配置思想
- (5)和各种流行框架,spring web mvc,mybatis,spring cloud无缝整合
2、Spring Boot和微服务
-
(1)spring boot不是微服务技术
-
(2)spring boot只是一个用于加速开发spring应用的基础框架,简化工作,开发单块应用很适合
-
(3)如果要直接基于spring boot做微服务,相当于需要自己开发很多微服务的基础设施,比如基于zookeeper来实现服务注册和发现
-
(4)spring cloud才是微服务技术