2021升级版微服务教程—为什么会有微服务?什么是SpringCloud?
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」

教程全目录「含视频」:https://gitee.com/bingqilinpeishenme/Java-Wiki
微服务基本概念
架构的演变
为什么会有微服务?
假如回到10年前,一天张三入职了电商企业—并夕夕商城。
公司初创,人比较少,公司网站的用户也很少,公司只有一个工程师
项目架构比较简单
1.单体架构

没有想到的是,公司业务越来越好,网站用户量越来越大,单体架构的问题就暴露出来了,随着访问量增加,项目经常宕机
问题:架构简单 难以抗住高并发
于是,招人。对并夕夕商城进行升级优化。
分析升级的方向:
数据库 和 应用代码要放在不同的服务器上 增加应用负载能力【集群】
于是增加负载均衡。
2.负载均衡
分布式:一个系统 通过多台服务器 协同完成系统功能
集群:同一个系统放在了多台服务器上 且每个服务器上内容相同 复制了多份

负载均衡的问题
成本 Session
增加负载均衡之后,应用服务器不再是系统的瓶颈了,可以灵活的随着访问量增大的同时增加应用服务器集群的数量。
随着业务量不断增加,数据量也在不断增加,数据库出现性能瓶颈。
招人
在多位同事努力之下,对项目进行进一步的优化—读写分离。
3.读写分离

上述的架构看上去非常的完美,但是,随着并夕夕商城业务量的不断增加,新的问题暴露了出来。
问题:
商品搜索使用数据库模糊查询不行,不精确,慢 【全文检索】
图书查询 模糊匹配
不同模块的数据访问的频率是不一样的(热度不同),首页数据访问量比较大,订单数据的访问量相比之下要小很多。所有的数据都去数据库取,影响首页访问速度 【缓存】
招人
4.全文检索缓存
所有的同事开始一起优化项目,商品搜索使用全文检索技术ES完成,并且引入缓存(Redis集群),于是架构变成了这个亚子。

随着并夕夕商城不断壮大,公司迎来了风投,风投两个亿,于是商城发展的更快了,新的问题出现了。
问题:
不同业务模块之间的耦合太高,一个模块出问题整个服务器宕机
维护困难,假如应用服务器集群200台,那么项目上线意味着需要部署200台服务器
譬如:修改了订单的代码 订单模块要重新部署 意味着所有的服务器都需要重新部署一遍
冗余,有些模块没有必要部署在所有的服务器上
招人:100个人的团队,对项目进行新的优化和升级—服务化(SOA),根据业务模块的不同,拆分为不同的应用。
以上就是分布式的架构
5.服务化
于是公司进入轰轰烈烈的服务化时代,但是有几个问题需要被解决,如下

每一个模块都是一个独立的项目 都可以独立启动 这样的做法 就叫做服务化 模块变成项目之后我们称之为服务 首页模块---》首页服务
这就是服务化 这就是微服务,微服务是:特殊的分布式架构【服务化】
首页的访问量比较大 就可以部署五个 订单的访问量小 就可以只部署一个

问题:
服务之间怎么调用?例如:订单服务需要调用商品服务的数据,怎么调用?
怎么负载均衡?服务之间负载均衡?app访问后台怎么负载均衡?
服务怎么被管理?例如:商品服务宕机了,怎么即时的通知订单服务?如果没有通知订单服务,订单服务发的请求都会阻塞,造成订单宕机,引发链式故障,整个项目崩溃
服务之间的异常处理?
......
以上每一个问题都需要一个新的技术解决,而引入的新技术就是微服务技术,SpringCloud(一套技术)
如何解决这几个问题 又需要用到一些新的技术,这些技术就是所谓的微服务的技术(SpringCloud)
基于上面的问题,整个并夕夕商城团队疯狂的努力,找到了一些技术(SpringCloud),分别解决了上述问题,架构图如下:

到此为止,并夕夕商城成为了一个微服务的架构。
服务化 微服务主要的内容就是按照业务模块拆分不同的应用服务,并且解决拆分之后遇到的问题
什么是微服务
the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.【官方文档】
每个服务可独立运行在自己的进程里 每个服务独立部署启动 一系列独立运行的微服务共同构建起整个系统 每个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如订单管理,用户管理【按照服务拆分】 微服务之间通过一些轻量的通信机制进行通信,例如Restful API(HTTP)进行调用【订单服务如何调用商品服务】 可以使用不同的编程语言与数据存储技术开发
官网链接:https://www.martinfowler.com/articles/microservices.html
什么是SpringCloud
SpringCloud=分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶。Spring Cloud是一个含概多个子项目的开发工具集,集合了众多的开源框架,他利用了Spring Boot开发的便利性实现了很多功能,如服务注册,服务发现,负载均衡等。
服务管理 需要一个技术
服务调用 需要一个技术
负载均衡 需要一个技术
.......
这些技术怎么来?
自己找,技术之间的整合没有一定的技术实力搞不定 SpringCloud,SpringCloud官方找了一套解决微服务问题的技术,做了封装和整合,让用户可以直接使用,不需要关心技术整合的问题 开发微服务相当于买一台电脑
自己组装,自己找微服务的技术相当于自己组装电脑 买品牌机,使用SpringCloud相当于直接买了一个联想的电脑,CPU 显卡等等都帮你处理好了
SpringBoot 和 SpringCloud有什么关系
使用负载均衡需要很多的配置,写配置
自己写配置 SpringBoot自动配置
SpringCloud 使用了 SpringBoot 作为底层,通过SpringBoot的自动配置简化分布式的开发
如果你觉得这篇内容对你挺有有帮助的话
点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程。
觉得不错的话,也可以关注 编程鹿 的个人公众号看更多文章和讲解视频(感谢大家的鼓励与支持)

2021升级版微服务教程—为什么会有微服务?什么是SpringCloud?的更多相关文章
- 2021升级版微服务教程3—Eureka完全使用指南
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 默认文件1610014380163 教程全目录「含视 ...
- 2021升级版微服务教程4—Nacos 服务注册和发现
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 默认文件1610014380163 教程全目录「含视 ...
- 2021升级版微服务教程5—通过IDEA运行多个项目实例「模拟集群」
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...
- 2021升级版微服务教程6—Ribbon使用+原理+整合Nacos权重+实战优化 一篇搞定
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...
- 2021升级版微服务教程7-OpenFeign实战开发和参数调优
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_3-01 什么是微服务的注册中心
笔记 第三章 SpringCloud核心组件注册中心 1.什么是微服务的注册中心 简介:讲解什么是注册中心,常用的注册中心有哪些 (画图) 理解注册中心:服务 ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-04 高级篇幅之服务间调用之负载均衡策略调整实战
笔记 4.高级篇幅之服务间调用之负载均衡策略调整实战 简介:实战调整默认负载均衡策略实战 自定义负载均衡策略:http://cloud.spring.io/spring-cloud-stati ...
- spring cloud微服务快速教程之(二)服务注册与发现 eureka
0.为什么需要eureka 当我们从当体系统拆分为多个独立服务项目之后,如果aaa.com/uer.aaa.com/order;:相互之间调用,如果只是一个服务一个实例,那还可以直接通过固定地址(如h ...
- webAppbuilder微件使用教程3 地理处理微件
webAppbuilder微件使用教程 --微件使用进阶地理处理微件 By 李远祥 地理处理是GIS解决问题的关键部分,也是其灵魂所在.由于WebAppBuilder框架的限制,用户如果想要非常灵活的 ...
随机推荐
- 转:python提取浏览器Cookie
在用浏览器进行网页访问时,会向网页所在的服务器发送http协议的GET或者POST等请求,在请求中除了指定所请求的方法以及URI之外,后面还跟随着一段Request Header.Request He ...
- Hive数据导入HBase引起数据膨胀引发的思考
最近朋友公司在做一些数据的迁移,主要是将一些Hive处理之后的热数据导入到HBase中,但是遇到了一个很奇怪的问题:同样的数据到了HBase中,所占空间竟增长了好几倍!详谈中,笔者建议朋友至少从几点原 ...
- pytorch 实践中遇到的问题
1. SGD训练时,初始化学习率为0.05时,loss出现了 nan (百度: pytorch loss nan, 但是目前暂未看懂解释,大概是loss出现了inf,学习率偏大?)
- 笨方法学python笔记
编程是什么 编程就是通过输出一种语言给计算机"听",命令其去执行相应的操作. 我们称我们给计算机下达的命令称为指令.一般说程序就是有多个指令构成的. 计算机需要使用非常多的电路来实 ...
- git学习——git命令之创建版本库和版本退回
原文来至 一.创建版本库 版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追 ...
- JavaScript:记录一些字符串和数组常用的方法
字符串: 字符串的方法:注意:都不会改变原来的字符串,返回值为新的字符串.如果(1,2),一般是包含小标1,不包含下标2 str.charAt(i): 取str的第i+1个字符,类似数组的arr[i] ...
- Echarts入门教程精简实用系列
引语:echarts.js是百度团队推出的一款用于图表可视化的插件,用于以图表的形式展现数据,功能强大,上手简单 1.从官方网站中下载所需的echarts.js文件,该文件因功能广泛,包体较大,可自行 ...
- K8S安装Kubesphere
准备工作 安装Helm curl -L https://git.io/get_helm.sh | bash 创建账户 cat > heml-rbac.yaml << EOF apiV ...
- ssh 免密码登陆设置不成功
记一次centos6设置免密码登陆设置不成功的解决.自己挖的坑自己填. ssh 免密码登陆设置( 正常情况下是这样的,设置成功后登陆主机是不需要密码的) [root@master .ssh]# ssh ...
- 面试 11-02.ES6
11-02.ES6 #Class和普通构造函数有何区别 我们经常会用ES6中的Class来代替JS中的构造函数做开发. Class 在语法上更加贴合面向对象的写法 Class 实现继承更加易读.易理解 ...