公司项目当中经常使用CXF库连接WebService服务,而且我们自己提供的服务也是基于CXF的SOAP服务,经常需要指导客户怎么连接我们的服务。CXF库整个体系架构比较庞大,相关的类、知识点都比较多。尤其是连接SSL双向认证服务的时候,经常碰到问题。
使用双向SSL认证的时候,在Spring中配置起来非常简单,但是一旦出错就比较难找问题。经过多次尝试,最后发现还是分析SSL握手记录比较靠谱,比较容易找出真正的问题所在。特此记录一下自己的一些心得,以作备忘并希望能够帮到其他人。
与子偕老
公司项目当中经常使用CXF库连接WebService服务,而且我们自己提供的服务也是基于CXF的SOAP服务,经常需要指导客户怎么连接我们的服务。CXF库整个体系架构比较庞大,相关的类、知识点都比较多。尤其是连接SSL双向认证服务的时候,经常碰到问题。
使用双向SSL认证的时候,在Spring中配置起来非常简单,但是一旦出错就比较难找问题。经过多次尝试,最后发现还是分析SSL握手记录比较靠谱,比较容易找出真正的问题所在。特此记录一下自己的一些心得,以作备忘并希望能够帮到其他人。
昨天配置好报警条件之后,今天早上检查发现昨天晚上发出了报警。但是看上去像是误报。 在凌晨2:44:02触发了警报,然后在2:44:32警报解除,持续时间30秒。如下两图:
从感觉上像是误报。
为了事后分析服务质量,我们的云认证系统将商户访问记录保存到了数据库中(MySQL)。在日志中我们记录了商户每次访问的返回结果,耗费时间等信息。通过这些信息我们可以分析发现服务什么时候性能比较低,什么时候处理效果比较差。
之前通过写脚本,每小时对这些信息进行一次统计,并根据情况(如错误比例过高等)发送邮件通知给相关人员。但是这存在两个问题:
鉴于此,一直想对这个报警体系进行改造,最后选择通过Zabbix实现这个功能。
BBR是Google开源的TCP拥堵控制算法,与2016年9月开源。BBR的目的是要尽量跑满带宽, 并且尽量不要有排队的情况, 其使用效果并不比速锐差。
Linux kernel 4.9+ 已支持 tcp_bbr。我在Linode安装了4.10.10内核,可以开启BBR。但是Linode自带的4.9无法开启。
众所周知,Javascript是一种弱类型(或者称为动态类型)语言,即变量的类型是不确定的。例如,下面代码中的temp
一开始是字符串,后来又变成了数字:
1temp = 'hello';
2temp = 5;
弱类型语言变量类型完全由当时的值决定,所以称为“弱类型”。这样设计有其好处,可以写出非常简洁的代码。但是在构建大型项目的时候,无法在编译期发现问题会导致很难发现问题,反而会为程序员带来非常大的负担。这实际上限制了JS项目的规模,无法开发过于复杂的项目。
最近在用Node.js做一个管理系统的时候碰到了一个场景:为了访问性能,系统在内存中(不是Redis)缓存了一些常用数据,例如系统菜单树之类的。但是什么时候刷新这些缓存就成了问题。当然在单服务器模式下也不是大问题,只要在更新数据的时候删除内存中的缓存数据即可。但是这一方法在分布式服务中就无效了:同时会有多个这种系统在跑,但是只有一台服务器接到了处理请求,其他服务器根本没有办法刷新内存中的数据。 当然有人会说将缓存放到Redis中不就解决问题了?但是如果数据量稍大一些,而且访问频繁、更新却不频繁,放到Redis中每次访问都会对Redis带来不小的压力,显得很没有必要。 这种情况下,自然就可以使用Redis的发布订阅机制来解决问题了:当数据更新之后,只要发布一个消息到Redis,所有服务器都可以收到消息,执行刷新缓存的操作了。
最近备份恢复Gogs的时候,发现同样的配置参数在Mac上访问Gogs的用户首页特别慢,大概耗时8秒,而在Linux上面运行的时候不到1秒钟。后来就上网搜索,加上自己试验,最后找到了原因应该是Gogs镜像本身的问题(可能是采用了alpine这一内核,但是具体原因不详,有待进一步实验)。
这个过程中曾经怀疑是Docker运行MySQL过慢的原因,虽然最终发现不是,但是搜索过程中发现了Docker for Mac确实有性能问题,那就是对大量磁盘IO的操作性能会非常差,大概会差10倍。
最近在用Electron + Vue.js 2.0写一个桌面工具。使用下来感觉Electron用起来还是挺爽的。之前为了开发跨平台的桌面应用,我曾经用过Python+wxPython,Swing,SWT等各种技术,但是都有这样那样的问题(例如打包比较麻烦、界面各平台不太一致等)。而Electron基于目前成熟的前端技术,通过内嵌的浏览器内核实现了统一的表现形式,这一点用于做跨平台开发真是太方便了。
Docker在1.13.x版本之后更新了版本号规则,区分了社区版和企业版。这导致了安装方式有所变化。所以特意参考官方的帮助重新整理了一下安装步骤。
适应范围:Ubuntu 14.04。安装版本:17.03.0-ce(社区版)。
最近一周比较忙,一直忙着搭建开发平台。之前不就刚用Golang搭建了一个服务端开发平台。完成之后,就需要针对Golang开发的服务开发一个管理平台,用Golang也能做,但是感觉还是麻烦,最后决定使用Node.js。
这次搭建的平台倾向于使用比较新的一些Node.js特性,例如ES6、async/await解决回调地狱等。之前用过Node.js,但是属于浅尝辄止,这次准备充分了解一下。因此有了这些学习笔记。