分类目录归档:编程知识

The Twelve-Factor App

简介

如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。12-Factor 为构建如下的 SaaS 应用提供了方法论:

  • 使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目。
  • 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性。
  • 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。
  • 将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。
  • 可以在工具、架构和开发流程不发生明显变化的前提下实现扩展。

这套理论适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序。

继续阅读

Advertisements

Taobao SSO 跨域登录过程解析

今年的双十一和双十二已经告一段落,你是否买到了你想要的宝贝呢?我们知道双十一是天猫的主场,双十二是淘宝的主场,你有没有注意到你在登录了淘宝后,访问天猫或者飞猪,你还是处于登录态的,但是我们知道cookie是不能跨域的,那么阿里是如何做到了多域名下的登录态同步呢?接下来我们通过抓包进行请求解析来了解这个过程。

基础知识:

  1. 如果忘了Cookie和Session的区别,那么建议你先回顾一下,可以参考:https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/06.1.md
  2. 如果不知道为什么需要鉴权,为什么需要SSO,为什么需要跨域登录,建议你先阅读上一篇文章“系统权限控制”。

继续阅读

Linux phantomJs install course

背景:

我们在进行系统报告研发时,需要对报告结果进行定时邮件,所以需要把HTML内容自动转换为邮件内容,通常我们在发送邮件内容的时候内容是模板化的,模板基本不怎么改变,然而我们的报告却是由无数个子模块组成,这些子模块可以只有组合成为任意报告,每一个模块中的内容均为用户自定义,如果我们要实现通用化报告邮件化,那就需要把渲染后的报告转换为图片或者HTML格式,headless方案中常用的有phantomJS和Headless Chrome,phantomJS提供了截图等功能,所以称为我们的首选。

遇到的问题:

我们生产环境大部分机器操作系统为5u,默认的glibc版本最高到2.5。然而 PhantomJS官网中明确指出Linux 64-bit操作系统下,需要依赖GLIBCXX_3.4.9 和 GLIBC_2.7/GLIBC_2.9/GLIBC_2.10。

但是在我们生产环境中: 继续阅读

制作符合Mail格式的HTML

我们在做报表类方案的时,我们通过web页面进行了数据展示,此时期望能够把这个网页通过邮件客户端发送到用户邮箱中,如果我们为了保持页面和邮件内的样式的统一,就很期望做到页面内容的复用,不再为邮件内容单独制定一套模板,当用户的内容样式谁内容而不同时,无法通过单一的模板来解决,是否可以通过复用页面的html内容来达到目的呢?

比如我们的页面结构是模块化的,每一个模块内的内容可能都随着模块的不同而呈现出不同的样式,如下图:

如果我们让用户一键拷贝内容,在一键发送邮件,既可以做到页面内容的复用,也可以简化用户复制粘贴以及启动邮件客户端的繁琐任务。 继续阅读

Wireshark监控分析Https的交互过程

首先介绍一下Https在Client与Server之间的理论交互过程:

https-tcp

试想,我们期望在网络中传输的数据是被加密的,并且这个数据包在客户端和服务器端都能进行加密和解密,那么需要对称加密算法,客户端和服务端都需要有一个加解密Key(对称加密),对数据包进行加解密,那么这个Key如何产生并在在网络中安全的传递呢?假设这秘钥是有服务端产生,分配给客户端,为了保证安全,需要在派送Key的过程中进行加密,那么客户端在一无所知的情况下,是无法打开这个加密的数据包的,此方案不行。假设我们引入非对称加密算法,把公钥在网络上传输(传给客户端),私钥只保留在服务端,让客户端生成一个加密Key,并把加密Key通过公钥进行加密,加密后的数据发送给服务端,服务端使用私钥解开数据,提取加密Key,这样服务端和客户端以后的交互都可以使用这个加密Key进行数据交互了。
这个过程可以参考:http://www.jianshu.com/p/15703d8c34e9

抓包监控分析:

首先安装抓包工具Wireshark(最新版为2.0.3),Mac OS 10.11版本还需要安装X11,OS X 不再随附 X11,但 XQuartz 项目提供适用于 OS X 的 X11 服务器和客户端库,所以需要下载 XQuartz
打开Wireshark > 捕获 > 选项,选择 本地网卡,开启监控数据捕获。
这里以腾讯云 https://www.dnspod.cn 为例(首次打开此网站,所以可以捕获到证书获取流程),由于本地有很多其他的应用都会进行网络请求,为排除干扰,查询了腾讯云(https://www.dnspod.cn )的IP地址:59.37.116.101,然后在Wireshark 的过滤器中输入:
ip.src==59.37.116.101  or ip.dst==59.37.116.101

表示只监控IP的起始地或者目的地为腾讯云的数据请求,如图所示:

tencent-cloud-https-tcp-all

当然,这里还是可能会有其他tcp流的干扰,找到一个Client Hello 的tcp请求,查看Transmission Control Protool,找到Stream Index 序号,这个Stream Index 是Wireshark标识一次完整的TCP通讯。

继续阅读

Docker and  DevOps

DevOps三个基本点:

A708EDF9-C993-44F9-9940-C69CB3D8AE8F
一、系统性能;
强调整个系统的性能,而非将性能局限于特定的工作领域里,这个工作领域可以大到一个部门(例如开发和IT运维)或者小到一个个人贡献者(例如开发者,系统管理员等)。   重点是由IT推动的的业务价值流,换句话说,它始于需求定义(比如被业务或IT部门定义),进行开发构建,又交给IT运维,最后价值以一种服务的形式交付给客户。   实践第一个基本点的结果——决不传递一个已知缺陷至下游,决不因小失大,总是致力于改进流程,执着于深刻理解系统需求(根据戴明的理论)。
二、缩短和放大反馈回路;
创建从右至左的反馈回路,几乎所有的流程改进计划的目标都是缩短和放大反馈回路,以便可以持续进行必要的修正。   应用第二个基本点的结果——包括理解和回应所有内部和外部客户,缩短和放大所有的反馈回路,必要时,非常容易的嵌入客户需要的知识。
三、持续性探索和学习;
打造一种文化用来促进两件事情——持续不断的探索精神,勇担风险的精神以及从成功和失败中来学习的能力,同时也得谨记:重复和实践是融会贯通的前提。   这两件事情对我们来说同等重要,探索精神和勇担风险的精神可以确保我们持续改进,它甚至意味着我们可能到达了之前曾未到过的危险区域,因此这也迫使我们去学习,掌握并融会贯通那些技能,因而使得我们能够顺利离开危险区。   第三个基本点的结果——分配时间去改进每天的例行工作,培养一种奖励冒险精神的风气,同时主动引入故障到系统中,从而提高弹性。
参考:《The Phoenix Project》

DevOps的应用领域:

领域一:
将开发延伸至生产中——包括拓展持续集成和发布功能至生产,集成QA和信息安全至整个工作流,确保代码和环境可在生产中直接部署。
领域二:
向开发中加入生产反馈——包括建立开发和IT运营事件的完整时间表用于帮助事件的解决,使得开发融入无指责的生产反思,尽可能使得开发可以自助服务,同时创建信息指示器用来表明本地的决策如何影响全局的目标。
领域三:
开发嵌入到IT运维中——包括开发投入到整个生产问题处理链,分配开发资源用于生产问题管理,并协助退回技术债务,而且开发为IT运维提供交叉培训,增加IT运维处理问题的能力,从而降低升级问题的数量。
领域四:
将IT运维嵌入至开发——包括嵌入和联络IT运维资源至开发,帮助开发创建为IT运维(部署,生产代码的管理等)使用的可重用的用户故事,定义一些可以被所有项目共用的非功能性需求。
参考:《DevOps Cookbook》
 0A5B305A-5BEA-4883-B80C-308CED35ED42
参考: