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

微服务课程在龙果上,在本课程升级之前,就有 2 个课程了

  • dubbo 的课程

    通用架构给搭建了起来,dubbo 去做微服务 + activemq + redis + mysql + 持续集成,把一个比较通用的完整的微服务的技术架构讲解了出来

  • spring cloud 课程:那个课程会主要讲解 spring cloud 的技术

本课程升级,也会讲解到这些东西:微服务实战、spring cloud、还有各种 DevOps、docker 容器、持续交付流水线,把这些结合在这个真实的电商详情页系统项目实战中去做微服务架构

本课程升级重点:

  1. 微服务的项目实战:spring cloud 微服务的项目实战
  2. 弥补第一个版本课程的遗憾,要将一个完整的电商详情页系统架构搭建出来、跑通、从前到后全部搞定;

本次的架构因为相对来说比较通用,所以可以套用在一些场景上做二次开发

# 传统架构的问题

  • 单块应用:耦合严重
  • 开发速度慢:响应新需求慢
  • 不易于扩展和重构
  • 不易于技术升级

一大段话简而言之:传统的一个 java web 项目中的内容太多了,各种业务模块都在一个大的工程中, 从开发到发布过程中,都需要考虑多人协作开发的问题,如:回归测试、其他模块依赖环境、代码合并冲突, 等问题。

# 微服务架构的几大特征

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

# 足够单一的职责与功能

用最简单的话来说,比如之前可能就一个单块应用,几十个兄弟在一个代码上开发,商品模块、价格模块、库存模块、促销模块、o2o 模块,全部放一起了,可能会有一部分公共的代码,内容多,那么改动的几率就大

那么做成微服务:把几十万行的单块应用拆分出多个服务,每个服务对应一个工程,每个工程就几百行到几千行代码,每个服务职责很单一,负责一块事情,如商品数据的管理做成一个商品服务; 对于价格这种复杂策略,单拉一个价格服务来管理复杂的价格变更的业务; 对于库存这种复杂的服务,也可以单拉一个管理复杂的库存变更的业务

# 非常的微型

几百行~几千行代码

# 面向服务的思想

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

# 独立开发

工程上完全独立了, 那就可以给不同的服务配置不同的团队,或者工程师去开发。

比如商品服务是 3 个哥儿们在维护,价格服务是 1 个应届生在做,库存服务是 2 个哥儿们在做, 不同的人就做不同的工程,维护自己不同的代码

由于独立开发了,那么对于技术的选型就多样化了:spring mvc + spring + mybatis、php、go、c++, 对于存储 mysql、mongodb、memcached、redis、hbase,每个服务都是自己的存储,单独对接自己的前端工程师,独立的部署在自己的机器上

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

# 微服务的强大作用

  • 迭代速度

    你只要管好自己的服务就行了,跟别人没关系,随便你这么玩儿。 修改代码、测试、部署都是你自己的事情,不用考虑其他人,没有任何耦合

  • 复用性

    拆分成一个一个服务之后,就不需要写任何重复的代码了,有一个功能别人做好了,暴露了接口出来,直接调用不就 ok 了么

  • 扩展性

    独立、扩展、升级版本、重构、更换技术

  • 完全克服了传统单块应用的缺点

# 微服务的缺点

  • 服务太多,难以管理

  • 微服务 = 分布式系统

    你本来是一个系统,现在拆分成多块,部署在不同的服务器上,一个请求要经过不同的服务器上不同的代码逻辑处理,才能完成,这不就是分布式系统么

  • 分布式一致性、分布式事务、故障+容错

# 微服务的技术栈

主要分为 4 块:

  1. 领域驱动设计:微服务建模
  2. Spring Cloud:基础技术架构
  3. DevOps:自动化+持续集成+持续交付+自动化流水线,将迭代速度提升到极致
  4. Docker:容器管理大量服务

# 领域驱动设计:微服务建模

TIP

本课程内容不包括这个知识

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

微服务的建模,模型怎么设计,领域驱动的设计思想:可以去分析系统,完成建模的设计

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

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

# Spring Cloud:基础技术架构

  • 各个服务之间怎么知道对方在哪里:服务的注册和发现
  • 服务之间的调用怎么处理:rpc、负载均衡
  • 服务故障的容错
  • 服务调用链条的追踪怎么做
  • 多个服务依赖的统一的配置如何管理

# DevOps

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

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

# Docker

微服务之后,一个大型的系统可以涉及到几十个,甚至是上百个服务, 那么难点就来了:怎么部署?机器怎么管理?怎么运维?

使用 docker 可以天然的来解决这些问题

# 讲解重点

整个微服务技术架构,全部涉及到(可能不会很深入的讲解),全部结合我们的实际的项目,完成整套微服务架构的项目实战