SpringCloud微服务基础
微服务架构--SpringCloud
网站架构模式 单点应用/分布式系统面向于服务架构(SOA) /微服务架构web项目三层架构1.控制层2.业务逻辑层3.数据访问层传统项目:代码全部在一个项目中,使用包名来区分com.controller--控制com.service--业务逻辑层com.dao--数据访问层面向服务架构 公司
(如果互联网公司,如果使用传统架构技术开发代码冲突,拆分项目)1.分布式开发:将一个大的公司,拆分成n个子项目。会员系统/支付系统/消息系统/微信系统2.集群:将一个项目,相同功能部署在多台不同服务器。作用:解决高并发。分布式架构就是将一个项目拆分成n多个子项目,每个子项目使用rpc远程调用技术。
你用过哪些rpc远程调用框架SpringCloud/HttpClient/hessioan/dubbo面向于微服务架构(SOA),通信协议SOAP SOAP http协议+xml序列号与反序列化银行使用webservice反向代理服务器
nginx a.tomcate01b.tomcate02c.客户端
SOA服务项目,提供外部访问接口
提供外部访问接口(业务逻辑层和数据访问层) web工程-->rpc远程调用(控制层)面向于服务架构优点:代码服务/解耦,适合于大公司人多。
缺点:网络延迟,维护复杂,不好整合,编写复杂小公司 传统项目 --------------------------------------------------------------------------------微服务架构(分布式架构)
是在传统soa架构领域升级微--细分,轻量级,通讯协议http协议+rest风格+json每个服务都是独立运行来源
1.移动端(安卓/ios端) pc端 h5端(手机浏览器)2.H5工程 PC工程 混合工程 (RPC远程调用 http协议+json格式+rest互联网公司 httpclient)
使用比较简单通信 使用httpclient[ 接口只允许在内网进行访问,和外网接口进行对接https]微服务架构与面向于服务架构区别:面向于服务架构(SOA)主要针对于在银行xml格式 企业级 ESP服务微服务系统,会更加细分,Http+json+rest进行 轻量级 独立运行 解耦接口项目
3.会员服务 订单服务 支付服务(每个服务--对应一个数据库)主流:rpc解决框架dubbo/springcloud--------------------------------------------------------------------------------
接口地址怎么管理?http://member.itmayiedu.com/api/user
容错机制/负载均衡/网关/路由策略/高并发情况下,怎么接口限流/断路微服务解决框架--SpringCloudSpringCloud解决什么样的问题?
配置管理(注册中心eureka/zk)/服务发现/服务注册/断路器/路由策略/负载均衡/全局锁(比如:redis)/分布式会话/客户端调用/接口网关(ZUUL)/服务管理系统----学习SpringCloudrpc远程调用
SpringBoot与SpringCloudSpringBoot简化xml配置,快捷整合框架SpringCloud 是一套微服务解决方案--RPC远程调用关系SpringCloud依赖接口(SpringMVC)依赖与SpringBoot SpringMVC --接口 --------------------------------------------------------------------------------SpringCloud技术流
1.SpringCloud注册中心环境搭建euraka2.服务注册与发现3.SpringCloud客户端调用 rest/feign 客户端调用工具ribbon 负载均衡zuul接口网关eureka服务注册案例:会员服务提供用户信息/订单服务 查询订单
订单服务需要查询用户,订单服务调用会员服务接口注册中心(euraka)
会员服务(提供接口,服务提供者)-->注册服务-->注册中心(euraka)
订单服务(调用接口,服务消费者)-->调用注册中心(euraka)-->消费-->会员服务 编写会员服务编写订单服务
SpringCloud调用服务原理
负载均衡怎么实现负载均衡 nginx/lvs/HAproxy/F5
SpringCloud中负载均衡什么事接口网关??
接口网关作用拦截请求 类似ngix(配置一些拦截策略)qianduan.itmayiedu.com
来源渠道(H5端调用)ajax1 member.itmayiedu.comajax2 order.itmayiedu.com跨域问题 使用项目名称区分接口网关转发到实际地址www.itmayiedu.com/memberwww.itmayiedu.com/orderSpringCloud里的zuul接口网关接口网关作用:拦截所有请求,任何请求先交给接口网关,然后再用网管进行转发nginx 反向代理
member.itmayiedu.com
会员服务order.itmayiedu.com
订单服务 使用Zuul搭建服务接口网关接口网关:解决跨域问题
分布式配置文件中心概述
开发中,怎么区分环境? dev测试环境/pre 预发布/prd正式生产环境调用第三方接口,alibaba.alibaba/api使用httpclient进行调用。配置信息,存放在配置文件中。配置信息,存在配置中。需要重新发布版本。java代码读取配置,存放在永久区,static 修饰。缺点1.将值存在缓存中,数据库中备份。
2.后台搭建一套可视化管理配置文件项目。3.读取流程先从缓存中读取,缓存没有在读取数据库。4.缓存与数据库值不同步怎么解决,清理缓存。将配置文件信息,存放在版本控制(git/svn)springcloud就是使用这种机制。远程地址
分布式配置文件中心(git)
dev文件--userName=itmayiedupre文件--userName=itmayieduprd文件--userName=itmayiedu server-config配置服务项目会员服务工程
会员工程-->配置服务项目-->分布式配置文件中心
订单服务工程
订单工程-->配置服务项目-->分布式配置文件中心
1.远程地址git主要存放配置文件信息
2.server-config主要缓存配置文件信息,可以被其他调用搭建分布式配置中心
1.SpringCloud微服务解决框架RPC远程调用
2.eureka注册中心 ridbbon负载均衡客户端 zuul网关 分布式配置中心3.客户端调用工具rest feignfeigin客户端调用,SpringCloud断路器Hystrix服务降级/熔断机制/限流服务雪崩效应产生原因
SpringCloud Hystrix断路器SpringCloud hystrix 熔断机制/服务降级/服务限流/解决服务雪崩效应
什么是服务雪崩效应?
客户端(同一时刻有51个请求)
tomcat服务器
会员工程
user/login
user/get(订单功能需要订单会员工程查询)
订单工程
order/getOrder【tomcate最大线程数50个】 依赖服务 user/get[每次需要3秒进行响应]
order/addOrder 请求等待(转圈)/雪崩效应:所有请求在处理一个服务,不能访问其他服务接口。
1.使用超时机制,服务降级()服务降级:服务调用接口的时候,如果发生错误或者超时,不让调用接口,调用本fallback。服务一旦发生错误/超时的时候,返回请求过时或者错误。jmeter做压力测试的一个工具
雪崩效应解决办法
1.服务雪崩,产生服务堆积等待,导致其他服务接口无法访问。
2.如何解决服务雪崩效应a.超时机制--服务降级处理服务降级:服务接口发生错误,不去调用接口,调用本地方法 SrpingBoot的fallbackb.熔断机制 类似于保险丝熔断机制 就是为了解决服务高并发,一旦达到规定请求,的时候,熔断,报错。--服务降级c.隔离机制:每个服务接口隔离开c1接口线程池 c2接口线程池
d.限流机制:nginx 使用网关
使用hystrix实现服务降级
SpringCloud hystix短容器 :当我们使用RPC远程调用的时候,超时,解决服务雪崩效应,专门解决服务与服务之间报错信息。hystix断路器 里面包含服务降级,熔断机制,隔离资源。
使用hystix解决服务雪崩原因