Spring Cloud

测试一年多,上线就崩溃!微服务到底应该怎么测试?

霸气de小男生 提交于 2021-01-19 23:52:17
简介: 只有了解风险,才能及时应对,保障服务高可用。 不久前,也就是11月16日,澳大利亚交易所(Australian Securities Exchange, ASX)上线了一个新的交易系统,但因为出现故障而被迫关闭。这是其 2016 年因硬件故障导致休市后最为严重的一次事故。 测试了一年多,结果上线当天就奔溃 11 月 16 日中午,ASX 发布声明表示当天将休市,于次日正常时间重新开放。交易所给出的关闭的原因是“局限于单个交易指令中交易多种证券(组合交易)的软件问题导致了市场数据不准确。” ASX 此次升级的系统是由纳斯达克开发的最新一代交易系统,目前在全球广泛使用。为了保障上线后的安全运行,ASX、技术提供商纳斯达克( Nasdaq )、客户和第三方独立专家已经做了一年多的广泛测试,包括四次彩排。 微服务该如何测试? 看完了热闹,也看看咱们自己的系统。随着以 Spring Cloud、Dubbo 为代表的微服务架构的流行,现在很多企业都采用了微服务架构。随着服务越来越多,这些服务该如何测试?如何防范上面说的系统风险呢? 我们来捋一捋线上系统的风险,然后针对对应的风险来做对应的测试计划。以如下架构为例: 一般来说,一个业务系统的风险来自两处: 其一是 变更带来的风险 ,比如前面提到的新系统上线,或者我们给上图中的购物车服务修一个 bug 等等。 其二是 日常风险

云原生DevOps的5步升级路径

▼魔方 西西 提交于 2021-01-19 12:35:01
简介: 究竟什么是云原生DevOps呢?我们认为:云原生DevOps是充分利用云原生基础设施,基于微服务/无服务架构体系和开源标准,语言和框架无关,具备持续交付和智能自运维能力,从而做到比传统DevOps更高的服务质量、更低的开发运维成本,让研发专注于业务的快速迭代。 1、什么是云原生DevOps 我们先通过一个简单的例子来了解什么是云原生DevOps,它和DevOps有什么不同。 上图是一个大排档,图中的大厨在非常努力的去切、炒、制作各种美食,并将它卖出去。从原材料的采购到加工到销售到售后,都是一两个人完成。这是非常典型的DevOps场景,团队搞定端到端的所有的事情。这种情况,当厨师水平比较高、销售能力比较强的时候,可以做到高效率、低浪费。但存在的问题是,想要规模化会很难。因为它的流程都是非标准的,需要厨师有很强的个人能力。 我们再看这张南京大排档的图,虽然名字里有大排档,但它显然不是我们上面说的大排档。我们随便走进任何一家南京大排档,都可以发现,南京大排档的厨师,可以专注在为客户提供更好的菜品上,研发试验新菜品,并通过小批量的用户来尝试和推广。无论是用户量增加或减少,都能很快的去适应。店铺扩张也可以很快。这种我们可以理解为云原生DevOps。 那究竟什么是云原生DevOps呢?我们认为:云原生DevOps是充分利用云原生基础设施,基于微服务/无服务架构体系和开源标准

springcloud整合zookeeper替换已经停止更新的eureka

◇◆丶佛笑我妖孽 提交于 2021-01-19 07:57:21
点击上方 蓝色字体 ,选择“标星公众号” 优质文章,第一时间送达 作者 | 求知若渴的蜗牛 来源 | urlify.cn/m6VJbi 66套java从入门到精通实战课程分享 springcloud整合eureka实现服务的治理和负载均衡我已经再上篇https://www.cnblogs.com/wang66a/p/13746039.html进行了详细的介绍 但是现在eureka已经停止更新 固本篇主要讲解使用zookeeper替换eureka实现服务的治理 前段时间,了解了通过spring-cloud-config-server与spring-cloud-eureka-server作为配置中心与注册中心,同时了解到基于zookeeper或consul可以完成同样的事情,所以必须了解一下,这样有利于实际工作的技术对比与选型。 使用docker下载zookeeper 可看我https://www.cnblogs.com/wang66a/p/13754219.html这篇关于doker安装zookeeper的文章 下载和启动zookeeper之后可以通过zookeeper客户端工具zoolnspector连接测试zookepper是否启动成功 zoolnspector下载地址 链接:https://pan.baidu.com/s/16MsXQz2LUF5LWPhObpm1pA 提取码

警惕文化空谈的陷阱,落地DevOps工具才是关键

强颜欢笑 提交于 2021-01-19 03:40:22
转载本文需注明出处:微信公众号EAWorld,违者必究。 恍惚间,DevOps已经被讨论十年了 “如果系统是集中式的、环境是同质化的,从开发环境向生产环境推送程序变化的过程非常简单,不需要太多的自动化;但是今天的应用需要7×24小时运行、采用分布式架构、部署到多种环境,变更过程变得愈加复杂、难以自动化……不论在大型组织还是小型组织,施行DevOps在技术上都非常具有挑战性。” 上面这段文字如果放在今天,那只是段关于DevOps的、稀松平常的讨论,但是如果它写于十年前,各位读者会不会感到有一些惊讶? 这段文字写于2007年8月的下旬,很快就距今整十年了,这是我所知道的业内最早的关于DevOps的系统性讨论,我在整理收藏夹的时候偶然发现了它,这让我突然意识到: DevOps已经十年了。 可是,为什么雷声大雨点小? 博客网站dev2ops.org(据说是devops.org被抢注了,所以他们只能加个2,而devops.org至今仍是个空域名)的文章“What makes dev2ops so hard anyway?” 文中还罗列了阻碍DevOps施行的几个因素: 变更结果的可靠性和可预见性 不同类型的变更(数据、代码、配置、内容、平台等)对系统造成的不同影响未被充分评估 对分布式系统各部分的变更非常难以协调 开发与运维的组织边界难以界定 这几个因素在今天依然阻碍着DevOps的施行

java并发之TimeUnit理解

一笑奈何 提交于 2021-01-18 17:02:29
TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep(),在很长一段时间里Thread的sleep()方法作为暂停线程的标准方式,几乎所有Java程序员都熟悉它,事实上sleep方法本身也很常用而且出现在很多面试中。如果你已经使用过Thread.sleep(),当然我确信你这样做过,那么你一定熟知它是一个静态方法,暂停线程时它不会释放锁,该方法会抛出InterrupttedException异常(如果有线程中断了当前线程)。但是我们很多人并没有注意的一个潜在的问题就是它的可读性。Thread.sleep()是一个重载方法,可以接收长整型毫秒和长整型的纳秒参数,这样对程序员造成的一个问题就是很难知道到底当前线程是睡眠了多少秒、分、小时或者天。看看下面这个Thread.sleep()方法: Thread.sleep(2400000) 粗略一看,你能计算出当前线程是等待多长时间吗?可能有些人可以,但是对于大多数程序员来说这种写法的可读性还是很差的,你需要把毫秒转换成秒和分,让我们来看看另外一个例子,这个例子比前面那个例子可读性稍微好一点: Thread.sleep(4*60*1000); 这比前面那个例子已经好多了,但是仍然不是最好的,你注意到睡眠时间用毫秒

是找茬?还是装B?阿里面试每轮必问的“Spring Boot”意义何在?

瘦欲@ 提交于 2021-01-18 17:00:28
如今微服务如日中天,Spring Boot作为构建Spring Cloud全家桶的基础框架,早已经成长为后端的主流技术了,同时它也是Java工程师面试必问的知识点。 这一点呢,我是深有体会,因为每天都有大量读者都会在小编后台给我留言,说希望多分享一些SpringBoot相关的内容,每天也有大量学员检索SpringBoot相关的视频以及学习资料。 所以,今天小编就来给大家带来一波福利!在这篇文章我会推荐一些优质的 Spring Boot 实战书籍 (Spring Boot实战派以及Spring Boot2实战之旅) 帮助大家深入学习 Spring Boot。文章质量的话,大家可以放心。同时,小编还专门为大家准备了一份突击金三银四的面试必备宝典,有想要获取的小伙伴在文末有领取方式!! 废话不多说,我们直奔主题: Spring Boot实战派 入门篇(1~3章) 基础篇(4~6章) 进阶篇(7~13章) 文章重点 Spring Boot 进阶 本章首先介绍AOP、loC、Servlet容器;然后深入讲解自动配置原理、自定义 Starter、自定义注解:最后讲解异常的处理,以及如何进行单元测试 用ORM操作 SQL数据库 集成安全框架,实现安全认证和授权 集成NoSQL数据库,实现搜索引擎 集成Redis,实现高并发 本章首先介绍Redis的原理、概念、数据类型

SpringCloud应用在Kubernetes上的最佳实践——高可用(弹性伸缩)

只谈情不闲聊 提交于 2021-01-18 06:54:19
作者 | 三未 前言 弹性伸缩是一种为了满足业务需求、保证服务质量、平衡服务成本的重要应用管理策略。弹性伸缩让应用的部署规模能够根据实时的业务量产生动态调整,在业务高峰期扩大部署规模,保证服务不被业务冲垮;在业务低谷期缩减部署规模,避免资源浪费。 由于大部分云资源是按需取用,按量计费模式,相比使用 IDC,使用云的用户从弹性伸缩获得的成本优势是非常明显的,弹性伸缩也是大多数云上用户的选择。而关于如何用好弹性伸缩,一直是用户非常关心的问题,本文尝试围绕这个话题,给出一些相关的思考和优化实践。 有两种实现弹性伸缩方法,一种是“ 垂直弹性 ”,即“Scale Up”,另一种是“ 水平弹性 ”,也就是“Scale Out”。 1. 垂直弹性伸缩 垂直弹性伸缩一般是指通过升降服务器的规格来实现的弹性伸缩。这种伸缩方式对应用本身几乎没有约束,可以被大部分应用或组件使用,它的问题主要在两个方面: 动态调整服务器的规格而不影响上层部署的应用,对基础设施要求比较高,对于许多云厂商而言是个难题,并不能实现业务完全无感的动态变配; 垂直弹性无法突破单台物理设备的规格限制,面向巨量的突发业务增长,垂直弹性的应对能力是有上限的。 2. 水平弹性伸缩 而水平弹性伸缩恰恰相反,它依靠增减服务器的数量来实现弹性伸缩,对基础设施的要求不高,水平弹性除了可以解决容量上限的问题,多副本部署还能带来更高的可靠性

springcloud

亡梦爱人 提交于 2021-01-17 21:06:19
1. Auth2认证流程 用户 授权 ,颁发服务令牌,服务拿着令牌去请求资源 2. 令牌分为哪几类? 答: 分为 普通令牌和 JWT令牌 3. 向客户端返回的令牌 包括 哪几部分? 答: token(短令牌),刷新令牌,jwt令牌 4. 如何生成JWT令牌? 答: 使用 JwtHelper生成令牌,根据(内容,私钥) //创建jwt令牌 @Test public void testCreateJwt(){ //密钥库文件 String keystore = "xc.keystore"; //密钥库的密码 String keystore_password = "xuechengkeystore"; //密钥库文件路径 ClassPathResource classPathResource = new ClassPathResource(keystore); //密钥别名 String alias = "xckey"; //密钥的访问密码 String key_password = "xuecheng"; //密钥工厂 KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(classPathResource,keystore_password.toCharArray()); //密钥对(公钥和私钥) KeyPair

Spring Cloud Gateway微服务网关鉴权

拥有回忆 提交于 2021-01-17 10:01:02
一 网关鉴权 1 问题 当我们在未登录状态下点击“购买课程”按钮时,会显示“未知错误”,查看trade微服务控制台,发现,JWT为空,无法鉴权。 2 解决方案 微服务网关中添加自定义全局过滤器,统一处理需要鉴权的服务。 3 鉴权逻辑描述 当客户端第一次请求服务时,服务端对用户进行信息认证(登录) 认证通过,将用户信息进行加密形成token,返回给客户端 作为登录凭证以后每次请求,客户端都携带认证的token 服务端对token进行解密,判断是否有效 对于验证用户是否已经登录鉴权的过程可以在网关统一检验。检验的标准就是请求中是否携带token凭证以及token的正确性。 下面的我们自定义一个GlobalFilter,去校验所有的请求参数中是否包含“token”,如何不包含请求 参数“token”则不转发路由,否则执行正常的逻辑。 二 开发鉴权逻辑 1 网关中添加依赖 <dependencies> <!-- 网关 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <!--服务注册--> <dependency> <groupId>com.alibaba.cloud<

8月份Github上最热门的开源项目

风格不统一 提交于 2021-01-17 03:41:29
开源最前线(ID:OpenSourceTop) 猿妹整编 转载请注明来源作者 8月份GitHub上最热门的 开源项目排行已经出炉啦, 一起来看看上榜详情吧: 1 fastbook https://github.com/fastai/fastbook Star 8732 fast.ai的创始人、前Kaggle首席科学家Jeremy Howard教授在Github上开源的一本书籍,全书草稿已公布22章,通过这份它你将学到: 如何在计算机视觉、自然语言处理(NLP)、推荐系统、表格和时间序列数据分析中创建最先进的模型 如何使用全新的fastai v2库和PyTorch 深度学习的基础:什么是神经网络,它们是如何训练的,以及它们如何进行预测 为什么以及如何使用深度学习模型,以及如何使用这些知识来提高模型的准确性、速度和可靠性 如何将你的模型转换为实际的Web应用程序,以及在模型出错时如何调试模型。 最新的深度学习技术,尝试真正有意义的实践 如何阅读深度学习研究论文 如何实现深度学习算法从无到有 2 TDengine https://github.com/taosdata/TDengine Star 13038 TDengine是一个开源的专为物联网、车联网、工业互联网、IT运维等设计和优化的大数据平台。除核心的快10倍以上的时序数据库功能外,还提供缓存、数据订阅、流式计算等功能