🌓

ngrok实战踩坑

使用ngrok的场景:内网服务发布到外网,服务的内网穿透。
具体如何操作的网上很多文章,这里就不赘述。
可以参考:
一分钟实现内网穿透(ngrok服务器搭建)
自搭Ngrok实现树莓派内网穿透

整个流程

有坑的地方

编译安装的文件是哪些

首先找到安装的目录,我的是/usr/local/src/ngrok/
那么编译完的可执行文件就在/usr/local/src/ngrok/bin

证书在:
/usr/local/src/ngrok/assets/server/tls
/usr/local/src/ngrok/assets/client/tls
可执行文件+证书,拷贝到一起,就是一套完成的客户端和服务端了。

后台运行

ngrok 用 & 不能后台运行
这就要使用screen这个命令
首先安装screen
apt-get install screen
之后运行
screen -S 任意名字(例如:keepngork)
然后运行ngrok启动命令
最后按快捷键
ctrl+A+D
既可以保持ngrok后台运行
http://wdxtub.com/2016/04/16/thin-csapp-1/

ngrok客户端无法注册到服务端

阅读全文

YAML入个门

拷贝自:http://www.ruanyifeng.com/blog/2016/07/yaml.html

YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。

本文介绍 YAML 的语法,以 JS-YAML 的实现为例。你可以去在线 Demo 验证下面的例子。

一、简介

YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。

它的基本语法规则如下。

1
#

表示注释,从这个字符一直到行尾,都会被解析器忽略。

YAML 支持的数据结构有三种。

以下分别介绍这三种数据结构。

二、对象

对象的一组键值对,使用冒号结构表示。

1
animal: pets

转为 JavaScript 如下。

1
{ animal: 'pets' }

Yaml 也允许另一种写法,将所有键值对写成一个行内对象。

阅读全文

测试测mysql语句的性能——explain ,Mysql查询优化器的使用

MySQL 查询优化器有几个目标,但是其中最主要的目标是尽可能地使用索引,并且使用最严格的索引来消除尽可能多的数据行。最终目标是提交 SELECT 语句查找数据行,而不是排除数据行。优化器试图排除数据行的原因在于它排除数据行的速度越快,那么找到与条件匹配的数据行也就越快。如果能够首先进行最严格的测试,查询就可以执行地更快。
MySql 深化学习

1 explain用法

explain可以帮助我们分析select语句,找出select语句的瓶颈,从而可以针对性地去做优化,让MySQL查询优化器更好地工作。

MySQL查询优化器有几个目标,其中最主要的目标是尽可能地使用索引,并且使用最严格的索引来消除尽可能多的数据行

使用explain+select语句,会返回以下的一个表,截图使用的navicat的工具截图:

下面对上述表的每一列进行说明:

1.1 id列

说明:MySQL Query Optimizer 选定的执行计划中查 询的序列号。表示查询中执行 select 子句或 操作表的顺序,id 值越大优先级越高,越先 被执行。id 相同,执行顺序由上至下。

1.2 select_type列

select_type查询类型

说明 SIMPLE

简单的select查询,不使用union及子查询 PRIMARY

最外层的select查询 UNION

UNION中的第二个或随后的select查询,不依赖外部查询的结果集 DEPENDENT UNION

UNION 中的第二个或随后的 select 查询,依赖于外部查询的结果集 UNION RESULT

UNION 查询的结果集 SUBQUERY

子查询中的第一个 select 查询,不依赖于外部查询的结果集 DEPENDENT SUBQUERY

阅读全文

开始撸书

我这个人有个毛病,实践比较少,学习偏理论。读书时代,不偏科,没有强的,没有弱的。就是所谓的动手能力不足一类。但是并不妨碍我进步啊。上次一周多电,嗑了一本《操作系统之哲学原理》,感觉很爽。 雾中看花,打算停止在网络上搜集零散的知识了。系统性的回归一遍计算机领域的基础知识,本人是半个计算机应用门类的高材生,本科(尼玛我是一本进去的,东三省都是二本线,朝鲜族的三本...

阅读全文

我公司目前的敏捷持续部署总结和展望

上一篇文章用了我2个晚上,今天把老早之前就想写的公司持续集成的总结和展望写了,算是给自己大脑一个交代——对自己说到做到。

持续的干货三大块:

为了规避风险,隔离不可控因素。三大块中又可以插入环境差异。通常是二到四个:

持续集成三大块,通常就在1\2\3环境里不停的迭代。最后到生产上被利用。生产迭代频率相对低一些。

代码管理

公司刚建立的时候用的是SVN,那个时代我还是个小白,并没有过多参与。后来,公司领导看git的分布式代码仓库牛掰,就在观望、学习、变革中,把代码管理的环境迁移到了git上面,这期间,团队经历了不适应,不会,抱怨,理解,能用,会用,善用的转变。主要还是招聘到了一个git小王子,他帮助团队对git的理解大踏步前进。废话讲完。

git工作流

git工作流
从推动力上来说,研发团队的推动力来自产品和市场。这个在写公司srum流的文章里有提及。
这个地方就不啰嗦git的工作流了。我们遵从了Gitflow工作流的基本逻辑。实际运用中灵活处理。
想了解git的工作流请移步github上的git-workflows-and-tutorials

数据库变更管理

数据库是最难控制变更的。因此我们经过探索和总结摸索了一套较为有效的管理方式。可能还不是最科学的,虽然会有些问题,但是目前运作问题不算大。也很少看到这方面的文章。我们约定,数据库变更以脚本方式提交,禁止研发在测试环境自己修改数据库,变更需提交脚本作为依据。那么,我在执行过程中,如测试环境A,跑了,我就会以修改文件夹名称,以名称为标记。如果脚本还要再修改,则研发口头告知或他直接提交新的变更脚本。变更脚本有若干个,通常以任务标号为命名规则,没有项目标号则按自定义方式定义。
这套机制,实施最大的难度是协调,让研发了解这个规则。了解并熟悉这套流程之后,基本就没有什么大问题。

编译打包发布测试环境

现在这一套全部脚本化,总结就是流程是逐步完善起来的,一个阶段有一个阶段的做法。
开始,研发手动在本地打包,工具eclipse+maven,打包完后手动上传到服务器的tomcat指定目录。那会我们只有3个项目,这么做问题不大。
后来,总是等着研发发布,太慢了,这么low的重复劳动我说我来做好了,你教下我怎么打包的,然后我就会了,我就研究了maven的一起机制。搞了那么一周多点,由于拿到了测试服务器的账户密码,我就在想怎么可以提高效率。研究了明白了里面的原理,我就很自然的认为,既然本地可以打包,那服务器上到打包拷贝过去不是更快,网络传输的时间就略去了。于是,我测试了下,填了很多坑,手动在服务器上打包发布成功。就掌握了最原始的发布。
再后来,项目越来越多,多到大于10个,虽然只有几个发布频率很高,但是手动发布感觉劳心费力,效率底下,我就琢磨如何提高。shell就引入。项目进度太快,我根本没有时间利用上班时间搞,于是下班后,自己一点一点测试。把第一版的自动发布脚本写出来,结合crontab 命令,每天自动发布。然后就轻松多了。后来专门利用业余时间对shell做了一个深化,就有了一次重构。
可以参考:http://blog.csdn.net/windanchaos/article/details/53490630
现在使用的脚本已经不是这个版本了,又被我重构了一次。由之前的一锅贴全部发布,改进为任意项目选择发布,由jenkins驱动。现在的模式:自动+手动方式。比起从前还是大大的加快了迭代测试效率。虽然还有很多问题。比如现在的不熟结构是所有项目都在一个tomcat下面,发布一个,其实是影响全局的。全套发布下来,花了很多不必要的时间。
当然,还写了很多发布小工具,比如自动识别24小时内修改提交到代码库的js/css/jsp等静态资源文件,巧个命令自动拷贝过去,完全不用重新打包。
还存在的问题:
1、tomcat部署在一起导致的发布启动效率,浪费不必要的时间。主要是系统资源不够,没有去拆分。
2、外网地址一周要变2-3次,需要手动去修改域名映射。浪费时间。
3、jenkins让人人都具备发布能力,从某种意义上来说是不恰当的。虽然解放了我,但是还是存在相互干扰的情况。不算严重。

阅读全文

我公司商城架构学习和研究

我可以一口气把我所了解的技术说一遍,但是我却无法更深入的理解这些东西在具体使用中的职责是什么,所以有了本篇博客一个记录、学习。

商城的后台是java语言的,所以很自然的使用了:

jsp+servlet+structs2+hibernate+spring+ajax

jspserlet我之前学习过了,其中一个整理了一篇日志。我手上有一本《JavaWeb编程实战宝典》,学习到jsp写登陆就暂停了。哦~大不当啊,没有持续。当时我在干什么呢?从日志记录来看是分神了,去捅了一点研发管理、测试管理的理论,加上最近太忙,就没有拐回来所致,哎,我这个人就是太贪心了,面面俱到,没有深入的。所以这个计划还是要继续下去。话又说回来,学这么多,其实我在测试这块的累计还是有限啊,明年怎么涨工资啊,万一干的不爽出去找工作,卖什么啊?说什么jmeter会用,讲真我真不觉得那工具能怎么样,我花了2天晚上就把教学视频看完了。真的在工作中使用,作为一个测试,你唯一厉害一点的就是工具熟悉一点,压测的时候也需要研发配置你,给你开接口才可以压测。真的不能以为你掌握了一个性能工具就懂性能测试了,不是那样的,要做一个压测,都是团队合作,反正我做了很多次压测,基本上是low的一逼,我甚至教研发用jmeter,最简单那种一教就会,在研发内部推荐大家自己压,一个研发反应快马上就懂压测自己的代码了,嘿,测试小朋友,你的价值呢,搞笑啊,会用jmeter?由于我之前研究学习了http协议,用起jmeter还是没有什么障碍。知识网上有,不懂2分钟后就懂了,再不行,开源的有官方文档,读啊,尼玛六级不是白过的。最近一周读完了《操作系统之哲学原理》后,对计算机又加深了认识,看看对性能测试这个方向真的感觉我做的太low逼了。扯得远了点,就是说学的东西(就是这个javaweb宝典)啊,不好卖钱,我又缺钱,而且还很贪(双11买了一堆无关测试的书)。三难啊。

使用的容器:tomcat,这个基本配置是我在维护,有所了解,但是还没有达到精进的程度,比如性能优化怎么搞,我就不太懂。这里还有提升空间。最近去看了jvm的原理,忘了摘抄,大概知道些,堆栈,垃圾回收,线程,这个地方回头单独出文。

代码管理工具:git,这个在公司内部使用最深的人大概就是我了,命令行操作无形的装逼,脚本自动化之类的,可以解决各种发布的问题,什么多少小时内提交过代码就怎么样之类的逻辑。不懂,查一下就解决了,所以没有什么困难了。

编译和包管理工具:maven。能用,编译打包,其他的更深的没有必要纠结。

研发工具:eclipse。只能呵呵了,java用的少,基本能用起来,一般是看git log,查看方法调用、查看研发修改代码引用之类,自己写代码还差点火候,还有延展空间。

数据库:mysql。我负责刷脚本,研发提交脚本过来,我负责刷生产和测试库,一些语法错误可以纠正,什么左联右连不熟啊亲。其他select\update\insert\之类的知道,但是不熟练。所以这个地方可以找个时间再总结下,虽然已经看过2次教材了,但是平时用得少,知而已。哎,一切以效率为先,navicat足够了。。。自我鄙视

页面框架:vue+kendo。哦,这个就完全不是我的领域了。但是我shell帮他们解决了每次发布手动替换的问题,自动化发布。我的水平,知道css/html/javascript的分工,css的几个样式分类器(不确定这么叫),html的标签啊,大概知道html里面的结构之类。好歹也是用selenium玩过jQuery的啊╮(╯▽╰)╭

技术对我来说,知道个大概,具体要说明白,说出点道道来不是一下两下的事,就目前这种状态呢,基本和我大学时代接受一个观点相同,那个观点的核心就是:这是一个知识大爆炸的时代,你不可能也不用去记住具体的知识是怎么样的,但是你一定要搞清楚知识是如何被使用的,已经有哪些知识可以被使用,最关键的是你要知道如何找到它们,并用起来。这里想起另一观点,知识是分级别的,一手知识来自源头,二手知识来自无差别转发,三手就是自己理解转述之类,最好是去拿一手的知识。

其他我暂时还无法知道具体作用的:

netty是代码里的,从研发口中听说过,其他我在负责维护,基本的启动配置都知道。但就点到为止了,不能再深入。所以这篇文章主要是它们几个。

Netty

homepage
http://netty.io/
百度百科基本忠实了官网描述,那我再引用一张官网的图:
这里写图片描述

Netty is an asynchronous event-driven network application framework
for rapid development of maintainable high performance protocol servers & clients.
在我目前这种层次来看,我们用netty就是简化了网络通信的编程复杂程度,把底层的通信都交给了netty打理。
基于netty提供的能力(可扩展的事件模型、通用的通信api、防内存溢出的富字节缓存机制(意译二手)),构建起我们商城的各类网络通信。

阅读全文

Jmeter的Non_GUI模式,命令行模式

For load testing, you must run JMeter in this mode (Without the GUI) to get the optimal results from it. To do so, use the following command options:-n This specifies JMeter is to ...

阅读全文

我理解的计算机

研究完了http的协议及操作,下面计划把网络测试和性能有关偏底层一点的概念梳理梳理。固本求原。进程\线程\死锁在《软件设计师教程》中已经阅读学习过,虽然软考挂了没过,但是毕竟还是看过的,再温故知新一遍。就脱离课本上高精深的描述求个自我解脱型的理解。不足之处以后深入再补。计算机的本质或者说对人类的价值是计算,非要加个定语的话,超高速的计算。抽象出来的模型为:输...

阅读全文

python requests请求http

主要还是参考官方文档,摘抄改改,runrun 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283...

阅读全文

ubuntu16.04升级需要知道的事

1、你有一个快速且正确的源/etc/apt/sources.list 12345678910111213141516# deb cdrom:[Ubuntu 16.04.1 LTS _Xenial Xerus_ - Release amd64 (20160719)]/ xenial main restricteddeb-src h...

阅读全文