wechat

SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(工具部署)

人走茶凉 提交于 2020-08-16 12:24:18
作者 | 孤弋 阿里云高级技术专家,负责 EDAS 的开发和用户体验优化工作。 导读 :上一篇文章 《SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(开发部署)》 我们介绍了从 IDE 插件内介绍了如何进行应用部署的方式,除此之外,目前 EDAS 还支持了额外的工具对其他场景进行覆盖,这一篇内容主要就是介绍 EDAS 上围绕部署的工具体系。 相关文章推荐: 《SpringCloud 应用在 Kubernetes 上的最佳实践 —— 开发篇》 《SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(开发部署)》 IDE 插件中进行部署 因为 IDE 是离开发人员的代码最近的工具,所以 IDE 插件中的部署能力也是专门为开发人员提供的部署工具,他的特点就是速度快、使用简单,同时也覆盖了 ECS 集群与 Kubernetes 集群中的 War/Jar 、以及自定义镜像的部署方式。具体使用方式,我们都已经整理成了官方文档,请在 EDAS 的官方帮助文档中,查看《使用 Cloud Toolkit 快速部署应用至 EDAS》章节。 不过对于线上的应用而言,如果随便一个开发人员都能进行随意的变更,这是一件很不安全的事情。EDAS 在命名空间设计的时候,也考虑到了这个问题,解决的办法就是 EDAS 上的命名空间

微信「拍一拍」可以撤回了,我们终于能告别「社会性死亡」了吗?

↘锁芯ラ 提交于 2020-08-16 10:14:29
它有多简单?张小龙说,它只用了一行代码。 它有多具争议?在每个涉及到#拍一拍#话题的微博下,几乎都能看到愤怒地要求取消这一功能的评论;但另一厢,「有什么好的拍一拍尾巴推荐?」在知乎上又是一个有近五百万人浏览的热门问题。有人恨它恨得牙痒痒,有人又玩得不亦乐乎,可以说,拍一拍佐证了「人类的悲欢并不相通」。 从 6 月 17 日上线当日起,就有许多人预言「拍一拍」会像「朋友圈评论发表情包」一样光速下线,在三天一翻新的互联网记忆中被迅速遗忘。可两个月过去了,拍一拍竟然坚韧地保留了下来。新鲜劲儿消退以后,大家也逐渐接受了这一功能,学会了怎样「恰到好处」地拍朋友们。 这段时间里,微信团队也对「拍一拍」进行了优化。包括支持自定义后缀、拍一拍后弹出气泡提醒,以及今天刚刚上线的「2 分钟内撤回拍一拍」功能。但这似乎还不足以平息人们的不满,在爱范儿的微博下,热评依旧是「能不能把这个功能删了?」 这种两极分化的态势会令人感到疑惑:「拍一拍」到底是精妙的社交构思,还是失败的多此一举? 微妙的社交空间 就个人看来,「拍一拍」是个很棒的功能——它拓展了社交互动的可能性。 按张小龙的说法,它能让微信上的朋友「像蚂蚁一样打招呼」。也就是说,它在数字空间中提供了一种「触觉」的替代品。 在「拍一拍」诞生之前,想要指定某个朋友来谈论特定话题,要么直接叫 Ta 的名字,要么使用「@某人」的功能,但这两者都显得过于正式

Linux系统中虚拟设备文件的各种实用用法

大憨熊 提交于 2020-08-16 05:55:02
大家好,我是良许。 大家知道,在 Linux 下,一切皆文件,对于设备文件也是如此。我们在工作的过程中,经常会看到 /dev/null 这个玩意,那它到底是什么呢? 专业地讲, /dev/null 是一个虚拟设备文件。而对程序而言,这些虚拟设备文件则会被当成真实的文件对待。程序可以向这种数据源请求数据,所得到的数据将由操作系统提供。但是,这些数据并不是从磁盘上读取到的,而是由操作系统动态生成的。虚拟设备文件的一个典型例子就是 /dev/zero 。 然而,当你想向 /dev/null 写入数据时,无论你向 /dev/null 中写入什么数据,最终都会被丢弃,就像被丢入黑洞一样。 既然如此,那么 /dev/null 到底有什么用?要理解这个问题,你首先必须要对 Linux 系统或者 Unix 以及类 Unix 系统的标准输出以及标准错误输出有基本的了解。 标准输出文件与标准错误输出文件 一个命令行程序可以生成两种类型的输出:标准输出与标准错误输出。标准输出会被记录到标准输出文件 stdout ,而标准错误输出会被记录到标准错误输出文件 stderr 。 默认情况下,标准输出文件与标准错误输出文件都与你的终端窗口相关联(或者控制台)。这就意味着任何被输送到标准输出文件或标准错误输出文件的信息都会被显示在你的屏幕上。 但是,通过 Shell 中的重定向,你就可以改变这个行为。比如

Spring 如何在一个事务中开启另一个事务?

好久不见. 提交于 2020-08-16 04:30:20
这样的情景可能不常见,但是还是会有的,一旦遇到,如果业务比较复杂,就会很麻烦,但是还是有解决的方案的,比如将一个service方法拆成两个方法,也就是将两个操作的事务分开。 但是这只适用与业务比较简单的,如果出现多次数据库的写操作,而我们调用的系统只需要其中一个写操作的最新数据,如果我们将它分开,那么如果调用目标系统出现异常的时候,那么之前的写操作就不能回滚了。 举个简单的例子: 南昌代孕【网址:bztss.com】 @Service public class ServiceA { @Transactional public void doSomething(){ 向数据库中添加数据; 调用其他系统; } } 这里就用伪代码来做示例了,当我们执行了“向数据库中添加数据”,我们去数据库中查询,发现并没有我们添加的数据,但是当我们的service这个方法执行完成之后,数据库中就有这条数据了,这是由于数据库的隔离性造成的。 Spring中的事务注解 @transactional 提供了一个参数: 代孕公司【网址:bztss.com】 Propagation propagation() default Propagation.REQUIRED; 这个参数是定义 Spring事务的传递性的,默认值为:required,也就是如果有事务,就加入事务,如果没有,就创建事务。 这个参数的值有很多

Vim的三款实用插件

懵懂的女人 提交于 2020-08-16 04:09:07
Vim 是 Linux 下的常用文本编辑器,但也经常被称为是一个上古神器,因为它对于初学者而言相当不友好,也不好入门。 但是,对于高手而言,他们不仅将 Vim 玩得很溜,而且还将它当作代码开发的主要工具。为什么?因为 VS 等 IDE 比较庞大,运行起来比较慢,而 Vim 就相当轻量了,瞬间就能打开代码并开始工作,这对于追求效率的高手而言自然是爱不释手。 但是,如果是官方版的 Vim ,依然是局限性相当大,十分不方便。但是高手毕竟是高手,高手懂得使用插件。下面良许就介绍高手常用的 3 个很实用的插件。 1. 括号自动补全插件 这个插件叫 Auto Pairs ,它可以自动补全配对的符号,比如:花括号、方括号、圆括号、引号等。这对于我们程序员而言非常有用,因为在代码里我们大量使用到了上述的几种配对符号,如果能自动补全那将很大提高我们的写 bug 效率。 使用这个插件后,当我们敲入一个符号时,会自动补全它的所匹配的另一个符号。比如,我们敲入 [ 时,它会自动补全 ] 。当我们删掉 [ 时, ] 也自动被删除了。 如果我们开启了自动缩进,那么它不仅会在合适的位置补全匹配的符号,还会将光标插入到合适的位置。比如下面这段 Go 代码: package main import "fmt" func main() { x := true items := []string{"tv", "pc",

如何从手动测试转到自动化测试

人走茶凉 提交于 2020-08-16 02:46:47
必须认识到测试是一项复杂的活动,并且手动测试永远无法用自动化全面替代。 有这个基础,下一步就是如何 成为优秀自动化测试工程师的7个步骤 。 自动化什么? 数据准备 如果您想自动化数据准备工作,请尝试了解数据库,常用到的 mysql 和 redis 等。 学习语言能力,我建议使用Python、Groovy或者java,这几种比较流行,当然您也选择其他编程语言。 尝试将您每天手动进行的一些数据准备工作自动化。 API测试 如果您想自动化API测试,可以学习如何使用 SOAP UI 。深入了解 SOAP UI 的基础功能和脚本编写。或者尝试使用 Chrome 插件 Postman ,它非常简单,功能也足够满足测试需求。您可以在 postman 中使用 JavaScript 编写各种各样的脚本,因此学习基本的 JavaScript 在使用 PostMan 中会让您如虎添翼。 Web应用程序测试 了解 HTML 的基础知识,以便可以定位元素。了解 HTML 之后,请学习 XPATH 。了解 CSS 的基础知识,以便您可以使用 CSS选择器 。 了解为什么需要XPATH和CSS选择器:-) 选择一种自动化框架,大多数人选择使用 Selenium自动化测试 以及基于 Selenium 的测试框架 + 一种编程语言( Java 或 Python )。 Selenium 本身不会提供出色的报告功能

我的开发日记(二)

大城市里の小女人 提交于 2020-08-15 10:39:12
今天主要做了测试用户模块的基础数据的管理,遇到了一个比较头大的问题,用户属性存的都是 id ,但是返给前端需要转成相应的 string 类型,然后还有各种 非必传 参数的验证,一下子来个这么复杂的 SQL ,特别在是在 mybatis 的 XML 文件中配置,着实让我学习了一阵子。分享一下学习成果。 需求图如下,按照几种筛选条件获取当前用户创建的测试用户列表: 接口文档如下: 里面都是必传参数, string 类型默认 "" , number 默认 0 表示全部。 下面是我的 XML 文件内容: <sql id="table"> qa_test_user </sql> <sql id="user_status"> qa_user_status_name </sql> <sql id="env"> family_base_env </sql> <sql id="user_role"> qa_role_name </sql> <select id="findUsers" parameterType="com.okay.family.common.bean.testuser.SearchUserBean" resultType="com.okay.family.common.bean.testuser.TestUserBean"> select tu.id,tu.descc,tu

Linux中.bashrc与.bash_profile的对比

六月ゝ 毕业季﹏ 提交于 2020-08-15 08:38:26
如果你平时在命令行上花费了大量时间,那么你可能会萌生出希望定制 Shell 环境的想法。今天本文就和大家讲解该如何实现你们的这个想法。其实可以通过创建别名、向环境变量 $PATH 添加新目录或更改 Shell 提示符的外观以实现在命令行上节约时间。 在你寻找解决方法的过程中可能会看到过一些教程,比如说将配置文件放在 .bashrc 或者 .bash_ profile 中,亦或是将配置放在另一个可以通过 Bash Shell 读取和执行的文件中。 接下来,我将向大家讲解 Bash 启动文件以及 .bashrc 和 .bash_ profile 之间的区别: Interactive Login 和 Non-Login Shell Bash 被调用时,会从一组启动文件中读取并执行命令,至于读取哪些文件取决于 Shell 是作为交互式登录调用还是作为非登录 Shell 调用。 其实, Shell 可以是交互式的,也可以是非交互式的。简单一点地说,交互式 Shell 是一种读写用户终端的 Shell ,而非交互式 Shell 完全是与终端无关的 Shell 。 值得注意的是,交互式 Shell 可以是登录 Shell ,也可以是非登录 Shell 。 有几种情况可以调用登录 Shell ,一种是当用户通过 ssh 或本地方式远程登录到终端,还有就是使用 --login 选项启动 Bash

程序员轻松绘图神器

冷暖自知 提交于 2020-08-15 08:25:00
我们程序员在工作生活中,有很多场合下需要绘制图表,比如PPT里的图表,学习笔记的一些助记图,还有最常见的,工作中大量使用的流程图。 在 Window 下,我们有很多好用的工具,比如 Visio 、 EA 等等。这些软件也很好用,但都有个缺点,那就是太复杂。我们需要一定的美工基础,还要学很多软件操作,才能画出一张很简单的流程图。 而且,更要命的是,一旦需求发生变动,很不好修改,往往牵一发而动全身。所以经常在听到需求变更的时候,良许就脊背一凉…… 后来,在大神的介绍下,良许开始使用一个神器。这个神器不需要你懂美工,也不太需要懂软件操作,绘图的过程跟你写软件的过程差不多,短短的几行代码,就能把你头脑里的想法表现出来。 而且,不用担心布局,不用担心修改,甚至都不用鼠标,也给制作出相当精美的作品! 这个神器就是: dot 命令! 这个神器还有个图形界面版,叫 Graphviz ,但良许习惯了命令行,一般是在命令行下完成的。 我们先来看下它能做什么。以下几个图片选自它的官网: 这只是其中的几张图而已,更多图片可以去它的官网查看: http://www.graphviz.org 这个软件非常强大,如果掌握得好的话,可以画出非常好看的作品,而且还不怕产品经理改需求。但是,在大多数情况下,我们不太需要用到它的高级功能,往往一些很基础的功能就可以应付我们工作中的 80% 以上的需求了。

16. 理解 Go 语言面向对象编程:接口与多态

一曲冷凌霜 提交于 2020-08-15 07:03:47
Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客: http://golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime 0. 接口是什么? 这一段摘自 Go语言中文网 在面向对象的领域里,接口一般这样定义: 接口定义一个对象的行为 。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由对象本身去确定。 在 Go 语言中,接口就是方法签名(Method Signature)的集合。当一个类型定义了接口中的所有方法,我们称它实现了该接口。这与面向对象编程(OOP)的说法很类似。 接口指定了一个类型应该具有的方法,并由该类型决定如何实现这些方法 。 1. 如何定义接口 使用 type 关键字来定义接口。 如下代码,定义了一个电话接口,接口要求必须实现 call 方法。 type Phone interface { call() } 2. 如何实现接口 如果有一个类型/结构体,实现了一个接口要求的所有方法,这里 Phone 接口只有 call方法,所以只要实现了 call 方法