分布式微服务

这篇博客详细探讨了微服务架构中的SpringCloud组件,包括Feign、Hystrix、Config和网关等,并深入讲解了网络安全架构,如API接口安全设计、OAuth2.0联合登录和HTTPS协议。同时,博主分享了分布式解决方案,如Zookeeper的使用、分布式锁和跨域问题的解决。此外,还涵盖了消息中间件、缓存技术Redis、多线程编程以及数据库MySQL的索引优化。
摘要由CSDN通过智能技术生成

1.springcloud

1.微服务架构模式:
	微服务架构从SOA架构演变过来,比SOA架构上粒度更加精细,让专业的人做专业的事情,目的是为了提高效率,每个服务与服务之间互不影响,每个服务必须独立部署(独立数据库,独立redis),微服务架构更加提现轻量级,采用restful风格提供API,也就是Http协议+JSON格式进行存储,更加轻巧,更加适合互联网敏捷开发,快速迭代产品
2.eureka集群:
	eureka搭建集群原理使用相互注册原理,形成一组相互注册的注册中心,从而实现数据相互的同步,达到高可用
	eureka自我保护机制:
		为了防止eurekaClient与eurekaServer网络不通的情况下,eurekaServer端不会将eurekaClient端剔除。eurekaclient正常情况下,会每隔一段时间向eurekaServer端发送心跳包,证明该服务正常运行中
3.ribbon :
	ribbon和Nginx负载均衡区别:ribbon本地负载: Ribbon是从eureka注册中心服务器端上获取服务注册信息列表,	缓存到本地,让后在本地实现轮训负载均衡策略。既在客户端实现负载均衡。
	Nginx适合于服务器端实现负载均衡 比如TomcatRibbon适合与在微服务中RPC远程调用实现本地服务负载均衡,	比如DubboSpringCloud中都是采用本地负载均衡。

3.feign

1.:Feign客户端是一个web声明式http远程调用工具,提供了接口和注解方式进行调用。

4.Hystrix

1:服务雪崩效应:默认情况下Tomcat只有一个线程池去处理客户端发送的所有服务请求,这样的话在高并发情况下,如果客户端所有的请求堆积到同一个服务接口上,就会产生tomcat的所有线程去处理该服务接口,可能会导致其他服务接口服务访问
2.Hystrix服务保护:
断路器,
服务降级:在高并发情况下防止用户一直等待,使用服务降级方式(返回一个友好的提示给	客户端)
服务熔断,在高并发情况下,如果请求达到一定的极限(可以自己设置阈值),自动开启保护服务功能,使用服务降级方式返回一个友好提示,和服务降级一起使用
服务隔离机制,每个服务接口都有自己独立的线程池,每个线程池互不影响,
服务雪崩效应

5.config

1:在微服务当中使用同一个服务器管理所有服务配置文件信息,能够实现后台可管理,当服务器正在运行的时候,如果配置文件需要发生改变,可以实现不需要重启服务器实时更改配置文信息
2.原理:提交配置文件到配置中心服务器上持久存储,项目configServer服务器

6.网关

1.开放接口:其他机构合作伙伴进行调用(必须在外网访问) 微信公众号开发需要通过appid+appsocet生成AccessToken进行通讯,对接支付开发,微信开放,接受一些接口权限OAuth2.0协议方式
2.内部接口:一般只能在局域网进行访问,服务与服务之间关系都在同一个微服务系统中,	目的保证安全问题
3.设计一套公司项目接口,如何设计
	接口权限(开放接口|内部接口),考虑幂等性,安全性(Https,防止篡改数据(验证签名),使用网关拦截接口实现黑名单和白名单,接口使用http协议+json格式restful(目的跨平台)考虑高并发对接服务实现保护,服务降级,熔断,隔离,统一使用Api接口文档 Swagger
4.网关作用:可以拦截客户端所有请求,对该请求进行权限开工至,负载均衡,日志管理,接口调用监控等
5.过滤器和网关区别:
	过滤器适合于单个Tomcat服务器进行拦截请求,网关是拦截整个微服务所有请求
6.Nginx与zuul区别
	相同点:1.Zuul和Nginx都可以实现负载均衡,反向代理,过滤请求,实现网关效果
	不同点:Nginx采用C语言编写,Zuul采用java语言编写,在效率上Nginx性能更好
	Zuul负载均衡实现:采用ribbon+eureka实现本地负载均衡,Nginx负载均衡实现:采	用服务器端实现负载均衡,NginxZuul功能更加强大,Nginx适合于服务器端负载均	衡,Zuul适合微服务中网关负载均衡,在项目中最好建议Nginx+Zuul实现网关,通过	Nginx实现反向代理,Zuul对微服务实现网关拦截
7.Zuul网关集群
	使用Nginx反向代理,负载均衡到每一台网关服务器,实现集群

7.dubbo

1.原理:当生产者启动的时候,会将自己的服务信息注册到注册中心上,会将当前服务中接口class完整路径做为key,value为实际dubbo协议调用地址以临时加持久节点方式存放在Zookeeper,消费者在启动的时候采用订阅的方式获取服务接口地址,Zookeeper上当有节点发生变化时(新增,删除,修改),Zookeeper会以事件通知方式通知给消费者,
消费者在获取地址之后,然后采用本地的RPC远程调用技术,监控中心会记录服务之间的调用记录
2.dubbo和springcloud区别
	相同点:都可以实现rpc远程调用框架,都可以实现服务治理与发现
	不同点:从框架架构层面dubbo内部实现功能没有springcloud更加 强大,		springcloud是一整套微服务解决方案,dubbo目前迭代速度没有springcloud更新快,springboot2.0后整合springcloud更加完美

8.springcloud stream

Stream 消息驱动可以简化开发人员对消息中间件的使用复杂度,整合了常用MQ框架,让开发人员不需要具体的知道MQ底层实现,只需要关注核心业务逻辑

9.springsecurity


10.springmvc执行过程

1.当从客户端发送了一个request的请求时,会被我们在web.xml文件中配置的DispatcherServlet进行拦截,如果配置的是/,则会拦截所有,然后DispatchServlet会请求HandlerMapping处理器映射器,根据xml配置或注解进行查找Controller,然后通过HandlerAdapter处理器适配器查找每一个controller类中的处理url请求的方法,		a.如果没有找到对应的映射,然后会再去看是否配置了<mvc:default-servlet-handler/>静态资源处理器,如果没有则直接抛出异常页面显示404,配置了则会去找静态资源。同样的找到则正常运行,找不到则404.
	b.如果找到了对应的映射,会调用一系列的拦截器的方法,进行参数绑定,数据验证等,接着执行请求的方法,调用一系列的业务逻辑,获取到处理请求后需要的数据,根据方法的不同返回类型,都会把逻辑视图和处理请求的数据封装到ModelAndView对象中,然后把该对象返回给DispatcherServlet,然后DispatchServlet会去请求视图解析器进行视图解析,以前缀+逻辑视图+后缀形成一个真正的物理视图,然后又向DispatcherServlet返回View对象,(包括了请求数据以及视图路径),然后DispatcherServlet去视图进行渲染,进模型数据填充到request域中,并根据路径做转发或重定向的操作

2.在SSM整合时会出现spring的IOC容器和springmvc的IOC容器,容器扫描的包有重合的部分, 就会导致有的 bean 会被创建 2 次。针对这种情况的解决方法:
	a. 使 Spring 的 IOC 容器扫描的包和 SpringMVC 的 IOC 容器扫描的包没有重合的部分. (往往在项目的实际开发中都是分模块开发的,不同的模块会有不同的包路径。实现起来很麻烦)
	b. 使用 exclude-filter 和 include-filter 子节点来规定只能扫描的注解
<!--springmvc.xml  让springmvcIOC容器只扫描@Controller@ControllerAdvice-->
<context:component-scan base-package="com.znsd.ssm" use-default-filters="false">
  <context:include-filter type="annotation" 
                          expression="org.springframework.stereotype.Controller"/>
  <context:include-filter type="annotation"                         expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
	<!--applicationContext.xml 让spring的IOC容器不扫描@Controller@ControllerAdvice-->
	<context:component-scan base-package="com.znsd.ssm">
		<context:exclude-filter type="annotation" 
			expression="org.springframework.stereotype.Controller"/>
		<context:exclude-filter type="annotation" 
			expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
	</context:component-scan>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值