SpringBoot与SpringCloud

我做过SpringBoot和SpringCloud的项目。我们项目中使用很多技术来构建我们的项目。
SpringBoot来构建我们的项目,使用SpringCloud相关技术来实现微服务架构。
SpringBoot是一个基于maven的项目构建工具。目前我们使用版本比较稳定的1.5.6.项目后期我们项目组使用STS,Spring集成eclipse。
使用SpringCloud微服务框架,我们项目组之前还有dubbo+zookeeper。微服务框架内容非常广泛,我们项目中使用Eurka注册中心,Ribbon前端负载均衡(在本地有缓存-转向服务的列表-该列表随着Eurka更新)。
Hystrix断路器或者熔断器,Zuul实现api网关,SideCar实现异构开发语言支持。SpringCloud原生ConfigServer配置中心,Git作为分布式配置中心的数据存储的地方。

我们项目中使用Eurka作为注册中心。而没有使用dubbo使用的zookeeper作为注册中心。
我们基于分布式系统设计的定理,CAP原则。C一致性,A可用性(可用性不等于可靠性),P分区容错性。基于分布式的系统必须实现P分区容错性,一般设计要么侧重AP,要么侧重CP。

Zookeeper和Eureka的区别?
1Zookeeper侧重CP设计,强调一致性。Zookeeper结构是主从结构,有leader,其他节点都是follower。当在Zookeeper节点宕机个数超过一半时和zookeeper集群在选举时,zookeeper是不推荐使用的。
2Eureka侧重AP设计,强调可用性。Eurka结构点对点。每个节点互为主从,即是主节点,又是从节点。每个节点都会同步所有的数据。Eurka数据都在内存中,底层就是concurrentHashMap,防止高并发线程安全。多级缓存,4级。应对高并发。Eureka心跳机制,心跳从client端,每隔30s向服务端发起心跳请求,顺便检查数据是否变化。如果没有变化,等待下一个周期来发起心跳。如果服务列表变化,就从Eurka中同步列表。即使所有的节点都宕机,服务依然可用,client在发起端,它是EurkaClient,本地缓存之前路由,直接转向。

Feign封装Rest支持,对外体现是一个接口,目前来说比RestTemplate方式好用。具体Feign就是写一个接口。但是这个接口的坑非常多。
1SpringCloud号称整合Feign之后完全兼容SpringMVC.实际不是完全兼容,差异很大
2@RequestMapping,@Get,@Post,Feign目前不支持
3@RequestMapping("/aaa/bbb")controller中可以分成两个段,但是Feign类上就不能写了
4简单参数,@PathVariable("name")必须写全,controller可以省略
5对象参数,controller直接支持对象参数,Feign不支持,@RequestBody以json接参,内部才能动态传入到对象中。
6时间bug+ObjectMapper(jackson没做可配置),两个解决方案,feign接参字符串,拦截器单独写。

Ribbon前端负载均衡
1nginx后端负载均衡,nginx按配置转向,它不能感知服务死活,直接转向,有可能超时。
2ribbon有本地客户端,转向信息保存在本地缓存中,直接从这个缓存中选中路径,转向(没到服务端就选择路径-按轮询算法选择)。Ribbon能感知服务死活,因为它Eureka,Eureka是动态维护服务列表的。(Ribbon从Eurka更新,只要Eurka正常,不正常的服务就通过心跳被去掉,没有那个列表就不会导致导向错误甚至超时)

请求-》Zuul网关-》nginx-》ribbon

Hystrix断路器能实现限流,降级-不重要的服务少导向,甚至停止,走断路器返回默认值。

Hystrix三种状态:关闭,半开,打开。
断路器在业务正常访问时,处于"关闭"状态,当业务访问失败时,超过预期值阀值,然后才切换打开状态。回调fallback断路器方法,这个方法返回默认值(预案),返回json对象。不是一直失败,一直打开。当用户发现微服务异常,修复异常。微服务章程访问。它每次失败时先试试能否正常访问,一旦测试业务访问正常,会毫不犹豫地从半开状态切换到关闭状态。

和Zuul整合后,必须按照Zuul方法去调用,实现接口。

传统编程中以前没有这方面的内容,抛出异常。

Zuul gataway API网关,认证授权,类似shiro。转发类似nginx。
1所有用户的请求都必须通过它来中转。
2三条通路:服务提供者,服务消费者,Zuul。实际开发中部署,Zuul在外网暴露,提供者和消费者不暴露(内网)。

消费者可以增强我们的程序,无需自己写.

SpringCloudConfig配置中心(轻量级,速度快)
1替代本地属性文件解决方案,如果服务器个数非常多,100+。如果每台服务都去手动修改,在很长的时间内数据不一致。手动修改,会遗漏。配置中心就把单机的配置升级到分布式的环境中。每台机器都能访问配置中心。SpringCloudConfig是利用git存储,天然就是分布式。
2ZooKeeper配置中心,它内部是小的树形结构,称为数据字典,字典很小。这个结构会在不同的节点,自动地同步,zookeeper主节点的数据从节点自动备份,所有节点数据互相联通。因为量小,zookeeper同步速度非常快。Hadoop的配置信息就是由Zookeeper来管理的。

SpringCloud和dubbo比较
1.SpringCloud 内容繁多,形成SpringCloud全家桶,利用SpringBoot来构建程序更跨界。SpringCloud基于http协议,(纯文本)RESTFul+json(序列化json)返回
2.Dubbo阿里开源,2003年在双11的产品,这个产品是经过极大实际使用的,而且在阿里运行6年。一开源,当当提升spring版本和rest支持dubbox.携程使用dubbo。Dubbo只是SOA的最佳实践,是微服务框架。底层基于TCP协议,RPC(基于二进制,谷歌的protobuf/thirft-性能更高的压缩二进制协议)方式-也叫二进制序列化(把对象转为可传输的东西)。
性能上SpringCloud不如dubbo。而json天然异构。
3.远期谷歌gRPC的要颠覆网络协议。谷歌先是默认https协议,现在要完全基于新的rpc方式。(Http协议不如RPC快)
4.目前为止,dubbo宣称是SpingCloud的一个子集,专注于RPC的传输方式。

面向?
1面向过程,日常搭建开发的代码都是面向过程的为了兼顾性能没有完全面向对象。mybais开发基于sql,面向过程。
2面向对象,开发中需求变更时能减少代码修改量,不能完全克服需求变更。
3面向函数,大数据的思考方式:面向对象+面向函数。jdk8也推出函数式编程。
4面向架构,SOA面向架构编程。SOA有一个重要概念:BUS总线,BUS最早想实现所有的按照标准的模业务模块式插入BUS总线中。如办公自动化和订单还有物流都可以接入总线。各个业务模块通过总线通信。梦想:一个大大的软件系统就OK。用友的u8,金蝶是中国财务软件底层构建了soa,但是自身性能不足。
5面向服务,微服务兴起,基于SOA概念,是SOA的降级。没有那么庞大。微服务是一个标准。它的标准是:Rest+JSON或RPC,springCloud选择前者(Rest+JSON+MQ),dubbo走了后者(基于RPC)
6Dubbo是SOA的最佳实践

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容