springcloud

第148节:商品详情页动态渲染系统:微服务与Spring Cloud基本介绍


传统架构的问题

(1)单块应用,耦合严重
(2)开发速度慢,新需求
(3)不易于扩展和重构
(4)不易于技术升级

一个java web工程,多个工程,maven整合起来,spring mvc -> spring -> mybatis

一个工程,可能就包含几十万行代码

各种业务模块,全部耦合在一个大的工程中,公用了很多的基础代码

开发速度慢,开发流程,代码管理工具,签出最新的代码副本到本地,运行一下,保证可以运行

做自己的开发,你的代码跟其他人的代码都耦合在了一起,然后可能还需要涉及到跟其他的代码要做持续集成,然后放在一起统一测试,统一回归,然后统一部署和发布

每次部署都非常重,因为你要考虑到别人的代码,依赖的一些基础环境是否ok,打包和部署,都特别慢

很可能不小心别人的代码bug,导致你的系统部署失败,回滚,你还要通知别人,跟别人一起去调试和找到它的bug在哪儿

多人写作开发一个工程,经常涉及到各种代码的冲突,解决冲突,搞出来一些bug,重新运行多大几千个,上万个单元测试,重新经历后续的所有测试环境

软件迭代开发的速度很慢,可能迭代一个小功能,就要一周时间,一个模块,半个月的时间


微服务架构的几大特征:

(1)足够单一的职责与功能
(2)非常的微型
(3)面向服务的思想
(4)独立开发:团队,技术选型,前后端分离,存储分离,独立部署
(5)自动化开发流程:编码,自动化测试,持续集成,自动化部署

用最简单的话来说,比如之前,可能就一个单块应用,几十个兄弟在一个代码上开发,商品模块,价格模块,库存模块,促销模块,o2o模块,全部放一起了

微服务,把几十万行的单块应用,拆分出多个服务,每个服务对应一个工程,每个工程就几百行到几千行代码

每个服务,职责很单一,负责一块事情,商品数据的管理,商品服务; 价格服务,管理复杂的价格变更的业务; 库存服务,管理复杂的库存变更的业务

微型:几百行~几千行代码

面向服务的思想:每个服务暴露出来一堆接口,然后其他人都是依赖你的服务在开发

独立开发:工程上完全独立了, 那就可以给不同的服务配置不同的团队,或者工程师去开发。商品服务是3个哥儿们在维护,价格服务是1个应届生在做,库存服务是2个哥儿们在做

不同的人就做不同的工程,维护自己不同的代码,spring mvc + spring + mybatis,php,go,c++

技术选型:mysql,mongodb,memcached,redis,hbase

每个服务都是自己的存储,单独对接自己的前端工程师,独立的部署在自己的机器上

独立开发,跟其他人没关系


微服务的强大作用:

(1)迭代速度:你只要管好自己的服务就行了,跟别人没关系,随便你这么玩儿,修改代码,测试,部署,都是你自己的事情,不用考虑其他人,没有任何耦合
(2)复用性:拆分成一个一个服务之后,就不需要写任何重复的代码了,有一个功能别人做好了,暴露了接口出来,直接调用不就ok了么
(3)扩展性:独立,扩展,升级版本,重构,更换技术
(4)完全克服了传统单块应用的缺点


微服务的缺点

(1)服务太多,难以管理
(2)微服务 = 分布式系统,你本来是一个系统,现在拆分成多块,部署在不同的服务器上,一个请求要经过不同的服务器上不同的代码逻辑处理,才能完成,这不就是分布式系统
(3)分布式一致性,分布式事务,故障+容错


微服务的技术栈

(1)领域驱动设计:微服务建模

你的任何业务系统都有自己独特的复杂的业务,但是这个时候就是有一个问题,怎么拆分服务?拆成哪些服务?拆成多大?每个服务负责哪些功能?

微服务的建模,模型怎么设计

领域驱动的设计思想,可以去分析系统,完成建模的设计

这里不讲解了,一定是要拿超级复杂的业务来讲解,你才能听懂,业务采取的还是比较简单的,领域驱动

至少如果你真的很了解你的业务的话,你大概也知道应该如何去拆分这个服务

(2)Spring Cloud:基础技术架构

各个服务之间怎么知道对方在哪里 -> 服务的注册和发现

服务之间的调用怎么处理,rpc,负载均衡

服务故障的容错

服务调用链条的追踪怎么做

多个服务依赖的统一的配置如何管理

(3)DevOps:自动化+持续集成+持续交付+自动化流水线,将迭代速度提升到极致

如果要将微服务的开发效率提升到最高,DevOps,全流程标准化,自动化,大幅度提升你的开发效率

(4)Docker:容器管理大量服务

微服务,一个大型的系统,可以涉及到几十个,甚至是上百个服务,比较坑,怎么部署,机器怎么管理,怎么运维


整个微服务技术架构,全部涉及到,全部结合我们的实际的项目,完成整套微服务架构的项目实战

第149节:商品详情页动态渲染系统:Spring Boot与微服务的关系以及开发回顾

第一版的内容里,spring boot也用了,但是几乎没什么介绍,主要是什么原因呢?

龙果是很多课都之前都有了,spring boot专门有了一套课程去见解的,所以我当时就没多说什么

spring cloud,很多人之前都说基于spring boot的微服务

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才是微服务技术

3、Spring Boot的入门开发

参照之前的库存服务的spring boot,整合搭建一个spring boot