这里写自定义目录标题
微服务化的核心:将传统的一站式应用,根据业务拆分成一个一个的服务,彻底的去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事情,,从技术角度看就是一种小而独立的处理过程,类似进程的概念,能够自行独立启动和销毁,拥有自己的数据库。
1、微服务 和 微服务架构
微服务:强调的是服务的大小。
微服务架构:将单一的应用程序划分成一组小的服务
微服务优缺点
优点:
- 单一职责原则
- 每个服务足够内聚,足够小,代码容易理解
- 开发简单,开发效率提高。一个服务可能就是专一干一件事;
- 能够被小图案都单独开发,2-5人
- 松耦合
- 可以使用不同 的语言
- 易于第三方集成
- 微服务只是业务逻辑代码,不会和HTML CSS 或其他界面混合
- 每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库
缺点:
- 开发人员要处理分布式系统的复杂性
- 多服务运维难度,随着服务的增加,运维的压力也增大
- 系统部署依赖
- 数据一致性
- 系统集成测试
- 性能监控
微服务技术栈
为什么选择SpringCloub作为微服务架构
- 依据
- 整体解决方案和框架的成熟度
- 社区热度
- 可维护性
- 学习曲线
- 当前各大IT公司的微服务架构有哪些
- 阿里:dubbo+HFS
- 京东:JSF(京师傅)
- 新浪:Mostan
- 当当网:Dubbox
SpringCloub 是什么?
是分布式微服务架构下的一站式解决方案。是各个微服务架构落地技术的集合,俗称微服务全家桶
微服务架构的核心问题:
- 问题1:这么多服务器,客户端该怎么访问?
- 问题2:这么多服务器,服务间如何通信?(服务器之间)rpc\doubbo
- 问题3:这么多服务器,如何治理?
- 问题4:服务器挂了怎么办?
因为上述问题,所以有了springcloub ,也就有了基于springcloub生态的一系列解决方案,比较好的有:
基于springcloub的解决方案:
spring cloub netflix :一站式解决方案
apache dubbo zookeeper:半自动,需要
SpringCloub Alibaba :最新的一站式解决方案
springcloub 是 生态 不是技术!这个生态,主要是来解决微服务架构的核心问题,也就有了一系列解决方案
解决方案
Spring Cloub NetFlix 一站式解决方案
解决问题1:这么多服务器,客户端该怎么访问?
客户端之间的通信就是用了api网关,,使用的是zuul组件,在代码中就两个注解
api网关:zuul组件
解决问题2:这么多服务器,服务间如何通信?
使用的是自己的通信Feign ,Feign是基于HttpClinet 也就是Http的通信 .不仅可以做通信,还可以做一些简单的负载均衡。Http的 通信方式是同步,阻塞的;doubbo是rpc通信:是异步、非阻塞的
解决问题3、4:
服务注册发现:Euraka
熔断机制:Hystrix
Apache Dubbo Zookeeper 半自动,需要整合别人的
半自动,没有api网关,所以需要找第三方组件,或者自己实现
Dubbo:是一个高性能的基于rpc的通信框架,比feign好很多,专业的事情交给专业的人干
服务注册发现 Zookeeper;
熔断机制:没有;借助Hystrix
dubbo这个方案并不完善,
他并不是想跟springcloub竞争,他只是想专一的做rpc通信框架。在rpc中确实很牛逼
Spring Cloub Alibaba 一站式解决方案!更简单
将Spring Cloub NetFlix更加简化。
之前Spring Cloub NetFlix停更了五年,就落后了,所以有了后来的Spring Cloub Alibaba
万变不离其宗:
- 网关API ;解决路由问题
- HTTP,RPC;解决服务通信问题
- 注册和发现;解决高可用问题
- 熔断机制;解决服务降级问题
基于这是个问题,开发出一套解决方案,并把他们运用到很多公司中,那么就可以成为一套新的解决方案
问什么会衍生出这些问题,就是网络不可靠
新概念:服务网格:Server Mesh istio
SpringCloub 和Dubbo的区别
最大的区别:SpringCloub抛弃了Dubbo的RPC通信,采用的是基于http的REST方式
REST比RPC更灵活 ,服务提供方和调用方的依赖只依赖一纸契约,不存在代码级别的强依赖
品牌机和组装机的区别:
SpringCloub能够和其他Spring项目完美融合
SpringCloub和SpringBoot关系
SpringBoot:专注单个个体微服务。专注于快速、方便开发单个个体微服务。可以独立使用
SpringCloud:关注全局的微服务协调治理框架,他将Spring Boot开发的一个个单体微服务整合并管理起来。为各个微服务之间提供:配置管理,服务发现,断路器,路由,微代理,事件总线,全局锁,决策竞选,分布式会话等等集成服务。依赖SpringBoot
扩展
Dubbo和SpringCloud 技术选型
1、分布式+服务治理Dubbo
目前成熟的熟练王架构:应用服务化拆分+消息中间件
架构图 (一个服务应该是什么样子?)
CDN:用于加速器;加速了网站的访问
LVS: 用于负债均衡:多个
Nginx:做负载均衡:多个
集群:提供服务;服务器:tomcat 、tomcat会跟文件打交道,所以有分布式文件系统xxx DFS
tomcat获取 注册中心
服务提供者去注册中心注册
消息中间件MQ: 队列、同步
缓存处理:redis
数据库横向分离 读
纵向分离是 写
GA:通用稳定版本
SNAPSHOT:快照版本
SpringCloub 是一个由众多独立子项目组成的大型综合项目,每个项目有不同的发行节奏,都维护着自己的发行版本号,SpringCloud 通过一个资源清单BOM(Bill of Materials) 来管理每个版本的子项目清单,为了避免与子项目的发布号混淆,所以没有采用版本号的方式,而是通过命名的方式。
版本名称的命名方式采用了伦敦地铁站的名称,同时根据字母表的顺序来对应版本时间顺序,Release版本:
Angel(天使),
Brixton(布里克斯顿),然后
Camden(卡姆登),
Dalston(多尔斯顿),
Edgware(埃奇韦尔),
Finchley(芬奇利),
Greewich(格林威治)
中文API文档:
https://www.springcloud.cc/
https://www.springcloud.cc/spring-cloud-dalston.html
SpringCloud中国社区:
http://springcloud.cn/