- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
springCloud是一系列框架的有序集合,把其他公司中微服务架构常用组件整合起来,并使用springBoot简化开发,配置
- 微服务技术将项目的各个模块拆分为可独立运行,部署测试的架构设计风格,这些小型服务都在独自的进行中运行,服务之间一般通过Http的RestFul api在进行通讯
- 分布式: 一个业务分拆多个子业务,部署在不同的服务器上
- 集群:同一个业务,部署在多个服务器上。比如之前做电商网站搭的redis集群以及solr集群都是属于将redis服务器提供的缓存服务以及solr服务器提供的搜索服务部署在多个服务器上以提高系统性能、并发量解决海量存储问题。
当我们开始一个项目的时候,我们通常在属性配置文件中进行所有的配置,随着越来越多服务的开发和部署,添加和修改这些属性变得更加复杂,有些服务的性能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。 Eureka 服务注册和发现可以在这种情况下提供帮助。由于所有服务都在 Eureka 服务器上注册并通过调用 Eureka 服务器完成查找,因此无需处理服务地点的任何更改和处理
- springCloud和Dubbo都是实现微服务有效的工具
- dubbo只是实现了服务治理,而springcloud覆盖了微服务架构之下的众多部件
- dubbo使用RPC通讯协议,SpringCloud使用RestFul风格进行完成通讯,dobbo效率高于springcloud
Ribbo是Netfix发布的负载均衡器,它有助于控制Http和TCP的客户端的行为,为Ribbon配置服务提供者地址后,Ribbo就可基于某种负载均衡算法,自动的帮助服务消费者区请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询,随机等。
Feign是一个声明式的Rest客户端,他用了基于接口的注解方式,很方便实现客户端配置(声明式接口,发起远程调用)
实现Feign的过程
- 在消费端引入open-feign依赖
- 编写Feign接口
接口上添加注解 @FeignClient,设置value属性为 服务提供者的 应用名称
编写调用接口,接口的声明规则 和 提供方接口保持一致
注入该接口对象,调用接口方法完成远程调用
- 在启动类添加 @EnableFeignClients 注解,开启Feign功能
-服务熔断机制是一种应对雪崩效应的一种微服务链路保护机制,当某个微服务不可用或者响应时间太长时,会进行服务降级,从而熔断该节点微服务的调用,快速返回错误信息,当检测到该节点调用响应正常的时候,恢复链路。
-服务降级:一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然水平下降,但好歹可用,比直接挂掉强。
-springcloud里面,熔断机制是采用hystrix实现的,用于监控微服务调用情况,当失败的情况达到预定的阀值(5秒失败20次),会打开断路器,拒绝所以的请求,直到服务恢复正常为止。
- Hystrix是Netfix开源的一个延迟和容错库,用于隔离访问远程服务,第三方库,防止出现雪崩
@EnableHystrix:开启熔断
@HystrixCommand(fallbackMethod=”XXX”):声明一个失败回滚处理函数XXX,当被注解的方法执行超时(默认是1000毫秒),就会执行fallback函数,返回错误提示
-雪崩:在微服务中,往往一个请求可能会调用多个微服务的接口才可以实现,如果一个微服务出现异常,就会出现阻塞,用户请求就得不到响应,这个线程就不会释放,服务器所支持的线程是有限的,请求一直出现阻塞,会导致服务器资源耗尽,从而导致其他服务不可以用,从而形成雪崩(雪崩就是指一个服务失败,导致整条链路的服务都失败的情形)
-解决措施:
Hystrix解决雪崩的主要手段是服务降级:
隔离:线程池隔离,信息量隔离
降级:异常,超时
熔断
限流
触发Hystrix服务降级的条件:
Zookepper 保证了CP (C:一致性,P:分区容错性)
Eureke 保证了AP (A:高可用,P:分区容错性)
一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值(等同于所有的节点访问同一份最新的数据副本)
可用性(A):保证每一个请求不管成功或者失败都有响应
分区容忍性(P):系统中任意信息的丢失或失败不会影响系统的继续操作
Eureka:Eureka各个节点都是平等的,一个节点挂掉了,剩下的节点任然可以提供注册和查询服务,只要有一台Eureka存在,就可以保证注册服务可用,Eureke还有保护机制,30秒发送一次心跳包,如果Eureka没有在规定时间内接受到85%的正常心跳包,就会就把清除过期的服务
zookeeper:zookeeper当一个节点挂了,剩下的节点会重新选取新的leader,选举的时间过长,这这个期间集群不可用,会导致整个注册服务瘫痪
总览 数据库的数据存储有两种类型,一种是面向行的(row-oriented)数据库,另一种是面向列的(column-oriented )数据库。 面向行(事务型) 数据库 该类数据库是根据
starting from a joke 问:把大象放冰箱里,分几步? 答:三步啊,第1、把冰箱门打开,第2、把大象放进去,第3、把冰箱门带上。 问:实现spring事务,分几步? 答:三
在最近的一次采访中,我有这个问题。 这里有什么错误?我知道足够的 c#,但我看不到错误。可以吗? Class x { protected string t1; public int
我在面试中被要求设计一个文件系统,允许用户将自己的属性添加到文件和文件夹中。我刚刚说过要将属性添加到文件描述符并允许根据此属性标准搜索文件,以及添加此属性以显示在文件/文件夹详细信息中。 看起来面试官
我一直在面试,下面应该有什么问题? 我可以假设这是您无法检查类是否为空的问题,对吗?!谢谢! public class NiceActivity extends Activity { priv
给定一个数组,如何返回总和为偶数的对数? 例如: a[] = { 2 , -6 , 1, 3, 5 } 在这个数组中,偶数和的对数是(2,-6), (1,3) , (1,5), (3,5) 函数应返回
这个问题是在面试中被问到的 Assume you have a dictionary of words: (use if you have /usr/share/dict/words). Given
我被要求实现 invert(x,p,n) 返回 x 的 n 位开始于位置 p 反转(即 1 变为 0,反之亦然),其他不变。 我的解决方案是: unsigned invert(unsigned x,
有人问我这个问题:给定一个大小为 n 的 int 和 int sum 的数组,我需要返回数组元素的所有对,其总和等于 总和 std::vector > find(int* arr,size_t n,i
我在一次面试中遇到了这个问题。有一组对象与起始值和结束值相关联。与每个对象相关联的计数是具有较长开始时间和较短结束时间的其他对象的数量。所以我必须找到与每个对象关联的计数。 我提出了 O(n^2) 解
我今天在采访中被问到这个问题。我已经尝试了一种解决方案,但想知道是否有更好的方法来解决这个问题: 问题:我有一个包含 500,000 个元素的数组列表,这样数组列表的每个元素的值都与索引相同。例如:l
有一个包含白色单元格,黑色单元格和只有一个灰色单元格的矩阵,需要从 (0,0) 到 (N-1, N-1) 如果 Arra[N][N]约束:A。该路径应该只覆盖白色单元格并且应该通过灰色单元格。b.访问
给定一个正整数数组,找出排列的任意排列可以形成的最大值。我想知道是否有更好的数据结构可以为问题提供更优雅的解决方案。 import java.util.ArrayList; import java.u
我在面试中被问到以下问题(不幸的是我找不到比 N^2 更好的答案) 对于大小为 N 的 unsigned int 的给定数组 arr,对于每个元素(在索引 i 中)我应该返回一个元素在索引 j (j
极点:数组中左侧元素小于或等于它且右侧元素大于或等于它的元素。 示例输入 3,1,4,5,9,7,6,11 期望的输出 4,5,11 面试时被问到这个问题,要返回元素的索引,只返回第一个满足条件的元素
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我今天被问到这个问题,我知道答案很简单,但他让我一直到最后。 问题 编写程序删除存储在 ArrayList 中的偶数,其中包含 1 - 100。 我只是说哇 给你,这就是我的实现方式。 ArrayLi
我在一次采访中遇到了这个问题,完全被难住了。我能想到的唯一解决方案是将 currentAngle 存储在 NSArray 中以计算下一个角度。 问题:使用 iPhone 的指南针在屏幕上移动一个 35
我必须在接下来的几周内采访一些 C++ 候选人,作为公司最资深的程序员,我应该尝试弄清楚这些人是否知道他们在做什么。 那么有人有什么建议吗? 就我个人而言,我讨厌被留在房间里填写一些 C++ 问题,所
消息队列(MQ),一种能实现生产者到消费者单向通信的通信模型,这也是现在常用的主流中间件。 常见有 RabbitMQ、ActiveMQ、Kafka等 他们的特点也有很多 比如 解偶、异步、广播
我是一名优秀的程序员,十分优秀!