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.tomcate01
b.tomcate02

c.客户端

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
容错机制/负载均衡/网关/路由策略/高并发情况下,怎么接口限流/断路
微服务解决框架--SpringCloud

SpringCloud解决什么样的问题?
配置管理(注册中心eureka/zk)/服务发现/服务注册/断路器/路由策略/负载均衡/全局锁(比如:redis)/分布式会话/客户端调用/接口网关(ZUUL)/服务管理系统
----学习SpringCloud

rpc远程调用
SpringBoot与SpringCloud
SpringBoot简化xml配置,快捷整合框架
SpringCloud 是一套微服务解决方案--RPC远程调用
关系SpringCloud依赖接口(SpringMVC)依赖与SpringBoot SpringMVC --接口

--------------------------------------------------------------------------------

SpringCloud技术流
1.SpringCloud注册中心环境搭建euraka
2.服务注册与发现
3.SpringCloud客户端调用
rest/feign 客户端调用工具
ribbon 负载均衡
zuul接口网关
eureka服务注册

案例:会员服务提供用户信息/订单服务 查询订单
订单服务需要查询用户,订单服务调用会员服务接口

注册中心(euraka)

会员服务(提供接口,服务提供者)-->注册服务-->注册中心(euraka)
订单服务(调用接口,服务消费者)-->调用注册中心(euraka)-->消费-->会员服务

编写会员服务

编写订单服务

SpringCloud调用服务原理

负载均衡

怎么实现负载均衡 nginx/lvs/HAproxy/F5
SpringCloud中负载均衡

什么事接口网关??
接口网关作用拦截请求 类似ngix(配置一些拦截策略)

qianduan.itmayiedu.com
来源渠道(H5端调用)
ajax1 member.itmayiedu.com
ajax2 order.itmayiedu.com
跨域问题

使用项目名称区分接口网关转发到实际地址
www.itmayiedu.com/member
www.itmayiedu.com/order
SpringCloud里的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=itmayiedu
pre文件--userName=itmayiedu
prd文件--userName=itmayiedu

server-config
配置服务项目

会员服务工程

会员工程-->配置服务项目-->分布式配置文件中心

订单服务工程

订单工程-->配置服务项目-->分布式配置文件中心

1.远程地址git主要存放配置文件信息
2.server-config主要缓存配置文件信息,可以被其他调用

搭建分布式配置中心

1.SpringCloud微服务解决框架RPC远程调用
2.eureka注册中心 ridbbon负载均衡客户端 zuul网关 分布式配置中心
3.客户端调用工具rest feign
feigin客户端调用,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的fallback
b.熔断机制 类似于保险丝
熔断机制 就是为了解决服务高并发,一旦达到规定请求,的时候,熔断,报错。--服务降级
c.隔离机制:每个服务接口隔离开
c1接口

线程池

c2接口

线程池

d.限流机制:nginx 使用网关

使用hystrix实现服务降级

SpringCloud hystix短容器 :当我们使用RPC远程调用的时候,超时,解决服务雪崩效应,
专门解决服务与服务之间报错信息。

hystix断路器 里面包含服务降级,熔断机制,隔离资源。

使用hystix解决服务雪崩原因

微服务之SpringCloud基础的更多相关文章

  1. 我对微服务、SpringCloud、k8s、Istio的一些杂想

    一.微服务与SOA “微服务”是一个名词,没有这个名词之前也有“微服务”,一个朗朗上口的名词能让大家产生一个认知共识,这对推动一个事务的发展挺重要的,不然你叫微服务他叫小服务的大家很难集中到一个点上. ...

  2. 微服务、SpringCloud、k8s、Istio杂谈

    一.微服务与SOA “微服务”是一个名词,没有这个名词之前也有“微服务”,一个朗朗上口的名词能让大家产生一个认知共识,这对推动一个事务的发展挺重要的,不然你叫微服务他叫小服务的大家很难集中到一个点上. ...

  3. F版本SpringCloud1—大白话为啥要有微服务?啥是微服务?SpringCloud为什么有那么多组件?

    前言 为什么要有微服务呢? 什么是微服务? SpringCloud 中为什么会有那么多的组件? ...... 作为SpringCloud教程的第一篇,不讲解具体的技术使用,通过一个通俗易懂的小故事,来 ...

  4. 【SpringCloud】02.微服务与SpringCloud

    微服务的特点 一系列微小的服务共同组成 跑在自己的进程里 每个服务为独立的业务开发 独立部署 分布式管理 异构--不同的语言.不同类型的数据库 微服务架构的基础框架/组件 服务注册发现 服务网关(Se ...

  5. 微服务和SpringCloud入门

    微服务和SpringCloud入门 微服务是什么 微服务的核心是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去耦合,每个微服务提供单个业务功能的服务,一个服务做一件事情,从技术角度看就是一种 ...

  6. 微服务架构的基础框架选择:Spring Cloud还是Dubbo?

    最近一段时间不论互联网还是传统行业,凡是涉及信息技术范畴的圈子几乎都在讨论微服务架构.近期也看到各大技术社区开始组织一些沙龙和论坛来分享Spring Cloud的相关实施经验,这对于最近正在整理Spr ...

  7. java框架之SpringCloud(1)-微服务及SpringCloud介绍

    微服务概述 是什么 业界大牛 Martin Fowler 这样描述微服务: 参考[微服务(Microservices)-微服务原作者Martin Flower博客翻译]. 下面是关于上述博客中的部分重 ...

  8. 微服务架构的基础框架选择:Spring Cloud还是Dubbo?

    本文转自:http://mt.sohu.com/20160803/n462486707.shtml 最近一段时间不论互联网还是传统行业,凡是涉及信息技术范畴的圈子几乎都在讨论 微服务架构 .近期也看到 ...

  9. 微服务与SpringCloud简介

    A.官网 https://spring.io/projects/spring-cloud B.简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用 ...

随机推荐

  1. 小tip: margin:auto实现绝对定位元素的水平垂直居中

    转载自:http://www.zhangxinxu.com/wordpress/?p=3794 一.绝对定位元素的居中实现 如果要问如何CSS实现绝对定位元素的居中效果,很多人心里已经有答案了. 兼容 ...

  2. docker 日志分析

    日志分两类,一类是 Docker 引擎日志:另一类是 容器日志. Docker 引擎日志 Docker 引擎日志 一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (Ce ...

  3. servlet中为什么doGet方法没有被调用的一种可能(笔记)

    创建了一个servlet,然后在doGet()方法内写一些简单的测试语句,但是在实际运行中发现并没有调用到doGet()方法,后来发现自己在创建servlet是将service()方法也勾选上去了,而 ...

  4. 如何选择合适的 DDoS 防御服务

    如果你没有对自己的站点采取一些必要的保护措施,将会使它直接暴露于 DDoS 攻击的风险下且无任何招架之力.你应该对法国大选日 knocked out 网站被 DDoS 攻击和 2016 年十月份时候美 ...

  5. 算法笔记--斜率优化dp

    斜率优化是单调队列优化的推广 用单调队列维护递增的斜率 参考:https://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html 以例1举 ...

  6. AtCoder Grand Contest 025 B - RGB Coloring

    B - RGB Coloring 求ax + by = k (0<=x<=n && 0<=y<=n)的方案数,最后乘上C(n, x)*C(n,y) 代码: #i ...

  7. 第 7 章 多主机管理 - 045 - 安装 Docker Machine

    安装 Docker Machine 先安装docker 官方安装docker-machine的文档地址:https://docs.docker.com/machine/install-machine/ ...

  8. 修改TP5中common模块默认不能使用问题

    在TP5框架中common模块是一个特殊的模块,默认是禁止直接访问的,一般用于放置一些公共的类库用于其他模块的继承.其实是可以访问common模块的, 只需要把convention.php文件中的 / ...

  9. Redis的安装及命令返回值

    Linux下安装Reids : http://redis.io/download 下载最新稳定版本 wget http://download.redis.io/releases/redis-3.0.7 ...

  10. (转)C# Textbox的ImeMode取值对中文输入法的影响

    取值 五笔加加 微软拼音3.0 搜狗拼音 说明 NoControl 首次调出后按一次ctrl+space才能正确使用 中西标点或全半角字符继承上次设置 调出后默认为英文输入状态  调出后默认为西文标点 ...