Spring Could 问题
作为流行的微服务框架,Spring Could实用但不完美,比如说它只针对Java语言,坚持REST协议做微服务间的通讯等。
Spring Cloud虽然集成了众多组件,可以构建一个完整的微服务应用,但是其中的各个组件却并非完美无缺,很多组件在实际应用中都存在诸多不足和缺陷。因此,需要我们对其中的一些组件进行替换和修改,方能构建一个强大、灵活、健壮的微服务架构应用。
配置中心
Spring Cloud Config可以说是Spring Cloud家族中实现最Low的一个组件,直接采用了本地存储/SVN/Git的方式进行存储。同时,Spring Cloud Config也缺乏一个完整的可视化管理查询后台,当存在比较复杂的权限管理和版本管理需求时,Spring Cloud Config会显得非常力不从心。如果需要在配置修改后,能自动进行配置信息推送的话,使用Spring Cloud Config也无法满足要求,需要自行编写代码进行实现。
目前开源社区中,已经有了很多的开源配置中心实现方案,同时很多公司也自研了自己的配置中心方案。包括淘宝的统一配置中心Diamond(已经多年未更新)、百度的分布式配置管理平台Disconf、携程的开源分布式配置中心Apollo、360的分布式配置管理工具QConf等等。
注册中心
作为Spring Cloud的服务注册中心,从分布式CAP理论来看,Eureka采用是AP型设计,强调的是注册中心的高可用性。和Dubbo常用的服务注册中心ZooKeeper相比,ZooKeeper则是采用的CP型设计,强调的是注册中心数据的一致性。
Eureka的设计确实简单易用,但是默认没有实现对注册中心数据的持久化。同时,在极端场景下,也会出现多个Eureka注册中心节点数据不一致,甚至服务注册数据丢失的情况。当然,从分布式CAP理论来看,理论上是没办法做到同时兼顾CAP三点的。目前也有一些互联网公司对Eureka进行了改造,支持了数据的持久化,但是尚不能完整的支持CAP的全部要求。
API网关
API网关可以说是微服务需求最多,也是最有难点的一个组件。Spring Cloud中集成的Zuul应该说更多的是实现了服务的路由功能,对于负载均衡等其他功能,需要结合Ribbon等组件来实现。对于很多个性化的需求,需要开发者自己来进行编码实现。
和大部分基于Java的Web应用类似,Zuul也采用了Servlet架构,因此Zuul处理每个请求的方式是针对每个请求是用一个线程来处理。同时,由于Zuul是基于JVM的实现,因此性能也会在高并发访问场景下成为瓶颈。虽然网上一些文章评测Zuul和Nginx性能接近,但是在性能要求较高的场景下,JVM的内存管理和垃圾回收问题,仍然是一个很大的问题。所以在实际的应用场景中,通常会采用在多个Zuul几点前面再添加一层Nginx或者OpenResty来进行代理。
为了解决Zuul的性能问题,Netflix将自己的网关服务Zuul进行了升级,新的Zuul 2将HTTP请求的处理方式从同步变成了异步,并且新增诸如HTTP/2、websocket等功能。但是遗憾的是,开源版本的Zuul 2一直处于难产状态中,始终没有和大家正式见面。
熔断器
微服务中对于服务的限流、降级、熔断的需求是多种多样的,需要在API网关和各个具体服务接口中分别进行控制,才能满足复杂场景下微服务架构的应用需求。
单独使用Spring Cloud中的Hystrix无法完整的满足上述的复杂需求,需要结合API网关,并通过Kubernetes对资源、进程和命名空间来提供隔离,并通过部分自定义编码方能实现对全部服务的限流、降级、熔断等需求。
监控系统
无论是Spring Cloud中集成的Spring Cloud Sleuth,还是集成经典的ELK,都只是对日志级别的追踪和监控。在大中型微服务应用架构中,尤其是基于JVM的项目,还需要添加APM的监控机制,才能保证及时发现各种潜在的性能问题。
APM整体上主要完成3点功能:1.日志追踪、2.监控报警、3.性能统计。目前,国内外商业版本的APM方案已经有很多,开源版本的APM方案也开始丰富起来。国内开源的APM方案主要有:大众点评的CAT和Apache孵化中的SkyWalking。这里给大家重点推荐下SkyWalking,SkyWalking是针对分布式系统的应用性能监控系统,特别针对微服务、Cloud Native和容器化(Docker、Kubernetes、Mesos)架构,项目的关注度和发展速度都很快,中文文档资料也比较齐全。
浅谈服务治理、微服务与Service Mesh(二): Spring Cloud从入门到精通到放弃
Spring Could 问题的更多相关文章
- 基于spring注解AOP的异常处理
一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...
- 玩转spring boot——快速开始
开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...
- Spring基于AOP的事务管理
Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
- [Spring]IoC容器之进击的注解
先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...
- 学习AOP之透过Spring的Ioc理解Advisor
花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...
- 学习AOP之深入一点Spring Aop
上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...
- 学习AOP之认识一下Spring AOP
心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- Spring之旅(2)
Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面 ...
- Spring之旅
Java使得以模块化构建复杂应用系统成为可能,它为Applet而来,但为组件化而留. Spring是一个开源的框架,最早由Rod Johnson创建.Spring是为了解决企业级应用开发的复杂性而创建 ...
随机推荐
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78516 ...
- 20145322何志威《网络对抗》逆向及Bof基础
20145322何志威<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...
- FromBottomToTop第十二周项目博客
FromBottomToTop第十二周项目博客 本周项目计划 设计整体架构,收集素材,制作出静态界面部分 项目进展 已完成游戏整体架构设计 已完成游戏界面.背景音乐等素材的收集 正在进行静态界面部分的 ...
- 【Android】使用BaseAdapter实现复杂的ListView【转】
本文转载自:http://blog.csdn.net/jueblog/article/details/11857281 步骤 使用BaseAdapter实现复杂的ListView的步骤: 1. 数据你 ...
- tomcat跟目录下work文件夹的作用
work目录只是tomcat的工作目录,也就是tomcat把jsp转换为class文件的工作目录. jsp,tomcat的工作原理:当浏览器访问某个jsp页面时,tomcat会在work目录里把这个j ...
- Scikit-learn 库的使用
1. 与文本处理相关的库 1. 对语料库提取特征词集合 from sklearn.feature_extraction.text import TfidfVectorizer, CountVector ...
- LightOJ 1027 A Dangerous Maze(期望)
https://cn.vjudge.net/problem/LightOJ-1027 题意:有n扇门,每扇门有个时间ti,选择正数的门可以在ti后带你走出迷宫,负数的门会在ti后带你回到起点,然后重新 ...
- 癌症免疫细胞治疗知识:CAR-T与TCR-T的区别在哪里?--转载
肿瘤免疫治疗,实际上分为两大类.一种把肿瘤的特征“告诉”免疫细胞,让它们去定位,并造成杀伤:另一种是解除肿瘤对免疫的耐受/屏蔽作用,让免疫细胞重新认识肿瘤细胞,对肿瘤产生攻击(一般来说,肿瘤细胞会巧妙 ...
- BZOJ 4569 【SCOI2016】 萌萌哒
题目链接:萌萌哒 我先不吐槽题目名……这道题的并查集好像我们考过……既然那道题我没写就来把这道题写了吧(雾 这道题由于合并操作只有\(m\)次,那么很显然的一个想法就是把建一棵线段树类似物,然后每次在 ...
- OpenGL超级宝典笔记——遮挡查询 [转]
目录[-] 遮挡查询之前 包围体 遮挡查询 在一个场景中,如果有有些物体被其他物体遮住了不可见.那么我们就不需要绘制它.在复杂的场景中,这可以减少大量的顶点和像素的处理,大幅度的提高帧率.遮挡查询就是 ...