这是why的第 107 篇原创文章git
你好呀,我是why。github
刚刚过去的周末你干啥了,是卷起来了,仍是躺平了?web
我实际上是想躺平的,可是无心间发现一个学习的网站,竟然被这个网站吸引了,而后就跟着网站卷起来了。面试
真是一个很是不错的网站,好东西,要你们分享,因而我决定“曝光”一下。redis
介绍这个网站以前,我先问你一个问题:spring
Arthas 这个 Java 程序诊断工具,你知道吧?
我相信绝大部分同窗都是知道的,可是也有很大一部分同窗仅仅是在“纸上谈兵”的阶段而已。数据库
没有本身实际操做过。浏览器
为何呢?服务器
我猜你刚刚知道 Arthas 的时候,确定是被它各类炫酷的操做、页面给吸引到了。架构
心想:卧槽,这么 6?
.png)
兴致勃勃的准备实操一把,结果一看:须要本身搞个 Demo ,把 Demo 扔到服务器上运行起来,而后在服务器上安装 Arthas,才能分析。
这一套操做对于大部分人来讲是没有啥问题的。
可是仍是有至关大的一部分同窗,都没有一个属于本身的服务器。
巧妇也是难为无米之炊的呀。
第一步就被卡的死死的。
有心实操,奈何条件有限。
因而这事就被搁浅了,放着放着,因为本身没有实操过,关于 Arthas 的各类骚操做也就忘的差很少了。
没有一个趁手的 Demo,没有服务器,没有一个安装好环境的服务器。
这种问题常常出现,也算是学习中遇到的“最后一千米”的问题。
我碰到的这个网站,就是为了解决“最后一千米”这一问题的。
也许它还不够完善,可是至少在 Arthas 上的支持已是属于无可挑剔了,真正的手摸手教学。
铺垫了这么多,那么网站是啥呢?
就是下面这个网站:
https://start.aliyun.com/
知行动手实验室,是阿里旗下的阿里云弄出来的云原生开源技术体验平台。
它自带运行环境。
使用者只须要关心教程内容自己,无需为繁琐的运行环境准备工做浪费时间。全部实验都在一个事先准备好运行环境的容器中运行。
它具备沉浸式学习体验。
集交互式文档、终端、编辑器三个窗口于一个浏览器页面,无需在多个窗口来回复制粘贴。
它能够一键自动执行命令、代码自动修改。
文档实时可交互,经过鼠标点击便可一键自动执行命令、代码自动修改等操做;也能够选择在终端、编辑器内手动输入查看效果。
我知道,这里的画风看起来很像是一个广告。
可是我发誓,我真的是自来水,真心推荐。
知行动手实验室,看这个名字就知道强调的是“行知合一”,是“动手”。
我曾经看到过阿里的一篇名叫《我看技术人的成长路径》的文章。
文章里面提出了一个 721 原创:
70% 作中学,20% 向他人学习,10% 自学
可是实际状况呢,咱们不得不认可,你们自学占据了至关大的比重。
而你们自学的时候都有一个通病就是:只看、只想,基本不动手。
关于动手,我印象最深的就是我看这本书的时候:
我记得看这本书的时候,是我刚刚毕业一年多的时候。
当时以为技术书还挺贵的,仍是和同事一块儿合买的,一人出一半的钱,书放在办公室你们一块儿看看。
我那个时候一有时间就去翻翻这书。
第一次看的时候感受:哇塞,这真是一本好书啊。里面全是我不知道的知识点。
可是看完以后,没隔多久,遇到一个问题而后想了半天:呃,这个问题书上好像讲过啊,怎么就想不起来了呢?
因而我就问同事:你是怎么看这个书的呀?我前段时间把书每一页都翻完了,可是如今好多东西都想不起来了。
他告诉我:首先得多看,书中的信息量对你来讲仍是太大了,看一遍吸取不彻底是很正常的。还有,书里面的这么多动手操做的实例,你跟着敲了没?我都操做了一遍,遇到了各类各样的坑。印象天然而然的就深入了一点。
可谓是一语点醒梦中人,我确实是没有实操过。
不只没有实操过,甚至一看到实操部分的具体命令,我都是几眼就瞟完了,由于我以为这部分不重要。
后来我又看了一遍,看这遍的时候,我搞了几个服务器,就跟着书上,把上面的命令都敲了一遍。
进度慢了不少不少,可是吸取的东西也多了不少不少。
过去这么几年了,时至今日,我都记得周末的时候我跑到公司去翻这本书的场景。我都记得我跟着书上搭建集群的时候遇到的各类各样奇奇怪怪的问题。我都记得那 16384 个槽,还有那我怎么也运行不起来的 redis-trib.rb。
我都记得几年之后的一次,面试官问我:你了解 Redis 的集群吗,你本身搭过集群吗?
我固然记得了,毕竟以前那个只有一年经验的小伙子硬着头皮搭集群的时候,心态都被搞崩过数次。
还有近段时间断断续续在看的《MySQL实战45讲》、《MySQL是怎样运行的》、《高性能MySQL》。
里面其实都有大量的实例,特别是 45 讲,好东西呀,老师全是基于案例去讲的。
我看的时候也看的很慢,反正无论懂不懂,先动手开几个窗口,而后把实验的 SQL 准备好,跟着老师一步步的来。
总之,就是要动手。动手,才是学习新技术的不二法门。
作中学,就是动手去作,边作边学。
可是动手的时候大多数时间都是在环境的准备上,致使效率稍微有了那么一点点的低下。
而这个网站,就在部分项目上,解决了这个问题。
回到知行动手实验室,带你们一块儿逛一下这个网站。
说真的,目前这个网站的东西不算特别多,也就是花费了我一个周末的时间研究了一圈。
主要是里面还有一些我不太了解的开源项目,去了解了一下,开拓了一下眼界。
主打的都是阿里生态下的一些技术栈,目前一共有 16 个教程:
能够看到,首先映入眼帘的就是 Arthas 这个诊断工具,毕竟是阿里的亲儿子中比较有出息的一个嘛。
全力推广,不过度。
Arthas 其中分为了四个教程,从入门到实践包罗万象。
接着是 Spring Cloud Alibaba 系列体验:
里面的六个小实验,其中分布式配置、服务注册与发现都是基于 Nacos 作的。 RPC 调用使用的是 Dubbo Spring Cloud、限流与熔断基于 Sentinel、分布式事务使用 Seata、分布式消息基于 RocketMQ。
基本涵盖了微服务开发的主要模块。
算的上是一次完整的体验。
固然了,还有一些其余的 RocketMQ、Dapr、Dubbogo、ChaosBlade、k8s 的实操教程,就不一一解释了。
你们知道目前里面有这些东西就行。
上面提到的你们可能对于 Dapr 和 ChaosBlade 稍微陌生一点。
简单的说一下。
Dapr 的全称是 Distributed Application Runtime,翻译过来就是分布式应用运行时。
它主要是为了云原生而服务的。
应该是属于服务网格中的一种技术,是一种运行时,支持k8s,目的是为了更好的隔离业务,让业务更少的感知中间件等基础建设。
其实与它对标的,应该就是 istio 架构。
须要注意的是 Dapr 是由微软发起的一个开源项目,并非阿里。
阿里是 Dapr 开源项目的深度参与者和早期采用者,至关因而对于 Dapr 的一个国内大厂背书。
而 ChaosBlade 就是阿里巴巴开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具,帮助企业提高分布式系统的容错能力,而且在企业上云或往云原生系统迁移过程当中业务连续性保障。
引用其 git 上的描述:
https://github.com/chaosblade...
该项目的生态以下:
目前支持这么多场景:
好比在知行动手实验室里面就有三个实验场景:
总之,关于 ChaosBlade 你就记住一句话:
它是来搞破坏的。给系统或者系统运行的环境注入各类各样的故障,以测试并提高系统的稳定性和高可用性。
在知行动手实验室里面,除了前面提到的官方教程外,它还支持你们本身上传教程。
下面这几种状况就很适合在上面发布教程:
- 开源、开发者社区在知行发布开源项目入门教程,帮助你的社区用户更好的上手
- 技术书籍做者在知行发布你的随书实验,弥补技术书籍只能阅读、没法实操的缺陷
- 培训机构在知行发布的课程先关的教程,配合已有的课程视频,你的学员能够在知行动手实操
你想一想,要是我前面提到的《Redis开发与运维》书里面的随书实验能发布到这里,那岂不是美滋滋?
学习效率确定又高了起来。
教程,是该实验室的一大核心功能。
可是,它还有另一大功能:
Java 工程脚手架,下面的标语是:
更适合亚太区开发者的 Java 工程脚手架。
虽然我目前还不明白为何是“更适合亚太区”,可是反正听着就很厉害的样子。
其页面是这样的,是否是很眼熟?
一看就是对标的你们更为熟悉的这个:
https://start.spring.io/
可是经过个人实际使用,我不得不说,仍是阿里的脚手架更好用一点。
好比我用阿里的脚手架,搭建的时候选择一个 web 项目的示例代码:
该项目结构以下:
并且这个 web 项目不须要改一行代码,甚至不须要你启动数据库,就能直接运行起来。
由于其使用的 h2 数据库:
运行起来后,访问 h2 控制台以下:
虽然 Demo 项目运行的过程当中我发现了几个 bug,可是总体无伤大雅,修改起来也很简单,对于初学者来讲,仍是很友好的。
在这个页面我还发现了一个叫作 COLA 的项目架构:
COLA 是啥玩意?
https://github.com/alibaba/COLA/
我在官网上拉了一个 COLA 的 Demo,跑了起来,项目结构以下:
官方给了这样的一个代码结构图:
看到这里的时候,我大概明白了,有 App 层、Domain 层、 Infrastructure 层,这个架构其实就是 DDD 思想的一种落地吧。
通过这两天短暂的了解,我发现若是想要理解一下抽象的 DDD 思想,那么 COLA 架构,我感受是一个不错的切入点。
前面介绍了这么多东西,我仍是来带着你实操一把,里面的黄金教程:
其实我以为真的没有这个必要,由于它上面的教程已是一步步的手摸手教学了。
好比,你看这个 Arthas 基础教程,我给你录个屏幕:
左边是操做文档,右边是运行环境。所及即所得,多香啊。
我是强烈建议你把四个教程都本身去看一遍,操做一把。
可是重心能够放到这个教程里面:
你看看这个教程里面的 14 个实验:
都是实战性的手摸手教学,别人环境、场景、工具都给你准备好了,你只要须要关注于怎么使用这个工具就好了。
好比其中的“Arthas热更新代码案例”,这个其实就是一个生产环境经常会遇到的一个问题:
有一个判断逻辑有问题,我不想修改代码以后,从新打包,而后走上线流程,怎么办?
Arthas 热更新了解一下?
好比,下面的代码:
@GetMapping(value={"/user/{id}"}) public User findUserById(@PathVariable Integer id) { logger.info("id: {}", (Object)id); if (id != null && id < 1) { throw new IllegalArgumentException("id < 1"); } return new User(id.intValue(), "name" + id); }
如今当请求的 id 小于 1 的时候会抛出异常。可是上线以后,咱们通过评估发现这个地方也许返回一个默认的值,不抛出异常会更好一点。
那么咱们就能够用 Arthas 对这段代码进行热更新。
左边是修改以后,右边是修改以前:
具体怎么去修改,怎么去用 ClassLoader 加载修改以后的代码,这个案例里面都有详细的使用说明:
固然了,若是你要是在实操以后,又再去了解了其热更新背后的工做原理,那么是再好不过的了。
知道了使用方式,掌握了实现原理。恭喜你,再给本身的套一个生产案例,不经意间面试的时候有多了一个加分点。
另外,悄悄的说个骚操做。
你能够随便找个教程,领个窗口,而后......
好比我装个 Redis:
用起来也是不错的:
并且它也支持文件的上传和下载:
诶,反正就是玩嘛。就当熟悉 Linux 命令了。